[solved] Ein Newbie benötigt Hife bei einer Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von int5749 »

peter-pan hat geschrieben: 1. Dez 2021 13:17 ...ich möchte ja nicht "klugscheissern", aber könnte es sein, dass es eigentlich lauten muss Montag (1) bis Sonntag (7) ?

So verstehe ich zumindest die Doku zu DayOfWeek(getValue).
Sprachs und ... :mrgreen:
Aber Du hast Recht! Ich hatte ich mich vertan mir der alten Doku und einem Typo im Log das Ganze vollendet.
Der 25.12. ist Tag 6 und dies ist ein Samstag :oops: Aber für die Formel kommt es trotzdem auf das richtige Ergebnis :geek:
peter-pan hat geschrieben: 1. Dez 2021 13:17 Ich habe deshalb in meiner Beispiel-Regel einen etwas anderen Ansatz gewählt.
Viele Wege führen ja nach Rom. ;)
peter-pan hat geschrieben: 1. Dez 2021 13:17 Im Jahr 2023 fallen übrigens Heiligabend und 4. Advent wieder zusammen.
Auch dies sollte korrekt berechnet werden :?
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von peter-pan »

int5749 hat geschrieben: 1. Dez 2021 17:34 Auch dies sollte korrekt berechnet werden
Ich glaub's auch. Wenn ich das richtig verstehe, ist das so ziemlich "tricky" gelöst, mit dem 25-ten 👍.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von udo1toni »

Den 25. habe ich einfach gewählt, weil .getDayOfWeek den Wertebereich 1 - 7 hat. der späteste Zeitpunkt für den 4. Advent ist der 24. 12., wenn der 25. ein Montag ist, muss 1 abgezogen werden, um auf Sonntag (4. Advent) zu kommen, wenn der 25. ein Sonntag ist, muss man 7 abziehen, um auf Sonntag (4. Advent) zu kommen.

It's as simple as that. ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mike69
Beiträge: 64
Registriert: 17. Nov 2020 22:38
Answers: 0

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von mike69 »

Moinsen.

Schön wäre es gewesen, leider funzt es noch nicht. Der gleiche Code lief vorgestern, heute nicht mehr. :(
Muss Euch nochmal um Hilfe bitten.

Hier die Fehlermeldung:

Code: Alles auswählen

2021-12-02 09:53:40.845 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test3-2' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,long) on instance: null in test3
2021-12-02 09:53:50.845 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test3-3' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,long) on instance: null in test3
2021-12-02 09:54:00.845 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test3-2' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,long) on instance: null in test3
2021-12-02 09:54:10.845 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test3-3' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,long) on instance: null in test3
2021-12-02 09:54:20.845 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test3-2' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,long) on instance: null in test3
Und die Rule:

Code: Alles auswählen

var long intStAdvent

rule "Feiertage" when
    Time cron "5 0 0 * * ?" or
    System started
then
  intStAdvent = LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear - (now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue +21)
//   intStAdvent = parse(now.getYear + "-12-25").minusDays(((parse(now.getYear + "-12-25").getDayOfWeek) + 28)).getDayOfYear + 1  // Montag vor 1. Advent
end
 
rule "Weihnachtslicht ein"
when
    Time cron "0/20 * * * * ?"
then
    if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
        logDebug("x-mas","Weihnachtsbeleuchtung ein.")
        delock05.sendCommand(ON)
    }
end

rule "Weihnachtslicht aus"
when
    Time cron "10/20 * * * * ?"
then
    if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
        logDebug("x-mas","Weihnachtsbeleuchtung aus.")
        delock05.sendCommand(OFF)
    }
end
Auch nach einem Neustart von OH keine Änderung
openHAB 4.2.0 auf Debian 12 als VM unter Proxmox

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von int5749 »

Moin Moin

Versuch mal anstatt

Code: Alles auswählen

var long intStAdvent

Code: Alles auswählen

var int intStAdvent
Etwas verwirrend ist das im Log
Script execution of rule with UID 'test3-2'
Angemäkelt wird, die Rules aber anders heißen. Aber ich habe bei mir noch nicht im Log geschaut, ob da OH die UID ändert, wenn eine Rule Bezeichnung geändert wird.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

mike69
Beiträge: 64
Registriert: 17. Nov 2020 22:38
Answers: 0

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von mike69 »

int5749 hat geschrieben: 2. Dez 2021 10:25 Moin Moin

Versuch mal anstatt

Code: Alles auswählen

var long intStAdvent

Code: Alles auswählen

var int intStAdvent
Nope, Meldung bleibt.

Code: Alles auswählen

2021-12-02 10:39:20.004 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test3-2' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in test3
2021-12-02 10:39:30.009 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test3-3' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in test3
Rule heisst "test3.rules"

die "-2" wird die 2te Rule sein, also Licht an. so verstehe ich das.
openHAB 4.2.0 auf Debian 12 als VM unter Proxmox

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von int5749 »

Also ich habe dies grade noch einmal bei mir getestet und dies läuft ohne Probleme.

Nur zur Sicherheit: die Initialisierung der Variabel steht ganz oben vor allen Rules in der Datei??

Also:

Code: Alles auswählen

var int intStAdvent

rule "irgendwas"

