Nein.
Ein State ist ein State. Du willst mit Zahlen arbeiten.
Entsprechend sollte der Code immer so aussehen:
Code: Alles auswählen
if((number1.state as Number) > (number2.state as Number))
number2.postUpdate(number1.state as Number)
Das Problem ist hier allerdings, dass durch das Casting ein Fehler auftreten kann, falls der Datentyp nicht stimmt (das gälte allerdings beim Vergleich ebenfalls) Entsprechend ist es essenziell, die Daten vorher zu prüfen:
Code: Alles auswählen
if(!(number1.state instanceof Number)) {
logWarn("vergleich","number1.state enthält keine gültige Zahl! ()",number1.state)
return;
}
if(!(number2.state instanceof Number)) {
logWarn("vergleich","number2.state enthält keine gültige Zahl! ()",number2.state)
return;
}
if((number1.state as Number) > (number2.state as Number))
number2.postUpdate(number1.state as Number)
Selbstverständlich kannst Du auch statt des Abbruchs in anderer Form auf den Fehler reagieren. Wichtig ist nur, dass der anschließende Vergleich mit dem Casting unterlassen wird. Es ist übrigens nicht hinreichend, einfach einen Dummy Wert in das Item zuschreiben, weil openHAB asynchron arbeitet, es gibt also keine Garantie, dass nach dem postUpdate der Wert auch "sofort" wieder aus dem Item gelesen werden kann.
Deshalb kann es sinnvoll sein, mit lokalen Variablen zu arbeiten:
Code: Alles auswählen
var Number nZahl1 = 0 // default Wert
var Number nZahl2 = 0 // default Wert
if(number1.state instanceof Number) nZahl1 = number1.state as Number
if(number2.state instanceof Number) nZahl2 = number2.state as Number
if(nZahl1 > nZahl2) nZahl2 = nZahl1
if(number2.state != nZahl2)
number2.postUpdate(nZahl2)
Der letzte Vergleich funktioniert hier, denn es wird lediglich auf Gleichheit (bzw. Ungleichheit) geprüft. Dazu bedarf es keines Castings, die Typkonvertierung wird dabei automatisch korrekt ausgeführt.
openHAB5.0.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox 9.1.2 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte