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
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.