[solved] Ein Newbie benötigt Hife bei einer Rule
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Ja, das funktioniert in der Loganzeige, hat aber vorher auch funktioniert, das Problem liegt in der Zeile
"Date1stAdvent.postUpdate(new DateTimeType(firstAdvent))"
Danke für eure Bemühungen und einen schönen Gruß. PJH
"Date1stAdvent.postUpdate(new DateTimeType(firstAdvent))"
Danke für eure Bemühungen und einen schönen Gruß. PJH
openHAB 4.3 im Synology NAS Docker-Container.
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Ok. Hier noch eine Variante:
Item:
Rule-Snippet:
Die nicht benötigten Berechnungen kannst du ja raus werfen.
Wichtig die ersten beiden Berechnungen und die Berechnung "val vDateOfDayOfYear = ...". Und dann noch der Update am Schluss.
Vielleicht klappt's ja damit. Bei mir funktioniert's
Item:
Code: Alles auswählen
DateTime Date1stAdvent "1. Advent mit pattern" { stateDescription="pattern" [pattern="%1$ta, %1$td.%1$tm.%1$ty"] } // Advent, Advent ....
Code: Alles auswählen
var vFirstAdventDate = LocalDate.of(now.year,12,24).withDayOfYear(vXMasDayNumber - vWeekDayXMAS - 21) // 1. Advent
var vFirstAdventDay = vFirstAdventDate.getDayOfYear // Tag-Nr. 1. Advent
logInfo("advent1", "1.Advent ist am {}, der {} Tag des Jahres", vFirstAdventDate, vFirstAdventDay)
var vMemorialDayDate = LocalDate.of(now.year,12,24).withDayOfYear(vXMasDayNumber - vWeekDayXMAS - 28) // Totensonntag
var vMemorialDayDay = vMemorialDayDate.getDayOfYear // Tag-Nr. des Totensonntag
logInfo("advent1", "Totensonntag ist am {} Tag des Jahres", vMemorialDayDay)
val vHourMinute = now.toLocalTime().getHour.toString + now.toLocalTime().getMinute.toString // Stunde + Minute für Vergleich ob Ein- oder Ausschaltzeit (Minute kann ggf. weggelassen werden)
val vDateOfDayOfYear = ZonedDateTime.now.with(LocalTime.of(0,0,0,0)).withDayOfYear(vFirstAdventDay) // Umrechnung Tag des Jahres in ein Datum, in diesem Falle Tag des 1. Advents
val vDateOfDayOfYear1 = ZonedDateTime.now.withDayOfYear(vFirstAdventDay) // Umrechnung Tag des Jahres in ein Datum, in diesem Falle Tag des 1. Advents mit al#ktueller Uhrzeit
logInfo("advent1", "1.Advent ist am: {} {} ", vDateOfDayOfYear, vDateOfDayOfYear1)
Date1stAdvent.postUpdate(new DateTimeType(vDateOfDayOfYear))
Wichtig die ersten beiden Berechnungen und die Berechnung "val vDateOfDayOfYear = ...". Und dann noch der Update am Schluss.
Vielleicht klappt's ja damit. Bei mir funktioniert's
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Leider klappt's bei mir nicht.
Ich bekomme die Fehlermeldung
"2023-12-21 20:45:17.708 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Advent-3' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.BigDecimalExtensions.operator_minus(java.math.BigDecimal,java.math.BigDecimal) on instance: null in Advent"
Schönen Gruß. PJH
Ich bekomme die Fehlermeldung
"2023-12-21 20:45:17.708 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Advent-3' failed: An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.BigDecimalExtensions.operator_minus(java.math.BigDecimal,java.math.BigDecimal) on instance: null in Advent"
Schönen Gruß. PJH
openHAB 4.3 im Synology NAS Docker-Container.
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Also, das kann ich mir jetzt nicht mehr so einfach erklären. Poste doch einfach mal deine Rule.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Code: Alles auswählen
rule "ErsterAdvent - Datum"
when
Time cron "0 01 00 ? * * *" or
System started or
Item vSystemRestart changed to ON
then
/*
val firstAdvent = LocalDate.of(now.getYear,12,25).minusDays(LocalDate.of(now.getYear,12,25).getDayOfWeek.getValue + 21)
val intStAdvent = firstAdvent.getDayOfYear
// ersterAdvent.update(intStAdvent)
// Date1stAdvent.postUpdate(new DateTimeType(firstAdvent))
// logInfo("ErsterAdvent - Datum","Der erste Advent ist am {}", firstAdvent)
*/
var vFirstAdventDate = LocalDate.of(now.year,12,24).withDayOfYear(vXMasDayNumber - vWeekDayXMAS - 21) // 1. Advent
var vFirstAdventDay = vFirstAdventDate.getDayOfYear // Tag-Nr. 1. Advent
logInfo("advent1", "1.Advent ist am {}, der {} Tag des Jahres", vFirstAdventDate, vFirstAdventDay)
var vMemorialDayDate = LocalDate.of(now.year,12,24).withDayOfYear(vXMasDayNumber - vWeekDayXMAS - 28) // Totensonntag
var vMemorialDayDay = vMemorialDayDate.getDayOfYear // Tag-Nr. des Totensonntag
logInfo("advent1", "Totensonntag ist am {} Tag des Jahres", vMemorialDayDay)
// val vHourMinute = now.toLocalTime().getHour.toString + now.toLocalTime().getMinute.toString // Stunde + Minute für Vergleich ob Ein- oder Ausschaltzeit (Minute kann ggf. weggelassen werden)
val vDateOfDayOfYear = ZonedDateTime.now.with(LocalTime.of(0,0,0,0)).withDayOfYear(vFirstAdventDay) // Umrechnung Tag des Jahres in ein Datum, in diesem Falle Tag des 1. Advents
val vDateOfDayOfYear1 = ZonedDateTime.now.withDayOfYear(vFirstAdventDay) // Umrechnung Tag des Jahres in ein Datum, in diesem Falle Tag des 1. Advents mit al#ktueller Uhrzeit
logInfo("advent1", "1.Advent ist am: {} {} ", vDateOfDayOfYear, vDateOfDayOfYear1)
Date1stAdvent.postUpdate(new DateTimeType(vDateOfDayOfYear))
openHAB 4.3 im Synology NAS Docker-Container.
-
- Beiträge: 296
- Registriert: 22. Sep 2018 10:38
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Hi,
2 Anmerkungen:
a) ist ist sinnvoll, Code entsprechend zu formatieren, mittels
[code*] meine rule... [/code*] (ohne Sternchen hinter dem e)
b) du verwendest (copy/paste?) zwei Variablen, vXMasDayNumber - vWeekDayXMAS. Wenn du diesen zuvor keinen Wert zugewiesen hast, könnte das Ursache deiner Fehlermeldung sein.
2 Anmerkungen:
a) ist ist sinnvoll, Code entsprechend zu formatieren, mittels
[code*] meine rule... [/code*] (ohne Sternchen hinter dem e)
b) du verwendest (copy/paste?) zwei Variablen, vXMasDayNumber - vWeekDayXMAS. Wenn du diesen zuvor keinen Wert zugewiesen hast, könnte das Ursache deiner Fehlermeldung sein.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Wie @new378 geschrieben hat, musst du natürlich alle Variablen, die du benutzt, auch deklarieren.
Also, hier nochmal eine einfache, abgespeckte Version der Datums-Berechnung mit Update des Items, zur Anzeige in deiner Sitemap.
1. Item:
2. Regel:
So sollte es aber nun gehen.
Also, hier nochmal eine einfache, abgespeckte Version der Datums-Berechnung mit Update des Items, zur Anzeige in deiner Sitemap.
1. Item:
Code: Alles auswählen
DateTime Date1stAdvent "1. Advent mit pattern" { stateDescription="pattern" [pattern="%1$ta, %1$td.%1$tm.%1$ty"] } // Advent, Advent ....
2. Regel:
Code: Alles auswählen
rule "einfache Regel"
when
Item Dummy_3 changed to ON // Test-Switch
then
var vXMasDayNumber = LocalDate.of(now.year,12,24).getDayOfYear() // Heiligabend - Tag des Jahres - Day of the Year
var vWeekDayXMAS = LocalDate.of(now.year,12,24).getDayOfWeek().getValue // Heiligabend - Christmas eve - Wochentag - Day of the Week
if (vWeekDayXMAS == 7) {
vWeekDayXMAS = 0 // Wenn Sonntag, dann Heiligabend und 4.Advent gleich - if Christmas eve is Sunday it equals to 4. Advent
logInfo("einfach", "Heiligabend und 4 Advent sind gleich {} ", vWeekDayXMAS)
}
else {
logInfo("einfach", "Heiligabend und 4 Advent sind nicht gleich {} ", vWeekDayXMAS)
}
var vFirstAdventDate = LocalDate.of(now.year,12,24).withDayOfYear(vXMasDayNumber - vWeekDayXMAS - 21) // 1. Advent
var vFirstAdventDay = vFirstAdventDate.getDayOfYear // Tag-Nr. 1. Advent
logInfo("einfach", "einfach 1.Advent ist am {}, der {} Tag des Jahres", vFirstAdventDate, vFirstAdventDay)
val vDateOfDayOfYear = ZonedDateTime.now.with(LocalTime.of(0,0,0,0)).withDayOfYear(vFirstAdventDay) // Umrechnung Tag des Jahres in ein Datum, in diesem Falle Tag des 1. Advents Uhrzeit 00:00
val vDateOfDayOfYear1 = ZonedDateTime.now.withDayOfYear(vFirstAdventDay) // Umrechnung Tag des Jahres in ein Datum, in diesem Falle Tag des 1. Advents mit al#ktueller Uhrzeit (alternativ)
logInfo("einfach", "einfach 1.Advent ist am: {} {} ", vDateOfDayOfYear, vDateOfDayOfYear1)
Date1stAdvent.postUpdate(new DateTimeType(vDateOfDayOfYear))
end
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Danke, auf Grund eurer konzertierten Aktion geht es jetzt. Nochmals Danke und einen schönen Gruß. PJH
PS: Auf Grund dieses Erfolges würde ich auch gerne noch weitere Feiertage anzeigen.
Peter, ich würde dann, wenn Du gestattest, noch einmal auf dich zukommen.
PS: Auf Grund dieses Erfolges würde ich auch gerne noch weitere Feiertage anzeigen.
Peter, ich würde dann, wenn Du gestattest, noch einmal auf dich zukommen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von PJH am 22. Dez 2023 15:26, insgesamt 1-mal geändert.
openHAB 4.3 im Synology NAS Docker-Container.
- udo1toni
- Beiträge: 15241
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Ich habe mir mal die Freiheit genommen, die Code Tags zu ergänzen.
Nur so am Rande... Eine Rule sollte nach Möglichkeit immer vollständig gepostet werden (oben fehlt mindestens noch ein end)
Außerdem sollte man den Code - gerade auch hier fürs Forum - möglichst gut lesbar gestalten. Bei Codebeispielen oder auch Fragen zu bestehenden Rules sind auskommentierte Zeilen nur Balast.
Hier im Forum wird ein <tab> für die Anzeige immer mit 8 Leerzeichen ersetzt, was meist zu viel ist. Deshalb bietet es sich an, im Originalcode vor dem Kopieren alle <tab> Zeichen durch jeweils 4 Leerzeichen ersetzen zu lassen.
Auch sonst ist es sinnvoll, auf gute Lesbarkeit zu achten (Text in einem Editor passend einrücken usw.), das hilft sogar manchmal, um Fehler im eigenen Code gleich selbst zu finden.
Wenn es darum geht, alle Feiertage anzuzeigen, möchte ich dringend empfehlen, dass Du Dir Ephemeris anschaust (das ist Bestandteil von openHAB).
Ephemeris berechnet Termine anhand vorgegebener Regeln. Die Regeln werden in einer xml Datei hinterlegt. Im offiziellen Repository gibt es z.B. das hier: https://github.com/svendiedrichsen/joll ... ays_de.xml, wobei die Datei meiner Meinung nicht vollständig, oder alternativ fehlerhaft ist (z.B. Ostersonntag müsste ebenfalls bundesweiter Feiertag sein, nicht nur in Brandenburg), aber sie mag als guter Ausgangspunkt dienen
Man kann in dieser Datei auch die Adventssonntage mit abbilden.
Nur so am Rande... Eine Rule sollte nach Möglichkeit immer vollständig gepostet werden (oben fehlt mindestens noch ein end)
Außerdem sollte man den Code - gerade auch hier fürs Forum - möglichst gut lesbar gestalten. Bei Codebeispielen oder auch Fragen zu bestehenden Rules sind auskommentierte Zeilen nur Balast.
Hier im Forum wird ein <tab> für die Anzeige immer mit 8 Leerzeichen ersetzt, was meist zu viel ist. Deshalb bietet es sich an, im Originalcode vor dem Kopieren alle <tab> Zeichen durch jeweils 4 Leerzeichen ersetzen zu lassen.
Auch sonst ist es sinnvoll, auf gute Lesbarkeit zu achten (Text in einem Editor passend einrücken usw.), das hilft sogar manchmal, um Fehler im eigenen Code gleich selbst zu finden.
Wenn es darum geht, alle Feiertage anzuzeigen, möchte ich dringend empfehlen, dass Du Dir Ephemeris anschaust (das ist Bestandteil von openHAB).
Ephemeris berechnet Termine anhand vorgegebener Regeln. Die Regeln werden in einer xml Datei hinterlegt. Im offiziellen Repository gibt es z.B. das hier: https://github.com/svendiedrichsen/joll ... ays_de.xml, wobei die Datei meiner Meinung nicht vollständig, oder alternativ fehlerhaft ist (z.B. Ostersonntag müsste ebenfalls bundesweiter Feiertag sein, nicht nur in Brandenburg), aber sie mag als guter Ausgangspunkt dienen

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 135
- Registriert: 23. Mai 2017 08:32
- Wohnort: Duisburg
- Kontaktdaten:
Re: [solved] Ein Newbie benötigt Hife bei einer Rule
Hallo, ich bitte um Vergebung, werde mir Nächstens mehr Mühe geben.
Schöne Grüße und nochmals danke. PJH
Schöne Grüße und nochmals danke. PJH
openHAB 4.3 im Synology NAS Docker-Container.