Fehler in Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

SaschaQ
Beiträge: 202
Registriert: 2. Mär 2020 13:50
Answers: 0

Fehler in Rule

Beitrag von SaschaQ »

Hallo zusammen,

ich habe in Openhab die folgende Rule gebaut:
und bekomme immer diesen Fehler

Code: Alles auswählen

2020-03-10 14:13:19.319 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'Alltag.rules', using it anyway:
This expression is not allowed in this context, since it doesn't cause any side effects.
This expression is not allowed in this context, since it doesn't cause any side effects.
Hat jemand eine Ahnung wo hier der Fehler liegt?


Code: Alles auswählen


/************************************************** Alltag Rules ********************************************/

rule "Schlafen"
when
    Item all_schlafen received command or
	Item all_schlafen_prion_schalter received command
	
then
    if (receivedCommand==ON) {

	
	dg_schlafzimmerrechts_rol.sendCommand(100)
	dg_schlafzimmerlinks_rol.sendCommand(100)
	dg_kinderzimmer2_rol.sendCommand(100)
	dg_badezimmer2_rol.sendCommand(100)
	dg_schlafzimmerrechts_rol_so.sendCommand(ON)
	dg_schlafzimmerlinks_rol_so.sendCommand(ON)
	dg_kinderzimmer2_rol_so.sendCommand(ON)
	dg_badezimmer2_rol_so.sendCommand(ON)
	dg_schlafzimmer1_db.sendCommand(OFF)
	dg_schlafzimmer2_db.sendCommand(OFF)
	dg_kinderzimmer2_db.sendCommand(OFF)
	dg_badezimmer2_db.sendCommand(OFF)
	dg_badezimmer2_wb.sendCommand(OFF)
	dg_schlafzimmer_kleiderschrank.sendCommand(OFF)
	
	if (now.getHourOfDay() <= 19 && now.getHourOfDay() >= 8) {	
	Thread::sleep(2500)
	echo_dot_schlafzimmer_TTS_Volume.sendCommand(60)
	echo_dot_schlafzimmer_TTS.sendCommand('Gute Nacht Kerstin und Sascha')
	Thread::sleep(2500)
	echo_dot_schlafzimmer_TTS_Volume.sendCommand(30)
	}
	
	
	}
	else {
	
	dg_schlafzimmerrechts_rol_so.sendCommand(OFF)
	dg_schlafzimmerlinks_rol_so.sendCommand(OFF)
	dg_kinderzimmer2_rol_so.sendCommand(OFF)
	dg_badezimmer2_rol_so.sendCommand(OFF)
	dg_schlafzimmerrechts_rol.sendCommand(0)
	dg_schlafzimmerlinks_rol.sendCommand(0)
	dg_kinderzimmer2_rol.sendCommand(0)
	dg_badezimmer2_rol.sendCommand(0)

	if (ws_daemmerungswert.state < 100) {


	}
	
	if (now.getHourOfDay() <= 19 && now.getHourOfDay() >= 8) {	
	Thread::sleep(2500)
	echo_dot_schlafzimmer_TTS_Volume.sendCommand(60)
	echo_dot_schlafzimmer_TTS.sendCommand('Guten Morgen Kerstin und Sascha')
	Thread::sleep(2500)
	echo_dot_schlafzimmer_TTS_Volume.sendCommand(30)
	}
	
	}
	
end

rule "Kochen"
when
    Item all_kochen received command or
	Item all_kochen_prion_schalter received command
then
     if (receivedCommand==ON) {
	
		if (ws_helligkeit_ost.state < 100) {
		
		
		
		}
		
		eg_kueche_arbeitsplatte.sendCommand(ON)
		eg_kueche_haengeschraenke.sendCommand(ON)
	if (now.getHourOfDay() <= 19 && now.getHourOfDay() >= 8) {	
	Thread::sleep(2500)
	echo_wohnzimmer_TTS_Volume.sendCommand(60)
	echo_wohnzimmer_TTS.sendCommand('Viel Spaß beim Kochen')
	Thread::sleep(2500)
	echo_wohnzimmer_TTS_Volume.sendCommand(30)
	}
		}
	else {

	eg_kueche_db.sendCommand(OFF)
	eg_kueche_arbeitsplatte.sendCommand(OFF)
	eg_kueche_haengeschraenke.sendCommand(OFF)

	}
end

rule "Kind schlafen"
when
    Item all_kind_schlafen received command or
	Item all_kind_schlafen_prion_schalter received command
then
   if (receivedCommand==ON) {
	    
	dg_schlafzimmerrechts_rol.sendCommand(100)
	dg_schlafzimmerlinks_rol.sendCommand(100)
	dg_kinderzimmer2_rol.sendCommand(100)
	dg_badezimmer2_rol.sendCommand(100)
	dg_schlafzimmerlinks_rol_so.sendCommand(ON)
	dg_schlafzimmerrechts_rol_so.sendCommand(ON)
	dg_kinderzimmer2_rol_so.sendCommand(ON)
	dg_badezimmer2_rol_so.sendCommand(ON)
	if (now.getHourOfDay() <= 19 && now.getHourOfDay() >= 8) {
	Thread::sleep(2500)
	echo_dot_schlafzimmer_TTS_Volume.sendCommand(60)
	echo_dot_schlafzimmer_TTS.sendCommand('Schlaf gut kleiner Hendrik')
	Thread::sleep(2500)
	echo_dot_schlafzimmer_TTS_Volume.sendCommand(30)
}
		}
		
	else {

	dg_schlafzimmerlinks_rol_so.sendCommand(OFF)
	dg_schlafzimmerrechts_rol_so.sendCommand(OFF)
	dg_kinderzimmer2_rol_so.sendCommand(OFF)
	dg_badezimmer2_rol_so.sendCommand(OFF)
	dg_schlafzimmerrechts_rol.sendCommand(0)
	dg_schlafzimmerlinks_rol.sendCommand(0)
	dg_kinderzimmer2_rol.sendCommand(0)
	dg_badezimmer2_rol.sendCommand(0)


	}
end

rule "Hendrik schlafen"
when
    Item all_hendrik_schlafen received command or
	Item all_hendrik_schlafen_prion_schalter received command
then
   if (receivedCommand==ON) {
	
	if (ws_daemmerungswert.state < 10) {

	og_kinderzimmer_rol.sendCommand(100)
	og_kinderzimmer_rol_so.sendCommand(ON)
	if (now.getHourOfDay() <= 19 && now.getHourOfDay() >= 8) {
	Thread::sleep(2500)
	echo_dot_kinderzimmer_TTS_Volume.sendCommand(60)
	echo_dot_kinderzimmer_TTS.sendCommand('Schlaf gut großer Hendrik')
	Thread::sleep(2500)
	echo_dot_kinderzimmer_TTS_Volume.sendCommand(30)
	
	}
	}
	
	if (ws_daemmerungswert.state > 10) {

	og_kinderzimmer_rol.sendCommand(100)
	og_kinderzimmer_rol_so.sendCommand(ON)
	if (now.getHourOfDay() <= 19 && now.getHourOfDay() >= 8) {
	Thread::sleep(2500)
	echo_dot_kinderzimmer_TTS_Volume.sendCommand(60)
	echo_dot_kinderzimmer_TTS.sendCommand('Schlaf gut großer Hendrik')
	Thread::sleep(2500)
	echo_dot_kinderzimmer_TTS_Volume.sendCommand(30)
	
	}
	}

}
			
	else {
	og_kinderzimmer_rol_so.sendCommand(OFF)
	og_kinderzimmer_rol.sendCommand(0)
	

	}
end

rule "Weihnachtsbeleuchtung Ende November bis Mitte Januar"
when

Item ws_daemmerung changed to OPEN or
Item ws_daemmerung changed to CLOSED

then

if (ws_daemmerung.state==OPEN) { 

if((now.getMonthOfYear == 11 && now.getDayOfMonth > 26) || (now.getMonthOfYear == 12) || (now.getMonthOfYear == 1 && now.getDayOfMonth < 16)) {

au_terrasse_st.sendCommand(ON)
au_eingang_st.sendCommand(ON)

}
}
else {

if (ws_daemmerung.state==CLOSED) { 

if((now.getMonthOfYear == 11 && now.getDayOfMonth > 26) || (now.getMonthOfYear == 12) || (now.getMonthOfYear == 1 && now.getDayOfMonth < 16)) {

au_terrasse_st.sendCommand(OFF)
au_eingang_st.sendCommand(OFF)

}
}
}

end 

rule "Sascha Homeoffice"
when

    Item all_sascha_homeoffice received command or
	Item all_sascha_homeoffice_prion_schalter received command
then

   if (receivedCommand==ON) {
	  
	pc_arbeitszimmer_sascha.sendCommand(ON)
	og_arbeitszimmersascha_rol.sendCommand(0)
	og_arbeitszimmersascha_schreibtisch(ON)
	
	if (now.getHourOfDay() <= 19 && now.getHourOfDay() >= 8) {
	Thread::sleep(2500)
	echo_dot_arbeitszimmer_sascha_TTS_Volume.sendCommand(60)
	echo_dot_arbeitszimmer_sascha_TTS.sendCommand('Ich wünsche dir einen angenehmen Homeoffice Tag')
	Thread::sleep(2500)
	echo_dot_arbeitszimmer_sascha_TTS_Volume.sendCommand(30)
	}
}
		
	else {

	pc_arbeitszimmer_sascha.sendCommand(OFF)
	og_arbeitszimmersascha_schreibtisch(OFF)
	
	if (now.getHourOfDay() <= 19 && now.getHourOfDay() >= 8) {
	Thread::sleep(2500)
	echo_dot_arbeitszimmer_sascha_TTS_Volume.sendCommand(60)
	echo_dot_arbeitszimmer_sascha_TTS.sendCommand('Ich wünsche dir einen schönen Feierabend')
	Thread::sleep(2500)
	echo_dot_arbeitszimmer_sascha_TTS_Volume.sendCommand(30)
}
	}
end

rule "Weihnachtsbeleuchtung"
when

    Item all_weihnachtsbeleuchtung received command or
	Item all_weihnachtsbeleuchtung_prion_schalter received command
then

   if (receivedCommand==ON) {
	  
	smartplug1.sendCommand(ON)
	smartplug2.sendCommand(ON)
	smartplug3.sendCommand(ON)
	eg_wohnzimmer_stehlampe.sendCommand(ON)
	
}
		
	else {

	smartplug1.sendCommand(OFF)
	smartplug2.sendCommand(OFF)
	smartplug3.sendCommand(OFF)
	eg_wohnzimmer_stehlampe.sendCommand(OFF)
	
	}
end




bastler
Beiträge: 121
Registriert: 7. Jan 2020 19:36
Answers: 2

Re: Fehler in Rule

Beitrag von bastler »

es wäre sehr hilfreich wenn du die rules nacheinander einzeln probierst (also die anderen immer mit "//" deaktivierst) damit man weiß von welchem rule der fehler kommt.

was mir auffällt ist dass du oft zb bei received command==on viele items auf ON schaltest, und die gleichen items bei received command=OFF dann OFF schaltest. das könntest du vereinfachen indem du schreibst:
z.b.

Code: Alles auswählen

then
    dg_schlafzimmerrechts_rol_so.sendCommand(receivedCommand)
    ...

SaschaQ
Beiträge: 202
Registriert: 2. Mär 2020 13:50
Answers: 0

Re: Fehler in Rule

Beitrag von SaschaQ »

Vielen Dank- Das werde ich umsetzen.

Gibt es jemanden er weiß woher die Expression Fehler kommen.
Die Rules laufen sauber aber immer beim Neustarten von Openhab kommen die beiden Fehler.

bastler
Beiträge: 121
Registriert: 7. Jan 2020 19:36
Answers: 2

Re: Fehler in Rule

Beitrag von bastler »

... falls keiner sonst helfen kann: wie gesagt probier doch immer bis auf ein rule die anderen auszukommentieren. weil beim speichern der rule wird die neu geladen und da muß der fehler auch kommen. so kannst du sehen wann der fehler nicht mehr kommt und weißt schon mal welches der rules die probleme macht

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

Re: Fehler in Rule

Beitrag von udo1toni »

Also, die Meldung ist auf Level INFO, damit handelt es sich streng genommen nicht um einen Fehler, sondern nur eine Information. Die darauf folgenden zwei Meldungen besagen, dass Du einen Befehl nutzt, der keinerlei Wirkung entfaltet und somit unnötig ist. dabei handelt es sich um zwei if Statements mit leerem Body. Ob das nun ein Fehler ist (Du wolltest eigentlich an diesen Stellen etwas erledigen lassen) oder nicht (Du hast an dieser Stelle schon mal etwas vorbereitet), kannst nur Du wissen.

Grundsätzlich solltest Du darauf achten, dass die Indentation (Einrückung) korrekt ist. Das spielt für die Ausführung zwar keine Rolle, aber es hilft, die Übersicht zu behalten.

An einigen Stellen ist Dein Code unnötig kompliziert. z.B.

Code: Alles auswählen

rule "Weihnachtsbeleuchtung"
when

    Item all_weihnachtsbeleuchtung received command or
	Item all_weihnachtsbeleuchtung_prion_schalter received command
then

   if (receivedCommand==ON) {
	  
	smartplug1.sendCommand(ON)
	smartplug2.sendCommand(ON)
	smartplug3.sendCommand(ON)
	eg_wohnzimmer_stehlampe.sendCommand(ON)
	
}
		
	else {

	smartplug1.sendCommand(OFF)
	smartplug2.sendCommand(OFF)
	smartplug3.sendCommand(OFF)
	eg_wohnzimmer_stehlampe.sendCommand(OFF)
	
	}
end
geht einfacher so:

Code: Alles auswählen

rule "Weihnachtsbeleuchtung"
when
    Item all_weihnachtsbeleuchtung received command or
    Item all_weihnachtsbeleuchtung_prion_schalter received command
then
    smartplug1.sendCommand(receivedCommand)
    smartplug2.sendCommand(receivedCommand)
    smartplug3.sendCommand(receivedCommand)
    eg_wohnzimmer_stehlampe.sendCommand(receivedCommand)
end
und diese Rule

Code: Alles auswählen

rule "Weihnachtsbeleuchtung Ende November bis Mitte Januar"
when

Item ws_daemmerung changed to OPEN or
Item ws_daemmerung changed to CLOSED

then

if (ws_daemmerung.state==OPEN) { 

if((now.getMonthOfYear == 11 && now.getDayOfMonth > 26) || (now.getMonthOfYear == 12) || (now.getMonthOfYear == 1 && now.getDayOfMonth < 16)) {

au_terrasse_st.sendCommand(ON)
au_eingang_st.sendCommand(ON)

}
}
else {

if (ws_daemmerung.state==CLOSED) { 

if((now.getMonthOfYear == 11 && now.getDayOfMonth > 26) || (now.getMonthOfYear == 12) || (now.getMonthOfYear == 1 && now.getDayOfMonth < 16)) {

au_terrasse_st.sendCommand(OFF)
au_eingang_st.sendCommand(OFF)

}
}
}

end 
lässt sich durch leichte Umstellung und Änderung der Bedingungen ebenfalls vereinfachen:

Code: Alles auswählen

rule "Weihnachtsbeleuchtung Ende November bis Mitte Januar"
when
    Item ws_daemmerung changed
then
    if((now.getDayOfYear > now.withDate(now.year,11,26).getDayOfYear || now.getDayOfYear < 16)) {
        if(ws_daemmerung.state == OPEN) { 
            au_terrasse_st.sendCommand(ON)
            au_eingang_st.sendCommand(ON)
        } else {
            au_terrasse_st.sendCommand(OFF)
            au_eingang_st.sendCommand(OFF)
        }
    }
end 
Leider reicht es nicht, getDayOfYear gegen 330 zu testen, da wir ja auch Schaltjahre haben. Das Konstrukt für das Datum sieht etwas kompliziert aus, ist aber sehr einfach, insbesondere handelt es sich um nur zwei veroderte simple Vergleiche. Durch das Umdrehen der Vergleiche spare ich auch noch einen Vergleich.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

SaschaQ
Beiträge: 202
Registriert: 2. Mär 2020 13:50
Answers: 0

Re: Fehler in Rule

Beitrag von SaschaQ »

Vielen lieben Dank

SaschaQ
Beiträge: 202
Registriert: 2. Mär 2020 13:50
Answers: 0

Re: Fehler in Rule

Beitrag von SaschaQ »

Halllo Udo1toni,

ich habe gerade mal die beiden Rules angepasst.

leider noch immer der fehler

Code: Alles auswählen


[el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'Alltag.rules', using it anyway:
This expression is not allowed in this context, since it doesn't cause any side effects.
This expression is not allowed in this context, since it doesn't cause any side effects.

noch eine Idee?

SaschaQ
Beiträge: 202
Registriert: 2. Mär 2020 13:50
Answers: 0

Re: Fehler in Rule

Beitrag von SaschaQ »

Noch jemand eine Idee woran das liegen kann?

bastler
Beiträge: 121
Registriert: 7. Jan 2020 19:36
Answers: 2

Re: Fehler in Rule

Beitrag von bastler »

wie schon gesagt, wenn du die rules mal teilen könntest damit man wenigstens weiß von welchem der rules das problem kommt (und dieses dann nochmal postest) dann ist es auch leichter zu helfen.

Boris099
Beiträge: 383
Registriert: 19. Feb 2020 20:51
Answers: 3
Wohnort: Saarbrücken

Re: Fehler in Rule

Beitrag von Boris099 »

Hallo, mal ne kleine Verständnisfrage

mit diesem rule, und dem received command sendet man einfach das erhaltene Signal also ON oder OFF?
So erspart man sich separate Anweisungen für ON oder OFF mit else?
Habe ich das richtig verstanden?

Code: Alles auswählen

rule "Weihnachtsbeleuchtung"
when
    Item all_weihnachtsbeleuchtung received command or
    Item all_weihnachtsbeleuchtung_prion_schalter received command
then
    smartplug1.sendCommand(receivedCommand)
    smartplug2.sendCommand(receivedCommand)
    smartplug3.sendCommand(receivedCommand)
    eg_wohnzimmer_stehlampe.sendCommand(receivedCommand)
end
Raspberry 4, Rev.1.2b, 4GB, Openhab 2.5.12 (OH3 kommt im Winter dran:-))

Antworten