Ah. Ich sehe Dein Problem.
Weil Du im letzten Vergleich auch wieder auf > 100 testest, musst Du vorne den Maximalwert auf 301 begrenzen. Korrekt wäre hingegen, den letzten Vergleich auf == 100 zu ändern, dann kannst Du vorne auf 300 begrenzen.
Die Rule sendet ständig Befehle, obwohl das evtl. teilweise gar nicht notwendig ist. Also besser so:
Code: Alles auswählen
rule "ePatrone 3"
when
Item FRITZDECT2101_Leistung changed
then
var Relais1 = OFF
var Relais2 = OFF
var Relais3 = OFF
var Number nDiff = ((FRITZDECT2101_Leistung.state as Number).floatValue * 15)
var Integer iStufe = (nDiff / 15).intValue
if(ePatrone.state != ON){
iStufe = 0
}
if(iStufe < 0)
iStufe = 0
if(iStufe > 300)
iStufe = 300
if(iStufe > 100) {
iStufe -= 100
Relais1 = ON
}
if(iStufe > 100) {
iStufe -= 100
Relais2 = ON
}
if(iStufe == 100) {
iStufe -= 100
Relais3 = ON
}
if(Ladeleistung.state.toString != iStufe.toString)
Ladeleistung.sendCommand(iStufe)
if(Module_5_Heizpatrone_Ausgang_1.state.toString != iStufe.toString)
Module_5_Heizpatrone_Ausgang_1.sendCommand(iStufe)
if(Stufe1.state != Relais1)
Stufe1.sendCommand(Relais1)
if(Stufe2.state != Relais2)
Stufe2.sendCommand(Relais2)
if(Stufe3.state != Relais3)
Stufe3.sendCommand(Relais3)
pvakt.postUpdate(nDiff)
logInfo("ePatrone","Überschuss = {} Watt, Stufe1 = {} / Stufe2 = {} / Stufe3 = {}",nDiff,Relais1,Relais2,Relais3)
end
Für die Items Ladeleistung, Module_5_Heizpatrone_Ausgang_1 sowie Stufe1, Stufe2 und Stufe3 wird der aktuelle Status mit dem Soll verglichen. Nur bei Abweichung wird ein Befehl gesendet.
Wenn Du auf das Auslesen der drei Status verzichtest und stattdessen die Sollwerte loggst, kannst Du auf das Thread::sleep() verzichten.
Ich weiß, Du möchtest den Status nach dem Schaltvorgang haben, aber der wird Dir auch nach den 500 Millisekunden nicht garantiert. Du müsstest viel Aufwand betreiben, um sicherzustellen, den "echten" Status zu bekommen (mindestens autoupdate="false" für die Items plus Überwachung des Zeitstempels vom Update - mit Abgleich der aktuellen Zeit usw., und im Grunde müsstest Du statt der Schaltstellung die Stromaufnahme der drei Stromkreise überwachen und daraus den aktuellen Status ableiten.

Und auch da kann was schief gehen...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet