Thanks! It helps a lot - as long as VScode can communicate with the openHAB language server / REST API.
Other people also struggling with getting a connection:
https://community.openhab.org/t/visual-studio-code-howto-connect-to-rest-api/36900/23
Ok, i got it working now. I had ‘http’ included in the hostname. Now I see lots of errors and warnings, so back to work!
I am looking, exactly for the same - window open -> rollershutter stays open.
I used the code above, but it does not really went well. If I trigger this rule, I always get the message in log:
[ERROR] [untime.internal.engine.RuleEngineImpl] - Rule ‘Rolladen Wohnzimmer schliessen’: 3
I have more or less the same setup, except for items:
Group:Rollershutter:OR(UP,DOWN) gH_Rolladen_wz_switch “Rolladen Wohnzimmer”
which includes all items which are rollershutter.
The code is modified as follow:
rule “Rolladen Wohnzimmer schliessen”
when
Item EG_wz_switch_3_long received update OFF
then
gH_Rolladen_wz_switch.members.forEach[rs|
val nameParts = rs.name.split("")
val windowName = nameParts.get(0) + "" + nameParts.get(1) + “fk” + nameParts.get(3)
logInfo (“Fensterkontakt der offen is:”, +windowName)
if(gH_Contact_global.members.filter [fk | fk.name == windowName].head.state != OPEN){
postUpdate(rs,DOWN)
}]
end
I think, it is somehow in relation, that items comes not as a string value therefore the full rules does not fly (i.e. logInfo also do not appear in the log).
Any suggestions, what I could do to improve as I am not a real programmer? I understand, what the code intend to do basically (more or less), but I get really fast to my limit.
Any help is appreciated.
Thanks in advance.
Dom
No ideas?
val nameParts = rs.name.split("")
What is the character splitting the string “_” or “-” or what? There nothing in your ""
Also can you use the code fences, please? See:
Hello Vincent,
Thanks for your reply - sorry for my late reply, but I don’t get a notice about your answer.
I use “_” as a string seperator - I have no clue, why it is not shown in the code I posted.
Again, here is my code in code fences:
rule "Rolladen Wohnzimmer schliessen"
when
Item EG_wz_switch_3_long received update OFF
then
gH_Rolladen_wz_switch.members.forEach[rs|
var nameParts = rs.name.split("_")
var windowName = nameParts.get(0) + "_" + nameParts.get(1) + "_fk_" + nameParts.get(3)
logInfo ("Fensterkontakt der offen is:", +windowName)
if(gH_Contact_global.members.filter [fk | fk.name == windowName].head.state != OPEN){
postUpdate(rs,DOWN)
}]
end
Thanks
Dominik
logInfo ("Fensterkontakt der offen ist:", windowName)
remove the “+”
if(gH_Contact_global.members.filter [fk | fk.name == windowName].head.state != OPEN){
Cannot refer to the non-final variable windowName inside a lambda expression
Thanks, but what do you mean with:
What to change? Sorry, my programming skills are really basic.
Thanks
What is the error message now?
Try declaring windowName
as a variable at the top of the file (Before all the rules)
var String windowName = ""
rule "Rolladen Wohnzimmer schliessen"
when
Item EG_wz_switch_3_long received update OFF
then
gH_Rolladen_wz_switch.members.forEach[rs|
var nameParts = rs.name.split("_")
windowName = nameParts.get(0) + "_" + nameParts.get(1) + "_fk_" + nameParts.get(3)
logInfo ("Fensterkontakt der offen is:", windowName)
if(gH_Contact_global.members.filter [fk | fk.name == windowName].head.state != OPEN){
postUpdate(rs,DOWN)
}]
end
Thanks Vincent for your answer.
Still getting the same error:
20:53:41.324 [ERROR] [untime.internal.engine.RuleEngineImpl] - Rule 'Rolladen Wohnzimmer schliessen': 3
At the moment I save the rule, follwoing appears in the log:
20:52:51.958 [INFO ] [del.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'Rolladen.rules', using it anyway:
This expression is not allowed in this context, since it doesn't cause any side effects.
``
Any more on the log about that error?
postUpdate(rs.name.toString,"DOWN")
This one, when saving the rule:
20:52:51.958 [INFO ] [del.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'Rolladen.rules', using it anyway:
This expression is not allowed in this context, since it doesn't cause any side effects.
No idea, how to get more details…
Still the same. Sorry…
You are using a Lambda inside a Lambda…
let’s add another var at the begining
var String windowName = ""
var String rsString = ""
and the rule:
rule "Rolladen Wohnzimmer schliessen"
when
Item EG_wz_switch_3_long received update OFF
then
gH_Rolladen_wz_switch.members.forEach[rs|
var nameParts = rs.name.split("_")
rsString = rs.name.toString
windowName = nameParts.get(0) + "_" + nameParts.get(1) + "_fk_" + nameParts.get(3)
logInfo ("Fensterkontakt der offen is:", windowName)
if(gH_Contact_global.members.filter [fk | fk.name == windowName].head.state != OPEN){
postUpdate(rsString, "DOWN")
}]
end
Hey Vincent,
I would be happy to say, that your code solved the problem, but still -
[ERROR] [untime.internal.engine.RuleEngineImpl] - Rule 'Rolladen Wohnzimmer schliessen': 3
Any other idea - I am fully lost here…
Does the rule run?
Are there any lines after that error message in the log?
What are the items in the group gH_Contact_global?