Hue - für Alarm andere Farbe setzen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Ezeqeel
Beiträge: 31
Registriert: 27. Okt 2020 08:16

Hue - für Alarm andere Farbe setzen

Beitrag von Ezeqeel »

Hallo,

ich will für die Beleuchtung meiner Hausnummer eine Hue Außenleuchte verwenden. Da es eine Color Leuchte ist hatte ich die Idee darüber auch das Signal für die Garagentorfahrt (grünes Blinken) und den Alarm (rotes Blinken) zu schalten.

Nach einem kleinen Kampf hab ich es geschafft, dass die Lampe bei Dämmerung mittels Astro an geht und um Mitternacht aus geht.

Code: Alles auswählen

rule "Hausnummer Beleuchtung AN"
when
    Channel 'astro:sun:local:civilDusk#event' triggered START
then
        logInfo("hausnummer" ,"civilDusk wurde gestartet - Beleuchtung an")
		var DecimalType hue = new DecimalType(35) // 0-360; 0=red, 120=green, 240=blue, 360=red (again)
		var PercentType sat = new PercentType(50) // 0-100 (% ColorTemp)
		var PercentType bright = new PercentType(20) // 0-100 (% brightness)
		var HSBType light = new HSBType(hue,sat,bright)
		sendCommand(Licht_Hausnummer_col,light.toString)
end

rule "Hausnummer Beleuchtung AUS"
when
    Channel 'astro:sun:local:morningNight#event' triggered START
then
        logInfo("hausnummer" ,"morningNight wurde gestartet - Beleuchtung aus")
		var DecimalType hue = new DecimalType(35) // 0-360; 0=red, 120=green, 240=blue, 360=red (again)
		var PercentType sat = new PercentType(50) // 0-100 (% ColorTemp)
		var PercentType bright = new PercentType(0) // 0-100 (% brightness)
		var HSBType light = new HSBType(hue,sat,bright)
		sendCommand(Licht_Hausnummer_col,light.toString)
end
Für den Alarm, der über ein KNX Item rein käme funktioniert jetzt schon das hier:

Code: Alles auswählen

rule "Hausnummer Beleuchtung Garagentor fährt"
when
    Item Licht_Hausnummer_alert_knx received command
then
        logInfo("hausnummer" ,"Garagentor zum Hof - Alarm GRÜN")
		sendCommand(Licht_Hausnummer_alert,(if(receivedCommand == ON) "LSELECT" else "NONE"))
end
Aber halt nur mit der oben eingestellten Farbe.
Kann ich das punktuell wechseln? Das alert item verträgt ja erstmal nur den NONE, SELECT oder LSELECT.

Danke!

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

Re: Hue - für Alarm andere Farbe setzen

Beitrag von udo1toni »

Es böte sich an, für die Farben ein paar Konstanten zu definieren. Dann kann die entsprechende Funktion jeweils einfach die entsprechende Farbe aufrufen.
Ich habe selbst keine Hue Lampen, wie verhält sich denn die Lampe bei LSELECT? Vermutlich wechselt sie dann zwischen Aus und der angewählten Farbe?
So sähe das meiner Meinung nach aus:

Code: Alles auswählen

// globale Konstanten und Variablen zu Beginn der Datei definieren!
val hsbGreen = new HSBType(120,100,100)
val hsbRed   = new HSBType(0,100,100)
val hsbWhite = new HSBType(35,50,20)
val hsbBlack = new HSBType(35,50,0)

rule "Hausnummer Licht an"
when
    Channel 'astro:sun:local:civilDusk#event' triggered START
then
    Licht_Hausnummer_col.sendCommand(hsbWhite)
    Licht_Hausnummer_aktiv.postUpdate(ON)
end

rule "Hausnummer Licht aus"
when
    Channel 'astro:sun:local:morningNight#event' triggered START
then
    Licht_Hausnummer_col.sendCommand(hsbBlack)
    Licht_Hausnummer_aktiv.postUpdate(OFF)
end

rule "Garagentor fährt"
when
    Item Garagentor received command
then
    if(receivedCommand == ON) {
        Licht_Hausnummer_col.sendCommand(hsbGreen)
        Licht_Hausnummer_alert.sendCommand("LSELECT")
    } else {
        Licht_Hausnummer_alert.sendCommand("NONE")
        Licht_Hausnummer_col.sendCommand(if(Licht_Hausnummer_aktiv.state == ON) hsbWhite else hsbBlack)
    }
end
Das Item Licht_Hausnummer_aktiv ist ein ungebundenes Item, welches den Soll-Zustand der Leuchte hält, damit die Leuchte nach Beenden des Alarms auf den passenden Modus zurück schalten kann.

Der Punkt ist aber, dass die Farbe sicherlich zunächst ausgewählt werden muss.

Noch ein paar Gedanken dazu:
- Was passiert, wenn der Übergang Licht An/Aus während des Alarms erfolgt?
- Was passiert, wenn während eines "rot"-Alarms ein "grün"-Alarm auftritt? (und andersrum)
- Was passiert, wenn Licht_Hausnummer_alert auf LSELCT gesetzt wurde, und die Farbe geändert wird (vor allem auf einen Helligkeitswert 0)?

Das sind so die Stellen, die man vermutlich in den jeweiligen Rules berücksichtigen muss. Entsprechend wäre vermutlich eine statemachine das Mittel der Wahl. Der Sollzustand für die Hausnummernbeleuchtung wird dann von Astro gesteuert, die Beleuchtung selbst aber von der State Machine, welche als Trigger den Sollzustand und die beiden Alarme bekommt. Wenn einer der Trigger aufläuft, wertet die State Machine anhand der Zustände der Items aus, was die Lampe gerade machen soll und sorgt für den passenden Zustand. Also so:

Code: Alles auswählen

rule "Abend"
when
    Channel 'astro:sun:local:civilDusk#event' triggered START
then
    Dunkel.postUpdate(ON)
end

rule "Morgen"
when
    Channel 'astro:sun:local:morningNight#event' triggered START
then
    Dunkel.postUpdate(OFF)
end

rule "Hausnummer Licht"
when
    Item Dunkel changed or
    Item Garage changed or
    Item Alarm changed
then
    val hsbGreen = new HSBType(120,100,100)
    val hsbRed   = new HSBType(0,100,100)
    val hsbWhite = new HSBType(35,50,20)
    val hsbBlack = new HSBType(35,50,0)
    if(Alarm.state == ON) {
        Licht_Hausnummer_col.sendCommand(hsbRed)
        Licht_Hausnummer_alert.sendCommand("LSELECT")
    } else if(Garage.state == ON) {
        Licht_Hausnummer_col.sendCommand(hsbGreen)
        Licht_Hausnummer_alert.sendCommand("LSELECT")
    } else if(Dunkel.state == ON) {
        Licht_Hausnummer_alert.sendCommand("NONE")
        Licht_Hausnummer_col.sendCommand(hsbWhite)
    } else {
        Licht_Hausnummer_alert.sendCommand("NONE")
        Licht_Hausnummer_col.sendCommand(hsbBlack)
    }
end
Dabei ist zu bemerken, dass die Konstanten nun bequem innerhalb der Rule definiert werden können, da wir nur eine Rule für die Lampe brauchen.
Das Item Dunkel wird durch Astro ein- und ausgeschaltet, das Item Garage ist ON wenn das Tor fährt, das Item Alarm ist ON wenn ein Alarm auftritt. Es sollte klar sein, dass der Alarm die höchste Priorität genießt und die "Tor fährt" Anzeige dann nicht zum Zug kommt.

Man könnte noch den aktuellen Zustand der beiden Items auswerten, um unnötige Steuerbefehle zu unterdrücken (Während der Alarm aktiv ist, wechselt Garage oder Dunkel den Zustand oder während Garage aktiv ist, wechselt Dunkel den Zustand)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Ezeqeel
Beiträge: 31
Registriert: 27. Okt 2020 08:16

Re: Hue - für Alarm andere Farbe setzen

Beitrag von Ezeqeel »

Ich hab jetzt endlich den ersten Teil ausprobiert, noch ein paar Kleinigkeiten angepasst, aber jetzt scheint es zu funktionieren.

Code: Alles auswählen

// Regel zum automatischen Schalten der Beleuchtung der Hausnummer
// HUE
// globale Konstanten und Variablen zu Beginn der Datei definieren
val hsbGreen = new HSBType('120,100,100')
val hsbRed   = new HSBType('0,100,100')
val hsbWhite = new HSBType('35,50,20')
val hsbBlack = new HSBType('35,50,0')
//
//
rule "Hausnummer Beleuchtung AN"
when
    Channel 'astro:sun:local:civilDusk#event' triggered START
then
        logInfo("hausnummer" ,"civilDusk wurde gestartet - Beleuchtung an")
	Licht_Hausnummer_col.sendCommand(hsbWhite.toString)
	Licht_Hausnummer_aktiv.postUpdate(ON)

end

rule "Hausnummer Beleuchtung AUS"
when
    Channel 'astro:sun:local:morningNight#event' triggered START
then
        logInfo("hausnummer" ,"morningNight wurde gestartet - Beleuchtung aus")
	Licht_Hausnummer_col.sendCommand(hsbBlack.toString)
    	Licht_Hausnummer_aktiv.postUpdate(OFF)
end

rule "Hausnummer Beleuchtung Garagentor fährt"
when
    Item Licht_Hausnummer_alert_knx received command
then
        logInfo("hausnummer" ,"Garagentor zum Hof - Alarm GRÜN")
	    if(receivedCommand == ON) {
	        Licht_Hausnummer_col.sendCommand(hsbGreen.toString)
        	Licht_Hausnummer_alert.sendCommand("LSELECT")
	    } else {
        	Licht_Hausnummer_alert.sendCommand("NONE")
	        Licht_Hausnummer_col.sendCommand(if(Licht_Hausnummer_aktiv.state == ON) hsbWhite.toString else hsbBlack.toString)
   	   }
end
Was sicher jammern auf hohem Niveau ist, kann man der Hue auch erstmal "im Stillen" sagen, welche Farbe sie als nächstes verwenden soll?
Der Farbton ändert sich ja nicht schlagartig, sprich aus warm weiß wird erst grün und dann fängt sie zu blinken an.
Das ist jetzt nicht so schlimm, wäre aber cooler wenn sie von weiß direkt ins grüne blinken übergehen würde.

Danke für die tollen Gedanken zu dem Thema, Udo.
Das muss ich mir nochmal in aller Ruhe anschauen.

Ach ja, gibt es eine Möglichkeit in openhab z.B. das Astro binding manuell auszuführen? Also einen
"execute Channel 'astro:sun:local:civilDusk#event' triggered START" oder sowas?

Ezeqeel
Beiträge: 31
Registriert: 27. Okt 2020 08:16

Re: Hue - für Alarm andere Farbe setzen

Beitrag von Ezeqeel »

Wenn ich die Leuchte vorher ausschalte, einen Moment warte und dann die neue Farbe aktiviere sieht es schöner aus.

Code: Alles auswählen

logInfo("hausnummer" ,"Garagentor zum Hof - Alarm GRÜN")
	    if(receivedCommand == ON) {
        	        Licht_Hausnummer_col.sendCommand(hsbBlack.toString)
			Thread::sleep(500)
			Licht_Hausnummer_col.sendCommand(hsbGreen.toString)
        	        Licht_Hausnummer_alert.sendCommand("LSELECT")

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

Re: Hue - für Alarm andere Farbe setzen

Beitrag von udo1toni »

Mit den Hue Lampen kenne ich mich nicht aus, aber Du hast ja schon eine Lösung gefunden.

Was das manuelle Triggern der Astro Channels betrifft, so ist das nicht möglich, aber auch gar nicht nötig. Es dürfte ja eher darum gehen, eine Rule (vermutlich für Tests) manuell zu triggern, die sonst vom Astro Channel getriggert wird. Die einfachste Variante ist dann, zusätzlich einen weiteren Trigger anzulegen, z.B. ein "Item xyz changed"
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten