rule "Temperatur Min-og Max values"
when
Item Temperatur_Udebygninger_Udv received update
then
var Number Min
var Number Max
var String tmp
var SimpleDateFormat df = new SimpleDateFormat( "HH:mm" )
if (Temperatur__Udebygninger_Udv.state instanceof DecimalType) {
Min = (Temperatur__Udebygninger_Udv.minimumSince(now.toDateMidnight, "rrd4j").state as DecimalType)
tmp = (Math::round(Min.floatValue*10.0)/10.0) + " °C (" + df.format(Temperatur__Udebygninger_Udv.minimumSince(now.toDateMidnight, "rrd4j").timestamp) + " )"
postUpdate(Temperatur__Udebygninger_Udv_Min, tmp)
Max = Temperatur__Udebygninger_Udv.maximumSince(now.toDateMidnight, "rrd4j").state as DecimalType
df = new SimpleDateFormat( "HH:mm" )
tmp = (Math::round(Max.floatValue*10.0)/10.0) + " °C (" + df.format(Temperatur__Udebygninger_Udv.maximumSince(now.toDateMidnight, "rrd4j").timestamp) + ")"
postUpdate(Temperatur__Udebygninger_Udv_Max, tmp)
}
end
Sitemap part
Frame label="Ude temp" {
Text item=Temperatur_Udebygninger_Udv label="Temperatur udvendig"
Text item=Temperatur_Udebygninger_Udv_Min label="Min temperatur udvendig"
Text item=Temperatur_Udebygninger_Udv_Max label="Max temperatur udvendig"
}
The string items hold the formatted String to be displayed in the UI. The number item holds the current temperature, it must be updated periodically and persistence must be configured for this item. This example assumes, that the rrd4h persistence service is used, for other services the string “rrd4j” in the rule below must be modified accordingly.
Following your posted rule, you are trying to update a string item with some information from the variable tmp.
Up to this point everything seems to be ok!
If you are using OH1 (as per the example you have provided), you should confirm your item state at http://your_ip:8080/rest/items/Temperatur_Udebygninger_Udv_*
In order to visualize the state of the described sitemap linked items, your syntax is wrong, try:
Text item=Temperatur_Udebygninger_Udv_Min label="Min temperatur udvendig [%s]"
Hi I also have problems with this rule, I have the same items as the partner and I get this in the log
[ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Update max and min temperatures'
java.lang.NullPointerException: null
at org.eclipse.xtext.common.types.util.JavaReflectAccess.getRawType(JavaReflectAccess.java:107) ~[na:na]
at org.eclipse.xtext.common.types.util.JavaReflectAccess.getConstructor(JavaReflectAccess.java:90) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateConstructorCall(XbaseInterpreter.java:511) ~[na:na]
at sun.reflect.GeneratedMethodAccessor101.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_65]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateVariableDeclaration(XbaseInterpreter.java:601) ~[na:na]
at sun.reflect.GeneratedMethodAccessor95.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_65]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateBlockExpression(XbaseInterpreter.java:321) ~[na:na]
at sun.reflect.GeneratedMethodAccessor103.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_65]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:204) ~[na:na]
at org.openhab.model.script.internal.engine.ScriptImpl.execute(ScriptImpl.java:59) ~[na:na]
at org.openhab.core.scriptengine.ScriptExecutionThread.run(ScriptExecutionThread.java:44) ~[na:na]
Hi,
i have problem with my rule. I need min and max temperature for last 12h and 24h.
Number - min and max temperature for last 12h and 24h - example: 6.78
String - min and max temperature for last 12h and 24h with time when reached - example: 6.78 °C (11:20)
rule file:
import java.text.SimpleDateFormat
rule "Aktualizace Min a Max hodnot venkovni teploty"
when
Item Homie_ZD_BME280_Venku_Temp received update
then
var Number Min12h
var Number Max12h
var Number Min24h
var Number Max24h
var String tmp
var SimpleDateFormat df = new SimpleDateFormat( "HH:mm" )
if (Homie_ZD_BME280_Venku_Temp.state instanceof DecimalType) {
Min12h = (Homie_ZD_BME280_Venku_Temp.minimumSince(now.minusHours(12), "influxdb").state as DecimalType)
tmp = (Math::round(Min12h.floatValue*100.0)/100.0) + " °C (" + df.format(Homie_ZD_BME280_Venku_Temp.minimumSince(now.minusHours(12), "influxdb").timestamp) + ")"
postUpdate(ZD_Venku_Temp_Min12h_Formatted, tmp)
postUpdate(ZD_Venku_Temp_Min12h_Formatted_Value, Min12h)
Min24h = (Homie_ZD_BME280_Venku_Temp.minimumSince(now.minusHours(24), "influxdb").state as DecimalType)
tmp = (Math::round(Min24h.floatValue*100.0)/100.0) + " °C (" + df.format(Homie_ZD_BME280_Venku_Temp.minimumSince(now.minusHours(24), "influxdb").timestamp) + ")"
postUpdate(ZD_Venku_Temp_Min24h_Formatted, tmp)
Max12h = (Homie_ZD_BME280_Venku_Temp.maximumSince(now.minusHours(12), "influxdb").state as DecimalType)
tmp = (Math::round(Max12h.floatValue*100.0)/100.0) + " °C (" + df.format(Homie_ZD_BME280_Venku_Temp.maximumSince(now.minusHours(12), "influxdb").timestamp) + ")"
postUpdate(ZD_Venku_Temp_Max12h_Formatted, tmp)
postUpdate(ZD_Venku_Temp_Max12h_Formatted_Value, Max12h)
Max24h = (Homie_ZD_BME280_Venku_Temp.maximumSince(now.minusHours(24), "influxdb").state as DecimalType)
tmp = (Math::round(Max24h.floatValue*100.0)/100.0) + " °C (" + df.format(Homie_ZD_BME280_Venku_Temp.maximumSince(now.minusHours(24), "influxdb").timestamp) + ")"
postUpdate(ZD_Venku_Temp_Max24h_Formatted, tmp)
}
end
rule "Aktualizace Min a Max hodnot teploty Handy"
when
Item Handy_BME280_Temp received update
then
var Number Min12h
var Number Max12h
var String tmp
var SimpleDateFormat df = new SimpleDateFormat( "HH:mm" )
if (Handy_BME280_Temp.state instanceof DecimalType) {
Min12h = (Handy_BME280_Temp.minimumSince(now.minusHours(12), "influxdb").state as DecimalType)
tmp = (Math::round(Min12h.floatValue*100.0)/100.0) + " °C (" + df.format(Handy_BME280_Temp.minimumSince(now.minusHours(12), "influxdb").timestamp) + ")"
postUpdate(Handy_Temp_Min12h_Formatted, tmp)
postUpdate(Handy_Temp_Min12h_Formatted_Value, Min12h)
Max12h = (Handy_BME280_Temp.maximumSince(now.minusHours(12), "influxdb").state as DecimalType)
tmp = (Math::round(Max12h.floatValue*100.0)/100.0) + " °C (" + df.format(Handy_BME280_Temp.maximumSince(now.minusHours(12), "influxdb").timestamp) + ")"
postUpdate(Handy_Temp_Max12h_Formatted, tmp)
postUpdate(Handy_Temp_Max12h_Formatted_Value, Max12h)
}
end
but sometimes i got this error:
2018-10-11 18:21:18.160 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Aktualizace Min a Max hodnot venkovni teploty': 'state' is not a member of 'org.openhab.core.persistence.internal.QueryablePersistenceServiceDelegate$1'; line 20, column 17, length 77