Wahrscheinlich ist es das einfachste, Du nutzt ein Proxy Item mit Rule. Sieht so aus:
Code: Alles auswählen
//Items: ThermostatKueche_TempSet, ThermostatKueche_TempSet_proxy
rule "get temp"
when
Item ThermostatKueche_TempSet changed
then
if(!(newState instanceof Number))
return;
ThermostatKueche_TempSet_proxy.postUpdate((newState as Number)/10)
end
rule "set temp"
when
Item ThermostatKueche_TempSet_proxy received command
then
if(!(receivedCommand instanceof Number))
return;
ThermostatKueche_TempSet.sendCommand((receivedCommand as Number) * 10)
end
Für die Ist-Temperatur funktioniert es natürlich mit dem JS.
Wenn Du mehrere gleichartige Devices hast, kannst Du für die read only Channel immer das selbe JS Script angeben. Für die read/write Channel müssen die beiden Rules etwas angepasst werden, damit sie mit Gruppen arbeiten. Die Itemnamen müssen in zwei Gruppen gepackt werden und die Namen der Items müssen voneinander ableitbar sein (wie im Beispiel, das eine Item hat nur das _proxy hinten dran hängen). Z.B. so:
Code: Alles auswählen
//Items: ThermostatKueche_TempSet, ThermostatKueche_TempSet_proxy
rule "get temp"
when
Member of gThermostat_TempSet changed
then
if(!(newState instanceof Number))
return;
val myItem = gThermostat_TempSet_proxy.members.filter[i|i.name.startsWith(triggeringItem.name)].head
myItem.postUpdate((newState as Number)/10)
end
rule "set temp"
when
Member of gThermostat_TempSet_proxy received command
then
if(!(receivedCommand instanceof Number))
return;
val strName = triggeringItem.name.substring(0,triggeringItem.name.length - 6)
val myItem = gThermostat_TempSet.members.filter[i|i.name == strName].head
myItem.sendCommand((receivedCommand as Number) * 10)
end