Seite 1 von 1

DSL-Rule - Period.between -Fehlermeldung

Verfasst: 15. Apr 2026 11:45
von peter-pan
Ich habe eine Regel, die in meinem Produktionssystem (OH 5.1.3) funktioniert.
In meinem Testsystem (openHAB 5.2.0-SNAPSHOT - Build #5306) wird mir aber eine Fehlermeldung ausgegeben.

Code: Alles auswählen

2026-04-15 11:18:18.434 [WARN ] [el.core.internal.ModelRepositoryImpl] - DSL model 'test25_datum_testen.rules' has errors, therefore ignoring it: [27,19]: no viable alternative at input 'between'
.rules

Code: Alles auswählen

rule "Datum testen"
  when
    Item Dummy_11 changed to ON
  then
//       var day_1 = (OneCall_ObservationTime.state.toString).toString//("dd")
//       var day_2 = (OneCall_ObservationTime.state).plusDays(1).plusHours(6)//.toString("yyMMddHHmm")
//       logInfo ("Datum testen", "day1 ist {} und day2 ist {} day 3 ist {}", day_2)
//       var day0 = (OneCall_ObservationTime.state.toString).toString("yyMMdd")
//       var day1 = (OneCall_ObservationTime.state.toString).plusDays(1).toString("yyMMdd")
//       var day2 = (OneCall_ObservationTime.state.toString).plusDays(2).toString("yyMMdd")
//       var day3 = (OneCall_ObservationTime.state).plusDays(2)
//        logInfo ("Datum testen", "day0 ist {} day1 ist {} day2 ist {} day3 ist {} day4 ist {} day5 ist {}", day0, day1, day2,day3)
//  if (now.isBefore(day3)) {
//        logInfo ("Datum testen", "now {} is before day3 {}",now)
//    }
//  if (now.isBefore(OneCall_Current_Sunset.state)) {
//        logInfo ("Datum testen", "now {} is before Sunset {}",now, OneCall_Current_Sunset.state.toString)
//    }
//  if (now.isAfter(day3)) {
//        logInfo ("Datum testen", "now is after  day3 {}")
//    }

var LocalDate endofCentury = LocalDate.of(2014, 01, 01)
var LocalDate just = LocalDate.now()

var diff = Period.between(endofCentury, just)
// var Duration diff1 =  Duration.between(endofCentury, just)
logInfo("datediff", "diff between  Years: {}  Months: {} Days: {}", diff.getYears, diff.getMonths, diff.getDays)
// logInfo("datediff1", "diff between  Duration: {}  ", diff1)
end
Besagte Zeile 27 ist:

Code: Alles auswählen

var diff = Period.between(endofCentury, just)
Habe bisher den Grund nicht finden können. Muss man evtl. eine Funktion importieren ? Wenn ja, welche ?

Re: DSL-Rule - Period.between -Fehlermeldung

Verfasst: 15. Apr 2026 23:19
von udo1toni
Du könntest einfach die komplette Klasse angeben:

Code: Alles auswählen

var diff = java.time.Period.between(endofCentury, just)
Die Klasse java.time wird - aus welchem Grund auch immer - nicht vollständig importiert, der einfache Workaround ist dann, die Klasse mit anzugeben.

Ungetestet. :)

Re: DSL-Rule - Period.between -Fehlermeldung

Verfasst: 16. Apr 2026 18:03
von peter-pan
udo1toni hat geschrieben: 15. Apr 2026 23:19 Du könntest einfach die komplette Klasse angeben:
Hallo Udo,
Danke für den Tipp, aber irgenwie scheint das ".between" nicht mehr akzeptabel.

Fehler:

Code: Alles auswählen

2026-04-16 17:48:00.367 [WARN ] [el.core.internal.ModelRepositoryImpl] - DSL model 'datum_testen_2.rules' has errors, therefore ignoring it: [10,29]: no viable alternative at input 'between'
 
.rules - (abgespeckt)

Code: Alles auswählen

rule "Datum testen_2"
  when
    Item Dummy_12 changed to ON
  then

var LocalDate endofCentury = LocalDate.of(2014, 01, 01)
var LocalDate just = LocalDate.now()

    //var diff = Period.between(endofCentury, just)
var diff = java.time.Period.between(endofCentury, just)
   // var Duration diff1 =  Duration.between(endofCentury, just)
logInfo("datediff", "diff between  Years: {}  Months: {} Days: {}", diff.getYears, diff.getMonths, diff.getDays)
  // logInfo("datediff1", "diff between  Duration: {}  ", diff1)

end

Ich habe auch an anderer Stelle (Rules) Fehlermeldungen bekommen, die sich auch auf Vergleiche beziehen.

Beispiel:

Code: Alles auswählen

2026-04-16 17:48:05.158 [WARN ] [el.core.internal.ModelRepositoryImpl] - DSL model 'test_weihnachtzeit.rules' has errors, therefore ignoring it: [54,46]: no viable alternative at input '<='
[54,49]: extraneous input '2029' expecting ')'
Diese Rules laufen aber in Version OH5.1.3 ganz normal.