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

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

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

Beitrag von mike69 »

Hallo zusammen.

Lese hier schon über ein Jahr still mit und bedanke mich für Eure Ratschläge und Tipps, welche oft zum Erfolg geführt haben.
Leider gibt es paar Punkte, wo es einfach nicht klappt, bzw. paar Rules, die nicht laufen wollen.

Konfiguriere persönlich lieber manuell mit Dateien und vermeide soweit die UI. Eingebunden sind paar Aqara Sensoren und Zigbee Smart Plugs per DeConz GW, Delock WLAN Steckdosen und Shellies per MQTT.

So, kommen wir zu eine der "Macken" :)
Da die Adventszeit angebrochen ist, sitzt mir meine bessere Hälfte hinter mir mit der Faust im Nacken, es geht um Weihnachtsfestbeleuchtung. :lol:
Normalerweise schaltet ein Rule einfach im Dezember von 16 - 22 Uhr die Beleuchtung an und aus, passt meiner Frau nicht, muss nach Totensonntag bis zum 6. Jan leuchten.
@udo1toni hat im KNX Forum für openhab sein Rule dagelegt, habe diese Rule mal stumpf kopiert und als test.rules angepasst, Eine WLAN Steckdose soll in der Adventszeit im minutentakt ein- und ausschalten.

Code: Alles auswählen

rule "Feiertage" when
    Time cron "5 0 0 * * ?" or
    System started
then
   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 0/2 * * * ?"
then
    if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
        logDebug("x-mas","Weihnachtsbeleuchtung ein.")
        delock05.sendCommand(ON)
    }
end

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

Funzt nicht, hier der Log:

Code: Alles auswählen

2021-11-29 18:02:00.232 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-2' failed: The name 'intStAdvent' cannot be resolved to an item or type; line 14, column 52, length 11 in test
2021-11-29 18:03:00.233 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-3' failed: The name 'intStAdvent' cannot be resolved to an item or type; line 24, column 52, length 11 in test
2021-11-29 18:04:00.232 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-2' failed: The name 'intStAdvent' cannot be resolved to an item or type; line 14, column 52, length 11 in test
2021-11-29 18:05:00.233 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-3' failed: The name 'intStAdvent' cannot be resolved to an item or type; line 24, column 52, length 11 in test
2021-11-29 18:06:00.233 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-2' failed: The name 'intStAdvent' cannot be resolved to an item or type; line 14, column 52, length 11 in test
2021-11-29 18:07:00.233 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-3' failed: The name 'intStAdvent' cannot be resolved to an item or type; line 24, column 52, length 11 in test
Irgendwas fehlt ihm noch, komme nicht hinter was. Liegt es eventuell an OH3?

Zur Info.
Habe OH3 auf Debian11 frisch aufgesetzt und ein OH2.5.12 Backup recovered. Alle Things und Items wurden übernommen und bis jetzt keine Unregelmässigkeiten erkannt. Dieses Rule ist allerdings nicht recovered, also frisch.


Gruß, Mike
Zuletzt geändert von mike69 am 1. Dez 2021 11:00, insgesamt 2-mal geändert.
openHAB 4.2.0 auf Debian 12 als VM unter Proxmox

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

Re: Ein Newbie möchte paar Macken in den Configs ausbügeln

Beitrag von int5749 »

Hallo Mike,

wenn Du schon einen Codeschnipsel kopierst, musst Du auch alles mitnehmen. Evtl. hast Du den Hinweis überlesen?
Die Berechnung muss nur einmal am Tag ausgeführt werden, am besten kurz nach Mitternacht. Die Variable muss natürlich global definiert sein. Sie enthält dann den Tag im Jahr als Zahl zwischen 1 und 366 (Der Wert schwankt zwischen 330 - 337).
In der Schaltrule kann man dann abfragen, ob der Tag des Jahres des aktuellen Datums kleiner als 7 (heilige drei Könige) oder größer/gleich intStAdvent ist:
Hier noch einmal der Link zum kompletten Threat => KNX-USER-FORUM

Aber auch der Hinweis: Unter OH 3 sollte man besser direkt Ephemeris nutzen, wobei dies schon etwas tricky ist.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Ein Newbie möchte paar Macken in den Configs ausbügeln

Beitrag von int5749 »

Nachtrag: Der ursprüngliche Threat lief noch unter OH 2.x, für OH 3.x kann die Berechnung des 1. Advents wie folgt erfolgen

Code: Alles auswählen

intStAdvent = LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear - (now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue +21)
Auch hier gilt: intStAdvent muss global definiert sein :D


PS: Evtl. solltest Du für Deine Threats einen aussagekräftigen Titel wählen, der das Problem beschreibt und nicht ein globaler Hilferuf ist ;)
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: Ein Newbie möchte paar Macken in den Configs ausbügeln

Beitrag von mike69 »

Hallo int5749,
int5749 hat geschrieben: 29. Nov 2021 19:35 Hallo Mike,

wenn Du schon einen Codeschnipsel kopierst, musst Du auch alles mitnehmen. Evtl. hast Du den Hinweis überlesen?
Die Berechnung muss nur einmal am Tag ausgeführt werden, am besten kurz nach Mitternacht. Die Variable muss natürlich global definiert sein. Sie enthält dann den Tag im Jahr als Zahl zwischen 1 und 366 (Der Wert schwankt zwischen 330 - 337).
In der Schaltrule kann man dann abfragen, ob der Tag des Jahres des aktuellen Datums kleiner als 7 (heilige drei Könige) oder größer/gleich intStAdvent ist:
Hier noch einmal der Link zum kompletten Threat => KNX-USER-FORUM

Neee, eigentlich ist es der Schnipsel: https://knx-user-forum.de/forum/support ... ost1391843 :)

Im nach hinein wäre es besser gewesen, den Link mit anzugeben.

Auch ein Neustart, um die Abfrage von "intStAdvent" anzustossen half nicht. Braucht es irgendwie noch ein Binding? Astro und NTP sind installiert und, hoffentlich, sauber konfiguriert.

edit:
Sehe gerade deinen Nachtrag.
Auch hier gilt: intStAdvent muss global definiert sein :D
Als Item, oder was meinst du?
Zuletzt geändert von mike69 am 29. Nov 2021 20:54, insgesamt 2-mal geändert.
openHAB 4.2.0 auf Debian 12 als VM unter Proxmox

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

Re: Ein Newbie möchte paar Macken in den Configs ausbügeln

Beitrag von int5749 »

Hast Du denn die Variable definiert? Und auch global??

Hierzu musst Du ganz oben in der .rules vor allen rules die variablen definieren, welche Du innerhalb der rules in dieser Datei nutzen möchtest.
In diesem Fall muss ganz oben (oder hinter anderen Variablen, aber eben vor den Rules) folgendes stehen.

Code: Alles auswählen

var long intStAdvent
Erst dannach kommen die Regeln.
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: Ein Newbie möchte paar Macken in den Configs ausbügeln

Beitrag von mike69 »

int5749 hat geschrieben: 29. Nov 2021 20:53 Hast Du denn die Variable definiert? Und auch global??

Code: Alles auswählen

var long intStAdvent
Verrückt, das wars, danke Dir.

Nur, für mich noch unverständlich, wieso "var long"?
"long" muss doch irgendwoher kommen, oder? Welcher Wert ist 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: Ein Newbie möchte paar Macken in den Configs ausbügeln

Beitrag von int5749 »

mike69 hat geschrieben: 29. Nov 2021 21:11 Verrückt, das wars, danke Dir.
Sehr gerne
mike69 hat geschrieben: 29. Nov 2021 21:11 Nur, für mich noch unverständlich, wieso "var long"?
"long" muss doch irgendwoher kommen, oder? Welcher Wert ist das?
long ist kein Wert sondern eine Definition/Typ der Variabel und hat einen Standard Wert von 0. Somit wird über die Definition des Typs der Wert mit dem Default gefüllt und muss nicht explizit gesetzt werden. In diesem Fall hätte sogar ein int reichen müssen, long speichert "nur" einen größeren Zahlenraum. Bei 1 - 365 (das ganze Jahr betrachtet und Schaltjahre vernachlässigt) hätte es somit auch int getan.
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: Ein Newbie benötigt Hife bei einer Rule

Beitrag von mike69 »

Danke int5749.

Gibt es irgendwo was leicht verständliches zu einlesen zu den Themen Rules und Co? Hatte, ehrlich gesagt, mit JSON so gut wie kein Berührungspunkte und bei paar Rules bedarf es noch einige Optimierungen.
openHAB 4.2.0 auf Debian 12 als VM unter Proxmox

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

Re: Ein Newbie benötigt Hife bei einer Rule

Beitrag von int5749 »

Außer der Doku auf der openHAB Seite, ist mir nichts „leicht verdauliches“ bekannt.
Mir hat auch nur das lesen hier im Forum, die massive Hilfe der Community hier und im engl. sprachigen Forum geholfen und natürlich GiDF => Google is Dein Freund.

Last but not least: learning by doing und es gibt keine dummen Fragen (außer einiger wenigen ;-) )
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: Ein Newbie benötigt Hife bei einer Rule

Beitrag von mike69 »

Moinsen @All

@int5749
Ja, bis jetzt sind die Doku und die Foren hier am besten dafür geeignet.

Nur mal so zum Verständnis,

Code: Alles auswählen

intStAdvent = LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear - (now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue +21)
Es wird der 25.12. gesetzt minus 21 Tage, müsste die Rule nicht erst am 4.12. greifen? Nein, greift jetzt schon :lol:

Bei @udo1tony Codeschnipsel sind es 28 Tage, oder sogar 29 Tage?

Code: Alles auswählen

intStAdvent = parse(now.getYear + "-12-25").minusDays(((parse(now.getYear + "-12-25").getDayOfWeek) + 28)).getDayOfYear + 1
Wie wird der Sonntag erkannt? :?:

Sitze hier wie ein Schwein vorm Uhrwerk.

Hintergrund ist ne andere Baustelle, die Gartenbeleuchtung soll nur gewisse Monate bei Sonnenuntergang eingeschaltet werden. Klar, können die Monate unter Time cron vorgeben, aber "von - bis" ist schon eleganter. :)

Gruß, Mike
openHAB 4.2.0 auf Debian 12 als VM unter Proxmox

Antworten