Bewegungsmelder+Nachtlicht 2 Regeln Zeitsteuerung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
LDG
Beiträge: 14
Registriert: 3. Apr 2021 10:08
Answers: 0

Bewegungsmelder+Nachtlicht 2 Regeln Zeitsteuerung

Beitrag von LDG »

Guten Abend an alle,
ich hatte das schon in einem anderen Thread gepostet aber ich denke hier passt das besser hin..
Da ich in Openhab noch relativ neu bin bräuchte ich eure Hilfe.
Durchszusammensuchen und viel rumprobieren habe ich meine erste Rule soweit das sie so funktioniert wie sie soll. Aber ich bin mit dem Ergbenis noch nicht so ganz zufrieden daher meine Fragen:

Habt ihr eine Idee wie ich die beiden Regeln BZ_Tagzeit und BZ_Nachtzeit in eine zsm fassen kann?
damit ich nicht einmal Bz_Zeit einmal hin und herschalten muss?
Muss ich den BZ_Zeit vorher auf null setzen?

Ziel war es das in der Nacht zwischen 22 Uhr abend und 6 Uhr morgens nur eine von 2 Lampen im Badezimmer angeht.

Code: Alles auswählen

rule"BZ_Tagzeit"
when
        Time cron "0 0/15 6-21 ? * * *"
then
        BZ_Zeit.sendCommand(1)
end

rule"BZ_Nachtzeit"
when
        Time cron "0 0/15 22-5 ? * * *"
then
        BZ_Zeit.sendCommand(0)
end

Code: Alles auswählen

if((BZLightS_Beleuchtungsstarke.state as Number).floatValue() <= 52  )
{
	if(BZ_Zeit.state == 1 )
	{	
		tBewegung?.cancel
		if(BZBM_Bewegung.state == ON) 
		{
			if(BZ_Licht.state != ON)
			{
				BZ_Licht.sendCommand(ON)
			}
		}
		else
		{
		tBewegung = createTimer(now.plusSeconds(120), [|
			if(BZ_Licht.state != OFF)
				BZ_Licht.sendCommand(OFF)
			])
		}
	}
	else
	{
		tBewegung?.cancel
		if(BZBM_Bewegung.state == ON)
		{
			if(BZ_LampeHeizung.state != ON)
			{
			BZ_LampeHeizung.sendCommand(ON)
			}			
		}
		else
		{
		tBewegung = createTimer(now.plusSeconds(120), [|
			if(BZ_LampeHeizung.state !=OFF)
				BZ_LampeHeizung.sendCommand(OFF)
			])
		}
	}
}
Vielen Dank im Vorraus
LDG
______________________________________________________________________________________________
Hardware:
- Docker openhab/openhab:3.2.0.M5
- Philips Hue RGB Leuchtmittel + HUE Motion Sensoren
- Ikea Tradfri Leuchtmittel über Hue Bridge
- 2x Shelly 1pm
- Amazon Alexa
- Staubsaugroboter Irobot über Alexa

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

Re: Bewegungsmelder+Nachtlicht 2 Regeln Zeitsteuerung

Beitrag von udo1toni »

Warum so kompliziert? Erst mal könntest Du ein Item erstellen, welches exakt zu zwei Zeitpunkten geschaltet wird, nämlich um 6 und um 22 Uhr, aber nicht zwischendrin. Natürlich brauchst Du dann noch eine Rule, welche sich beim Start des Systems darum kümmert, das Item auf den korrekten Status zu setzen.

Alternativ kannst Du auch einfach innerhalb der Rule abfragen, wie spät es ist, also ganz auf das Item verzichten.

Die dritte von Dir gepostete Rule ist unvollständig, da müsstest Du vielleicht noch mal schauen. Rein zum Licht schalten erscheint sie mir aber unnötig komplex. :)


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

LDG
Beiträge: 14
Registriert: 3. Apr 2021 10:08
Answers: 0

Re: Bewegungsmelder+Nachtlicht 2 Regeln Zeitsteuerung

Beitrag von LDG »

Hallo Udo,

