Bissi arg theoretisch
Aber ganz einfach:
überträgt den Wert von item1 nach item2. Gewöhnlich sollte das bei gleichem Itemtyp funktionieren. Es gibt natürlich Ausnahmen

Die "überkorrekte" Variante:
Code: Alles auswählen
if(item1.state instanceof Number)
item2.postUpdate(item1.state as Number)
else
item2.postUpdate(NULL)
Oder etwas kompakter mit ternärem Operator notiert:
Code: Alles auswählen
item2.postUpdate(if(item1.state instanceof Number) (item1.state as Number) else NULL)
Aber in Deinem Beispiel von weiter oben geht es ja gerade nicht um
Number Items, sondern um
Number:Energy Items, das ist ein Unterschied.
Nehmen wir an, wir haben drei Items vom Typ
Number:Energy,, nämlich
Energie1,
Energie2 und
EnergieSumme, der Status von Energie1 ist
5005 Wh, der Status von Energie2 ist
11.5 kWh, dann ergibt das mittels
Code: Alles auswählen
EnergieSumme.postUpdate((Energie1.state as QuantityType<Energy>) + Energie2.state as QuantityType<Energy>))
in EnergieSumme den Status
16505 Wh (oder
16.505 kWh oder
0.016505 MWh, ganz nach Belieben).
Wie der Wert im Item gespeichert wird und wie der Wert angezeigt wird, kannst Du frei definieren (Ersteres über den Metadaten Parameter
unit, Letzteres über den Metadaten Parameter
stateDescription->pattern.
Die Unit sollte nur einmal gesetzt werden, da die Persistence nicht unit aware ist, sie orientiert sich an diesem Parameter. Wenn man nun den Parameter verstellt, werden alle bisher persistieren Werte falsch dargestellt.
Die State Description hingegen kannst Du beliebig ändern, sie beeinflusst ja nur, wie der aktuelle Status dargestellt wird. Die angegeben Einheiten sollten allerdings immer zum gewählten Itemtyp passen, also z.B. kJ, MWs, kcal oder mWh für Energie bzw. geleistete Arbeit.
Die Unit, in der das Item den Status hält, die Anzeige-Unit und die Unit, in der der Channel die Daten ins Item ablegt, sind voneinander unabhängig, sie müssen lediglich für die gleiche Größe stehen.
Z.B. liefert ein Temperatursensor über mqtt eine ganze Zahl 200. Du weißt, der Wert wird in zehntel Grad Celsius übertragen.
Du möchtest den Wert in Kelvin speichern, weil Du Wissenschaftler bist, aber die Anzeige sollte in °F erfolgen, und zwar mit einer Nachkommastelle, für die amerikanische Freundin der Tochter, die gerade zu Besuch ist

.
Definition von Channel und Item in Textform:
Code: Alles auswählen
Channel:
Type number : temp "Temeratur" [stateTopic="...", unit="d°C"] // Dezigrad Celsius
// Item:
Number:Temperature Temperatur "Temperatur" {channel="mqtt:...",unit="K",stateDescription=""[pattern="%.1f °F"]}
Wenn Du nun den Status des Items als Number abfragst:
Code: Alles auswählen
logInfo("temp,"Temperatur als Zahl: {}",(Temperatur.state as Number).floatValue)
bekommst Du bei einem Eingangswert von 200 als Rückgabe 293,15 (weil der numerische Wert im Item in Kelvin gehalten wird).
In der Itemliste in der Main UI wird ebenfalls der Wert in K ausgegeben, bei glatten Werten auch mit sichtbarem K als Einheit.
In der Anzeige des einzelnen Items erhältst Du hingegen 68,0 °F., weil hier die State Description angewendet wird.
Die Units of Measurement sind ein extrem mächtiges Werkzeug

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