- Platform information: 2.4
I’ve read a number of the other posts where “rule:null” error is thrown in the logs and cannot find any similarities to mine - so, here’s hoping someone can help me fix it or change the logic so it no longer throws the errors.
The rule is using temps and humidity from xiaomi sensors to determine if the associated extractor fan should be turned on or not.
items:
Number Wetroom_Xiaomi_Temperature "Wetroom temperature [%.1f]" <temperature> (g_persist_5minute, Group_HabPanel_Dashboard, tmpf, g_Xiaomi_Warmup_Temperature, g_ExtractorFanTriggers, g_ExtractorFanProxy) //{ channel="mihome:sensor_ht:158d000201ba44:temperature" }
Number Wetroom_Xiaomi_Humidity <humidity> (g_persist_5minute, Group_HabPanel_Dashboard, g_ExtractorFanTriggers, tmpf, g_ExtractorFanProxy) //{ channel="mihome:sensor_ht:158d000201ba44:humidity" }
Groups of interest are:
Group tmpf //this is temp for testing
Group:Number g_ExtractorFanTriggers "Group of sensors to trigger extractor fans"
rule:
rule "Extractor Fan sensor changed"
when Member of g_ExtractorFanTriggers changed
then
logWarn("loggerName", triggeringItem.toString)
val itmSplit = triggeringItem.name.split("_")
val location = itmSplit.get(0);
val itemFan = g_ExtractorFanProxy.members.findFirst[item | item.name == location + "_ExtractorFan"] as SwitchItem
val itemFanMaxHumidity = g_ExtractorFanProxy.members.findFirst[item | item.name == location + "_MaxHumidity"] as NumberItem
val itemFanMaxTemperature = g_ExtractorFanProxy.members.findFirst[item | item.name == location + "_MaxTemp"] as NumberItem
val itemTemperature = g_ExtractorFanProxy.members.findFirst[item | item.name == location + "_Xiaomi_Temperature"] as NumberItem
val itemHumidity = g_ExtractorFanProxy.members.findFirst[item | item.name == location + "_Xiaomi_Humidity"] as NumberItem
if (itemFanMaxHumidity === null) {logWarn("Extractor Fan sensor changed", "itemFanMaxHumidity is null. Cannot continue.");return;}
if (itemFanMaxTemperature === null) {logWarn("Extractor Fan sensor changed", "itemFanMaxTemperature is null. Cannot continue.");return;}
if (itemTemperature === null) {logWarn("Extractor Fan sensor changed", "itemTemperature is null. Cannot continue.");return;}
if (itemHumidity === null) {logWarn("Extractor Fan sensor changed", "itemHumidity is null. Cannot continue.");return;}
if (itemFan === null) {logWarn("Extractor Fan sensor changed", "itemFan is null. Cannot continue.");return;}
val Number maxHumidity = (if (itemFanMaxHumidity.state == NULL) 80 else itemFanMaxHumidity.state as Number)
val Number maxTemperature = (if (itemFanMaxTemperature.state == NULL) 26 else itemFanMaxTemperature.state as Number)
val Number curTemperature = (if (itemTemperature.state == NULL) 20 else itemTemperature.state as Number)
val Number curHumidity = (if (itemHumidity.state == NULL) 50 else itemHumidity.state as Number)
val hysteresis = 2
//val state = itemFan.state; //whyn is this on.
// logWarn("loggerName", "curTemperature:" + curTemperature.toString)
// logWarn("loggerName", "maxTemperature:" + maxTemperature.toString)
// logWarn("loggerName", "curHumidity:" + curHumidity.toString)
// logWarn("loggerName", "maxHumidity:" + maxHumidity.toString)
// logWarn("loggerName", "state:" + state.toString)
if (
(
curTemperature > maxTemperature
|| curHumidity > maxHumidity
)
&& itemFan.state != ON){
logWarn("Extractor Fan Control", "Turning on fan " + location + ". Temp is " + curTemperature.toString + " and humidity is " + curHumidity.toString)
itemFan.sendCommand(ON)
}
if (
(
curTemperature + hysteresis <= maxTemperature
&& curHumidity < maxHumidity
) && itemFan.state == ON){
logInfo("Extractor Fan Control", "Turning off fan " + location + ". Temp is " + curTemperature.toString + " and humidity is " + curHumidity.toString)
itemFan.sendCommand(OFF)
}
end
What I see in the logs:
2019-12-05 11:12:35.295 [ERROR] [.model.rule.runtime.internal.engine.RuleEngineImpl] - Rule 'Extractor Fan sensor changed': null
If I manually change either of the items’ value, the rule triggers just fine. I can change it as many times as I want and I cannot get the rule to fail.
However, looking into the log and the events it’s clear that the two items change almost the same time - makes sense as they’re from the same binding and device.
2019-12-05 11:12:35.239 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Temperature changed from 23.5 to 23.41
2019-12-05 11:12:35.269 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Humidity changed from 52.4 to 53.15
So, I created the temp group, tmpf, and updated that with a number. It fails quite frequently!
log and events together
2019-12-05 14:56:34.946 [WARN ] [org.eclipse.smarthome.model.script.loggerName ] - Wetroom_Xiaomi_Humidity (Type=NumberItem, State=24, Label=null, Category=humidity, Groups=[g_persist_5minute, Group_HabPanel_Dashboard, g_ExtractorFanTriggers, tmpf, g_ExtractorFanProxy])
2019-12-05 14:56:35.972 [WARN ] [org.eclipse.smarthome.model.script.loggerName ] - Wetroom_Xiaomi_Temperature (Type=NumberItem, State=24, Label=Wetroom temperature, Category=temperature, Groups=[g_persist_5minute, Group_HabPanel_Dashboard, tmpf, g_Xiaomi_Warmup_Temperature, g_ExtractorFanTriggers, g_ExtractorFanProxy])
2019-12-05 14:57:25.101 [WARN ] [org.eclipse.smarthome.model.script.loggerName ] - Wetroom_Xiaomi_Temperature (Type=NumberItem, State=23, Label=Wetroom temperature, Category=temperature, Groups=[g_persist_5minute, Group_HabPanel_Dashboard, tmpf, g_Xiaomi_Warmup_Temperature, g_ExtractorFanTriggers, g_ExtractorFanProxy])
2019-12-05 14:57:25.109 [WARN ] [org.eclipse.smarthome.model.script.loggerName ] - Wetroom_Xiaomi_Humidity (Type=NumberItem, State=23, Label=null, Category=humidity, Groups=[g_persist_5minute, Group_HabPanel_Dashboard, g_ExtractorFanTriggers, tmpf, g_ExtractorFanProxy])
2019-12-05 14:57:26.475 [ERROR] [.model.rule.runtime.internal.engine.RuleEngineImpl] - Rule 'Extractor Fan sensor changed': null
2019-12-05 14:57:26.515 [WARN ] [org.eclipse.smarthome.model.script.loggerName ] - Wetroom_Xiaomi_Temperature (Type=NumberItem, State=23, Label=Wetroom temperature, Category=temperature, Groups=[g_persist_5minute, Group_HabPanel_Dashboard, tmpf, g_Xiaomi_Warmup_Temperature, g_ExtractorFanTriggers, g_ExtractorFanProxy])
2019-12-05 14:57:28.497 [WARN ] [org.eclipse.smarthome.model.script.loggerName ] - Wetroom_Xiaomi_Humidity (Type=NumberItem, State=23, Label=null, Category=humidity, Groups=[g_persist_5minute, Group_HabPanel_Dashboard, g_ExtractorFanTriggers, tmpf, g_ExtractorFanProxy])
2019-12-05 14:57:28.565 [WARN ] [org.eclipse.smarthome.model.script.loggerName ] - Wetroom_Xiaomi_Temperature (Type=NumberItem, State=23, Label=Wetroom temperature, Category=temperature, Groups=[g_persist_5minute, Group_HabPanel_Dashboard, tmpf, g_Xiaomi_Warmup_Temperature, g_ExtractorFanTriggers, g_ExtractorFanProxy])
2019-12-05 14:57:28.554 [WARN ] [org.eclipse.smarthome.model.script.loggerName ] - Wetroom_Xiaomi_Humidity (Type=NumberItem, State=23, Label=null, Category=humidity, Groups=[g_persist_5minute, Group_HabPanel_Dashboard, g_ExtractorFanTriggers, tmpf, g_ExtractorFanProxy])
2019-12-05 14:56:30.557 [ome.event.ItemCommandEvent] - Item 'tmpf' received command 24
2019-12-05 14:56:30.561 [ome.event.ItemCommandEvent] - Item 'Wetroom_Xiaomi_Temperature' received command 24
2019-12-05 14:56:30.568 [ome.event.ItemCommandEvent] - Item 'Wetroom_Xiaomi_Humidity' received command 24
2019-12-05 14:56:30.578 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Temperature changed from NULL to 24
2019-12-05 14:56:30.582 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Humidity changed from NULL to 24
*******************
2019-12-05 14:56:43.928 [ome.event.ItemCommandEvent] - Item 'tmpf' received command 23
2019-12-05 14:56:43.941 [ome.event.ItemCommandEvent] - Item 'Wetroom_Xiaomi_Temperature' received command 23
2019-12-05 14:56:43.945 [ome.event.ItemCommandEvent] - Item 'Wetroom_Xiaomi_Humidity' received command 23
2019-12-05 14:56:43.951 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Temperature changed from 24 to 23
2019-12-05 14:56:43.958 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Humidity changed from 24 to 23
*******************
2019-12-05 14:57:05.860 [ome.event.ItemCommandEvent] - Item 'tmpf' received command 24
2019-12-05 14:57:05.869 [ome.event.ItemCommandEvent] - Item 'Wetroom_Xiaomi_Temperature' received command 24
2019-12-05 14:57:05.875 [ome.event.ItemCommandEvent] - Item 'Wetroom_Xiaomi_Humidity' received command 24
2019-12-05 14:57:05.884 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Temperature changed from 23 to 24
2019-12-05 14:57:05.889 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Humidity changed from 23 to 24
*******************
2019-12-05 14:57:11.433 [ome.event.ItemCommandEvent] - Item 'tmpf' received command 23
2019-12-05 14:57:11.444 [ome.event.ItemCommandEvent] - Item 'Wetroom_Xiaomi_Temperature' received command 23
2019-12-05 14:57:11.450 [ome.event.ItemCommandEvent] - Item 'Wetroom_Xiaomi_Humidity' received command 23
2019-12-05 14:57:11.454 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Temperature changed from 24 to 23
2019-12-05 14:57:11.459 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Humidity changed from 24 to 23
What I did notice when I had log:tail running was the first change was not as fast as I thought it would be but then I had just saved the .rules file so did not think twice.
That one was successful though,
Then there was a delay between sending it and seeing the rule fail (and you can see this in the events/logs) and it was just slow after that. It does run near-instant though -
2019-12-05 15:31:03.640 [ome.event.ItemCommandEvent] - Item 'tmpf' received command 24
2019-12-05 15:31:03.661 [ome.event.ItemCommandEvent] - Item 'Wetroom_Xiaomi_Temperature' received command 24
2019-12-05 15:31:03.666 [ome.event.ItemCommandEvent] - Item 'Wetroom_Xiaomi_Humidity' received command 24
2019-12-05 15:31:03.672 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Temperature changed from 23 to 24
2019-12-05 15:31:03.677 [vent.ItemStateChangedEvent] - Wetroom_Xiaomi_Humidity changed from 23 to 24
2019-12-05 15:31:03.653 [WARN ] [org.eclipse.smarthome.model.script.loggerName ] - Wetroom_Xiaomi_Temperature (Type=NumberItem, State=24, Label=Wetroom temperature, Category=temperature, Groups=[g_persist_5minute, Group_HabPanel_Dashboard, tmpf, g_Xiaomi_Warmup_Temperature, g_ExtractorFanTriggers, g_ExtractorFanProxy])
2019-12-05 15:31:03.659 [WARN ] [org.eclipse.smarthome.model.script.loggerName ] - Wetroom_Xiaomi_Humidity (Type=NumberItem, State=24, Label=null, Category=humidity, Groups=[g_persist_5minute, Group_HabPanel_Dashboard, g_ExtractorFanTriggers, tmpf, g_ExtractorFanProxy])
2019-12-05 15:31:03.674 [ERROR] [.model.rule.runtime.internal.engine.RuleEngineImpl] - Rule 'Extractor Fan sensor changed': null
Anything in particular I can change in the rule which might be causing this?
Cheers,
C