Eine andere Lösung ist mir leider nicht eingefallen, weil ich hiermit noch nicht so vertraut bin. Dazukommt das ich die ganze Programmiersprache zusätzlich zu C in der Schuel auch noch lernen muss.
Die Alternative mit der Zeitabfrage in der Rule hatte ich vorher schon ausprobiert und hatte dann Fehler im Log die ich nicht wegbekommen habe.

Du könntest recht haben das sie sehr lang und komplex ist, aber ich wollte so 2 unterschiedliche Scenen Schalten. Wenn du eine alternative Idee hast bin ich auch hier offen.
So nun einmal der komplette Code der Rule zum Schalten der beiden Sachen:
BZ_Licht ist ein Item mit 2 Lampen welches als Switch konfiguriert ist (BZ_LampeHeizung & BZ_LampeDusche)
BZ_LampeHeizung ist nur die eine Lampe

Code: Alles auswählen

var Timer tBewegung = null

rule"BZBM+Timeout"
when
        Item BZBM_Bewegung changed
then
        if((BZLightS_Beleuchtungsstarke.state as Number).floatValue() <= 52 $
        {
                if(Tagzeit.state == 1 )
                {
                        tBewegung?.cancel
                        if(BZBM_Bewegung.state == ON)
                        {
                                if(BZ_Licht.state != ON)
                                {
                                        BZ_Licht.sendCommand(ON)
                                }
                        }
                        else
                        {
                        tBewegung = createTimer(now.plusSeconds(120), [|
                                if(BZ_Licht.state != OFF)
                                        BZ_Licht.sendCommand(OFF)
                                ])
                        }
                }
                else
                {
                        tBewegung?.cancel
                        if(BZBM_Bewegung.state == ON)
                        {
                                if(BZ_LampeHeizung.state != ON)
                                {
                                BZ_LampeHeizung.sendCommand(ON)
                                }
                        }
                        else
                        {
                        tBewegung = createTimer(now.plusSeconds(180), [|
                                if(BZ_LampeHeizung.state !=OFF)
                                        BZ_LampeHeizung.sendCommand(OFF)
                                ])
                        }
                }
        }
end

Danke das du/die anderen mir so hilfst/helfen bei meinen ersten Schritten in OPENHAB.
______________________________________________________________________________________________
Hardware:
- Docker openhab/openhab:3.2.0.M5
- Philips Hue RGB Leuchtmittel + HUE Motion Sensoren
- Ikea Tradfri Leuchtmittel über Hue Bridge
- 2x Shelly 1pm
- Amazon Alexa
- Staubsaugroboter Irobot über Alexa

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

Re: Bewegungsmelder+Nachtlicht 2 Regeln Zeitsteuerung

Beitrag von udo1toni »

Die Rule wäre so sinnvoller:

Code: Alles auswählen

var Timer tBewegung = null

rule "BZBM + Timeout"
when
    Item BZBM_Bewegung changed
then
    tBewegung?.cancel                                                                       // laufenden Timer stoppen
    if(BZBM_Bewegung.state == ON) {                                                         // Falls Bewegung erkannt
        if((BZLightS_Beleuchtungsstarke.state as Number).floatValue <= 52) {                // falls Helligkeit unter Schwellwert
            if(BZ_LampeHeizung.state != ON)                                                 // Falls Lampe 1 nicht ON
                BZ_LampeHeizung.sendCommand(ON)                                             // Lampe 1 ON
            if(BZ_LampeDusche.state != ON && now.getHourOfDay > 5 && now.getHourOfDay < 22) // Falls Lampe 2 nicht ON und zwischen 6 und 22 Uhr
                BZ_LampeDusche.sendCommand(ON)                                              // Lampe 2 ON
        }
    } else {                                                                                // falls keine Bewegung erkannnt
        tBewegung = createTimer(now.plusSeconds(120), [|                                    // Timer starten
            if(BZ_LampeHeizung.state != OFF)                                                // Falls Lampe 1 nicht OFF
                BZ_LampeHeizung.sendCommand(OFF)                                            // Lampe 1 OFF
            if(BZ_LampeDusche.state != OFF)                                                 // Falls Lampe 2 nicht OFF
                BZ_LampeDusche.sendCommand(OFF)                                             // Lampe 2 OFF
        ])
    }
end
Ein laufender Timer wird immer zunächst beendet, falls er laufen sollte.
Anschließend wird geprüft, ob Bewegung erkannt wurde oder nicht. (vor! der Prüfung auf die Helligkeit) Falls die Helligkeit unterschritten wurde, wird das 1. Licht eingeschaltet (falls es nicht ohnehin an war). Für das 2. Licht wird zusätzlich geprüft, ob die Uhrzeit passt.
Sollte keine Bewegung erkannt worden sein, wird der Timer gestartet. Der Timer schaltet grundsätzlich beide Lampen aus, falls sie eingeschaltet sind.

Die Idee dahinter: Falls eine Lampe eingeschaltet ist, soll sie sicher ausgeschaltet werden, gleich, ob der Zeitraum zum Einschalten überschritten wurde oder gar die Helligkeit gestiegen ist. Natürlich könnte man das Ausschalten auch über die Gruppe erledigen, aber für zwei Items lohnt sich die Gruppe im Grunde nicht. :)

Es kann sein, dass Du now.getHourOfDay durch ZonedDateTime.now.getHour ersetzen musst (wenn Du openHAB3 verwendest)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

LDG
Beiträge: 14
Registriert: 3. Apr 2021 10:08
Answers: 0

Re: Bewegungsmelder+Nachtlicht 2 Regeln Zeitsteuerung

Beitrag von LDG »

Super vielen Dank.

dann habe ich jetzt wieder was neues gelernt. Die verwendete Sprache ist Javascript oder welche nutzt du?
______________________________________________________________________________________________
Hardware:
- Docker openhab/openhab:3.2.0.M5
- Philips Hue RGB Leuchtmittel + HUE Motion Sensoren
- Ikea Tradfri Leuchtmittel über Hue Bridge
- 2x Shelly 1pm
- Amazon Alexa
- Staubsaugroboter Irobot über Alexa

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

Re: Bewegungsmelder+Nachtlicht 2 Regeln Zeitsteuerung

Beitrag von udo1toni »

Das ist die Rules DSL (DomainSpecificLanguage). Die Rules DSL ist von Anbeginn mit dabei, es gibt ein paar Einschränkungen, aber der Code ist meines erachtens sehr gut lesbar, gerade wenn es solche recht einfachen Rules sind.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

LDG
Beiträge: 14
Registriert: 3. Apr 2021 10:08
Answers: 0

Re: Bewegungsmelder+Nachtlicht 2 Regeln Zeitsteuerung

Beitrag von LDG »

okay danke und wenn es komplizierter werden sollte?

Sind ja erst die ersten Schritte bei mir. und da ich noch einen Roomba von Irobot habe wird es für mich noch schwieriger alleine das herrausfinden des Passworts.. da steige ich noch nicht so durch... aber erstmal die leichteren Dinge wie das Licht
______________________________________________________________________________________________
Hardware:
- Docker openhab/openhab:3.2.0.M5
- Philips Hue RGB Leuchtmittel + HUE Motion Sensoren
- Ikea Tradfri Leuchtmittel über Hue Bridge
- 2x Shelly 1pm
- Amazon Alexa
- Staubsaugroboter Irobot über Alexa

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

Re: Bewegungsmelder+Nachtlicht 2 Regeln Zeitsteuerung

Beitrag von udo1toni »

Es gibt eine wesentliche Einschränkung der Main UI Rules DSL gegenüber der nativen Rules DSL, das ist die fehlende Möglichkeit, globale Variablen zu verwenden. Zum Beispiel braucht man zwingend globale Variablen, wenn man mit Timern arbeiten (und die Kontrolle darüber behalten) will.
Dann muss man die Rule in einer rules-Datei anlegen (Dateiendung .rules). Die Datei muss im openhab-conf-Verzeichnis liegen, dort im Unterverzeichnis rules/. Das openhab-conf Verzeichnis ist auf dem Raspberry gewöhnlich /etc/openhab/ (solange es sich um eine apt-Installation handelt, openHABian nutzt ebenfalls apt als Grundlage).
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten