Seite 1 von 2

Nachschaltung Lichter (Night-Switch, etc.)

Verfasst: 18. Nov 2019 09:50
von Engelsen
Moin zusammen,

ich habe nun nach diversen Anleitungen im Netz und hier aus dem Forum meine Präsenz-Erkennung und Lichtschaltung aufgebaut.
Das "Leaving-Home" und "Coming-Home" läuft auch wunderbar!

Leider klappt es nicht so gut mit dem Licht, wenn wir bereits zu Hause sind oder ich das Licht nach einer bestimmten Uhrzeit ausschalte (so dass es dann auch aus bleibt ;) ).

Das Licht soll also zwischen 22.30 und 6.30 ausgeschaltet bleiben.

Vielleicht kann mir jemand einen Wink geben, damit ich es grade ziehen kann:

items

Code: Alles auswählen

DateTime    Sunset_Time          "Sonnenuntergang [%1$tH:%1$tM]"                        <sun>   	(gAstro) {channel="astro:sun:local:set#start"}
DateTime    Sunrise_Time         "Sonnenaufgang [%1$tH:%1$tM]"                          <sun>    	(gAstro) {channel="astro:sun:local:rise#end"}
String      Day_Phase            "Tagesphase [MAP(astro.map):%s]"                         			(gAstro) {channel="astro:sun:local:phase#name"}
Switch      Night_State          "Nacht"                                                    		(gAstro)
Group:Switch:OR(ON,OFF) gEltern 		"Eltern zu Hause [%d]" 
rules

Code: Alles auswählen

rule "Nacht-Switch"
when
    System started
then
	if ( now.isAfter(Sunset_Time.state as DateTimeType) || now.isBefore(Sunrise_Time.state as DateTimeType) ){
		logInfo("RULE", "--> Night_State ON")
		NightState.postUpdate(ON)
	} else {
		logInfo("RULE", "--> Night_State OFF")
		NightState.postUpdate(OFF)
	}
end

rule "Wir sind zu Hause"
when
	// Wir sind zu Hause und es ist Sonnenuntergang
	Item Night_State changed to ON
then
	Thread::sleep(2000)
	if (gEltern.state != OFF){
		if(now.getMinuteOfDay() < ( (60*22)+30 ) && now.getMinuteOfDay() > ( (60*6)+30) ){
			//licht_komplett_wozi.sendCommand(ON)
			Thread::sleep(2000)
			Kamin.sendCommand(20)
			Thread::sleep(2000)
			Regal.sendCommand(20)
			Thread::sleep(2000)
			Flur.sendCommand(20)
			Thread::sleep(2000)
			Wintergarten.sendCommand(20)
		}
	}
end

Vielen Dank im Voraus (auch an die ganzen Tippgeber, dessen Einstellungen ich bisher schamlos kopiert habe :-*)

Re: Nachschaltung Lichter (Night-Switch, etc.)

Verfasst: 18. Nov 2019 10:20
von seppy
Hi,
als erstes fällt mir auf, dass Du mit ODER || arbeitest, es müsste aber UND && heißen:

Code: Alles auswählen

if ( now.isAfter(Sunset_Time.state as DateTimeType) && now.isBefore(Sunrise_Time.state as DateTimeType) ){
Des Weiteren sind die Sleeps ... kein guter Stil, warum machst Du das?

Grüße,
Seppy

Re: Nachschaltung Lichter (Night-Switch, etc.)

Verfasst: 18. Nov 2019 10:39
von Engelsen
Danke @seppy für die schnelle Antwort ...


als erstes fällt mir auf, dass Du mit ODER || arbeitest, es müsste aber UND && heißen:

Ok, hab ich angepasst. Das hatte ich so aus einem Tutorial rauskopiert :?
Des Weiteren sind die Sleeps ... kein guter Stil, warum machst Du das?
Damit die Lampen nicht alle gleichzeitig angehen, sondern versetzt.
Ist das problematisch?

Re: Nachschaltung Lichter (Night-Switch, etc.)

Verfasst: 18. Nov 2019 13:46
von seppy
Hi,
problematisch in Deinem Fall nicht unbedingt. Es führt einfach dazu, dass die Abarbeitung künstlich gebremmst wird. Wenn Du das jetzt extrem oft machen würdest, erzeugst Du unnötig viel Systemlast.

Dafür gäbe es Mechanismen wie timer oder auch das expire-Binding könntest Du dazu nutzen. Aber das ist ja schon der nächste Schritt. Teste jetzt nochmal das Verhalten und gib eine Rückmeldung.

Re: Nachschaltung Lichter (Night-Switch, etc.)

Verfasst: 18. Nov 2019 15:50
von Engelsen
Alles klar. VIelen Dank.

Werde heute Abend sehen, ob es klappt und gebe dann morgen Feedback!

Re: Nachschaltung Lichter (Night-Switch, etc.)

Verfasst: 19. Nov 2019 09:06
von Engelsen
Moin zusammen,

leider hat gestern nun gar nichts mehr funktioniert. Weder ist der Nacht-Switch umgesprungen, noch ist das Licht nach 22.30 ausgeblieben :(
Der Switch ist auch heute morgen nicht mehr auf OFF gesprungen ... :(

Im Log steht der Switch nur drin, da ich ihn händisch umgeschaltet habe, damit sich das Licht nicht dauernd einschaltet.

Code: Alles auswählen

2019-11-18 19:07:52.152 [ome.event.ItemCommandEvent] - Item 'Night_State' received command ON
2019-11-18 19:07:52.155 [vent.ItemStateChangedEvent] - Night_State changed from OFF to ON
2019-11-18 23:02:38.649 [ome.event.ItemCommandEvent] - Item 'Night_State' received command OFF
2019-11-18 23:02:38.653 [vent.ItemStateChangedEvent] - Night_State changed from ON to OFF

Re: Nachschaltung Lichter (Night-Switch, etc.)

Verfasst: 19. Nov 2019 09:41
von seppy
Hi,
ich gehe mal davon aus Du hast openHAB nicht neugestartet? Dein Ruletrigger ist nämlich der Systemstart

Code: Alles auswählen

rule "Nacht-Switch"
when
    System started
then
Eine Option deine Anforderung zu lösen, wäre z.B. den Channeltrigger zu verwenden:

Code: Alles auswählen

rule "Nacht-Switch ON"
when
    Channel 'astro:sun:home:set#event' triggered START
then
    logInfo("RULE", "--> Night_State ON")
		NightState.postUpdate(ON)
end

rule "Nacht-Switch OFF"
when
    Channel 'astro:sun:home:rise#event' triggered START
then
    logInfo("RULE", "--> Night_State OFF")
		NightState.postUpdate(OFF)
end
Damit wäre dann schmal Deine Tag- und Nachtschaltung gelöst. Dies ist aber nur ein möglicher Weg.

Grüße,
Seppy

Re: Nachschaltung Lichter (Night-Switch, etc.)

Verfasst: 19. Nov 2019 10:25
von Engelsen
Hi Seppy,

vielen Dank.
Das mit dem dem Channel-Trigger hatte ich mal versucht, hatte aber leider nie geklappt.
Ich habe es nun mal nach deiner Anweisung eingebaut --> Heute Abend wissen wir hoffentlich mehr :)

Vielen Dank.

Re: Nachschaltung Lichter (Night-Switch, etc.)

Verfasst: 19. Nov 2019 11:45
von seppy
HI,
ich sehe gerade, dass es natürlich falsch rum läuft. Du musst die Trigger umdrehen.
Grüße,
Seppy

Re: Nachschaltung Lichter (Night-Switch, etc.)

Verfasst: 19. Nov 2019 13:30
von Engelsen
Ich habs noch ein wenig aufgebohrt und einen Nachtruhemodus eingebaut:

rules

Code: Alles auswählen

// Nacht-Switch /////////////////////////////////////////////////////////////

rule "Switch NightState auf ON bei Sonnenuntergang"
when
    Channel 'astro:sun:local:set#event' triggered START
then
	NightState.postUpdate(ON)
    logInfo("NightState updated", "--> NightState set to " + NightState.state)
end

rule "Switch NightState und LateNightState auf OFF bei Sonnenaufgang"
when
    Channel 'astro:sun:local:rise#event' triggered START
then
	NightState.postUpdate(OFF)
    LateNightState.postUpdate(OFF)
    logInfo("NightState Update", "--> NightState auf OFF")
    logInfo("LateNightState Update", "--> LateNightState auf OFF")
end


// Nachtruhe-Switch /////////////////////////////////////////////////////////////

rule "Switch LateNightState auf an um 22h30 in der Woche"
when
    Time cron "	0 30 22 ? * MON,TUE,WED,THU,SUN *"
then
	LateNightState.postUpdate(ON)
    logInfo("LateNightState updated", "--> LateNightState set to " + LateNightState.state)
end


// Nachtruhe am Wochenende ///////////////////////////////////////////////

rule "Switch LateNightState auf ON at 23h30 am Wochenende"
when
    Time cron "0 30 23 ? * FRI,SAT *"
then
	LateNightState.postUpdate(ON)
    logInfo("LateNightState updated", "--> LateNightState set to " + LateNightState.state)
end

//  Nachruhe .- Lichter aus! /////////////////////////////////////////////////
rule "Lichter nachts ausschalten"
when
	Item LateNightState changed
then
	if (LateNightState.state == ON){
		logInfo("Schlafenszeit", "--> Alle Lampen aus")
		glicht_komplett.sendCommand(OFF)	
	}
end
Sollte klappen oder?