I’ve got three items in an average group. I think the automatic parsing is fine. But I also have a rule that manually calculates it.
The three items are:
d1mini_andoni_temperature equals 18.40
2019-05-06 08:35:03.075 [INFO ] [home.model.script.TemperatureAverage] - xiaomi_ht_01_master_temperature equals 18.729999542236328 ℃
2019-05-06 08:35:03.111 [INFO ] [home.model.script.TemperatureAverage] - xiaomi_ht_13_andoni_temperature equals 18.540000915527344 ℃
So in my rule, obviously the ℃ is causing an issue when creating an average.
I’ve tried a split on it, but it never seems to pick up the first space.
Here’s the entire rule
import org.openhab.core.library.types.DecimalTypes
import org.openhab.core.library.types.Number
rule "Get Average Temperature from g_temperature_average group"
when
Item temperature_average_check received update or
Item g_temperature_average changed
then
logInfo("TemperatureAverage","Received Update from one of the g_temperature_average items")
var counter = 0
var Number totaltemp = 0
g_temperature_average.members.forEach [s | logInfo("TemperatureAverage", s.name + " equals " + s.state.toString)]
g_temperature_average.members.forEach[ g |
logInfo("TemperatureAverage",String::format("Item %s State: %s", g.name, g.state.toString))
if (g.state != null)
{
counter = counter + 1
var tempTemp = g.state
logInfo("TemperatureAverage",String::format("String Item: %s State: %s thing: %s", g.name , tempTemp, g))
var tempTemp2 = tempTemp.toString.split(" ")
logInfo("TemperatureAverage",String::format("Split Item: %s State: %s ", g.name , tempTemp2[0]))
var Number currenttemperature = tempTemp
logInfo("TemperatureAverage",String::format("Item: %s State: %s ", g.name , currenttemperature.toString))
totaltemp = totaltemp + currenttemperature
logInfo("TemperatureAverage",String::format("Item: %d Total: %f ", counter,totaltemp))
} //if (g.state != null)
]
logInfo("TemperatureAverage","Calculating average")
var BigDecimal averageTemperature = totaltemp / counter
logInfo("TemperatureAverage","Average calculated")
logInfo("TemperatureAverage",String::format("Calcuated average of %d items. Total Temperature: %f = Average of %f.", counter,totaltemp ,averageTemperature ))
//temperature_average.postUpdate(new Number(averageTemperature))
var String formattedString = String::format("%1$.1f",averageTemperature)
temperature_average.postUpdate(formattedString)
//Notify_Info.postUpdate(String::format("Calcuated average of %d items. Total Temperature: %f = Average of %f.", counter,totaltemp ,averageTemperature ))
end
with it’s current logging looking like this:
2019-05-06 08:33:27.094 [INFO ] [home.model.script.TemperatureAverage] - xiaomi_ht_01_master_temperature equals 18.729999542236328 ℃
2019-05-06 08:33:27.150 [INFO ] [home.model.script.TemperatureAverage] - xiaomi_ht_13_andoni_temperature equals 18.540000915527344 ℃
2019-05-06 08:33:27.187 [INFO ] [home.model.script.TemperatureAverage] - Item d1mini_andoni_temperature State: 18.40
2019-05-06 08:33:27.221 [INFO ] [home.model.script.TemperatureAverage] - String Item: d1mini_andoni_temperature State: 18.40 thing: d1mini_andoni_temperature (Type=NumberItem, State=18.40, Label=Andoni Temperature, Category=temperature, Groups=[g_d1mini_andoni, g_temperature, g_temperature_average])
2019-05-06 08:33:27.329 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Get Average Temperature from g_temperature_average group': Could not invoke method: org.apache.commons.lang.StringUtils.split(java.lang.String,java.lang.String,int) on instance: null
So i can see it pick up the d1mini item (no split needed) and crash. Removing the split I get it to look through all 3 items, but the calculation is wrong
2019-05-06 08:32:17.539 [INFO ] [home.model.script.TemperatureAverage] - d1mini_andoni_temperature equals 18.40
2019-05-06 08:32:17.571 [INFO ] [home.model.script.TemperatureAverage] - xiaomi_ht_01_master_temperature equals 18.729999542236328 ℃
2019-05-06 08:32:17.607 [INFO ] [home.model.script.TemperatureAverage] - xiaomi_ht_13_andoni_temperature equals 18.540000915527344 ℃
2019-05-06 08:32:17.674 [INFO ] [home.model.script.TemperatureAverage] - Item d1mini_andoni_temperature State: 18.40
2019-05-06 08:32:17.706 [INFO ] [home.model.script.TemperatureAverage] - String Item: d1mini_andoni_temperature State: 18.40 thing: d1mini_andoni_temperature (Type=NumberItem, State=18.40, Label=Andoni Temperature, Category=temperature, Groups=[g_d1mini_andoni, g_temperature, g_temperature_average])
2019-05-06 08:32:17.789 [INFO ] [home.model.script.TemperatureAverage] - Split Item: d1mini_andoni_temperature State: 18.40
2019-05-06 08:32:17.825 [INFO ] [home.model.script.TemperatureAverage] - Item: d1mini_andoni_temperature State: 18.40
2019-05-06 08:32:17.859 [INFO ] [home.model.script.TemperatureAverage] - Item: 1 Total: 18.400000
2019-05-06 08:32:17.887 [INFO ] [home.model.script.TemperatureAverage] - Item xiaomi_ht_01_master_temperature State: 18.729999542236328 ℃
2019-05-06 08:32:17.925 [INFO ] [home.model.script.TemperatureAverage] - String Item: xiaomi_ht_01_master_temperature State: 18.729999542236328 ℃ thing: xiaomi_ht_01_master_temperature (Type=NumberItem, State=18.729999542236328 ℃, Label=Master Temperature, Category=temperature, Groups=[g_xiaomi_ht_master, g_temperature, g_temperature_average])
2019-05-06 08:32:18.022 [INFO ] [home.model.script.TemperatureAverage] - Split Item: xiaomi_ht_01_master_temperature State: 18.729999542236328 ℃
2019-05-06 08:32:18.064 [INFO ] [home.model.script.TemperatureAverage] - Item: xiaomi_ht_01_master_temperature State: 18.729999542236328 ℃
2019-05-06 08:32:18.104 [INFO ] [home.model.script.TemperatureAverage] - Item: 2 Total: 310.280000
2019-05-06 08:32:18.133 [INFO ] [home.model.script.TemperatureAverage] - Item xiaomi_ht_13_andoni_temperature State: 18.540000915527344 ℃
2019-05-06 08:32:18.171 [INFO ] [home.model.script.TemperatureAverage] - String Item: xiaomi_ht_13_andoni_temperature State: 18.540000915527344 ℃ thing: xiaomi_ht_13_andoni_temperature (Type=NumberItem, State=18.540000915527344 ℃, Label=Andoni Temperature, Category=temperature, Groups=[g_xiaomi_ht_andoni, g_temperature, g_temperature_average])
2019-05-06 08:32:18.270 [INFO ] [home.model.script.TemperatureAverage] - Split Item: xiaomi_ht_13_andoni_temperature State: 18.540000915527344 ℃
2019-05-06 08:32:18.336 [INFO ] [home.model.script.TemperatureAverage] - Item: xiaomi_ht_13_andoni_temperature State: 18.540000915527344 ℃
2019-05-06 08:32:18.376 [INFO ] [home.model.script.TemperatureAverage] - Item: 3 Total: 601.970000
So it’s adding something weird with that degrees symbol.
Any ideas?