-
-
Notifications
You must be signed in to change notification settings - Fork 430
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rules var number can get string value #4443
Comments
This isn't a bug. This is how many typeless scripting languages work. The problem is Rules DSL tries to be both typless and typed at the same time (because Java is strongly typed). Rules DSL usually determines the type of a variable at runtime. In fact, it's better to let it determine the type at runtime. When you force the type, it can cause all sorts of problems. In a best case scenario, the type of the variable is simply ignored. In a worst case scenario (e.g. primitives as types) this can add minutes to the amount of time it take to parse and load a Rules DSL file. So a best practice in Rules DSL would be
Only specify the type when you absolutely have to. The obsurd way Rules DSL handles types is one of the reasons I no longer recommend development using it. Any of the other options behave in more logical ways and are now just as easy to use as Rules DSL ever was. This particular feature comes from the upstram Xtend library as Rules DSL is built on Xtend and this behavior is implemented by Xtend. Fixing it will require a change there. OH can't do much about it. But because this was a deliberate design decision and not a bug or regression. You don't say what "old version of openhab" you are referring to or what you mean by "work fine" but one of the breaking changes between OH 2.5 and 3.0 was dropping the Joda time library in favor of the built in java.time library. These two are similar but not identical. IIRC getDayOfWeek() back then returned a number between 1 and 7. But java.time.ZonedDateTime returns an enum: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/ZonedDateTime.html#getDayOfWeek() And looking further you will see that the enum has a So use
If you are coming from an OH 2 version, this is one of the many documented breaking changes that you need to account for manually. If you are comming from OH 3, I am skeptical that this ever worked as described because ZonedDateTime's getDayOfWeek() has not changed between Java 11 (OH 3) and Java 17 (OH 4). It's always returned an enum of the days of the week. |
Thanks you for your reply. It is a old rule. I need change for other ruls language |
Expected Behavior
in a .rules file if i write
var Number currDay = now.getDayOfWeek()
currDay need take 1 to 7 or an error if getDayOfWeek() return a string
Current Behavior
in a .rules file if i write
var Number currDay = now.getDayOfWeek()
Number take value "SATURDAY"
Possible Solution
Number no need accepted not number value
Steps to Reproduce (for Bugs)
write in a .rules file
`rule "test2"
when
Member of gTimepicker changed or
Time cron "* * * 1/1 * ? *"
then
var Number currDay = now.getDayOfWeek()
logError("test2", "currDay "+currDay)
end`
and show in log
2024-11-09 09:33:52.614 [ERROR] [org.openhab.core.model.script.test2 ] - currDay SATURDAY
Context
the rule work fine with old version of openhab
Your Environment
openHAB 4.2.2
debian bookworm
openjdk 17.0.13 2024-10-15
The text was updated successfully, but these errors were encountered: