Fehler in Rule nach Umstellung auf OH3

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Sascha.K
Beiträge: 35
Registriert: 2. Feb 2019 16:58
Answers: 1

Fehler in Rule nach Umstellung auf OH3

Beitrag von Sascha.K »

Hallo,

ich habe meine Rules von OH2.4 nach OH3.2 übernommen. Leider gibt das LOG bei einer Rule an mehreren Stellen eine Fehlermeldung aus, folgend ein Beispiel:

Code: Alles auswählen

rule with UID 'Licht-5' failed: class java.lang.Integer cannot be cast to class java.lang.Enum (java.lang.Integer and java.lang.Enum are in module java.base of loader 'bootstrap') in Licht
Die Rule selber wird laut LOG nach dem zweiten Versuch normal geladen:

Code: Alles auswählen

Loading model 'Licht.rules'
2022-05-05 16:51:01.792 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'Licht.rules' is either empty or cannot be parsed correctly!
2022-05-05 16:51:02.796 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'Licht.rules'
Die Fehlermeldung beim laden hat wahrscheinlich damit zu tun, das sich in der Licht.rule mehrere einzelne Rules befinden... :?:

Hier 2 Beispiele der fehlerhaften Regeln:

Code: Alles auswählen

rule    "EINSCHALTEN durch Lichtautomatik Wochentag Modus Sonnenuntergang"
 when
         Channel "astro:sun:Astro_Sonnendaten:set#event" triggered START
 then 
         if ((EG_WZ_Steckdose_Fernseher_Lampe_Auswahl_Lichtautomatik_Wochentag_Ein.state == 3) && (now.getDayOfWeek <= 5))
             {
                 logInfo("Wohnzimmer", "EG_WZ_Steckdose_Fernseher_Lampe EINSCHALTEN durch Lichtautomatik Wochentag Modus Sonnenuntergang")
                 EG_WZ_Steckdose_Fernseher_Lampe.sendCommand(ON)
             }

Code: Alles auswählen

rule    "EINSCHALTEN durch Lichtautomatik Wochentag Modus Sonnenuntergang mit Zufallsszeit"
 when
         Channel "astro:sun:Astro_Sonnendaten:daylight#event" triggered END
 then 
         if ((EG_WZ_Steckdose_Fernseher_Lampe_Auswahl_Lichtautomatik_Wochentag_Ein.state == 4) && (now.getDayOfWeek <= 5))
             {
                 var Integer zufallszeit1
                 zufallszeit1 = 1 + (Math::random * 50.0).intValue
                 createTimer(now.plusMinutes(zufallszeit1)) 
                     [|
                     logInfo("Wohnzimmer", "EG_WZ_Steckdose_Fernseher_Lampe EINSCHALTEN durch Lichtautomatik Wochentag Modus Sonnenuntergang mit Zufallsszeit")
                     EG_WZ_Steckdose_Fernseher_Lampe.sendCommand(ON)
                     ]
             }
Wahrscheinlich muss ich wohl bestimmte Funktionen anpassen...

Danke im voraus...
Sascha K.
von int5749 » 6. Mai 2022 00:03
Hola,

In der Kürze vom iPad.
Wenn ich mich recht erinnere gibt

Code: Alles auswählen

 now.getDayOfWeek
Unter openHAB 3 den Wochentag aus.

Könntest Du mit

Code: Alles auswählen

 now.getDayOfWeek.State.toString
Im Log ausgeben lassen.

Was Du brauchst sollte

Code: Alles auswählen

 now.getDayOfWeek.getValue
Sein, dies ist dann der Tag als „Nummer“

VG
Gehe zur vollständigen Antwort

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Fehler in Rule nach Umstellung auf OH3

Beitrag von int5749 »

Hola,

In der Kürze vom iPad.
Wenn ich mich recht erinnere gibt

Code: Alles auswählen

 now.getDayOfWeek
Unter openHAB 3 den Wochentag aus.

Könntest Du mit

Code: Alles auswählen

 now.getDayOfWeek.State.toString
Im Log ausgeben lassen.

Was Du brauchst sollte

Code: Alles auswählen

 now.getDayOfWeek.getValue
Sein, dies ist dann der Tag als „Nummer“

VG
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Sascha.K
Beiträge: 35
Registriert: 2. Feb 2019 16:58
Answers: 1

Re: Fehler in Rule nach Umstellung auf OH3

Beitrag von Sascha.K »

Danke für den Hinweis auf getDayOfWeek... habe darüber jetzt auch viel im Internet gefunden... :lol:


https://community.openhab.org/t/datetim ... -2-x/54266

https://community.openhab.org/t/datetim ... 3-x/107197


Sieht alles sehr kompliziert aus, vor allem alles in Englisch... :roll:

Habe jetzt alle now.getDayOfWeek gegen now.getDayOfWeek.getValue ersetzt... zudem alles auf now.getMinute und now.getHour angepasst...


heute Abend werde ich erst mal weitersehen...

int5749
Beiträge: 1173
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Fehler in Rule nach Umstellung auf OH3

Beitrag von int5749 »

Sascha.K hat geschrieben: 6. Mai 2022 15:51 Sieht alles sehr kompliziert aus, vor allem alles in Englisch... :roll:
So schlimm ist es hoffentlich nicht ;-)
Sascha.K hat geschrieben: 6. Mai 2022 15:51 zudem alles auf now.getMinute und now.getHour angepasst...
Da würde ich eher

Code: Alles auswählen

now.toLocalTime.toSecondOfDay
empfehlen, ist granularer ;-)
Sascha.K hat geschrieben: 6. Mai 2022 15:51 Habe jetzt alle now.getDayOfWeek gegen now.getDayOfWeek.getValue ersetzt...
.state war natürlich Quatsch, denn es ist/war kein Item, kein Item :oops:

Mal auf die Schnelle

Code: Alles auswählen

rule "Test DayOfWeek"
when
    Item Testschalter changed to OFF     // Testschalter
then
    logInfo("TEST", "Day of week: {}", now.getDayOfWeek.toString)
    logInfo("TEST", "Day of week Value: {}", now.getDayOfWeek.getValue.toString)
end
16:25:23.511 [INFO ] [org.openhab.core.model.script.TEST ] - Day of week: FRIDAY
16:25:23.513 [INFO ] [org.openhab.core.model.script.TEST ] - Day of week Value: 5
.toString ist natürlich nur für die Log-Ausgabe notwendig, nicht zum Vergleich ;)
Sascha.K hat geschrieben: 6. Mai 2022 15:51 heute Abend werde ich erst mal weitersehen...
Toi Toi Toi :mrgreen:
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Fehler in Rule nach Umstellung auf OH3

Beitrag von udo1toni »

Sascha.K hat geschrieben: 6. Mai 2022 15:51 Sieht alles sehr kompliziert aus, vor allem alles in Englisch... :roll:
Ach, das ist halb so wild. Es ist vor allem ungewohnt.
Es gibt ein paar Dinge, die nicht direkt erreicht werden können, z.B. das .timeAtStartOfDay für 0 Uhr.
Aber dafür gibt es dann ähnliche Konstrukte (with(LocalTime.MIDNIGHT) oder so ähnlich).
Sieht alles erst mal ungewohnt und kompliziert aus, aber man gewöhnt sich ganz schnell daran.
Viele komplizierte Dinge, die auch im englischen Forum dazu zu finden sind, sind schon längst überholt, weil jemand einen viel einfacheren Weg gefunden hat... Die Macher von JavaTime sind ja auch keine Masochisten, es ist nur nicht unbedingt direkt ersichtlich, welcher Weg denn nun der beste ist.
Was absolut fehlt, ist irgendwo in der Doku eine Tabelle, in der schön gegliedert steht, welche Funktion aus Joda Time wie in JavaTime abgebildet ist.(bzw. welche ihr entspricht). Aber sowas muss halt auch jemand erstellen.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.5, LXC)

Sascha.K
Beiträge: 35
Registriert: 2. Feb 2019 16:58
Answers: 1

Re: Fehler in Rule nach Umstellung auf OH3

Beitrag von Sascha.K »

ein kurzes Update... alle Rules funktionieren... vielen Dank für die schnelle Hilfe...

Mir ist aber aufgefallen, das nach einem Neustart die Zahlen in den Items mit Nachkommastellen gespeichert sind... z.B. 4.0 statt 4 oder 23.0 statt 23.. wenn ich über die UI die Zahl per Stepper-Card ändere oder eine andere Auswahl treffe wird eine Zahl ohne Nachkommastelle draus... kann man das irgendwo einstellen ..? Ich habe teilweise über die hinterlegten Zahlen Felder ein- bzw. ausgeblendet und habe dann nach dem Neustart Probleme...

Und noch eine grundsätzliche Frage... bitte nicht lachen... :roll: ... bisher habe ich meine eigenen Rules aus mehreren vorgefertigten Rules im Internet zusammengesetzt... was für eine Programmiersprache benutzt OH für die Regeln bzw. was für ein Syntax wird benutzt... kennt Ihr vielleicht einen Einsteigerfreundlichen Guide / Grundkurs dafür ..?

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

Re: Fehler in Rule nach Umstellung auf OH3

Beitrag von udo1toni »

Was die Nachkommastellen betrifft, sollte das (bis auf die Anzeige) keine Auswirkungen haben. Du kannst das Anzeigeformat über die Metadaten einstellen und dort die Nachkommastellen ausblenden. Was meinst Du mit "Problemen nach dem Neustart"?

Die Rules in openHAB wurden früher ausschließlich über die DSL erstellt (DomainSpecificLanguage). Leider gibt es nicht wirklich einsteigerfreundliche Dokumentation dazu. Die DSL setzt auf XTend auf, welches wiederum in Java programmiert ist. Entsprechend lehnt sich die DSL in weiten Teilen an Java an und man kann viele Bibliotheken von Java verwenden. Aber es gibt natürlich auch große Unterschiede zum "Original Java".
Die aktuelle Version openHAB3.2 bringt noch ECMA mit, weil Blockly das verwendet. ECMA ist JavaScript, aber ebenfalls mit bestimmten Einschränkungen. JavaScript hat außer dem Namen nichts mit Java zu tun, es funktioniert sehr anders als Java (auch wenn es viele gleich funktionierende Befehle gibt).
Der große Vorzug der DSL ist der komfortable Zugriff auf den openHAB Bus (sprich: die Items). Andere Programmiersprachen müssen hier umständlich die ItemRegistry befragen und können nur mit Actions arbeiten, wo die DSL Items direkt verwenden kann und Methoden zur Verfügung stellt. Damit lässt sich sehr gut objektorientiert programmieren (obwohl ein Programmierer vermutlich die Hände über dem Kopf zusammenschlagen wird...)

Es gibt das Buch von Marianne Spiller zu openHAB2, welches auch die DSL beleuchtet. Allerdings ist es naturgemäß inzwischen hoffnungslos veraltet.
Wenn Du Dir schon Code zusammengeklaubt hast (man beachte das b :) ), wirst Du auch schon in groben Zügen verstanden haben, wie die DSL funktioniert.
Dass openHAB3 durch die Umstellung auf JavaTime einen wichtigen Aspekt in der DSL komplett umgekrempelt hat, mag ein Rückschlag sein, aber da müssen wir alle durch :lol:
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.5, LXC)

Antworten