Time cron erst nach 24h ???

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
wunram
Beiträge: 45
Registriert: 22. Feb 2016 18:37

Time cron erst nach 24h ???

Beitrag von wunram »

Hallo,

für das Badezimmer habe ich mir mehrere rules erstellt habe. Erst einen Tag später kann ich eigentlich wirklich feststellen, dass der Time Cron auch die richtige Rule einleitet. Gestern beim testen wollte irgendwie alles nicht so richtig laufen ...

Habt ihr auch die Erfahrung gemacht ???

Weiterhin bin ich über Verbesserung von Rules oder Schreibweisen sehr dankbar

Code: Alles auswählen

rule Bad_1  
when
	System started    
then
	if ( Anwesenheit.state == ON && SomWin.state == OFF && Fe_Bad.state == 0)
            [color=#00BF00]Anwesenheitsabfrage & Sommer/Winter Status && und Stellung des Fensterkontakts[/color]
		{sendCommand (Bad_SollSet, 17)
		}
else
	if ( Anwesenheit.state == OFF && SomWin.state == OFF && Fe_Bad.state == 0)
		{sendCommand (Bad_SollSet, 13)
		}
else
	if ( SomWin.state == OFF || Fe_Bad.state != 0)
		{sendCommand (Bad_SollSet, OFF)
end

rule Bad_2
when
	Time cron "0 0/10 6-8 ? * *"   
then
	if 	(Anwesenheit.state == ON && SomWin.state == OFF && Fe_Bad.state == 0)
		{sendCommand (Bad_SollSet, 21)
		}
else
	if 	(Anwesenheit.state == OFF && SomWin.state == OFF && Fe_Bad.state == 0)
		{sendCommand (Bad_SollSet, 13)
		}
else 
	if 	(SomWin.state == ON || Fe_Bad.state != 0)
		{sendCommand (Bad_SollSet, OFF)
		}
end

rule Bad_3
when
	Time cron "0 0/10 8-18 ? * *"
then
	if 	(Anwesenheit.state == ON && SomWin.state == OFF && Fe_Bad.state == 0)
		{sendCommand (Bad_SollSet, 17)
		}
else
	if 	(Anwesenheit.state == OFF && SomWin.state == OFF && Fe_Bad.state == 0)
		{sendCommand (Bad_SollSet, 13)
		}
else
	if 	(SomWin.state == ON || Fe_Bad.state != 0)
		{sendCommand (Bad_SollSet, OFF)
		}
end

rule Bad_4
when
	Time cron "0 0/10 18-21 ? * *" 	/* Schreibeweise im Test // von 18-21 Uhr */
then
	if 	(Anwesenheit.state == ON && SomWin.state == OFF && Fe_Bad.state == 0)
		{sendCommand (Bad_SollSet, 21)
		}
else
	if 	(Anwesenheit.state == OFF  && SomWin.state == OFF && Fe_bad.state == 0)
		{sendCommand (Bad_SollSet, 17)
		}
else
	if 	(SomWin.state == ON || Fe_Bad.state != 0)
		{sendCommand (Bad_SollSet, OFF)
		}
end

rule Bad_5
when
	Time cron "0 0/10 21-5 ? * *"
then
	if	(Anwesenheit.state == ON && SomWin.state == OFF && Fe_Bad.state == 0)
		{sendCommand (Bad_SollSet, 17)
		}
else
	if 	(Anwesenheit.state == OFF && SomWin.state == OFF && Fe_Bad.state == 0)
		{sendCommand (Bad_SollSet, 13)
		}
else 
	if 	(SomWin.state == ON || Fe_Bad.state != 0)
		{sendCommand (Bad_SollSet, OFF)
		}
end

rule Bad_7
when
	Item Anwesenheit changed from On to OFF
then
	{sendCommand (Bad_SollSet, 13)
	}
end
	
rule Bad_8
when
	Item Fe_Bad changed from 0
or
	Item SomWin changed from OFF to ON 
then
	{sendCommand (Bad_SollSet, OFF)
	}
Zuletzt geändert von wunram am 22. Feb 2016 22:41, insgesamt 1-mal geändert.
Aktuelle Projekt: Kodi mit Openhab2 über Alexa steuern ---- ohne Amazon Skill ----!!!


Homematic CCU2, 2x HM-RC-key4-2, HM-WDS10-TH-O, HM-Sec-Mdir, HM-LC-Dim1TPBU-FM, 6x HM-Sec-RHS, HM-Sec-Key, 4x HM-LC-Sw1PBU-FM, 8x HM-CC-VD, 3x HM-CC-RT-DN, 5x HM-CC-TC, Openhab2 Auf Raspi, Yahm(CCu2-Ersatz) auf Raspi

Benutzeravatar
seppy
Beiträge: 738
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: Time cron erst nach 24h ???

Beitrag von seppy »

Hi wunram,

gehe ich recht in der Annahme, dass Du damit Heizkörper steuerst? Wenn ja, ich hab schon vieles versucht, da die Steuerung von Heizprogrammen über rules und openHab alles andere als übersichtlich ist.

Ich habe es für die Räume mit aufwändigerer Steuerung so gelöst (Achtung gekürzt!):

Code: Alles auswählen

/***********************************************************************************
 * HEIZUNGSSTEUERUNG Schlafzimmer OG
 * 
 * Komforttemperatur nach Zeit. Für die automatische Regelung ist ein Zeitfenster von 5 Mins. vorgesehen. In 
 * diesem Zeitraum werden manuelle Regelungen überschrieben. Danach kann bis zum nächsten Steuervorgang die Temperatur 
 * manuel geregelt werden. 
 * 
 * Vier Heizphasen:
 * 1) Morgens um das Zimmer auf eine angenehme Temperatur zu bringen (6-8 Uhr)
 * 2) Tagsüber auf Absenktemperatur
 * 3) Komforttemperatur vor Zubettgehzeit
 * 4) Absenktemperatur für die Nacht
 */
rule "Cron_Heating_Eltern"
when
	Time cron "5 0/5 * * * ?"
then
	var Integer hour = now.getHourOfDay
	var Integer min = now.getMinuteOfHour
	var Integer wd = now.getDayOfWeek
	
	// Wochentags (Mo - Fr)
	if (GlobalHeatingPeriod.state.equals(ON) && GlobalHoliday.state == OFF && wd <= 5){
		logDebug("HomeBox.HeatingRules:Cron_Heating_Eltern", "Parameter für Heizungssteuerung: Ferien=FALSE, Heizperiode=ON, Wochentag=" + wd + ", Uhrzeit: " + hour + ":" + min)
		//6:00 Uhr Aufheizperiode 
		if ((hour == 6 && min <= 5) && gOGElternSchlafenHKTTargetTemp.state != comfortTemp) {
			sendCommand(gOGElternSchlafenHKTTargetTemp,comfortTemp)
			logInfo("HomeBox.HeatingRules:Cron_Heating_Eltern", "Temperatur Schlafzimmer auf Komforttemperatur " + comfortTemp + "°C geregelt")
		} 
		//8:00 Uhr Absenktemperatur tagsüber
		else if ((hour == 8 && min <= 5) && gOGElternSchlafenHKTTargetTemp.state != setbackTemp){
			sendCommand(gOGElternSchlafenHKTTargetTemp,setbackTemp)
			logInfo("HomeBox.HeatingRules:Cron_Heating_Eltern", "Temperatur Schlafzimmer auf Absenktemperatur " + setbackTemp + "°C geregelt")
		} 
		//19:30 Uhr 2. Aufheizperiode 
		else if ((hour == 19 && min <= 35) && gOGElternSchlafenHKTTargetTemp.state != comfortTemp2) {
			sendCommand(gOGElternSchlafenHKTTargetTemp,comfortTemp)
			logInfo("HomeBox.HeatingRules:Cron_Heating_Eltern", "Temperatur Schlafzimmer auf Komforttemperatur 2 " + comfortTemp2 + "°C geregelt")
		}
		//21:30 Uhr außer Freitag Absenktemperatur 
		else if ((hour == 21 && min <= 35 && wd < 5) && gOGElternSchlafenHKTTargetTemp.state != setbackTemp){
			sendCommand(gOGElternSchlafenHKTTargetTemp,setbackTemp)
			logInfo("HomeBox.HeatingRules:Cron_Heating_Eltern", "Temperatur Schlafzimmer auf Absenktemperatur " + setbackTemp + "°C geregelt")
		}
		//22:30 Uhr am Freitag Absenktemperatur
		else if ((hour == 22 && min <= 35 && wd == 5) && gOGElternSchlafenHKTTargetTemp.state != setbackTemp){
			sendCommand(gOGElternSchlafenHKTTargetTemp,setbackTemp)
			logInfo("HomeBox.HeatingRules:Cron_Heating_Eltern", "Temperatur Schlafzimmer auf Absenktemperatur " + setbackTemp + "°C geregelt")
		}
		else {
			//logInfo("HomeBox.HeatingRules:Cron_Heating_Kinder", "Keine Regelung vorgenommen")
		}
	}
	//Wochentags in den Ferien
	else if (GlobalHeatingPeriod.state.equals(ON) && GlobalHoliday.state == ON && wd <= 5){
		[... SCHNIPP]
		
	} 
	// Wochenende (Sa - So)
	else if (GlobalHeatingPeriod.state.equals(ON) && GlobalHoliday.state == OFF && wd >= 6){
				[... SCHNIPP]
	}
end
Das vielleicht als Anregung. Deine Rules muss ich erstmal in Ruhe zerlegen ;-)

Gruß,
Seppy
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

wunram
Beiträge: 45
Registriert: 22. Feb 2016 18:37

Re: Time cron erst nach 24h ???

Beitrag von wunram »

Hi Seppy,

danke für die Anregung.
Da ich kein It'ler bin. Muss ich mir vieles Zusammenlesen und versuchen.

Ja meine Rule ist nicht ganz einfach. Sie wird teilweise durch Zeitabfragen in einzelne Heizperioden unterteilt. Weiterhin werden aber auch die Variablen "if (......)" Anwesenheit.state (Variable für Anwesenheit)oder SomWin.state (Variable für Sommer/Winter) und auch die Fenstergriff.state abgefragt.


Gruß wunram
Aktuelle Projekt: Kodi mit Openhab2 über Alexa steuern ---- ohne Amazon Skill ----!!!


Homematic CCU2, 2x HM-RC-key4-2, HM-WDS10-TH-O, HM-Sec-Mdir, HM-LC-Dim1TPBU-FM, 6x HM-Sec-RHS, HM-Sec-Key, 4x HM-LC-Sw1PBU-FM, 8x HM-CC-VD, 3x HM-CC-RT-DN, 5x HM-CC-TC, Openhab2 Auf Raspi, Yahm(CCu2-Ersatz) auf Raspi

wunram
Beiträge: 45
Registriert: 22. Feb 2016 18:37

Re: Time cron erst nach 24h ???

Beitrag von wunram »

so...

Vielen Dank an Seppy für die tolle Anregung.
Ich hatte mich gleich daran gemacht meine Heizungs.rules gleich etwas aufzuräumen und an Seppy's Darstellung anzulehnen.

Leider bin ich schnell an die Grenzen der Rule gekommen, da ich andere IF- Abfragen innerhalb der Rule habe:
1) Anwesenheitsabfrage
2) Sommer / Winter Variable
3) Fenstergriff Stellung

Die Rule lief auch soweit ganz gut.... hat pünktlich umgeschaltet... alles Super
Da ich ja div. Sachen abrufe muss man ja auch testen.... Also Fenster auf (gekippt).... Super. Heizung geht aus...
Fenster wieder zu und es passierte nix.

Code: Alles auswählen

if ( hour == 8 )
war leider der Fehler.

Jetzt stelle ich für Andere meine Lösung vor ( noch nicht entgültige)

Code: Alles auswählen

rule "Wohnz"
when
	Time cron "0 0/5 * * * ?"
or 
	System started
then
	var Integer hour = now.getHourOfDay
	var Integer min	= now.getMinuteOfHour
	var Integer wd	= now.getDayOfWeek
	
	if (Anwesenheit.state == ON && SomWin.state == OFF && Fe_Wz_re.state == 0 && Fe_Kue.state == 0 && wd <5)
		{
		if (hour >= 6 && hour <= 8)
		{sendCommand (wz_SollSet, 21)
		pushover (" Heizung Wohnzimmer: Morgens 06:00 Uhr, 21!°C")
		}
	else
		if (hour >= 8 && hour <= 13)
		{sendCommand (wz_SollSet, 17)
		pushover ("Heizung Wohnzimmer: Morgens 08:00 Uhr, 17°C")
		}
	else
		if (hour == 13 && hour <= 18)
		{sendComand (wz_SollSet, 21)
		pushover ("Heizung Wohnzimmer: Mittags 13:00 Uhr, 21°C")
		}
	else
		if (hour >= 18 && min<= 5)
		{sendCommand (wz_SollSet, 17)
		pushover ("Heizung Wohnzimmer: Abends 18:00 Uhr, 17°C")
		}
	}
else	
	if(Anwesenheit.state == ON && SomWin.state == OFF && Fe_Wz_re.state == 0 && Fe_Kue.state == 0 && wd >=6)
		{
		if (hour >= 7 && hour <= 18)
		{sendCommand (wz_SollSet, 21)
		pushover ("Heizung Wohnzimmer: WE Morgens 07:00 Uhr, 21°C")
		}
	else
		if (hour >= 21 && min <= 5)
		{sendCommand (wz_SollSet, 17)
		pushover ("Heizung Wohnzimmer: WE Abends 21:00 Uhr, 17°C")
		}
	}
else
	if (SomWin.state == OFF && Fe_Wz_re.state == 0 || Fe_Kue.state == 0 || Anwesenheit.state == OFF)
	{sendCommand (wz_SollSet, 13)
	}
else
	if (SomWin.state == ON || Fe_Wz_re.state != 0 || Fe_Kue.state == 0 )
	{sendCommand (wz_SollSet, 0)
	pushover ("Heizung Wohnzimmer: Heizung aus")
	}
end
	
Jetzt arbeite ich mit Zeitfenster " if(hour >= 7 && hour <=18) und wenn ich das Fenster aufmache und anschließend wieder zu, wird die richtige Rule ausgelöst.

Weswegen es noch keine entgültige Lösung ist: Durch den Time cron wird die Rule alle 5 min abgerufen ( das ist vollkommen ok). Leider reagiert das Pushover genauso. :D

Gruß
Wunram
Aktuelle Projekt: Kodi mit Openhab2 über Alexa steuern ---- ohne Amazon Skill ----!!!


Homematic CCU2, 2x HM-RC-key4-2, HM-WDS10-TH-O, HM-Sec-Mdir, HM-LC-Dim1TPBU-FM, 6x HM-Sec-RHS, HM-Sec-Key, 4x HM-LC-Sw1PBU-FM, 8x HM-CC-VD, 3x HM-CC-RT-DN, 5x HM-CC-TC, Openhab2 Auf Raspi, Yahm(CCu2-Ersatz) auf Raspi

Antworten