DSL-Rule - Period.between -Fehlermeldung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
peter-pan
Beiträge: 2864
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

DSL-Rule - Period.between -Fehlermeldung

Beitrag 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 ?
Pi5/8GB(PiOS Lite 64-bit(trixie)/SSD 120GB - OH5.1.3 openhabian
(Test openHAB 5.2.0-SNAPSHOT - Build #5306)

Benutzeravatar
udo1toni
Beiträge: 15678
Registriert: 11. Apr 2018 18:05
Answers: 254
Wohnort: Darmstadt

Re: DSL-Rule - Period.between -Fehlermeldung

Beitrag 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. :)
openHAB5.1.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.1.6 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte

Benutzeravatar
peter-pan
Beiträge: 2864
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: DSL-Rule - Period.between -Fehlermeldung

Beitrag 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.
Pi5/8GB(PiOS Lite 64-bit(trixie)/SSD 120GB - OH5.1.3 openhabian
(Test openHAB 5.2.0-SNAPSHOT - Build #5306)

Antworten