instanceof ist ein Operator (so wie kleiner, größer) und bedeutet "Ist eine Instanz von" (na ja, das hast Du sicher selbst auch schon so übersetzt). Den Wert kann man so oder so zurück geben, man sollte halt, bevor man einfach voraussetzt, dass sich im Status schon eine Zahl befinden wird, lieber prüfen, ob das auch der Fall ist. Wenn das Item nicht initialisiert ist, bekommt man sonst einen NULL-Pointer Error (was ca. 20 Zeilen im Log sind, hässlich.)
Zu Deinem eigentlichen Problem: Du hast den Bool'schen Operator falsch gesetzt. Der Befehl soll ausgeführt werden, wenn der Rollladen zu weit oben
ODER zu weit unten steht. Dein Vergleich lautet aber auf zu weit oben
UND zu weit unten, was niemals zutreffen kann.
Code: Alles auswählen
if (azim > ss3) {
IST_3_Switch.sendCommand(ON)
if ((Studio_1_Pos.state as Number) > (Rollo_auf_3.state as Number) + 4 || (Studio_1_Pos.state as Number) < (Rollo_auf_3.state as Number) - 4) {
Studio_1_Pro.sendCommand(Rollo_auf_3.state as Number)
}
IST_2_Switch.sendCommand(OFF)
}
Ich bin mir recht sicher, dass Du auf .intValue an dieser Stelle verzichten kannst.
Ich habe im Vergleich die Positionen jeweils getauscht, das hat den Hintergrund, dass ein Istwert mit einem Sollwert (+/- Spielraum) verglichen wird. Ist die Abweichung zu groß, wird der Sollwert als Befehl gesendet. Es erscheint mir übersichtlicher, den Vergleich so herum aufzubauen.
Du hast offensichtlich zwei Items für Steuerung und Position des Ladens, hat das einen besonderen Grund? Für gewöhnlich sollte ein Item hierfür ausreichen. Welches Binding hängt denn an den Items?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet