Errors after upgrade to 2.2

In this case please post the code used and the error observed,.
I’m using the holiday script (probably with slight differences to your code) and I do not see any errors.

This is the code of the holiday script:

Mostly original only == changed to === and the last lines with the postUpdate.

//https://github.com/openhab/openhab1-addons/wiki/Samples-Rules#how-to-calculate-public-holidays
var int year = now.getYear

var int a = year % 19
var int b = year / 100
var int c = year % 100
var int d = b / 4;
var int e = b % 4;
var int f = (b + 8) / 25;
var int g = (b - f + 1) / 3;
var int h = (19 * a + b - d - g + 15) % 30;
var int i = c / 4;
var int k = c % 4;
var int L = (32 + 2 * e + 2 * i - h - k) % 7;
var int m = (a + 11 * h + 22 * L) / 451;

var int month = (h + L - 7 * m + 114) / 31;
var int day = ((h + L - 7 * m + 114) % 31) + 1;

var boolean holiday = false
var String holidayName = null
var org.joda.time.DateTime easterSunday = parse(year+"-"+month+"-"+day)
var org.joda.time.DateTime stAdvent = parse(year+"-12-25").minusDays(((parse(year+"-12-25").getDayOfWeek) + 21))

var int dayOfYear = now.getDayOfYear
// bundesweiter Feiertag
if (dayOfYear==parse(year+"-01-01").getDayOfYear) {
    holidayName = "new_years_day" // Neujahr
    holiday = true
}
// Baden-Württemberg, Bayern, Sachsen-Anhalt
else if (dayOfYear==parse(year+"-01-06").getDayOfYear) {
    holidayName = "holy_trinity"// Heilige 3 Könige
    holiday = ture 
}
// Carnival ;-)
else if (dayOfYear==easterSunday.getDayOfYear-48) {
    holidayName = "carnival_monday" // Rosenmontag
    holiday = false
}
// bundesweiter Feiertag
else if (dayOfYear==easterSunday.getDayOfYear-2) {
    holidayName = "good_friday" // Karfreitag
    holiday = true
}
// Brandenburg
else if (dayOfYear==easterSunday.getDayOfYear) {
    holidayName = "easter_sunday" // Ostersonntag
    holiday = true
}
// bundesweiter Feiertag
else if (dayOfYear==easterSunday.getDayOfYear+1) {
    holidayName = "easter_monday" // Ostermontag
    holiday = true
}
// bundesweiter Feiertag
else if (dayOfYear==parse(year+"-05-01").getDayOfYear) {
    holidayName = "1st_may"// Tag der Arbeit
    holiday = true 
}
// bundesweiter Feiertag
else if (dayOfYear==easterSunday.getDayOfYear+39) {
    holidayName = "ascension_day" // Christi Himmelfahrt
    holiday = true
}
// Brandenburg
else if (dayOfYear==easterSunday.getDayOfYear+49) {
    holidayName = "whit_sunday" // Pfingstsonntag
    holiday = true
}
// bundesweiter Feiertag
else if (dayOfYear==easterSunday.getDayOfYear+50) {
    holidayName = "whit_monday" // Pfingstmontag
    holiday = true
}
// Baden-Württemberg, Bayern, Hessen, NRW, Rheinland-Pfalz, Saarland sowie regional in Sachsen, Thüringen
else if (dayOfYear==easterSunday.getDayOfYear+60) {
    holidayName = "corpus_christi" // Frohnleichnahm
    holiday = true
}
// Saarland sowie regional in Bayern
else if (dayOfYear==parse(year+"-08-15").getDayOfYear) {
    holidayName = "assumption_day" // Mariä Himmelfahrt
    holiday = false
}
// bundesweiter Feiertag
else if (dayOfYear==parse(year+"-10-03").getDayOfYear) {
    holidayName = "reunification" // Tag der deutschen Einheit
    holiday = true
}
// Brandenburg, Mecklenburg-Vorpommern, Sachsen, Sachsen-Anhalt, Thüringen
else if (dayOfYear==parse(year+"-10-31").getDayOfYear) {
    holidayName = "reformation_day" // Reformationstag
    holiday = false
}
// Baden-Württemberg, Bayern, NRW, Rheinland-Pfalz, Saarland
else if (dayOfYear==parse(year+"-11-01").getDayOfYear) {
    holidayName = "all_saints_day" // Allerheiligen
    holiday = true
}
// religiöser Tag
else if (dayOfYear==stAdvent.getDayOfYear-14) {
    holidayName = "remembrance_day" // Volkstrauertag
    holiday = false
}
// religiöser Tag
else if (dayOfYear==stAdvent.getDayOfYear-7) {
    holidayName = "sunday_in_commemoration_of_the_dead" // Totensonntag
    holiday = false
}
// Sachsen
else if (dayOfYear==stAdvent.getDayOfYear-11) {
    holidayName = "day_of_repentance" // Buß- und Bettag
    holiday = false
}
// kann auch der 4te Advent sein
else if (dayOfYear==parse(year+"-12-24").getDayOfYear) {
    holidayName = "christmas_eve" // Heiligabend
    holiday = false
}
// bundesweiter Feiertag
else if (dayOfYear==parse(year+"-12-25").getDayOfYear) {
    holidayName = "1st_christmas_day" // 1. Weihnachtstag
    holiday = true
}
// bundesweiter Feiertag
else if (dayOfYear==parse(year+"-12-26").getDayOfYear) {
    holidayName = "2nd_christmas_day" // 2. Weihnachtstag
    holiday = true
}
// Silvester
else if (dayOfYear==parse(year+"-12-31").getDayOfYear) {
    holidayName = "new_years_eve" // Silvester
    holiday = false
}
if (holidayName!==null) {
    SpecialDay.postUpdate(holidayName)
}
if (holiday) {
    Holiday.postUpdate(ON)
}
else {
    Holiday.postUpdate(OFF)
}

And this is the error message in the log on OH startup. Hopefully this will help.

But this error messages do not come on every startup, only most of the startups.

2017-12-26 15:56:22.398 [ERROR] [xbase.resource.BatchLinkableResource] - resolution of uriFragment '|::0.0.1.2::0::/1' failed.
java.lang.IllegalStateException: SpecialDay uses unsupported uri fragment tmp_holidays.script#/1/@members.47
    at org.eclipse.xtext.xbase.typesystem.internal.ScopeProviderAccess.getCandidateDescriptions(ScopeProviderAccess.java:158) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.getLinkingCandidates(AbstractTypeComputationState.java:409) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer._computeTypes(XbaseTypeComputer.java:1086) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer.computeTypes(XbaseTypeComputer.java:100) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.doComputeTypes(AbstractTypeComputationState.java:121) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.computeTypes(AbstractTypeComputationState.java:109) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.createResolvedLink(AbstractTypeComputationState.java:429) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.ExpressionTypeComputationState.createResolvedLink(ExpressionTypeComputationState.java:119) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.ScopeProviderAccess.getKnownFeature(ScopeProviderAccess.java:80) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.getLinkingCandidates(AbstractTypeComputationState.java:385) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer._computeTypes(XbaseTypeComputer.java:1086) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer.computeTypes(XbaseTypeComputer.java:100) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.doComputeTypes(AbstractTypeComputationState.java:121) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.ExpressionTypeComputationState.doComputeTypes(ExpressionTypeComputationState.java:59) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.computeTypes(AbstractTypeComputationState.java:109) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer._computeTypes(XbaseTypeComputer.java:473) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer.computeTypes(XbaseTypeComputer.java:106) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.doComputeTypes(AbstractTypeComputationState.java:121) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.ExpressionTypeComputationState.doComputeTypes(ExpressionTypeComputationState.java:59) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.computeTypes(AbstractTypeComputationState.java:109) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer._computeTypes(XbaseTypeComputer.java:247) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.computation.XbaseTypeComputer.computeTypes(XbaseTypeComputer.java:120) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
    at org.eclipse.xtext.xbase.typesystem.internal.AbstractTypeComputationState.doComputeTypes(AbstractTypeComputationState.java:121) 

