OH3 Beleuchtung rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

ThomasW
Beiträge: 33
Registriert: 9. Jan 2021 16:12
Answers: 1

Re: OH3 Beleuchtung rule

Beitrag von ThomasW »

Hey
das von dir beschriebene Verhalten ist genau so zu erwarten.

erst erstellst du einen Timer der nach einer Zeit das licht ausschalten soll, wenn du das Licht dann über einen Schalter einschaltest wird das garnicht von deiner Rule bemerkt da der Schalter nicht als Triger gesetzt ist. Daher führt der Timer seine Funktion aus.

du müsstest jetzt noch ergänzen das beim drücken des Schalters der Timer abgebrochen wird.

Timer sind über die UI leider nicht global daher kannst du später da nicht drauf zugreifen
OH3 auf RPI4,
Heizungssteuerung: Fritz DECT,
Zigbee: Conbee2 über Phoscon-GW: Aqara Opple Schalter, Aqara Temperatursensoren, Aqara Fenstersensoren, Aqara Aktoren, IKEA Lichter
Astro Binding
DWDUnwetter Binding
OpenWeatherMap Binding
FritzBox TR 064 Binding
iRobot Binding
Telegramm Binding für Benachrichtigungen und Steuerung von unterwegs
Rolladensteuerung: Rademacher DuoFern über HTTP Binding

SIDE22
Beiträge: 153
Registriert: 4. Mai 2020 01:31
Wohnort: Hagen a.T.W.

Re: OH3 Beleuchtung rule

Beitrag von SIDE22 »

OK danke also muss ich den Schalter demnach mit in die rule bauen so das der Timer abgebrochen wird.

Nur habe ich bei der aktuellen rule das Problem das der Timer so wie die rule aktuell ist garnicht abgebrochen wird ..

Die rule wird ja ausgelöst wenn ein Melder auf ON wechselt
Dann soll der Timer ja abgebrochen werden und ein neuer angelegt werden nur klappt dies leider nicht ganz .. das Licht geht immer aus und nach paar Sekunden wieder an in OH2 war dies nicht so
Ist der Befehl für den Abbruch des Zimmers in OH3 anders ?
Hab schon paar Mal gelesen das viele das
In meinem Beispiel mit

Code: Alles auswählen

tTreppe = null
Machen wird der Timer damit den wieder zurück gesetzt ?


LG
Florian
openHAB 3.1.0M5 als Debian-Container in Proxmox
Bindings (HomeMatic, Shelly, Phillips Hue, HTTP, MQTT, Spotify, Telegram)
rund 90 HomeMatic komponenten dazu 21 Shelly und ca. 126 Phillips Hue Leuchten im einsatz.
MQTT bindung für openWB (WallBox) abfrage, HTTP für DoorPi (IP Türsprechstelle)

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

Re: OH3 Beleuchtung rule

Beitrag von udo1toni »

Nein, ein Timer wird durch (z.B.) tTreppe.cancel abgebrochen. Ein tTreppe = null entfernt lediglich den Zeiger auf den Timer. Das Problem sind die globalen Variablen, die natürlich nicht innerhalb der Rule definiert sein dürfen.

Im englischen Forum konnte ich bisher nichts dazu finden (außer eine Aussage (aus OH2-Zeiten) dass es keine globalen Variablen gibt, was dann ja bedeutet, dass man Timer nicht mehr canceln kann...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

ThomasW
Beiträge: 33
Registriert: 9. Jan 2021 16:12
Answers: 1

Re: OH3 Beleuchtung rule

Beitrag von ThomasW »

SIDE22 hat geschrieben: 18. Jan 2021 03:00 OK danke also muss ich den Schalter demnach mit in die rule bauen so das der Timer abgebrochen wird.
genau du must dem mit einbauen

Code: Alles auswählen

wenn schalter gedrückt dann timer.cancel
das funktioniert aber nicht über die UI da die timer hier nicht global angelegt werden und du somit in einem zweiten Aufruf der rule, was durch den Schalter ja passieren soll, nicht mehr auf den timer zugreifen kannst.

Das funktioniert bei mir nur wenn ich das über eine Datei mit der rule mache.
OH3 auf RPI4,
Heizungssteuerung: Fritz DECT,
Zigbee: Conbee2 über Phoscon-GW: Aqara Opple Schalter, Aqara Temperatursensoren, Aqara Fenstersensoren, Aqara Aktoren, IKEA Lichter
Astro Binding
DWDUnwetter Binding
OpenWeatherMap Binding
FritzBox TR 064 Binding
iRobot Binding
Telegramm Binding für Benachrichtigungen und Steuerung von unterwegs
Rolladensteuerung: Rademacher DuoFern über HTTP Binding

SIDE22
Beiträge: 153
Registriert: 4. Mai 2020 01:31
Wohnort: Hagen a.T.W.

Re: OH3 Beleuchtung rule

Beitrag von SIDE22 »

also das timer.cancel geht bei mir einfach nicht egal ob über ui oder als datei
wäre die richtige schreibweise den

Code: Alles auswählen

tTreppe?.cancel
oder

Code: Alles auswählen

tTreppe.cancel 
habe immer auch in OH2 die obere genommen.

also man kann bei den timer ja eine variable anlegen mit dem

Code: Alles auswählen

var Timer tTreppe = null
allerdings geht es auch wenn man beim anlegen des timers einfach nur schreibt zb.

Code: Alles auswählen

createTimer(now.plusSeconds(210)) [|
]

nur kann man den timer so ja nicht abbrechen vorher weil das system ja nicht weis wo es definiert ist.
also wird es dann wohl aktuell ein fehler in openhab sein das der timer nicht abgebrochen wird ?
udo1toni hat geschrieben: 18. Jan 2021 10:57 Nein, ein Timer wird durch (z.B.) tTreppe.cancel abgebrochen. Ein tTreppe = null entfernt lediglich den Zeiger auf den Timer. Das Problem sind die globalen Variablen, die natürlich nicht innerhalb der Rule definiert sein dürfen.
die variablen müssen ja immer an erster stelle stehen war OH2 ja schon so daher hab ich es jetzt so auch wieder

LG
Florian
openHAB 3.1.0M5 als Debian-Container in Proxmox
Bindings (HomeMatic, Shelly, Phillips Hue, HTTP, MQTT, Spotify, Telegram)
rund 90 HomeMatic komponenten dazu 21 Shelly und ca. 126 Phillips Hue Leuchten im einsatz.
MQTT bindung für openWB (WallBox) abfrage, HTTP für DoorPi (IP Türsprechstelle)

ThomasW
Beiträge: 33
Registriert: 9. Jan 2021 16:12
Answers: 1

Re: OH3 Beleuchtung rule

Beitrag von ThomasW »

SIDE22 hat geschrieben: 18. Jan 2021 13:06 also das timer.cancel geht bei mir einfach nicht egal ob über ui oder als datei
wäre die richtige schreibweise den

Code: Alles auswählen

tTreppe?.cancel
oder

Code: Alles auswählen

tTreppe.cancel 
habe immer auch in OH2 die obere genommen.
gehen beide soweit ich weis

Jetzt versuch mal bitte folgendes in einer datei nicht über die UI da kannst du leider nicht mit deinen timern arbeiten
das wäre jetzt so meine idee

Code: Alles auswählen


var Timer tGarten = null
var Timer tTreppe = null

rule "Licht"

when

    // hier deine Bedingungen einfügen Melder und auch Schalter (diese sollten dann auch mit Garten_ oder Treppe_ anfangen)
    
then

val licht = triggeringItemName.split("_").get(0)                       			// "Garten" oder "Treppe"
val Licht = gLichter.members.filter[i|i.name.contains(licht)].head     		// gLichtGarten oder gLichtTreppe
if(Licht.state != 100) {                                               				// Licht nicht in Dauerbetrieb
  if(licht != "Garten") {                                              					// falls nicht Garten
    if(gHelligkeit.state < 60) {                                       				// falls dunkel
      gLichtTreppe.sendCommand(25)                                     			// entsprechendes Licht auf 25%
      tTreppe?.cancel                                                  				// Timer abbrechen
      tTreppe = createTimer(now.plusSeconds(20),[|                     		// Timer anlegen
        gLichtTreppe.sendCommand(0)                                   	 		// Licht aus
      ])
    }else{													//wird ausgeführt wenn Licht.state=100 
    tTreppe?.cancel											//timer abbrechen
    }
  } else if(licht == "Garten") {                                       				// falls Garten
    if(gHelligkeitOUT.state < 110) {                                   				// falls dunkel
      gLichtGarten.sendCommand(95)                                     			// entsprechendes Licht auf 95%
      tGarten?.cancel                                                  				// Timer abbrechen
      tGarten = createTimer(now.plusSeconds(60),[|                     		// Timer anlegen
        gLichtGarten.sendCommand(0)                                    			// Licht aus
      ])
    }
  }
}
end

ich hoffe das bringt dein gewünschtes ergebniss
OH3 auf RPI4,
Heizungssteuerung: Fritz DECT,
Zigbee: Conbee2 über Phoscon-GW: Aqara Opple Schalter, Aqara Temperatursensoren, Aqara Fenstersensoren, Aqara Aktoren, IKEA Lichter
Astro Binding
DWDUnwetter Binding
OpenWeatherMap Binding
FritzBox TR 064 Binding
iRobot Binding
Telegramm Binding für Benachrichtigungen und Steuerung von unterwegs
Rolladensteuerung: Rademacher DuoFern über HTTP Binding

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

Re: OH3 Beleuchtung rule

Beitrag von udo1toni »

Der Unterschied zwischen tTreppe?.cancel und tTreppe.cancel ist schnell erklärt:

tTreppe.cancel bricht den laufenden Timer ab, dessen Zeiger in tTreppe gespeichert ist. Existiert dieser Timer aus irgendeinem Grund nicht, so kommt es zu eine NullPointer Exception.

tTreppe?.cancel brichtden Timer nur an ab, wenn er auch existiert. Man könnte als Äqui9valent auch

Code: Alles auswählen

if(tTreppe !== null) tTreppe.cancel
Wobei das ja strenggenommen noch nicht ausreicht.

Unterm Strich ist die Variante mit dem Fragezeichen die bessere...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

SIDE22
Beiträge: 153
Registriert: 4. Mai 2020 01:31
Wohnort: Hagen a.T.W.

Re: OH3 Beleuchtung rule

Beitrag von SIDE22 »

So Moin.
Danke Udo für die Erklärung :)
Allerdings hab ich gestern Mal getestet und gesehen das andere rule wo Timer cancel mit drin ist dieser nicht abgebrochen wird
Die Variante von Thomas hab ich getestet und es ist das selbe der Timer wird nicht abgebrochen ..

LG
Florian
openHAB 3.1.0M5 als Debian-Container in Proxmox
Bindings (HomeMatic, Shelly, Phillips Hue, HTTP, MQTT, Spotify, Telegram)
rund 90 HomeMatic komponenten dazu 21 Shelly und ca. 126 Phillips Hue Leuchten im einsatz.
MQTT bindung für openWB (WallBox) abfrage, HTTP für DoorPi (IP Türsprechstelle)

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

Re: OH3 Beleuchtung rule

Beitrag von udo1toni »

Ja, das funktioniert in OH3 so nicht mehr. Die Variable muss global definiert sein.

Wenn man die Rule komplett als Rule laufen lässt (also inklusive Trigger in einer .rules Datei speichert) sollte man den Timer auch abbrechen können (korrekte Implementation mal vorausgesetzt)


Gesendet von iPad mit Tapatalk
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

ThomasW
Beiträge: 33
Registriert: 9. Jan 2021 16:12
Answers: 1

Re: OH3 Beleuchtung rule

Beitrag von ThomasW »

udo1toni hat geschrieben: 20. Jan 2021 17:29 Wenn man die Rule komplett als Rule laufen lässt (also inklusive Trigger in einer .rules Datei speichert) sollte man den Timer auch abbrechen können (korrekte Implementation mal vorausgesetzt)
So sollte es sein.
Manchmal liegt der Fehler im Detail.

Code: Alles auswählen

var Timer tGarten = null
var Timer tTreppe = null

rule "Licht"

when

    // hier deine Bedingungen einfügen Melder und auch Schalter (diese sollten dann auch mit Garten_ oder Treppe_ anfangen)
    
then

val licht = triggeringItemName.split("_").get(0)                       			// "Garten" oder "Treppe"
val Licht = gLichter.members.filter[i|i.name.contains(licht)].head     		    // gLichtGarten oder gLichtTreppe
if(Licht.state != 100) {                                               			// Licht nicht in Dauerbetrieb
  if(licht != "Garten") {                                              			// falls nicht Garten
     if(gHelligkeit.state < 60) {                                       		// falls dunkel
        gLichtTreppe.sendCommand(25)                                     		// entsprechendes Licht auf 25%
        tTreppe?.cancel                                                  		// Timer abbrechen
        tTreppe = createTimer(now.plusSeconds(20),[|                     		// Timer anlegen
            gLichtTreppe.sendCommand(0)                                   	 	// Licht aus
        ])
     }
   }  else if(licht == "Garten") {                                       		// falls Garten
       if(gHelligkeitOUT.state < 110) {                                   		// falls dunkel
          gLichtGarten.sendCommand(95)                                     		// entsprechendes Licht auf 95%
          tGarten?.cancel                                                  		// Timer abbrechen
          tGarten = createTimer(now.plusSeconds(60),[|                     		// Timer anlegen
             gLichtGarten.sendCommand(0)                                    	// Licht aus
            ] )
        }
    }
}
else{													                        //wird ausgeführt wenn Licht.state=100 
    tTreppe?.cancel										                        //beide timer abbrechen
    tGarten?.cancel
    logInfo("Licht", "Beide Timer abgebrochen")
}
end
Habe es jetzt an die richtige stelle geschrieben hoffe ich. Habe einen Logeitrag mit eingefügt bitte überprüfe einmal ob dieser ins Log geschrieben wird wenn ja sollten die Timer abgebrochen werden.
Zuletzt geändert von ThomasW am 21. Jan 2021 00:22, insgesamt 1-mal geändert.
OH3 auf RPI4,
Heizungssteuerung: Fritz DECT,
Zigbee: Conbee2 über Phoscon-GW: Aqara Opple Schalter, Aqara Temperatursensoren, Aqara Fenstersensoren, Aqara Aktoren, IKEA Lichter
Astro Binding
DWDUnwetter Binding
OpenWeatherMap Binding
FritzBox TR 064 Binding
iRobot Binding
Telegramm Binding für Benachrichtigungen und Steuerung von unterwegs
Rolladensteuerung: Rademacher DuoFern über HTTP Binding

Antworten