Heres My working set (note the sitemap items are descending so highest consumption at the top):
Items:
Group:Number:SUM gPower "Overall Power [%.2f KWh]" <energy>
Number Kitchen1_Dimmer_Energy "Bench Consumption [%.2f KWh]" (gPower) { channel="zwave:device:Controller:node15:meter_kwh" }
Number Kitchen2_Dimmer_Energy "Center Consumption [%.2f KWh]" (gPower) { channel="zwave:device:Controller:node12:meter_kwh" }
...
Number Lounge_3_Dimmer_Energy "3 Consumption [%.2f KWh]" (gPower) { channel="zwave:device:Controller:node17:meter_kwh" }
//power consumption sort order
String Display_gPower_1 "power [%s]" <battery>
String Display_gPower_2 "power [%s]" <battery>
String Display_gPower_3 "power [%s]" <battery>
String Display_gPower_4 "power [%s]" <battery>
String Display_gPower_5 "power [%s]" <battery>
String Display_gPower_6 "power [%s]" <battery>
String Display_gPower_7 "power [%s]" <battery>
String Display_gPower_8 "power [%s]" <battery>
String Display_gPower_9 "power [%s]" <battery>
String Display_gPower_10 "power [%s]" <battery>
String Display_gPower_11 "power [%s]" <battery>
String Display_gPower_12 "power [%s]" <battery>
String Display_gPower_13 "power [%s]" <battery>
Rules
import java.util.ArrayList
import java.util.Map
import java.util.HashMap
//------------------------------------------------------------------------------------------------------------------------------------------------------------
//
// Rule: Retrieve and process power consumption information
//
//------------------------------------------------------------------------------------------------------------------------------------------------------------
rule "Retrieve and process power consumption information"
when
Time cron "0 0/15 * * * ?" // Every 15 min.
then
val Map <String, Double> PowerMap = new HashMap<String, Double>() // power map = power item name -> power value
var ArrayList<StringItem> DisplayItems = new ArrayList<StringItem>()
var Integer i
// Build map with prices
gPower?.members.forEach[ gPowerItem |
if (gPowerItem.state != NULL) {
PowerMap.put(gPowerItem.label, (gPowerItem.state as DecimalType).doubleValue)
} else {
PowerMap.put(gPowerItem.label, 0.0)
}
]
// Build array with display items
DisplayItems.add(0, Display_gPower_1)
DisplayItems.add(1, Display_gPower_2)
DisplayItems.add(2, Display_gPower_3)
DisplayItems.add(3, Display_gPower_4)
DisplayItems.add(4, Display_gPower_5)
DisplayItems.add(5, Display_gPower_6)
DisplayItems.add(6, Display_gPower_7)
DisplayItems.add(7, Display_gPower_8)
DisplayItems.add(8, Display_gPower_9)
DisplayItems.add(9, Display_gPower_10)
DisplayItems.add(10, Display_gPower_11)
DisplayItems.add(11, Display_gPower_12)
DisplayItems.add(12, Display_gPower_13)
// Combine values with display items
i = 0
for (gPowerEntry : PowerMap.entrySet.sortBy[value]) {
// Set the label of the display items
DisplayItems.get(i).label = gPowerEntry.getKey()
// Set value according to label of display items
DisplayItems.get(i).postUpdate(String::format("%.2f kWh", gPowerEntry.getValue()))
// Switch to next display items
i = i+1
}
end
Sitemap
Frame label="Power Consumption" {
Text item=Display_gPower_13
Text item=Display_gPower_12
Text item=Display_gPower_11
Text item=Display_gPower_10
Text item=Display_gPower_9
Text item=Display_gPower_8
Text item=Display_gPower_7
Text item=Display_gPower_6
Text item=Display_gPower_5
Text item=Display_gPower_4
Text item=Display_gPower_3
Text item=Display_gPower_2
Text item=Display_gPower_1
}