Seite 1 von 1

Fehler in Rule nach Umstellung auf OH3

Verfasst: 5. Mai 2022 22:01
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.

Re: Fehler in Rule nach Umstellung auf OH3

Verfasst: 6. Mai 2022 00:03
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

Re: Fehler in Rule nach Umstellung auf OH3

Verfasst: 6. Mai 2022 15:51
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...

Re: Fehler in Rule nach Umstellung auf OH3

Verfasst: 6. Mai 2022 16:27
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:

Re: Fehler in Rule nach Umstellung auf OH3

Verfasst: 6. Mai 2022 16:29
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.

Re: Fehler in Rule nach Umstellung auf OH3

Verfasst: 8. Mai 2022 08:33
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 ..?

Re: Fehler in Rule nach Umstellung auf OH3

Verfasst: 8. Mai 2022 12:39
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: