I gave up on OH 2.3 Unit of Measure (UM)

Here’s another thing I’ve learned. Persistence doesn’t return QuantityTypes so we sometimes need to convert a Number or primitive numerical value to QuantityType. This is how it’s done.

import org.eclipse.smarthome.core.library.unit.SIUnits

rule "Test"
when
    // Also triggered upon saving of file
    System started
then
    // This can be any item of type Number:Power (W)
    val item = WashingMachinePower

    // Its state is a QuantityType<Power> (W)
    val state = item.state
    logError("Test", "State: " + state)
    
    // Persistence produces a value of type DecimalType
    val average = item.averageSince(now.minusMinutes(5), "rrd4j")
    logError("Test", "Average: " + average)
    
    // Convert to QuanttyType using the constructor
    // QuantityType(Number, javax.measure.Unit)
    val averageTyped = new QuantityType(average, SIUnits.WATT)
    logError("Test", "Average (typed): " + averageTyped)

    // A way to convert to QuantityType from double using static
    // factory method
    val typed = QuantityType::valueOf(42, SIUnits.WATT)
    logError("Test", "Value 42 (typed): " + typed)
end

See also: