[SOLVED] Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

[SOLVED] Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Beitrag von Boris099 »

Hallo ich bitte bei der folgenden Problemstellung um Hilfe:

Ich habe mehrere ZWave Bewegungsmelder mit Luminanzmelder. Nun möchte ich diese Luminanzwerte auch verwenden.
Als Beispiel für einen Melder möchte ich,
1. wenn dieser den Luminanzwert von z.B. 24 erreicht
Jedoch nur von einem größeren Wert kommend (also von hell nach dunkel, sonst würde sich die Funktion ja wieder deaktivieren)
2. mehrere Switchs auf ON schalten
3. und dann einzelne dieser Switches zu unterschiedlichen Zeiten wieder deaktivieren

Mein Luminance Item in der Sitemap sieht so aus:
Text item=zwave_device_c15572bd_node5_sensor_luminance label="Z-PIR5 Luminance"und ist als "Number" item definiert.

In HabMin folgendermaßen angezeigt:
Screenshot 2020-11-14 193103.gif
Zu 1. Könnte ich mir vorstellen mit <= zu arbeiten also evtl.
if(zwave_device_c15572bd_node5_sensor_luminance <= 24) --ist das korrekt, oder wie greife ich diesen "Number" Wert des items ab?

Zu 2. ist soweit klar

Zu 3. Muss ich da zu jedem Switch einen Timer starten, oder geht das irgendwie anders. also z.B. Switch1 soll um 23h und Switch 2 um 24(0?)h
auf OFF geschaltet werden? Evtl. mit if(now.getHourOfDay = 24) oder ?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Boris099 am 15. Nov 2020 14:58, insgesamt 1-mal geändert.
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

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

Re: Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Beitrag von udo1toni »

Hallo,

zum Punkt 1: Es geht hier um den Status des Items, also zwave_device_c15572bd_node5_sensor_luminance.state, aber eigentlich möchtest Du ja einen numerischen Wert abfragen. Nun kommt es darauf an, ob das Item ein "normales" Number Item ist, oder ein "UoM" Item. Letzteres liefert die Einheit mit, was man dann beim Vergleich berücksichtigen muss.
Korrekter Code für "Nur wenn vorher über und jetzt unter" ist:

Code: Alles auswählen

rule "zwave_device_c15572bd_node5_sensor_luminance changed"
when
    Item zwave_device_c15572bd_node5_sensor_luminance changed
then
    if(newState <= 24 && previousState > 24) {
        ...
    }
end
newState steht seit OH2.5.8 (?) zur Verfügung, sollte also in der aktuellen Version funktionieren. previousState steht implizit bei den Triggern changed und received update zur Verfügung und hält den Status vor dem Trigger.

Zu Punkt 3: Es kommt darauf an... ;) Willst Du nach dem Einschalten der Lichter in einem fixen zeitlichen Abstand ausschalten, oder willst Du zu fixen Zeiten ausschalten? Falls Ersteres, reicht ein Timer mit einer globalen Zählvariable, der Timer ruft sich selbst auf und zählt die Zählvariable hoch. Die Zählvariable bestimmt dann, welches Item ausgeschaltet wird und wann der Timer das nächste Mal abläuft.
Falls Letzteres, ist es einfacher, jeweils Rules mit Time cron Trigger zu erstellen, die dann jeweils das entsprechende Item ausschalten.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Beitrag von Boris099 »

Hallo, das klingt super.
Ich gehe davon aus dass dies ein normales Nummer item ist, also werde ich das genau so versuchen.

Ja ich möchte zu fixen Zeiten ausschalten.
Rules mit time cron trigger... Ok muss ich Mal schauen, habe ich noch nie probiert, hast du evtl. ein simples Beispiel?
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

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

Re: Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Beitrag von udo1toni »

Klar.

Code: Alles auswählen

rule "um 14:00:05 Uhr" 
when
    Tme cron "5 0 14 * * ?" // täglich 14:00:05 Uhr
then
    // ... tu was
end
Die erste Stelle ist die Sekunde, die zweite die Minute, die dritte die Stund, die vierte der Tag im Monat, die fünfte der Monat im Jahr, die sechste bezieht sich auf den Wochentag. Optional kann man einen 7. Wert für das Jahr angeben.
Es muss exakt ein Fragezeichen im Ausdruck vorkommen, entweder im Tag des Monats oder im Wochentag. Man kann also keinen Trigger definieren, der nur am Freitag, dem 13. triggert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Beitrag von Boris099 »

Ok Super, grundsätzlich verstanden, im Detail recherchiere ich das nochmals etwas. Dein Beispiel ist ja schon mein Anwendungsfall :-)
Für was steht der "*" genau, einfach keine Definition?
Und das "?" Steht für jeden möglichen Wert, dieser Stelle, korrekt?
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

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

Re: [SOLVED] Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Beitrag von udo1toni »

* bedeutet "egal"
? bedeutet auch "egal", ist aber zwingend exakt einmal anzugeben, eben entweder beim Tag oder beim Wochentag. Es ist quasi ein Reminder für denjenigen, der den cron-Ausdruck erstellt, dass nicht beide Werte gleichzeitig vorgegeben werden können.

Das Leerzeichen ist der Trenner zwischen den einzelnen Feldern. Ein Feld kann auch Bereiche und Aufzählungen (z.B. 5-15,23-27,49) beinhalten. Bei den Monaten und Wochentagen dürfen auch die Abkürzungen in Großbuchstaben verwendet werden, z.B. MAR-JUN oder MON-FRI (es sind die englischen Worte zu verwenden), aber auch die Zahlen (1=Montag, 7=Sonntag)

Es gibt auch noch Spezialitäten wie den 3. Mittwoch des Monats oder den letzten Sonntag im Monat (oder auch den vorletzten...) Wenn Du nach Quartz cron suchst, findest Du allerlei Doku dazu. Bitte nicht mit crontab verwechseln (das ist in GNU/Linux eingebaut und hat einen fast identischen Aufbau - ist aber nur minutengenau)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: [SOLVED] Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Beitrag von Boris099 »

Ich habe da doch noch ein kleines Enhancement zu diesem noch zu erstellenden Rule, vielleicht kannst Du mir bitte hier noch etwas Hilfestellung geben?

Mit diesem Luminance Wert möchte ich eine "Effektbeleuchtung" aktivieren, z.B. Wohn/Esszimmer bei Luminanz "8" zwei Lampen/Switches einschalten.
Wenn jetzt aber zum Abendessen das "normale" Licht aktiviert wird, also Luminanz 30, soll die "Effektbeleuchtung" wieder deaktiviert werden, und natürlich wieder aktiviert, wenn das "normale" Licht wieder deaktiviert wird.

Die Cron Funktion stellt dabei sicher, das die einzelnen Switches um 0.00h ausgeschaltet werden.
Und das Rule an sich soll nur zwischen 16.00h und 0.00h laufen

Ist das machbar, bzw. wie löse ich das denn am einfachsten?
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

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

Re: [SOLVED] Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Beitrag von Boris099 »

Könnte das so klappen?

Code: Alles auswählen

rule "E-ZPIR5 Kueche luminance changed"

when
    	Time cron "5 0 0 * * ?"		//5 Minuten nach 24h
then
	KuecheKamin56.sendCommand(OFF)
	KuecheVitrine23.sendCommand(OFF)
end

when
    	Item zwave_device_c15572bd_node5_sensor_luminance changed
