Verzögerung für die Aktivierung eines rules (Alarm)

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Boris099
Beiträge: 383
Registriert: 19. Feb 2020 20:51
Answers: 3
Wohnort: Saarbrücken

Verzögerung für die Aktivierung eines rules (Alarm)

Beitrag von Boris099 »

Ich möchte für mein Alarmanalage rule eine zeitliche Verzögerung einbauen.
Wie gehe ich denn da vor?

das ist die IF-Abfrage mit der das rule losrennt

Code: Alles auswählen

    if(E_Touch10_2.state == OFF) {           
        logInfo("bw_alarm","Alarmanlage aus, Rule Ende!")	
        return;										
    }
nun würde ich gerne die Aktivierung des Switch E_Touch10_2, oder die Aktivierung des rule an sich, um 3 Minuten verzögern, geht das?
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Verzögerung für die Aktivierung eines rules (Alarm)

Beitrag von Darkwin101 »

na mit einem Timer und bitte poste die ganze rule eventuell kann mann auch einiges eleganter schreiben wenn z.B. solche Leute wie Udo1Toni drüber schauen. Es ist immer schwer etwas zu beurteilen wenn mann nur Code Schnipsel hat und den Kontext nicht kennt.

Boris099
Beiträge: 383
Registriert: 19. Feb 2020 20:51
Answers: 3
Wohnort: Saarbrücken

Re: Verzögerung für die Aktivierung eines rules (Alarm)

Beitrag von Boris099 »

OK,
also die eigentliche Aktivierung ist mit dem Switch E_Touch10_2.state == OFF

Code: Alles auswählen

import java.util.List																			
var List<Timer> timers = newArrayList                                                       	
var Timer shutoffTimer = null                                                               
var Timer LEDTimer1 = null                                                                  	
var Timer LEDTimer2 = null                                                                  	
var Timer SireneTimer1 = null																	
var DateTime lastRun = 0																		

rule "Rule Datei eingelesen"
when
    System started
then
    lastRun = now.minusMinutes(2)															
end

rule "Bewegung 5 mal in einer Minute"
when
    Member of gBW changed from OFF to ON
then
    if(MailSenden.state == ON) {                                                               
        val mailText = "Bewegungsmelder " + triggeringItem.name + " hat ausgelöst"				
        mailActions.sendMail("xxxx@gmail.com","Alarm "+ triggeringItem.name, mailText)																								
    }																							
    if(TelegramSenden.state == ON) {                                                           
	val telegramAction = getActions("telegram","telegram:telegramBot:xxxx")				
        telegramAction.sendTelegram("Bewegungsmelder An  - %s", triggeringItem.name)			
    }																							
                                                                                               
    if(E_Touch10_2.state == OFF) {                                                              
        logInfo("bw_alarm","Alarmanlage aus, Rule Ende!")										
        return;																					
    }																							
                                                                                              
    if(LEDTimer1 === null) {                                                                    
        gLED.sendCommand(ON)                                                                 	
        LEDTimer1 = createTimer(now.plusSeconds(7), [ |                                        
            gLED.sendCommand(OFF)																
            LEDTimer1 = null																	
        ] )																						
    }																							
    if(SireneTimer1 === null) {                                                                
        Sirene_Gaeste.sendCommand(ON)                                                          
        SireneTimer1 = createTimer(now.plusSeconds(1), [ |                                 		
            Sirene_Gaeste.sendCommand(OFF)														
            SireneTimer1 = null																	
        ] )																						
    }																							
    if(shutoffTimer !== null) {                                                                 
        logInfo("bw_alarm","Alarm schon aktiv, Rule Ende!")									
        return;																					
    }															
    if(lastRun.isAfter(now.minusMinutes(2))) {                                              
        logInfo("bw_alarm","letzter Alarm vor weniger als 2 Minuten, Rule Ende!")				
        return;																					
    }																							
                                                                                              
    if(timers.size < 5) {                                                                      
        val t = createTimer(now.plusMinutes(1), [ |												
        timers.remove(0)																	
        ] )																					
        timers.add(t)																		
    }																							
    if(timers.size == 5) {                                                                     
        if(MailSenden.state == ON) {                                                            
	val mailActions = getActions("mail","mail:smtp:xxxx")								
	mailActions.sendMail("xxx@gmail.com","Sirene aktiviert ", "Sirene ON")		
        }																						
        if(TelegramSenden.state == ON) {                                                      
	val telegramAction = getActions("telegram","telegram:telegramBot:xxxx")				
        telegramAction.sendTelegram("Sirene AN")												
        }																						
        Sirene_Gaeste.sendCommand(ON)															
		
        LEDTimer2 = createTimer(now.plusMillis(10), [ |                                         
            if(gLED.state != ON) {                                                       		
                gLED.sendCommand(ON)                                                     		
                LEDTimer2.reschedule(now.plusSeconds(3))                                        
            } else {                                                                            
                gLED.sendCommand(OFF)                                                    		
                LEDTimer2.reschedule(now.plusSeconds(3))                                       
            }																				
        ] )																						
        lastRun = now																			
        while(timers.size > 0) {																
            timers.get(0).cancel																
            timers.remove(0)																	
        }																						
        shutoffTimer = createTimer(now.plusSeconds(90), [ |                                     
            Sirene_Gaeste.sendCommand(OFF)						
            logInfo("Alarmrule", "Sirene Ende")													
            LEDTimer2?.cancel                                                                   
            LEDTimer2 = null																	
            if(gLED.state != OFF)                                                        		
     	    gLED.sendCommand(OFF)                                                    		
            shutoffTimer = null																	
        ] )																						
    }																							
end				
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

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

Re: Verzögerung für die Aktivierung eines rules (Alarm)

Beitrag von udo1toni »

Ich erinnere mich an die Rule :)

Du solltest den Alarm Switch E_Touch10_2 durch ein Proxy Item ersetzen. Das Proxy Item wiederum schaltest Du über eine Rule ein und aus. Das Einschalten verzögerst Du mittels Timer um drei Minuten.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Boris099
Beiträge: 383
Registriert: 19. Feb 2020 20:51
Answers: 3
Wohnort: Saarbrücken

Re: Verzögerung für die Aktivierung eines rules (Alarm)

Beitrag von Boris099 »

Proxy Item? Ups da muss ich erst Mal recherchieren, habe ich noch nie was von gehört...

Da fällt mir noch was ein, wenn der Alarm nun ausgelöst wird, kann ich den Alarm eigentlich mit dem Deaktivieren des Switch, momentan noch ohne Proxy und später mit Proxy, ausschalten?

Oder ist ein Proxy Item ein Dummy Item?
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

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

Re: Verzögerung für die Aktivierung eines rules (Alarm)

Beitrag von udo1toni »

Ein Proxy Item ist ein Item ohne Bindung an einen Channel. Es wird eingesetzt, um Signale über einen Umweg an andere Items weiterzugeben. Wenn Du über *.items Dateien konfigurierst, lässt Du einfach den Teil in den geschweiften Klammern {} weg.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten