Trying to get to grips with using Units of Measurement in rules.
In the case of an Item like -
Number:Temperature WTemp "Forecast" {some weather binding}
we get an Item like say 7 °C , where the “temperature flavour” is a part of the value and we can convert to °F etc. conveniently. OK so far.
If we want to do arithmetic or comparisons with that in rules, we’ve either got to cast everything else as temperature types or (more often) extract the numeric part only from the Item.
This is one way to get “the number”
var Number myvalue = (WTemp.state as QuantityType<Number>).doubleValue
but it seems a bit clumsy to me. Am I missing something?
======
Something else I accidentally fell into, until puzzled out (because I was doing the QT<Number>
thing on its own.
An “unflavoured” Item can adopt a UoM on the fly. And later, unadopt it as well. Maybe that’s by design but it came as surprise to me.
ITEM
Number nm_test "test simple number Item"
rule "uom demo"
when
Item test_switch changed
then
logInfo("test", "AA " + nm_test.state.toString)
nm_test.postUpdate(99)
Thread::sleep(500)
logInfo("test", "BB " + nm_test.state.toString)
nm_test.postUpdate((WTemp.state as QuantityType<Number>))
Thread::sleep(500)
logInfo("test", "CC " + nm_test.state.toString)
nm_test.postUpdate(77)
Thread::sleep(500)
logInfo("test", "DD " + nm_test.state.toString)
nm_test.postUpdate((WTemp.state as QuantityType<Number>).doubleValue)
Thread::sleep(500)
logInfo("test", "EE " + nm_test.state.toString)
nm_test.postUpdate(WTemp.state)
Thread::sleep(500)
logInfo("test", "FF " + nm_test.state.toString)
nm_test.sendCommand(88)
Thread::sleep(500)
logInfo("test", "GG " + nm_test.state.toString)
nm_test.sendCommand(88|"°C")
Thread::sleep(500)
logInfo("test", "HH " + nm_test.state.toString)
end
[.eclipse.smarthome.model.script.test] - AA NULL
[.eclipse.smarthome.model.script.test] - BB 99
[.eclipse.smarthome.model.script.test] - CC 6.87 °C
[.eclipse.smarthome.model.script.test] - DD 77
[.eclipse.smarthome.model.script.test] - EE 6.87
[.eclipse.smarthome.model.script.test] - FF 6.87 °C
[.eclipse.smarthome.model.script.test] - GG 88
[.eclipse.smarthome.model.script.test] - HH 88 °C
I suppose I was thinking of e.g. temperature as a property of the Item, whereas it acts like its the property of a state or value.
Using a test Item of type Number:Dimensionless
forces ignores of update or commands with a °C property. I guess I was mistakenly expecting Number to be Dimensionless by default. In reality it seems AnyDimension
EDIT - to clarify, Number:Dimensionless
represents a proportion e.g. 75% rather than any arbitrary number.