then
    	if(newState <= 6 && previousState > 6) {
		if (now.getHourOfDay() >= 16 || now.getHourOfDay() <= 0) {
		KuecheKamin56.sendCommand(ON)
		KuecheVitrine23.sendCommand(ON)
		}
	if(newState >= 20 && previousState <= 6) {
		if (now.getHourOfDay() >= 16 || now.getHourOfDay() <= 0) {
		KuecheKamin56.sendCommand(OFF)
		KuecheVitrine23.sendCommand(OFF)
		}
    	}
end
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

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

Re: [SOLVED] Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Beitrag von udo1toni »

Also erstmal hat jede Rule exakt einen when-Teil und exakt einen then-Teil. Was bedeutet, dass Du hier zwei Rules brauchst. Jede Rule hat weiterhin zu Beginn das Schlüsselwort rule und am Ende das Schlüsselwort end. Jeder Rule hat also exakt diese Struktur:

Code: Alles auswählen

rule "rule name"
when
then
end
Das heißt, Du musst vor dem zweiten when noch ein rule "rule name" einfügen. Es sollte klar sein, dass jede Rule zwingend einen (systemweit) eindeutigen Namen haben muss.
Dann wird der angegebene Time cron Trigger natürlich nicht fünf Minuten nach Mitternacht, sondern fünf Sekunden nach Mitternacht triggern.

Ansonsten ist das mit dem Trigger zum Ausschalten mit einem Risiko verbunden. Es könnte nämlich durchaus passieren, dass die Helligkeit in mehreren Stufen ansteigt, so dass die kombinierte Bedingung nicht erfüllt ist. Besser wäre es, sich am Schaltzustand zu orientieren. So:

Code: Alles auswählen

rule "5 seconds since midnight"
when
    Time cron "5 0 0 * * ?"		//5 Sekunden nach Mitternacht
then
    if(KuecheKamin56.state != OFF) KuecheKamin56.sendCommand(OFF)
    if(KuecheVitrine23.state != OFF) KuecheVitrine23.sendCommand(OFF)
end

rule "E-ZPIR5 Kueche luminance changed"
when
    Item zwave_device_c15572bd_node5_sensor_luminance changed
then
    if(now.getHourOfDay >= 16) {
        if(newState <= 6 && previousState > 6) {
            if(KuecheKamin56.state != ON) KuecheKamin56.sendCommand(ON)
            if(KuecheVitrine23.state != ON) KuecheVitrine23.sendCommand(ON)
        }
        if(newState >= 20) {
            if(KuecheKamin56.state != OFF) KuecheKamin56.sendCommand(OFF)
            if(KuecheVitrine23.state != OFF) KuecheVitrine23.sendCommand(OFF)
        }
    }
end
Beachte auch, dass ich die Reihenfolge der Bedingungen geändert habe. Damit ist es unnötig, die selbe Bedingung zweimal zu nutzen.
getHourOfDay liefert immer eine Integer Zahl zwischen 0 und 23, eben die auf einer Digitaluhr angezeigte Stunde. Da die Time cron Rule um Mitternacht die Leuchten abschaltet, willst Du als Bedingung kein getHourOfDay == 0 ;) denn dann schaltet das Licht notfalls zwischen 0 Uhr und 1 Uhr an, aber nicht mehr ab.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: [SOLVED] Bei Luminanz Wert xx Switch ON und um yy Uhr OFF

Beitrag von Boris099 »

OK, OK also das mit dem rule Namen und den Sekunden anstatt Minuten sind Anfängerfehler :-)
aber zugegeben der Rest ist wohl einfach Können!!!!

if(now.getHourOfDay >= 16)
Man fragt also zum Aktivieren lediglich >=16 ab und wenn nach 00.00.05h wird einfach fix abgeschaltet, OK klingt auch gut :P
und so läuft das trotzdem, falls die Luminanz noch mal ansteigt "OFF" und wenn nochmal runter "ON", und so weiter?

Danke Dir vielmals beim Tunen meines Rules!

Noch was Kleines anderes, ich habe noch nie ganz verstanden, ob ich einzelne .rules Dateien erstelle oder irgendwie logisch innerhalb
eines Rules gruppiere. In diesem Beispiel sind 2 Rules in einer .rules Datei, wäre es anders wenn das 2 separate .rules Dateien wären,
oder einfach piepegal?
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

Antworten