snipped, are a lot of more lines.

OK, the only thing I can say is that I’m not seeing this error. Sorry no help from my side (at least at the moment).

The problem is this line:

SpecialDay.postUpdate(holidayName)

If I comment this out there is no error. The question is, how is the type convertion correct.

And from here:

I comes only on system startup, if I run the script by other tirgger there is no problem.

My guess is, that it is caused by something loaded later during start-up while script is already running.

maybe, but if I change the line
from
SpecialDay.postUpdate(holidayName)
to
SpecialDay.postUpdate(“I dont know”)
no error.

Looks like a type conversation problem.

holidayname is a String already, so I see no conversion.

Ok, so you are right

I will ignore it

@DaAndy and @opus

Thank you for the information about changing the Holiday Script.

I have another question:
How can I get the state of the switch “Holiday” in my rules to trigger my roller shutter (for example)?
Thank you.

Joe

How about checking the “Holiday.state”?.
If you are not sure what exact output to expect, use a logInfo to print the actual .state.

With this rule I (try to) start the holiday.script:

rule "Public Holiday" 		when Time cron "0 0 0 * * ?" or System started
    						then 	callScript("holiday") 	
						end

and this is my holiday.script (with changed === and postupdate):

var int year = now.getYear

var int a = year % 19
var int b = year / 100
var int c = year % 100
var int d = b / 4;
var int e = b % 4;
var int f = (b + 8) / 25;
var int g = (b - f + 1) / 3;
var int h = (19 * a + b - d - g + 15) % 30;
var int i = c / 4;
var int k = c % 4;
var int L = (32 + 2 * e + 2 * i - h - k) % 7;
var int m = (a + 11 * h + 22 * L) / 451;

var int month = (h + L - 7 * m + 114) / 31;
var int day   = ((h + L - 7 * m + 114) % 31) + 1;

var boolean holiday = false
var String  holidayName = null
var org.joda.time.DateTime easterSunday = parse(year+"-"+month+"-"+day)
var org.joda.time.DateTime stAdvent = parse(year+"-12-25").minusDays(((parse(year+"-12-25").getDayOfWeek) + 21))

var int dayOfYear = now.getDayOfYear
// bundesweiter Feiertag
if (dayOfYear===parse(year+"-01-01").getDayOfYear) {
    holidayName = "new_years_day" // Neujahr
    holiday = true
}
// Baden-Württemberg, Bayern, Sachsen-Anhalt
else if (dayOfYear===parse(year+"-01-06").getDayOfYear) {
    holidayName = "holy_trinity"// Heilige 3 Könige
    holiday = false 
}
// Carnival ;-)
else if (dayOfYear===easterSunday.getDayOfYear-48) {
    holidayName = "carnival_monday" // Rosenmontag
    holiday = false
}
// bundesweiter Feiertag
else if (dayOfYear===easterSunday.getDayOfYear-2) {
    holidayName = "good_friday" // Karfreitag
    holiday = true
}
// Brandenburg
else if (dayOfYear===easterSunday.getDayOfYear) {
    holidayName = "easter_sunday" // Ostersonntag
    holiday = false
}
// bundesweiter Feiertag
else if (dayOfYear===easterSunday.getDayOfYear+1) {
    holidayName = "easter_monday" // Ostermontag
    holiday = true
}
// bundesweiter Feiertag
else if (dayOfYear===parse(year+"-05-01").getDayOfYear) {
    holidayName = "1st_may"// Tag der Arbeit
    holiday = true 
}
// bundesweiter Feiertag
else if (dayOfYear===easterSunday.getDayOfYear+39) {
    holidayName = "ascension_day" // Christi Himmelfahrt
    holiday = true
}
// Brandenburg
else if (dayOfYear===easterSunday.getDayOfYear+49) {
    holidayName = "whit_sunday" // Pfingstsonntag
    holiday = false
}
// bundesweiter Feiertag
else if (dayOfYear===easterSunday.getDayOfYear+50) {
    holidayName = "whit_monday" // Pfingstmontag
    holiday = true
}
// Baden-Württemberg, Bayern, Hessen, NRW, Rheinland-Pfalz, Saarland sowie regional in Sachsen, Thüringen
else if (dayOfYear===easterSunday.getDayOfYear+60) {
    holidayName = "corpus_christi" // Frohnleichnahm
    holiday = false
}
// Saarland sowie regional in Bayern
else if (dayOfYear===parse(year+"-08-15").getDayOfYear) {
    holidayName = "assumption_day" // Mariä Himmelfahrt
    holiday = false
}
// bundesweiter Feiertag
else if (dayOfYear===parse(year+"-10-03").getDayOfYear) {
    holidayName = "reunification" // Tag der deutschen Einheit
    holiday = true
}
// Brandenburg, Mecklenburg-Vorpommern, Sachsen, Sachsen-Anhalt, Thüringen
else if (dayOfYear===parse(year+"-10-31").getDayOfYear) {
    holidayName = "reformation_day" // Reformationstag
    holiday = false
}
// Baden-Württemberg, Bayern, NRW, Rheinland-Pfalz, Saarland
else if (dayOfYear===parse(year+"-11-01").getDayOfYear) {
    holidayName = "all_saints_day" // Allerheiligen
    holiday = false
}
// religiöser Tag
else if (dayOfYear===stAdvent.getDayOfYear-14) {
    holidayName = "remembrance_day" // Volkstrauertag
    holiday = false
}
// religiöser Tag
else if (dayOfYear===stAdvent.getDayOfYear-7) {
    holidayName = "sunday_in_commemoration_of_the_dead" // Totensonntag
    holiday = false
}
// Sachsen
else if (dayOfYear===stAdvent.getDayOfYear-11) {
    holidayName = "day_of_repentance" // Buß- und Bettag
    holiday = false
}
// kann auch der 4te Advent sein
else if (dayOfYear===parse(year+"-12-24").getDayOfYear) {
    holidayName = "christmas_eve" // Heiligabend
    holiday = false
}
// bundesweiter Feiertag
else if (dayOfYear===parse(year+"-12-25").getDayOfYear) {
    holidayName = "1st_christmas_day" // 1. Weihnachtstag
    holiday = true
}
// bundesweiter Feiertag
else if (dayOfYear===parse(year+"-12-26").getDayOfYear) {
    holidayName = "2nd_christmas_day" // 2. Weihnachtstag
    holiday = true
}
// Silvester
else if (dayOfYear===parse(year+"-12-31").getDayOfYear) {
    holidayName = "new_years_eve" // Silvester
    holiday = false
}

if (holidayName!==null) {
    HolidayTest.postUpdate(holidayName)
}
if (holiday) {
    postUpdate(Holiday,ON)
}
else {
    postUpdate(Holiday,OFF)
}

The script doesn’t run.
There is no entry in the event.log.
Any ideas?
Thank you.

Joe

Hey guys,

thank you for all your answers and sorry for my late reply - I have been on christmas vacation and had no time to work on smart home stuff.

After several restart I do see that most errors just come up sometimes. Maybe the loading of things & rules changed with 2.2 - I think it is way faster. Also I had the correct holiday-date in my sitemap, so the script & rule are working in general. But all these errors make me not feel that good - I want to rely on openHAB that is why I just updated at stable release.

@ubuntu_Joe Where did you save the script? How is it called there? What is the output of the string “holiday”?


Problem number 3 bothers me most. Guess 4 is not good at all, but I already got all my items in openHAB, so yeah… does not bother me right now.

Greetings Andy

The script has to be in the scripts folder. The script is called in my case by a rule that is triggered once a day by a cron statement.
Syntax:

callScript (“Holiday”)

Thank you for this hints.
Meanwhile I have changed the openhab Version back to 2.1,
because no rule has been triggered by the system.
With openhab 2.1 everything / ervery rule is working.

Greeting
Joe

No rule triggered? It would be of interest what the log would have said. So we can only assume that OH2.2 rejected more syntax mishaps then 2.1.