In den beiden if-Statements hast Du einen Fehler. Du darfst nicht das Item vergleichen, sondern musst dessen Status vergleichen, also jeweils ein .state anhängen.Baumtasche hat geschrieben: ↑2. Okt 2020 19:44Code: Alles auswählen
rule "Aktuelle Helligkeit fällt unter 10" //"React on Aktuelle Helligkeit (Lichtsensor_1_CurrentIllumination) change/update" when Item Lichtsensor_Aussen changed then if((Lichtsensor_Aussen.state as Number) < 30 && (ItemRollo_Geschlossen== CLOSED)) { // ACHTUNG! Rollo_Bad_Level.sendCommand(100) [...] if(DrehTerrasse_State == CLOSED) // ACHTUNG! Rollo_Terrasse_Level.sendCommand(32) ItemRollo_Geschlossen.postUpdate(ON) } end
Rule läuft manchmal nicht !
- udo1toni
- Beiträge: 15264
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule läuft manchmal nicht !
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
- udo1toni
- Beiträge: 15264
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Rule läuft manchmal nicht !
Ja, Käse... da fehlt noch jeweils ein .get...Baumtasche hat geschrieben: ↑2. Okt 2020 21:57 Hallo Udo1toni,
kannst du bitte noch Mal auf folgende Passage von dir schauen?
VSCode meldet, dass lShutter --> invalid number of arguments. The field lShutter is not applicable for the arguments (Integer), dass gleiche bei lShutterCloseCode: Alles auswählen
sendCommand("Rollo_" + lShutter(iShutter) + "_Level",lShutterClose(iShutter).intValue) tShutter.reschedule(now.plusSeconds(lShutterTime(iShutter).intValue)) iShutter = iShutter + 1 ])
Code: Alles auswählen
// globale Variablen zu Beginn der Datei definieren!
var Timer tShutter = null
var Integer iShutter = 0
val lShutter = newArrayList('Bad', 'SchlafzKleider', 'SchlafzGarage', 'SchlafzBalkon')
val lShutterClose = newArrayList(100, 100, 100, 32)
val lShutterTime = newArrayList(15, 7, 2, 3)
rule "Rollläden schließen"
when
Item Lichtsensor_Aussen changed
then
if(tShutter !== null) { // Timer läuft schon
logInfo("shutter","Rule getriggert, aber Timer bereits aktiv. Abbruch!")
return;
}
if(!(Lichtsensor_Aussen.state instanceof Number)) { // ist der Status eine Zahl?
logWarn("shutter","Lichtsensor liefert ungültigen Status ({}). Abbruch!",Lichtsensor_Aussen.state)
return;
}
val Number nPrev = if(previousState instanceof Number) (previousState as Number).floatValue else 20 // alten Wert auslesen
if((Lichtsensor_Aussen.state as Number).floatValue < 10 && nPrev > 10) { // Falls Schwellwert unterschritten und vorher nicht unterschritten
iShutter = 0 // Zähler zurücksetzen
tShutter = createTimer(now.plusMillis(10),[| // Timer anlegen und starten
if(lShutter.size >= iShutter) {
tShutter = 0
return;
}
sendCommand("Rollo_" + lShutter.get(iShutter) + "_Level",lShutterClose.get(iShutter).intValue) // Shutternamen aus Liste berechnen und mit passendem Wert ansteuern
tShutter.reschedule(now.plusSeconds(lShutterTime.get(iShutter).intValue)) // Timer erneut planen
iShutter = iShutter + 1 // Zähler erhöhen
])
}
end
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 82
- Registriert: 14. Sep 2020 21:52
Re: Rule läuft manchmal nicht !
Danke für den Hinweis mit ".state" in den If - Anweisungen. Im Skript habe ich es richtig gehabt. War ein Copy - Paste Fehler. Hatte es nachträglich hier ergänzt und falsch gemacht 
