Seite 1 von 1

This expression is not allowed...

Verfasst: 12. Apr 2021 08:58
von domjo75
Guten Morgen,

ich habe heute morgen meinen Alexa Family Report angepasst, weil mir Geburtstage angesagt wurden, die noch weit in der Zukunft liegen.

Kurz zum Aufbau.
Ich baue mir über Ephemeris die Termine zusammen und nutze sie dann in der Rule

Code: Alles auswählen

val long untBirth = Ephemeris.getDaysUntil(nextBirth, '/etc/openhab/services/anniversaries.xml')
Anschliessen bastel ich mir den Text zusammen den die Alexa uns vorbetet. Das klappt soweit auch ganz prima.

Code: Alles auswählen

	aText += "<amazon:effect name='whispered'>"
	if (untBirth >= 2) {aText += "Übrigens, in " + untBirth + " Tagen ist " + nextBirth "."}
	if (untBirth == 1) {aText += "Übrigens, morgen ist " + nextBirth "."}
	if (untBirth == 0) {aText += "Heute ist " + nextBirth ". Juhuuuuu"}
	aText += "</amazon:effect>"
Allerdings ist unser nächster Geburtstag erst in 165 Tagen. Das möchten wir noch nicht hören. Daher habe ich die Passage wie folgt erweitert.

Code: Alles auswählen

	if (untBirth <= 30) {
		aText += "<amazon:effect name='whispered'>"
		if (untBirth >= 2) {aText += "Übrigens, in " + untBirth + " Tagen ist " + nextBirth "."}
		if (untBirth == 1) {aText += "Übrigens, morgen ist " + nextBirth "."}
		if (untBirth == 0) {aText += "Heute ist " + nextBirth ". Juhuuuuu"}
		aText += "</amazon:effect>"
	}
daraufhin bekomme ich diese INFO im Log.

Code: Alles auswählen

2021-04-12 08:46:03.213 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'AlexaFamilyReport.rules', using it anyway:

This expression is not allowed in this context, since it doesn't cause any side effects.
Oben drüber schreibt er mir im LOG diese INFO. Hier sieht es so aus, als ob

Code: Alles auswählen

if (untBirth <= 30)
komplett leer ist.

Code: Alles auswählen

	if 

	aText += "<amazon:effect name='whispered'>"

	if (untBirth >= 2) {aText += "Übrigens, in " + untBirth + " Tagen ist " + nextBirth "."}

	if (untBirth == 1) {aText += "Übrigens, morgen ist " + nextBirth "."}

	if (untBirth == 0) {aText += "Heute ist " + nextBirth ". Juhuuuuu"}

	aText += "</amazon:effect>"
Bestimmt kann man meinen Code schöner gestalten. Grundsätzlich müsste das doch aber funktionieren ?!

Beste Grüße

Re: This expression is not allowed...

Verfasst: 12. Apr 2021 13:23
von udo1toni
Das ist ja nur ein Teil der Rule, die Fehlermeldung kann sich auch auf einen anderen Teil der Rule beziehen (das wäre dann ein Seiteneffekt, der nur durch die Codeänderung zum Tragen kommt). Eventuell könntest Du die Bedingung so definieren:

Code: Alles auswählen

	aText += "<amazon:effect name='whispered'>"
	if (untBirth > 1 && untBirth < 31) {aText += "Übrigens, in " + untBirth + " Tagen ist " + nextBirth "."}
	if (untBirth == 1) {aText += "Übrigens, morgen ist " + nextBirth "."}
	if (untBirth == 0) {aText += "Heute ist " + nextBirth ". Juhuuuuu"}
	aText += "</amazon:effect>"