Ja, aber nein.
Wie sieht Deine Rule aktuell aus?
Mein Tipp an der Stelle wäre, die Zyklen zu zählen. Nehmen wir an, der Timer schaltet alle (iOnTime + iOffTime) Sekunden zweimal den Zustand um, dann bedeutet das 2 * 10 * 60 / (iOnTime + iOffTime) Schaltvorgänge innerhalb von 10 Minuten.
Du zählst also mit einer Integer Variable mit:
Code: Alles auswählen
// globale Variable
var Integer iCountBlink = 0
...
// im Timer ganz vorne
iCountBlink += 1 // Zähler um 1 erhöhen
val Integer iBorder = 2 * 10 * 60 / (iOnTime + iOffTime)
if(iCountBlink > iBorder) {
tEndlos.cancel // Timer abbrechen
MyRelais.sendCommand(ON) // und Licht dauerhaft einschalten
}
...
Das Ausschalten des Lichts kann natürlich innerhalb der Rule erledigt werden, wenn newState OFF ist, einfach vor dem return; noch das passende sendCommand(OFF) mit einbauen.
vollständige Rule evtl. so:
Code: Alles auswählen
var Timer tEndlos = null // Variable für Timer
var Integer iCountBlink = 0 // Zähler für Blinken
val iOnTime = 10 // Einschaltdauer
val iOffTime = 20 // Ausschaltdauer
val Integer iMinTemp = 50 // Einschalttemperatur
val Integer iMaxPower = 50 // Ausschaltleistung
rule "10 Minuten Blinken"
when
Item Puffer_T2 changed or // Temperatur überschritten?
Item FRITZDECT_210_Leistung changed // Leistung unterschritten?
then
val fTemp = if(Puffer_T2.state instanceof Number) // lokale Konstante mit Wert füllen
(Puffer_T2.state as Number).floatValue // falls gültige Zahl, Wert aus Item
else // ansonsten
54 // Wert, der nicht triggert
val fPower = if(FRITZDECT_210_Leistung.state instanceof Number) // enbenso für das zweite Item
(FRITZDECT_210_Leistung.state as Number).floatValue
else
51
if(tEndlos === null && fTemp > iMinTemp) { // Timer läuft nicht und Temperatur überschritten
tEndlos = createTimer(now, [| // Timer anlegen und sofort ausführen
val iCountBorder = 2 * 10 * 60 / (iOffTime + iOnTime) // Periodenanzahl berechnen
iCountBlink += 1 // Schritt zählen
if(iCountBlink > iCountBorder) { // Falls Periodenanzahl überschritten
MyRelais.sendCommand(ON) // Licht einschalten
return; // und nix weiter machen
}
var iTime = if(MyRelais.state != ON) iOnTime else iOffTime // Falls Relais nicht ON, ONzeit setzen, ansonsten OFFzeit
MyRelais.sendCommand(if(MyRelais.state != ON) ON else OFF) // Relais toggeln
tEndlos.reschedule(now.plusSeconds(iTime)) // Timer erneut planen
])
} else if(tEndlos !== null && fPower < iMaxPower) { // Timer existiert und Leistung unterschritten
MyRelais.sendCommand(OFF) // Ausschalten
tEndlos.cancel // Timer abbrechen
tEndlos = null // Zeiger auf null
}
end
Aber grau ist alle Theorie...

Es gäbe natürlich auch diverse andere Möglichkeiten, das zu lösen
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet