Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Matthias1974
Beiträge: 4
Registriert: 23. Aug 2021 23:29
Answers: 0

Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Beitrag von Matthias1974 »

Hallo,

ich habe bisher einen großen Teil meines Smarthomes mit Openhab 2.4 betrieben. Da ich hier aber nicht mehr die Möglichkeit habe, neue Bindings zu installieren (das System wehrt sich standhaft....) versuche ich nach OH3 umzuziehen.
Dummerweise scheint es ja nicht so einfach zu sein, die alten Rules zu kopieren. Bisher habe ich Rules per Visual Studio Code ersteĺlt, würde dies auch gerne weiter tun. Wenn ich die Rules aber einfach nur aus dem alten Ordner in den neuen Rulesordner kopiere, sehen Sie auf der OH3 Oberfläche anders aus.
Gibt es da eine Möglichkeit, wie von OH2 gewohnt weiter zu arbeiten?

Vielleicht gibt es diese Frage ja auch schon, habe aber keine Antwort gefunden, obwohl ich schon seit einer Ewigkeit immer wieder diese Forum nutze und sich bei mir schon viele Probleme dank der tollen Tips lösen ließen.

Danke für Eure Hilfe

Matthias

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

Re: Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Beitrag von udo1toni »

Es gilt wie beim Umstieg von OH1 auf OH2 benso für OH3: Was in der Textdatei ist, bleibt in der Textdatei.

Du kannst jegliche Konfiguration aus OH2.4 genau an die gleiche Stelle kopieren (also rules Dateien in den rules Ordner) und die Rules sollten funktionieren, mit zwei Ausnahmen:

1. OH2 nutzt Joda Time, OH3 nutzt JavaTime. Da sich die Aufrufe teilweise unterscheiden, musst Du also entsprechende Aufrufe anpassen.
2. die implizite Variable triggeringItem kann nur noch in Rules eingesetzt werden, die auf Member of ... triggern.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Matthias1974
Beiträge: 4
Registriert: 23. Aug 2021 23:29
Answers: 0

Re: Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Beitrag von Matthias1974 »

Wow! Noch oder schon wach?
Danke für die schnelle Antwort, werde es gleich mal ausprobieren.
Wo ist der Unterschied zwischen joda und java Time?
Habe einige rules mit createTime .....
Ändert sich da was? Oder an Cron?

Gruß
Matthias

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

Re: Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Beitrag von udo1toni »

Da war ich tatsächlich noch wach…

cron ist davon nicht betroffen :)

createTimer() ist indirekt davon betroffen.
Es geht um das Schlüsselwort now mit all seinen Methoden. now alleine sollte sich weitgehend identisch verhalten, manchmal geht es aber schon damit los, ob now sich nun auf UTC oder aktuelle Zeitzone bezieht. Statt getHourOfDay musst Du getHour schreiben, statt getMinuteOfHour schreibst Du getMinute. Ein getMinuteOfDay gibt es nicht direkt. Du kannst aber mit get(MINUTE_OF_DAY) arbeiten.
Wenn Du vorher Berechnungen auf Grundlage von Millis vorgenommen hast, wirst Du feststellen müssen, dass es kein plusMillis mehr gibt. Stattdessen musst Du Nanosekunden verwenden (also Faktor 1.000.000), also plusNanos(). Das hat vor allem etwas mit der inneren Struktur von JavaTime zu tun, die Programmierer haben halt ein paar Dinge anders gelöst und ein paar Methoden anders angelegt. In Joda Time gibt es z.B. auch einen Bereich (also z.B. heute, von 8:00 bis 16:00 Uhr) und man kann dann auf innerhalb oder außerhalb testen. Allerdings wurde das selbst im englischen Forum nur sehr wenig angefragt, und man kann ja auch leicht auf zwei Grenzen abfragen, das ist dann halt eine Abfrage mehr.
Es kann auch sein, dass Java Time so eine Funktion auch bietet, dann habe ich sie aber bisher nicht gefunden ;)

Wenn Du mit Datum und Zeit rechnest, müssen die Formeln angepasst werden.


Gesendet von iPad mit Tapatalk
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Matthias1974
Beiträge: 4
Registriert: 23. Aug 2021 23:29
Answers: 0

Re: Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Beitrag von Matthias1974 »

Hallo,

vielen Dank, ich glaube, Du hast mir echt seeeeeehr geholfen!
Sehe ich das richtig,ich müsste also:
if (now.getHourOfDay() >= 11 && lux > 10000 && Wohnzimmertemperatur > 24.0 && Rollo_Zustand.state == OFF && Rollo_Zustand2.state == OFF && Rollo_fahrbar.state == OFF){
sendHttpGetRequest ("http://192.168.1.254/control?scene=487")

in

if (now.getHour() >= 11 && lux > 10000 && Wohnzimmertemperatur > 24.0 && Rollo_Zustand.state == OFF && Rollo_Zustand2.state == OFF && Rollo_fahrbar.state == OFF){
sendHttpGetRequest ("http://192.168.1.254/control?scene=487")

ändern?
Werde es gleich mal ausprobieren.

Nochmals DANKE!

Matthias1974
Beiträge: 4
Registriert: 23. Aug 2021 23:29
Answers: 0

Re: Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Beitrag von Matthias1974 »

Hallo nochmal,

so, alles geändert:
FUNKTIONIERT!


DANKE! :D :D :D :D :D

ElBombo1
Beiträge: 39
Registriert: 15. Jul 2019 11:17
Answers: 0
Wohnort: Münster in Hessen

Re: Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Beitrag von ElBombo1 »

Hallo zusammen,

ich hänge mich nun an diesen Beitrag dran da ich denke, das er der passenste in Bezug auf mein Problemschen ist... Habe nach Rules im Forum gesucht... oO zuviele Einträge :lol:

Dank Udo habe ich unter openHAB2.x meine Rules erstellt und erfolgreich über 2,5 Jahre erweitert und neu erstellt. Jetzt, mit dem Umzug auf openHAB 3.2 dachte ich, das bekomme ich schon hin, habe meine Rules unter openHAB2.x doch auch nach Anlaufhilfe alleine erstellt...
Habe mir die Rule Doku zur Brust genommen und ganz ehrlich, bin anscheinend zu doof dafür. Rules triggern mal, mal nicht, wenn ich mehrere Rules in ein File schreibe, lädt er gefühlt die Rule nicht mehr richtig obwohl im openhab.log korrekt eingelesen wurde, angeblich. Habe daraufhin die Rules mit der Rule engine erstellt, funktionieren auch soweit, aber ich erhoffte mir dann den Code raus nehmen zu können und ihn ab dem Moment mit der richtigen Synthax weiter verwenden zu können, ebenfalls pustekuchen :evil:
Aus diesem Grund habe ich nun beschlossen aufzuhören und mir Hilfestellung geben zu lassen. Ich hoffe das Udo oder auch wer anderes, mich bei der Umstellung meiner alten und funktionierenden openHAB2.5 Rules auf die neue openHAB3.2 Synthax, unterstützen kann.

Ich poste mal einen Teil meiner Rollläden rule die vorher einwandfrei funktioniert hat, jetzt aber überhaupt nicht mehr funktioniert.

Code: Alles auswählen

// Dies ist der Rollladen im Chill Modus hoch fahren Teil der Rule. Hoch fahren um Uhrzeit X per CRON.
rule "Rollladen im Chill Modus hoch fahren "
when

Time cron "0 30 8 ? * MON-SUN"		// Täglich MON-SO um 08:30 Uhr


then
    logInfo("Rollladen im Chill Modus hoch fahren","Rollladen im Chill Modus hoch fahren getriggert per CRON")

    if(UrlaubsSchalter.state == ON) {
        logInfo("Rollladen im Chill Modus hoch fahren","Urlaubs Schalter ist ON, Rule Rollladen im Chill Modus hoch fahren wird abgebrochen!")
        return;
    }
    if(AbwesenheitsSchalter.state == ON) {
        logInfo("Rollladen im Chill Modus hoch fahren","Abwesenheits Schalter ist ON, Rule Rollladen im Chill Modus hoch fahren wird abgebrochen!")
        return;
    }

   if(AlltagsSchalter.state == ON) {
        logInfo("Rollladen im Chill Modus hoch fahren","Alltags Schalter ist ON, Rule Rollladen im Chill Modus hoch fahren wird abgebrochen!")
        return;
    }

    if(ChillSchalter.state == OFF) {
        logInfo("Rollladen im Chill Modus hoch fahren","Chill Schalter ist OFF, Rule Rollladen im Chill Modus hoch fahren wird abgebrochen!")
        return;
    }

    if(ChillSchalter.state == ON){
        gRollaeden_Chill_Hoch.sendCommand(UP)
        logInfo("Rollladen im Chill Modus hoch fahren","Rollladen wurden im Chill Modus hoch gefahren")
    }
end



// Dies ist der "Rollladen im Chill Modus runter fahren" Teil der Rule. Runter fahren um Uhrzeit X per CRON
rule "Rollladen im Chill Modus runter fahren "
when


Time cron "0 30 21 ? JAN,FEB,MAR,OCT,NOV,DEC * *" or	// Um 21:30:0 Uhr jeden Tag in den Monaten Januar, Februar, März, Oktober, November, Dezember, 
Time cron "0 00 22 ? APR,MAY,JUN,JUL,AUG,SEP * *"		// Um 22:00:0 Uhr jeden Tag in den Monaten April, Mai, Juni, Juli, August, September

then
    logInfo("Rollladen im Chill Modus runter fahren","Rollläden im Chill Modus runter fahren getriggert per CRON")

    if(UrlaubsSchalter.state == ON) {
        logInfo("Rollladen im Chill Modus runter fahren","Urlaubs Schalter ist ON, Rule Rollladen im Chill Modus runter fahren wird abgebrochen!")
        return;
    }
    if(AbwesenheitsSchalter.state == ON) {
        logInfo("Rollladen im Chill Modus runter fahren","Abwesenheits Schalter ist ON, Rule Rollladen im Chill Modus runter fahren wird abgebrochen!")
        return;
    }

    if(AlltagsSchalter.state == ON) {
        logInfo("Rollladen im Chill Modus runter fahren","Alltags Schalter ist ON, Rule Rollladen im Chill Modus runter fahren wird abgebrochen!")
        return;
    }

    if(ChillSchalter.state == OFF) {
        logInfo("Rollladen im Chill Modus runter fahren","Chill Schalter ist OFF, Rule Rollladen im Chill Modus runter fahren wird abgebrochen!")
        return;
    }

    if(ChillSchalter.state == ON) {
        gRollaeden_Chill_Runter.sendCommand(DOWN)
        logInfo("Rollladen im Chill Modus runter fahren","Rollläden wurden im Chill Modus runter gefahren")
    }
end
Ich möchte euch schon einmal im Voraus danken, wollte es alleine schaffen, habe es aber irgendwie nicht hinbekommen außer mit der Rule engine, die mir jedoch irgendwie nicht so zusagt (mag Code lieber als alter SPS Inbetriebnehmer...)

Gracias zusammen!

Saludos
Eloy

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

Re: Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Beitrag von int5749 »

Hola Eloy,

Eigentlich sollten alle Rules unter OH 3.x genau so funktionieren, wie wunter OH 2.x mit einer Ausnahme => Es wird unter OH3 ein anderes Zeitformat genutzt. In Deiner Rule sehe ich dieses jedoch nicht, daher sollte diese funktionieren.
Hierzu können die *.rules einfach an die entsprechende Stelle kopiert werden.

was geht denn nicht?? Was wird im Log angezeigt?

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

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

Re: Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Beitrag von udo1toni »

Eigentlich sollten die beiden Rules weiterhin funktionieren.

Was aber z.B. Probleme bereiten kann, ist die grob fehlerhafte Verwendung von logInfo()

logInfo() erwartet exakt zwei Strings als Parameter, von denen der zwei die eigentliche Meldung enthält, der erste String gibt an, welcher Logger verwendet wird. Als Loggername sind die Buchstaben des englischen Alphabets, die arabischen Ziffern sowie _- und . erlaubt. Leerzeichen sind nicht gern gesehen. Ebenso ist es keine gute Idee, den Namen zu lang zu wählen. Mein erster Versuch wäre also, statt

Code: Alles auswählen

logInfo("Rollladen im Chill Modus hoch fahren","Rollladen im Chill Modus hoch fahren getriggert per CRON")
lieber

Code: Alles auswählen

logInfo("chillShutter","Rollladen im Chill Modus hoch fahren getriggert per CRON")
zu schreiben. (sinngemäß an allen anderen Stellen entsprechend).

Achte darauf, dass Du nur die Rules in der rules-Datei hast, von denen Du ischer weißt, dass sie unter oh3.x fehlerfrei laufen. Du kannst zum Testen auch pro Rule eine eigene Datei anlegen, um mögliche Fehler besser eingrenzen zu können.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

ElBombo1
Beiträge: 39
Registriert: 15. Jul 2019 11:17
Answers: 0
Wohnort: Münster in Hessen

Re: Umzug von OH 2.4 zu 3.x: wie alte Rules mitnehmen

Beitrag von ElBombo1 »

Buenos dias an Euch zwei,

da antwortet der Udo und auch noch int5749! Gracias an euch beide!

Udo, ich werde die unsaubere logInfo() sofort entsprechend deiner Info abändern! Danke an der Stelle.

int5749, ich danke dir für die Aussage das die Rules eigentlich genauso weiterlaufen wie unter 2.x, das war mir tatsächlich nicht bewusst (bisauf das Zeitformat wie ich nun gelernt habe).

Ich habe nun alles neu erstellt und in den rules Ordner gelegt. Das erhalte ich daraufhin...

Code: Alles auswählen

2021-12-31 14:42:14.715 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'TestRolllaeden.rules'

2021-12-31 14:42:14.725 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'TestRolllaeden.rules' is either empty or cannot be parsed correctly!

2021-12-31 14:42:20.230 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'TestRolllaeden.rules'
Der Gesamte erstellte Code in der TestRolllaeden.rules war folgender.

Code: Alles auswählen

// Dies ist der Rollladen im Chill Modus hoch fahren Teil der Rule. Hoch fahren um Uhrzeit X per CRON.
rule "Rollladen im Chill Modus hoch fahren "
when

Time cron "0 30 8 ? * MON-SUN"		// Täglich MON-SO um 08:30 Uhr


then
    logInfo("chillShutterhoch","Rollladen im Chill Modus hoch fahren getriggert per CRON")

    if(UrlaubsSchalter.state == ON) {
        logInfo("chillShutterhoch","Urlaubs Schalter ist ON, Rule Rollladen im Chill Modus hoch fahren wird abgebrochen!")
        return;
    }
    if(AbwesenheitsSchalter.state == ON) {
        logInfo("chillShutterhoch","Abwesenheits Schalter ist ON, Rule Rollladen im Chill Modus hoch fahren wird abgebrochen!")
        return;
    }

   if(AlltagsSchalter.state == ON) {
        logInfo("chillShutterhoch","Alltags Schalter ist ON, Rule Rollladen im Chill Modus hoch fahren wird abgebrochen!")
        return;
    }

    if(ChillSchalter.state == OFF) {
        logInfo("chillShutterhoch","Chill Schalter ist OFF, Rule Rollladen im Chill Modus hoch fahren wird abgebrochen!")
        return;
    }

    if(ChillSchalter.state == ON){
        gRollaeden_Chill_Hoch.sendCommand(UP)
        logInfo("chillShutterhoch","Rollladen wurden im Chill Modus hoch gefahren")
    }
end



// Dies ist der "Rollladen im Chill Modus runter fahren" Teil der Rule. Runter fahren um Uhrzeit X per CRON
rule "Rollladen im Chill Modus runter fahren "
when


//Time cron "0 0 22 ? * MON-SUN"                        // Täglich MON-SO um 22:00 Uhr
Time cron "0 30 21 ? JAN,FEB,MAR,OCT,NOV,DEC * *" or	// Um 21:30:0 Uhr jeden Tag in den Monaten Januar, Februar, März, Oktober, November, Dezember, 
Time cron "0 00 22 ? APR,MAY,JUN,JUL,AUG,SEP * *"		// Um 22:00:0 Uhr jeden Tag in den Monaten April, Mai, Juni, Juli, August, September

then
    logInfo("chillShutterrunter","Rollläden im Chill Modus runter fahren getriggert per CRON")

    if(UrlaubsSchalter.state == ON) {
        logInfo("chillShutterrunter","Urlaubs Schalter ist ON, Rule Rollladen im Chill Modus runter fahren wird abgebrochen!")
        return;
    }
    if(AbwesenheitsSchalter.state == ON) {
        logInfo("chillShutterrunter","Abwesenheits Schalter ist ON, Rule Rollladen im Chill Modus runter fahren wird abgebrochen!")
        return;
    }

    if(AlltagsSchalter.state == ON) {
        logInfo("chillShutterrunter","Alltags Schalter ist ON, Rule Rollladen im Chill Modus runter fahren wird abgebrochen!")
        return;
    }

    if(ChillSchalter.state == OFF) {
        logInfo("chillShutterrunter","Chill Schalter ist OFF, Rule Rollladen im Chill Modus runter fahren wird abgebrochen!")
        return;
    }

    if(ChillSchalter.state == ON) {
        gRollaeden_Chill_Runter.sendCommand(DOWN)
        logInfo("chillShutterrunter","Rollläden wurden im Chill Modus runter gefahren")
    }
end
Mache ich irgendwas falsch??

Saludos
Eloy

Antworten