Re: Nervige kommastellen ändern
Verfasst: 21. Okt 2022 20:25
Das Problem ist, dass Du auf dem selben Channel empfangen und senden willst. Das wird mit dem JS so nicht funktionieren. Du musst ja den Wert auch in der anderen Richtung konvertieren und dann mit 10 multiplizieren.
Wahrscheinlich ist es das einfachste, Du nutzt ein Proxy Item mit Rule. Sieht so aus:
In der UI bindest Du nur das Item ThermostatKueche_TempSet_proxy ein.
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:
Ungetestet. Die Namensberechnung funktioniert natürlich einfacher, wenn man ein Zeichen exklusiv im Itemnamen verwenden kann (das wäre der Unterstrich...), dann könnte man mit triggeringItem.name.split("_").get(0) einfach den Teil vor dem Unterstrich extrahieren, so muss der angehängte Teilstring halt abgeschnitten werden.
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