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

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

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

Beitrag von PJH »

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
openHAB 4.3 im Synology NAS Docker-Container.

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 »

Ok. Hier noch eine Variante:

Item:

Code: Alles auswählen

DateTime Date1stAdvent  "1. Advent mit pattern"  { stateDescription="pattern"  [pattern="%1$ta, %1$td.%1$tm.%1$ty"] } // Advent, Advent .... 
Rule-Snippet:

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))
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
Advent.jpg
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

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

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

Beitrag von PJH »

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
openHAB 4.3 im Synology NAS Docker-Container.

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 »

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

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

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

Beitrag von PJH »

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.

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

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

Beitrag von nw378 »

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.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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 »

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:

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
So sollte es aber nun gehen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

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

Beitrag von PJH »

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.

Bildschirmfoto 2023-12-22 um 15.25.18.png
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.

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

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

Beitrag von udo1toni »

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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

PJH
Beiträge: 135
Registriert: 23. Mai 2017 08:32
Answers: 0
Wohnort: Duisburg
Kontaktdaten:

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

Beitrag von PJH »

Hallo, ich bitte um Vergebung, werde mir Nächstens mehr Mühe geben.

Schöne Grüße und nochmals danke. PJH
openHAB 4.3 im Synology NAS Docker-Container.

Antworten