Seite 3 von 14

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

Verfasst: 1. Dez 2021 17:34
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 :?

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

Verfasst: 1. Dez 2021 17:57
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 👍.

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

Verfasst: 1. Dez 2021 20:09
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. ;)

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

Verfasst: 2. Dez 2021 10:11
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

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

Verfasst: 2. Dez 2021 10:25
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.

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

Verfasst: 2. Dez 2021 10:44
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.

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

Verfasst: 2. Dez 2021 11:00
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.

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

Verfasst: 2. Dez 2021 11:06
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.

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

Verfasst: 2. Dez 2021 11:16
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

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

Verfasst: 2. Dez 2021 11:19
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.