[SOLVED] Kleines Rule mit zwei Switches und schon habe ich ein Problem

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Kleines Rule mit zwei Switches und schon habe ich ein Problem

Beitrag von Boris099 »

Komisch, jetzt hat er es gefressen, ich probier es gleich noch aus...

und schalte ich auch OFF wenn ich E_Touch10_3 auf OFF schalte?
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

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

Re: Kleines Rule mit zwei Switches und schon habe ich ein Problem

Beitrag von Boris099 »

Darkwin101 hat geschrieben: 19. Mär 2020 22:14 Im Then teil benötigst du die Abfrage if(E_Touch10_3.state == ON) nicht da die Regel sowieso nur ausgeführt wird wenn E_Touch10_3 On ist
OK rausgenommen, stört ihn nicht, zweit Klammer auch gelöscht


aber wie schalte ich nun OFF bevor der Timer abgelaufen ist?
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: Kleines Rule mit zwei Switches und schon habe ich ein Problem

Beitrag von Darkwin101 »

Ich verstehe deine Frage jetzt nicht genau was willst du den machen wenn du den Schalter betätigst jetzt reagiert die Rule nur auf ON bei OFF wird nichts unternommen

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

Re: Kleines Rule mit zwei Switches und schon habe ich ein Problem

Beitrag von Darkwin101 »

OK wenn du das OFF noch möchtest brauchst du die If Abfrage

Code: Alles auswählen


rule "Alarm Manuell"
when 
	Item E_Touch10_3 changed
then                                                              								
if(E_Touch10_3.state == ON) {
    	if(SireneTimer2 === null) {                                                                
    	logInfo("Alarm Manuell","Alarm und LED ON, Rule Ende!")									
        Steckdose54.sendCommand(ON)      	                                                 
        SireneTimer2 = createTimer(now.plusSeconds(60), [ |                                 	
            Steckdose54.sendCommand(OFF)													
            SireneTimer2 = null																
        ] )																																											
    }}	
    else{ Steckdose54.sendCommand(OFF)
    SireneTimer2?.cancel
    SireneTimer2 = null}																					
end

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

Re: Kleines Rule mit zwei Switches und schon habe ich ein Problem

Beitrag von Boris099 »

Hervorragend - funktioniert 1a

Vielen Dank

nun bin ich wieder ein Stück weiter und kann noch ein bisschen erweitern
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: [SOLVED] Kleines Rule mit zwei Switches und schon habe ich ein Problem

Beitrag von udo1toni »

Ich glaube eher nicht, dass diese Rule so funktioniert, denn sie verwendet eine nicht initialisierte Variable.
:)
Sauber formatiert sähe es so aus:

Code: Alles auswählen

// Globale Variablen zu Beginn der Datei definieren!
var Timer SireneTimer2 = null

rule "Alarm Manuell"
when 
    Item E_Touch10_3 changed
then
    if(E_Touch10_3.state == ON) {
        if(SireneTimer2 === null) {
            logInfo("Alarm Manuell","Alarm und LED ON, Rule Ende!")
            Steckdose54.sendCommand(ON)
            SireneTimer2 = createTimer(now.plusSeconds(60), [ |
                Steckdose54.sendCommand(OFF)
                SireneTimer2 = null
            ] )
        }
    } else {
        Steckdose54.sendCommand(OFF)
        SireneTimer2?.cancel
        SireneTimer2 = null
    }
end
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: [SOLVED] Kleines Rule mit zwei Switches und schon habe ich ein Problem

Beitrag von Boris099 »

Hallo,

Ja das mit der globalen Varianten Definition hatte ich auch so gemacht, das hatte ich von dir schon gelernt :-}
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

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

Re: [SOLVED] Kleines Rule mit zwei Switches und schon habe ich ein Problem

Beitrag von Boris099 »

Also doch noch was Kleines,

das mit den Klammern ist misteriös :-)
also das rule funktioniert "fast" den else Teil führt es nicht aus.
Also wenn ich den Switch ausschalte sollen auch die beiden Steckdosen und die zugehörigen Timer ausschalten,
tun sie aber nicht, die ignorieren mich :-)

Code: Alles auswählen

var Timer AlarmManuell = null
var Timer LEDTimer3 = null													

rule "Alarm Manuell"
when 
	Item E_Touch10_3 changed
then                                                              								
if(E_Touch10_3.state == ON) {
    	if(AlarmManuell === null) {                                                                
    	logInfo("Alarm Manuell","Alarm und LED ON")									
        Steckdose54.sendCommand(ON)
		LEDTimer3 = createTimer(now.plusMillis(10), [ |                                        
            if(Steckdose53.state != ON) {                                           
                Steckdose53.sendCommand(ON)                                               
                LEDTimer3.reschedule(now.plusSeconds(3))                                      
            } else {                                                                           
                Steckdose53.sendCommand(OFF)                                                    		
                LEDTimer3.reschedule(now.plusSeconds(3))                                     
            }																							
        AlarmManuell = createTimer(now.plusSeconds(60), [ |                                 	
            Steckdose54.sendCommand(OFF)
            LEDTimer3?.cancel                                                                  
            LEDTimer3 = null																
            if(Steckdose53.state != OFF)                                                        		
                Steckdose53.sendCommand(OFF)                                                    		
            AlarmManuell = null																
        ] )																																											
    ] )
    }
	else{ Steckdose54.sendCommand(OFF)
	Steckdose53.sendCommand(OFF)
    AlarmManuell?.cancel
    AlarmManuell = null}																					
}
end
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: [SOLVED] Kleines Rule mit zwei Switches und schon habe ich ein Problem

Beitrag von Darkwin101 »

Code: Alles auswählen

var Timer AlarmManuell = null
var Timer LEDTimer3 = null													

rule "Alarm Manuell"
when 
	Item E_Touch10_3 changed
then                                                              								
if(E_Touch10_3.state == ON) {
    	if(AlarmManuell === null) {                                                                
    	logInfo("Alarm Manuell","Alarm und LED ON")									
        Steckdose54.sendCommand(ON)
		LEDTimer3 = createTimer(now.plusMillis(10), [ |                                        
            if(Steckdose53.state != ON) {                                           
                Steckdose53.sendCommand(ON)                                               
                LEDTimer3.reschedule(now.plusSeconds(3))                                      
            } else {                                                                           
                Steckdose53.sendCommand(OFF)                                                    		
                LEDTimer3.reschedule(now.plusSeconds(3))                                     
            }																							
        AlarmManuell = createTimer(now.plusSeconds(60), [ |                                 	
            Steckdose54.sendCommand(OFF)
            LEDTimer3?.cancel                                                                  
            LEDTimer3 = null																
            if(Steckdose53.state != OFF)                                                        		
                Steckdose53.sendCommand(OFF)                                                    		
            AlarmManuell = null																
        ] )																																											
    ] )
    }}
	else{ Steckdose54.sendCommand(OFF)
	Steckdose53.sendCommand(OFF)
    AlarmManuell?.cancel
    AlarmManuell = null}																					
end
Du hast die If Anweisung nicht richtig geschlossen
Die Syntax ist immer IF{} else{} du hast aber IF{else{}}

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

Re: [SOLVED] Kleines Rule mit zwei Switches und schon habe ich ein Problem

Beitrag von Boris099 »

Jawohl das war es, sieht alles so einfach aus ...

habe zusätzlich noch den 2ten Timer (LEDTimer3) in die else Bedingung aufgenommen.
Das funktioniert nun.

Vielen Dank
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

Antworten