I don’t write code, so I may have terminology wrong (maybe why i cant find a topic to explain what i need to do…).
I’m majorly cleaning up some rules and reducing complexity now that I’ve been at this almost a year.
There’s a rule I’m working on now that I want it to break after the first matching condition is met or send a default value if none are met.
I thought this was how you did it but it doesn’t seem to work:
rule "Set Furnace Mode"
when
Item NestTStat_HVAC_Mode changed or
Item furHiHtNT_Trigger received command ON or
Item furLoHtNT_Trigger received command ON or
Item furHiHtOH_Trigger received command ON or
Item furLoHtOH_Trigger received command ON or
Item furLoFan_Trigger changed or
Item Nest_Run changed or
Item furnaceOHRun changed
then
if ( furHiHtNT_Trigger.state == ON && NestTStat_HVAC_Mode.state == "HEAT" ) {
furnaceRunMode.sendCommand(1)
} else if ( furLoHtNT_Trigger.state == ON && NestTStat_HVAC_Mode.state == "HEAT" ) {
furnaceRunMode.sendCommand(2)
} else if ( furHiHtOH_Trigger.state == ON && NestTStat_HVAC_Mode.state == "HEAT" ) {
furnaceRunMode.sendCommand(3)
} else if ( furLoHtNT_Trigger.state == ON && NestTStat_HVAC_Mode.state == "HEAT" ) {
furnaceRunMode.sendCommand(4)
} else if ( furLoFan_Trigger.state == ON ) {
furnaceRunMode.sendCommand(5)
} else {
furnaceRunMode.sendCommand(0)
}
end
there’s a couple other conditions i need to add in there so ignore if there aren’t enough off conditions
I just need to figure out how to make it send a command on the first met condition and then exit or run all the way to the bottom if none are met. it doesn’t seem to be doing that as is…
thanks
Not sure I understand everything: does your rule never do anything, is it doing all at once? It likely will help if you add your item definitions too.
But most importantly, before you post this do a little sleuthing by adding logInfo statements, for example you could add this immediately after the then to detect whether your rule even triggers: logInfo("Set furnace mode rule","Rule got triggered")
If you see that it triggers (you would see the message above in your logs, check the docs if you don’t know where your log-files are, it depends on your system): congrats, you at least know that your rule triggers as you want it. If it does not, check your items.
For the next step, you may want to log the values of your items to figure out what is going on; something like: logInfo("Set furnace mode rule", "Item furHiHtNT_Trigger has state: " + furHiHtNT_Trigger.state.toString)
and you can do this for all items and find their states written into your logs.
Doing that step-by-step and adding more logInfo statements where you need it will likely lead you in the right direction.
nevermind, what i saw was a delay when the nest binding updates its state.
there’s another rule that updates some other important items and i mistook a state in the above rule changing twice as an error but now i see that its completely expected based on the timing of how things react because of the nest binding. sorry
just ignore this whole thing!
Do you actively set the *_Trigger Items to state OFF?
Otherwise, the rule will always take the first line that is true, this is not necessarily the one which triggered the rule.
yes, at least so far. I’ll be watching it this evening when openhab takes over control of the furnace.
Due to WAF the Nest mostly controls the furnace during the day but to keep just the nursery and master warm at night the nest is set very low and OH has direct control of the furnace. here’s a portion of a rule where i’m being sure to turn off unused triggers:
rule "Auxiliary Heat Zone Upper"
when
Item AuxHeatUpper received command
then
logInfo("AuxHeatUpper changed", zoneUpperVentCount.toString )
if ( AuxHeatUpper.state == ON && NestTStat_HVAC_Mode.state.toString == "HEAT" && Nest_Run.state == OFF ) {
if ( zoneUpperVentCount.state == 4 || zoneUpperVentCount.state == 3 ) {
logInfo("vent count:","4 or 3")
furHiHtOH_Trigger.sendCommand(ON)
furLoHtOH_Trigger.sendCommand(OFF)
furnaceOHRun.sendCommand(ON)
It’s a two stage furnace which is why there’s a Hi and Lo trigger. Depending on the number of open vents the furnace will run in high or low (and corresponding fan speed). the last, separate furnaceOHRun command is used to trigger other events that need to know who is running the furnace (in case you’re curious about what the other stuff is).