Seite 1 von 1

Fehler beim laden einer Rules DAtei

Verfasst: 6. Mär 2026 07:28
von Markus_JE
Hallo zusammen,

ich bekommen beim laden einer rules datei immer den Fehler im Logging:
DSL model 'Abfall.rules' has errors, therefore ignoring it: [13,42]: no viable alternative at input ')' [14,43]: no viable alternative at input ')'

Ich verwende openhab 5.1.3 auf eine Raspberry.
Ich komme einfach nicht dahinter wo openhab genau ein Problem hat bzw. was ich ändern kann. Anbei meine Regel:

Code: Alles auswählen

rule "Abfall ICS verarbeiten"
when
    Item Abfall_ICS_Rohdaten changed
then
    val raw = Abfall_ICS_Rohdaten.state.toString
    if (raw === null || raw.trim.isEmpty) return

    val lines = raw.split("\n")

    val today = (now.toLocalDate.toString).replaceAll("-", "")
    val tomorrow = (now.plusDays(1).toLocalDate.toString).replaceAll("-", "")

    var heuteList = newArrayList[String]()
    var morgenList = newArrayList[String]()

    var currentDate = ""
    var currentSummary = ""

    for (line : lines) {

        if (line.startsWith("DTSTART")) {
            currentDate = line.substring(line.indexOf(":") + 1, line.indexOf(":") + 9)
        }

        if (line.startsWith("SUMMARY")) {
            currentSummary = line.substring(line.indexOf(":") + 1)
        }

        if (line.startsWith("END:VEVENT")) {
            if (currentDate == today) {
                heuteList.add(currentSummary)
            }
            if (currentDate == tomorrow) {
                morgenList.add(currentSummary)
            }
            currentDate = ""
            currentSummary = ""
        }
    }

    // Heute
    var h1 = if (heuteList.size > 0) heuteList.get(0) else ""
    var h2 = if (heuteList.size > 1) heuteList.get(1) else ""
    var h3 = if (heuteList.size > 2) heuteList.get(2) else ""
    var h4 = if (heuteList.size > 3) heuteList.get(3) else ""
    var h5 = if (heuteList.size > 4) heuteList.get(4) else ""

    Abfall_Heute_1.postUpdate(h1)
    Abfall_Heute_2.postUpdate(h2)
    Abfall_Heute_3.postUpdate(h3)
    Abfall_Heute_4.postUpdate(h4)
    Abfall_Heute_5.postUpdate(h5)

    // Morgen
    var m1 = if (morgenList.size > 0) morgenList.get(0) else ""
    var m2 = if (morgenList.size > 1) morgenList.get(1) else ""
    var m3 = if (morgenList.size > 2) morgenList.get(2) else ""
    var m4 = if (morgenList.size > 3) morgenList.get(3) else ""
    var m5 = if (morgenList.size > 4) morgenList.get(4) else ""

    Abfall_Morgen_1.postUpdate(m1)
    Abfall_Morgen_2.postUpdate(m2)
    Abfall_Morgen_3.postUpdate(m3)
    Abfall_Morgen_4.postUpdate(m4)
    Abfall_Morgen_5.postUpdate(m5)
end


Re: Fehler beim laden einer Rules DAtei

Verfasst: 6. Mär 2026 10:22
von nw378
Die Fehlermeldung bezieht sich auf die Linien 13 und 14, dort sind die Klammern um (now....) falsch.

Korrekt müsste es so sein:

Code: Alles auswählen

val today = now.toLocalDate.toString.replaceAll("-", "")
val tomorrow = now.plusDays(1).toLocalDate.toString.replaceAll("-", "")
Was mir dann noch aufgefallen ist:

hinter return muss ein ;
also:

Code: Alles auswählen

return;
Und das Escapen des Zeilenwechsels kann manchmal zicken, evtl muss du es doppelt escapen \\n oder auch umschiffen:

Code: Alles auswählen

.replaceAll('\\n','#').split('#');
Edit:

openHAB hat das icalender Binding https://www.openhab.org/addons/bindings/icalendar/, damit lassen sich ganz bequem aus .ics Dateien die Einträge verarbeiten, mit Titel, Datum, etc.

Für einen Müllkalender zum Beispiel so:

Code: Alles auswählen

// --- Aktuelles Jahr ---
Bridge icalendar:calendar:abfall1 "Müllkalender (dieses Jahr)" @ "Stadt" [
    url = "http://localhost:8080/static/abfalla.ics",
    refreshTime = 60
] 
    Thing icalendar:eventfilter:blau1  "Müllkalender: Papierabfuhr (aktuell)" (icalendar:calendar:abfall1 ) [ maxEvents = 1, datetimeUnit = "DAY", datetimeStart = 0, datetimeEnd = 365, datetimeRound = true, textEventField = "SUMMARY", textEventValue = "Papier", textValueType = "TEXT", refreshTime = 60 ]
    Thing icalendar:eventfilter:grau1  "Müllkalender: Restmüll (aktuell)"     (icalendar:calendar:abfall1 ) [ maxEvents = 1, datetimeUnit = "DAY", datetimeStart = 0, datetimeEnd = 365, datetimeRound = true, textEventField = "SUMMARY", textEventValue = "Rest",   textValueType = "TEXT", refreshTime = 60 ]
    Thing icalendar:eventfilter:gelb1  "Müllkalender: Gelbe Tonne (aktuell)"  (icalendar:calendar:abfall1 ) [ maxEvents = 1, datetimeUnit = "DAY", datetimeStart = 0, datetimeEnd = 365, datetimeRound = true, textEventField = "SUMMARY", textEventValue = "Gelb",   textValueType = "TEXT", refreshTime = 60 ]
    Thing icalendar:eventfilter:gruen1 "Müllkalender: Biotonne (aktuell)"     (icalendar:calendar:abfall1 ) [ maxEvents = 1, datetimeUnit = "DAY", datetimeStart = 0, datetimeEnd = 365, datetimeRound = true, textEventField = "SUMMARY", textEventValue = "Bio",    textValueType = "TEXT", refreshTime = 60 ]

.items:

Code: Alles auswählen

// 🗓️ Abholtermine pro Tonne (Farben & Instanzen)
DateTime Abfall_Termin1_grau    (gTrash, gAbfall_alleTermine)   {channel="icalendar:eventfilter:grau1:result_0#begin"}
DateTime Abfall_Termin1_blau    (gTrash, gAbfall_alleTermine)   {channel="icalendar:eventfilter:blau1:result_0#begin"}
DateTime Abfall_Termin1_gelb    (gTrash, gAbfall_alleTermine)   {channel="icalendar:eventfilter:gelb1:result_0#begin"}
DateTime Abfall_Termin1_gruen   (gTrash, gAbfall_alleTermine)   {channel="icalendar:eventfilter:gruen1:result_0#begin"}