Hi to all
i have in sitemap file a switch
Default item=No_Timer label="Disabilita Timer" icon="switch"
Is it possible to change the label of the switch “No_Timer” when the state change from ON to OFF?
If yes How?
Hi to all
i have in sitemap file a switch
Default item=No_Timer label="Disabilita Timer" icon="switch"
Is it possible to change the label of the switch “No_Timer” when the state change from ON to OFF?
If yes How?
You should be able to do this with a rule and within this rule you have to set the label. I typically combine this with a mapfile. So i set that labels for my movable wall plugs
NL_SS_Switch_01_State.setLabel(transform("MAP", "nmb2label.map", NL_SS_Switch_01_Label.state.toString))
can you show me an example please?
Changing the label of an Item in a rule will not work here, where you have specified a label in the sitemap as well.
There is no way to change the sitemap label, so perhaps you should leave that out and have it use the Item label instead.
A different way to do this is to use sitemap visibility to show and hide two alternate lines with different labels.
If have dons this with my gas station rules Please see here:
// Thing: Internet item - Tankerkönig Petrol stations
Group NL_IN_PetrolStation "Tankstellen" <scene_gas_station> (gNL_Internet)
DateTime NL_IN_PetrolStation_LastUpdate "Letztes Update [%1$td.%1$tm.%1$tY %1$tH:%1$tM:%1$tS]" <time_clock> (NL_IN_PetrolStation)
// Prices
Number NL_IN_PetrolStation_Diesel01 "Nordoel (Uetersen) [%.3f €]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Prices, gStandardTimeline)
Number NL_IN_PetrolStation_Diesel02 "Nordoel (Elmshorn) [%.3f €]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Prices, gStandardTimeline)
Number NL_IN_PetrolStation_Diesel03 "HEM (Elmshorn) [%.3f €]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Prices, gStandardTimeline)
Number NL_IN_PetrolStation_Diesel04 "Star (Elmshorn) [%.3f €]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Prices, gStandardTimeline)
Number NL_IN_PetrolStation_Diesel05 "HEM (Wedel) [%.3f €]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Prices, gStandardTimeline)
Number NL_IN_PetrolStation_Diesel06 "SB (Wedel) [%.3f €]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Prices, gStandardTimeline)
// open/closed status
Contact NL_IN_PetrolStation_Open01 "Nordoel (Uetersen) [MAP(cnt2ger.map):%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Open)
Contact NL_IN_PetrolStation_Open02 "Nordoel (Elmshorn) [MAP(cnt2ger.map):%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Open)
Contact NL_IN_PetrolStation_Open03 "HEM (Elmshorn) [MAP(cnt2ger.map):%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Open)
Contact NL_IN_PetrolStation_Open04 "Star (Elmshorn) [MAP(cnt2ger.map):%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Open)
Contact NL_IN_PetrolStation_Open05 "HEM (Wedel) [MAP(cnt2ger.map):%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Open)
Contact NL_IN_PetrolStation_Open06 "SB (Wedel) [MAP(cnt2ger.map):%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Open)
// Display items
String NL_IN_PetrolStation_Display01 "Anzeige Tankstelle 01 [%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Display)
String NL_IN_PetrolStation_Display02 "Anzeige Tankstelle 02 [%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Display)
String NL_IN_PetrolStation_Display03 "Anzeige Tankstelle 03 [%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Display)
String NL_IN_PetrolStation_Display04 "Anzeige Tankstelle 04 [%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Display)
String NL_IN_PetrolStation_Display05 "Anzeige Tankstelle 05 [%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Display)
String NL_IN_PetrolStation_Display06 "Anzeige Tankstelle 06 [%s]" <scene_gas_station> (NL_IN_PetrolStation, gPetrolStation_Display)
and the rules
// Items File: petrolstation.rules
//
// All rules to process die pertrolstation data gathered from the Tankerkönig binding
//
// Imports
import java.util.concurrent.locks.ReentrantLock
import java.util.Date
// Global variables and constants
var ReentrantLock petrolLock = new ReentrantLock()
// Rule: Process Update of Gasoline Prices
//
// On update of gasoline prices sort them and set the labels of display items to sorted order
//
rule "Process Update of Gasoline Prices"
when
Member of gPetrolStation_Prices received update
then
petrolLock.lock()
try {
val String ruleIdentifier = "userrule.ProcessUpdateOfGasolinePrices"
var i = 1
for (stationPrice : gPetrolStation_Prices.members.sortBy[ state as DecimalType ]) { // Another loop to overcome the "Final Variable" vs "Lambda" problem
val String stationIdentifier = stationPrice.name.substring(0, stationPrice.name.lastIndexOf('_'))
val String stationNumber = stationPrice.name.substring(stationPrice.name.length-2, stationPrice.name.length)
val ContactItem stationOpen = gPetrolStation_Open.members.filter[ k | k.name == stationIdentifier+"_Open"+stationNumber ].head as ContactItem
val String counter = String::format("%02d", i)
val StringItem stationDisplay = gPetrolStation_Display.members.filter[ k | k.name == stationIdentifier+"_Display"+counter ].head as StringItem
stationDisplay.label = stationPrice.label
if (stationOpen.state == OPEN) {
if (i==1) {
stationDisplay.postUpdate(String::format("(%1$tR) %2$.3f €", new Date(), (stationPrice.state as DecimalType).doubleValue()))
} else {
stationDisplay.postUpdate(String::format("%.3f €", (stationPrice.state as DecimalType).doubleValue()))
}
} else {
stationDisplay.postUpdate(transform("MAP", "contact2german.map", stationOpen.state.toString))
}
i=i+1
}
NL_IN_PetrolStation_LastUpdate.postUpdate(new DateTimeType())
logInfo(ruleIdentifier, "Gasoline prices are updated and sorted! Initiator {},", triggeringItem.label)
} finally {
petrolLock.unlock()
}
end
and the sitemap part
Frame label="Tankstellen" {
Text item=NL_IN_PetrolStation_Display01
Text item=NL_IN_PetrolStation_Display02
Text item=NL_IN_PetrolStation_Display03
Text item=NL_IN_PetrolStation_Display04
Text item=NL_IN_PetrolStation_Display05
Text item=NL_IN_PetrolStation_Display06
}
The idea ist to sort the item in a dynamic manner so that the cheapest station is shown first. and it works.