Regelfrage

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Caddy
Beiträge: 117
Registriert: 16. Nov 2018 08:21
Answers: 0

Regelfrage

Beitrag von Caddy »

Hallo zusammen,

nach dem dank vielfältiger Hilfe hier aus dem Forum das System nun stabil und annähernd so läuft wie ich es möchte kommen ich zu den Regeln.
Die einfachen bekomme ich hin, aber bei meiner Startregel harkt es

Ich möchte beim Start des Rasperry prüfen ob wir zwischen 6:00 und Morgendämmerung sind und zwischen Abenddämmerung und 23 Uhr
Hintergrund ist, in beiden Fällen soll der Raspberry das Licht einschalten.

Also
wenn zwischen 6:00 und morgendämmerung dann Licht an ansonsten aus und
Wenn zwischen Abenddämmerung und 23:00 Uhr Licht an ansosnten aus

Habe ich so versucht

Code: Alles auswählen

if (Current_DateTime gt "06:00" && astro:sun:home:civilDawn#start lt Current_DateTime) ||
    (Current_DateTime lt "23:00" && astro:sun:home:civilDusk#start gt Current_DateTime) {
		sendCommand(Shelly01, ON)
		sendCommand(Sonoff03, ON)
	}
	else
	{
		sendCommand(Shelly01, OFF)
		sendCommand(Sonoff03, OFF)	
	}
Klappt aber leider nicht :-(

Danke für eine kurze Hilfe ...

Caddy :?:

Caddy
Beiträge: 117
Registriert: 16. Nov 2018 08:21
Answers: 0

Re: Regelfrage

Beitrag von Caddy »

ich konnte es glaube ich lösen:

Code: Alles auswählen

rule "Morgendaemmerung"
when
	Channel 'astro:sun:home:civilDawn#event' triggered START
then
	if(now.isBefore((CivilDawn_StartTime.state as DateTimeType).calendar.timeInMillis)) 
		{
			sendTelegram("bot1", "vor Morgendämmerung deswegen ON")
			logInfo("rules.meldung", "vor Morgendämmerung deswegen ON")
			sendCommand(gNachtLicht, ON)
		}
	else
		{
			sendTelegram("bot1", "nach Morgendaemmerung deswegen OFF")
			logInfo("rules.meldung", "nach Morgendaemmerung deswegen OFF")
			sendCommand(gNachtLicht, OFF)
		}
end
Meinungen ?

Caddy

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

Re: Regelfrage

Beitrag von udo1toni »

Komisch, ich dachte, ich hätte das gestern beantwortet... egal.

Deine Anforderung passt jetzt irgendwie gar nicht zu Deiner Lösung :)

Raspberry wird gestartet -> Rule soll mit System started triggern
Ab 6 Uhr, vor 23 Uhr -> now.getHourOfDay >= 6 && now.getHourOfDay <= 22

Deine Rule triggert mit civilDawn, somit dürfte die Bedingung nie erfüllt sein, es sei denn, Du hast in einem der beiden Channel ein Offset gesetzt, dann (falls das Offset dazu führt) ist die Bedingung immer erfüllt.

Es gibt im englischen Forum eine nette Lösung, die Zeiträume definiert, also Nacht,Aufstehen,Tagsüber,Abends,Zubettgehen. Innerhalb einer Rule wird berechnet, in welchem Zeitraum wir uns befinden. Schaltbefehle werden dann abhängig von der Änderung dieser Zeiträume gemacht.

Eine mögliche Rule für Deine Anforderung sähe so aus:

Code: Alles auswählen

DateTime civilDawnStart {channel="astro:sun:home:civilDawn#start"}
DateTime civilDuskStart {channel="astro:sun:home:civilDusk#start"}
Group:Switch gNachtlicht
Switch Shelly01 "Shelley 01" (gNachtlicht) {mqtt="blah"}
Switch Shelly03 "Shelley 01" (gNachtlicht) {mqtt="blah"}

Code: Alles auswählen

rule "Dämmerung"
when
    System started or
    Time cron "0 0 6 * * ?" or
    Time cron "0 0 23 * * ?" or
    Channel 'astro:sun:home:civilDawn#event' triggered START
    Channel 'astro:sun:home:civilDusk#event' triggered START
then
    if(civilDawnStart.state != NULL) {
        var cDawn = new DateTime(civilDawnStart.state)
    } else var cDawn = now.withTimeAtStartOfDay.plusHours(7)
    if(civilDuskStart.state != NULL) {
        var cDusk = new DateTime(civilDuskStart.state)
    } else var cDusk = now.withTimeAtStartOfDay.plusHours(20)
    var SwitchType mySwitch
    if(now.getHourOfDay < 6 || now.getHourOfDay == 23) mySwitch = OFF
    else if (now.isAfter(cDawn) && now.isBefore(cDusk)) mySwitch = OFF
    else mySwitch = ON
    gNachtlich.sendCommand(mySwitch)
    logInfo("duskdawn","Nachtlicht {}",mySwitch)
end
Die Rule triggert also auf fünf verschiedene Ereignisse, System wurde gestartet (oder die Rule-Datei wurde erneut geladen), Es ist 6 Uhr, es ist 23 Uhr, es ist Sonnenaufgang, es ist Sonnenuntergang.
Innerhalb der Rule müssen nun all diese Bedingungen erneut geprüft werden, da nicht bekannt ist, welcher Trigger nun ausgelöst hat. Dafür braucht es nur eine Rule um das Licht ein- oder auszuschalten.
Der if-Block zu Beginn ist notwendig, da es keine Möglichkeit gibt, sicherzustellen, dass bei einem Systemstart bereits die Berechnungen des astro Bindings abgeschlossen wurden. Deshalb müssen für Sonnenauf- und Untergang sinnvolle Default-Werte gesetzt werden, damit es anschließend nicht zu einer Fehlermeldung kommt.
Alternativ kann man sich ein Default-Verhalten für diesen Fall überlegen (also z.B. dass das Licht ausgeschaltet wird, falls die Zeiten für Auf- und Untergang nicht bekannt sind) und die Rule entsprechend anders aufbauen, so dass nur eingeschaltet wird, falls die Zeiten gesetzt sind und der Zeitraum passt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Caddy
Beiträge: 117
Registriert: 16. Nov 2018 08:21
Answers: 0

Re: Regelfrage

Beitrag von Caddy »

Hallo udo1toni,

vielen Dan für diese Regel. Das hätte ich noch nicht geschafft ...

caddy

Antworten