rule "sowieso"

rule "Feiertage"
when
.....
 
rule "Weihnachtslicht ein"
when

etc.
Alle globalen Variablen müssen ganz oben in der .rules stehen.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von peter-pan »

Ich könnte mir vorstellen, dass die Variable "intStAdvent" evtl. keinen Wert enthält bei dem Vergleich "Grösser als". Mach einfach mal einen Log vor der If-Bedingung in der Regel test-2, z.B.:

Code: Alles auswählen

logInfo("x-mas","intStAdvent ist: {}", intStAdvent)
und/oder ersetze mal die Variable "intStAdvent" in der If-Bedingung mit einem Wert, z.B.: 331.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von int5749 »

peter-pan hat geschrieben: 2. Dez 2021 11:06 Ich könnte mir vorstellen, dass die Variable "intStAdvent" evtl. keinen Wert enthält bei dem Vergleich "Grösser als". Mach einfach mal einen Log vor der If-Bedingung in der Regel test-2, z.B.:

Code: Alles auswählen

logInfo("x-mas","intStAdvent ist: {}", intStAdvent)
und/oder ersetze mal die Variable "intStAdvent" in der If-Bedingung mit einem Wert, z.B.: 331.
Genau dies hatte ich gerade getestet ;-)
Bear with me about wording in Log :mrgreen:

Der folgende Code wird bei mir über einen Schalter "TEST" getriggert

Code: Alles auswählen

intStAdvent = LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear - (now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue +21)
logInfo("TEST", "Jahrestag des 1.Advent: {}", intStAdvent.toString)
logInfo("TEST", "Wochentag des 1.Advent: {}", now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue.toString)
logInfo("TEST", "Wochentag des 1.Advent: {}", LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear.toString)
logInfo("TEST", "Wochentag des 1.Advent: {}", now.withMonth(12).withDayOfMonth(25).getDayOfWeek.toString)

if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
    logInfo("TEST", "Weihnachtbeleuchtung ein: {}", now.getDayOfYear.toString)
}
LOG
11:13:27.494 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'AmazonTestSchalter' received command ON
11:13:27.496 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'AmazonTestSchalter' changed from OFF to ON
11:13:27.497 [INFO ] [org.openhab.core.model.script.TEST ] - Jahrestag des 1.Advent: 332
11:13:27.498 [INFO ] [org.openhab.core.model.script.TEST ] - Wochentag des 1.Advent: 6
11:13:27.500 [INFO ] [org.openhab.core.model.script.TEST ] - Wochentag des 1.Advent: 359
11:13:27.501 [INFO ] [org.openhab.core.model.script.TEST ] - Wochentag des 1.Advent: SATURDAY
11:13:27.502 [INFO ] [org.openhab.core.model.script.TEST ] - Weihnachtbeleuchtung ein: 336
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

mike69
Beiträge: 64
Registriert: 17. Nov 2020 22:38
Answers: 0

Re: [solved] Ein Newbie benötigt Hife bei einer Rule

Beitrag von mike69 »

Nur zur Sicherheit: die Initialisierung der Variabel steht ganz oben vor allen Rules in der Datei??
In der ersten Zeile.
Habe die Rule umgenannt in testChristmas, zur besserenunterscheidung im Log.
Hier nochmal die Rule mit dem Eintrag von Peter-Pan:

Code: Alles auswählen

root@openhab3:/home/master# cat /etc/openhab/rules/testChristmas.rules
var int intStAdvent

rule "Feiertage" when
    Time cron "5 0 0 * * ?" or
    System started
then
  intStAdvent = LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear - (now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue +27)
//   intStAdvent = parse(now.getYear + "-12-25").minusDays(((parse(now.getYear + "-12-25").getDayOfWeek) + 28)).getDayOfYear + 1  // Montag vor 1. Advent
end
 
rule "Weihnachtslicht ein"
when
    Time cron "0/20 * * * * ?"
then
    if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
        logDebug("x-mas","Weihnachtsbeleuchtung ein.")
        logInfo("x-mas","intStAdvent ist: {}", intStAdvent)
        delock05.sendCommand(ON)
    }
end

rule "Weihnachtslicht aus"
when
    Time cron "10/20 * * * * ?"
then
    if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
        logDebug("x-mas","Weihnachtsbeleuchtung aus.")
        logInfo("x-mas","intStAdvent ist: {}", intStAdvent)
        delock05.sendCommand(OFF)
    }
end

Hier der Log:

Code: Alles auswählen

2021-12-02 11:11:00.288 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'testChristmas-2' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in testChristmas
2021-12-02 11:11:10.290 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'testChristmas-3' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in testChristmas
2021-12-02 11:11:20.289 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'testChristmas-2' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in testChristmas
2021-12-02 11:11:30.290 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'testChristmas-3' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in testChristmas
2021-12-02 11:11:40.289 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'testChristmas-2' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null in testChristmas
Das event.log ist leer.

Kompletter Neustart btrachte auch nichts.
Werde mal das Backup von gestern oder das 2.5.12er Backup rüberbügeln, aber erst heute Abend, muss gleich zur Schicht.
openHAB 4.2.0 auf Debian 12 als VM unter Proxmox

Antworten