Autor Thema: Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht  (Gelesen 724 mal)

Offline fhemthom

  • New Member
  • *
  • Beiträge: 26
Hallo,

ich habe mir nach https://wiki.fhem.de/wiki/Wochenende,_Feiertage_und_Schulferien#Feiertage_mittels_Internet-Kalender einen Urlaubskalender gebaut:

define Urlaubstage Calendar ical file ./my_config/urlaub.ics 300
setuuid Urlaubstage 5c73d783-f33f-2301-6830-518c006143a79066
attr Urlaubstage hideOlderThan 31d
attr Urlaubstage icon time_calendar
attr Urlaubstage room Kalender

define Urlaubstag dummy
setuuid Urlaubstag 5c73d783-f33f-2301-684c-91b6fd4cddc1df02
attr Urlaubstag icon time_calendar
attr Urlaubstag room Kalender
define n_Urlaubstag notify Urlaubstage:changed:.*(start|end) {\
   my $stat=($EVTPART2 eq "start")?1:0;;\
   fhem("set Urlaubstag $stat") if defined fhem('get '.$NAME.' events filter:uid=="'.\
         $EVTPART1.'",field(summary)=~"(?i)Urlaub" limit:count=1,from=0',1)\
}
setuuid n_Urlaubstag 61d41cd0-f33f-bd54-8309-081662b2a0e58c6b

Die start und stop Events eines Kalendereintrags kann ich im Eventmonitor sehen, von Hand kann ich Events auch erfolgreich testen (mit trigger), soweit alles ok.
Allerdings triggert wenn ich das ganze nun laufen lasse nur das start Event den zugehörigen notify, das end Event bleibt unbeachtet und der Urlaubstag bleibt (einmal getriggert) ständig auf  '1'.

In den Internals des notify sehe ich allerdings auch folgendes wenn ich auf das Ausraufezeichen hinter der Regexp klicke:

Could not optimize the regexp:

    Urlaubstage:changed:.*(start|end)

How I tried (notifyRegexpCheck):

    Urlaubstage:changed:.*(start: device Urlaubstage (OK)
    end): unknown (ignored)

Ich vermute, dass da der Fehler liegt - nur wie behebe ich das und falls das stimmt: ist dann nicht der Wiki-Artikel an der Stelle falsch?

Danke für alle Hinweise!

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19331
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #1 am: 19 Juni 2022, 14:33:33 »
Das mit dem nicht erkannten NOTIFYDEF ist vermutlich nicht das Problem, das kann man durch Anpassung des triggers lösen.

defmod n_Urlaubstag notify Urlaubstage:changed:.*start|Urlaubstage:changed:.*end { \
[...]
}
Sind das "sehr kurze" Einträge, bei denen Start und Ende zusammenfällt? Dann hast du uU. eben keine zwei Auswertungen, sondern nur eine (für den Eventstapel mit start+end-Events). In der commandref zu Calendar sollte eine Abhilfe für sowas zu finden sein.
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline DetlefR

  • Full Member
  • ***
  • Beiträge: 297
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #2 am: 19 Juni 2022, 17:24:51 »
Zitat
Die start und stop Events eines Kalendereintrags kann ich im Eventmonitor sehen
Zitat
define n_Urlaubstag notify Urlaubstage:changed:.*(start|end)

Nur mal so. Ohne Kommentar

Offline fhemthom

  • New Member
  • *
  • Beiträge: 26
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #3 am: 20 Juni 2022, 11:09:23 »
Nur mal so. Ohne Kommentar

start und end ist schon richtig. Ich hatte es in der Beschreibung des Problems missverständlich formuliert - sorry.

Das mit dem nicht erkannten NOTIFYDEF ist vermutlich nicht das Problem, das kann man durch Anpassung des triggers lösen.

defmod n_Urlaubstag notify Urlaubstage:changed:.*start|Urlaubstage:changed:.*end { \
[...]
}

vielen Dank, das hat zumindest das gelöst!

Sind das "sehr kurze" Einträge, bei denen Start und Ende zusammenfällt? Dann hast du uU. eben keine zwei Auswertungen, sondern nur eine (für den Eventstapel mit start+end-Events). In der commandref zu Calendar sollte eine Abhilfe für sowas zu finden sein.

Nein, die Urlaubstag-Einträge sind vollkommen unterschiedlich. Mal ein Tag, mal eine Woche, mehrere Tage am Stück, eine halbe Stunde... Das Ergebnis ist immer gleich. start triggert zuverlässig den notify, end niemals.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19331
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #4 am: 20 Juni 2022, 13:15:25 »
Nein, die Urlaubstag-Einträge sind vollkommen unterschiedlich. Mal ein Tag, mal eine Woche, mehrere Tage am Stück, eine halbe Stunde... Das Ergebnis ist immer gleich. start triggert zuverlässig den notify, end niemals.
triggert oder führt nicht zum gewünschten Ergebnis?

Hier mal mein "Zwischenteil", müßte eigentlich funktionieren, die Abfrage ist aber etwas weniger rigide, vielleicht macht das Probleme iVm. dem "end"-Event:
    my $UID = $EVTPART1;;\
    my $cmd = $EVTPART2;;\
    my $MYACTOR = fhem('get Familienkalender events format:custom="$S" filter:uid=="'.$UID.'" limit:count=1') ;;\
    $cmd = $cmd eq 'start' ?  1 : 0;;\
       CommandSet(undef, "Ferientag $cmd") if ($MYACTOR =~ /ferien/);;\
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline fhemthom

  • New Member
  • *
  • Beiträge: 26
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #5 am: 20 Juni 2022, 14:25:27 »
triggert oder führt nicht zum gewünschten Ergebnis?

Ich meine damit, dass Start- und Endzeit des Termins aus dem ics ein Event im Eventmonitor werfen - das notify wird aber nur beim Startevent auf 1 gesetzt und beim Endevent nicht wieder auf 0.

Hier mal mein "Zwischenteil", müßte eigentlich funktionieren, die Abfrage ist aber etwas weniger rigide, vielleicht macht das Probleme iVm. dem "end"-Event:
    my $UID = $EVTPART1;;\
    my $cmd = $EVTPART2;;\
    my $MYACTOR = fhem('get Familienkalender events format:custom="$S" filter:uid=="'.$UID.'" limit:count=1') ;;\
    $cmd = $cmd eq 'start' ?  1 : 0;;\
       CommandSet(undef, "Ferientag $cmd") if ($MYACTOR =~ /ferien/);;\

Danke, aber mir fehlt leider das notwendige Know-How das auf meinen Fall umzuschreiben.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19331
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #6 am: 20 Juni 2022, 14:40:38 »
Vermutlich macht das ",from=0" Probleme.

Würde das mal löschen und noch eine Zeile einfügen:
my $stat=($EVTPART2 eq "start")?1:0;;\
   fhem("setreading Urlaubstag test $stat");;\
Damit solltest du sehen, ob es an der if-Bedingung liegt.

Ansonsten kann ich nur empfehlen, dich mit der Perl-Syntax zu befassen, ohne wirst du bei FHEM nicht glücklich.
(Mein Schnippsel entspricht übrigens auch nicht mehr dem, was ich heute schreiben würde...).

Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline fhemthom

  • New Member
  • *
  • Beiträge: 26
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #7 am: 20 Juni 2022, 17:34:52 »
Vermutlich macht das ",from=0" Probleme.

Würde das mal löschen und noch eine Zeile einfügen:
my $stat=($EVTPART2 eq "start")?1:0;;\
   fhem("setreading Urlaubstag test $stat");;\
Damit solltest du sehen, ob es an der if-Bedingung liegt.

Vielen Dank - das Reading test wird beim start des Termins auf 1 und beim end wieder auf 0 gesetzt, also liegt es an dem if? Wie muss ich das denn dann ändern, dass es passt?

Ansonsten kann ich nur empfehlen, dich mit der Perl-Syntax zu befassen, ohne wirst du bei FHEM nicht glücklich.

Bisher bin ich mit der FHEM-Dokumentation immer recht gut klargekommen. Was die Perl-Syntax angeht, so wird das bei mir allerdings nichts mehr werden. Mir fehlen dafür fundamentale Grundkenntnisse... Daher bin ich sehr froh über die vielen Beispiele hier im Forum und im Wiki - aber in diesem Fall funktioniert das bei mir leider nicht :(

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19331
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #8 am: 20 Juni 2022, 17:42:09 »
Würde das mal löschen und noch eine Zeile einfügen:
Hast du nur das zusätzliche Reading eingefügt oder auch das if angepaßt wie vorgeschlagen?
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline fhemthom

  • New Member
  • *
  • Beiträge: 26
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #9 am: 20 Juni 2022, 18:07:38 »
Hast du nur das zusätzliche Reading eingefügt oder auch das if angepaßt wie vorgeschlagen?

Ich habe jetzt erstmal nur das Reading eingefügt und alles andere auskommentiert. Ich weiss ja eben nicht wie ich das if bei mir anpassen muss, damit es passt...

Offline fhemthom

  • New Member
  • *
  • Beiträge: 26
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #10 am: 20 Juni 2022, 18:34:34 »
Ich habe das jetzt so angepasst, dass ich aus dem Beispiel aus dem Forum nur das from=0 entfernt habe:

define n_Urlaubstag notify Urlaubstage:changed:.*start|Urlaubstage:changed:.*end { \
   my $stat=($EVTPART2 eq "start")?1:0;;\
   fhem("set Urlaubstag $stat") if defined fhem('get '.$NAME.' events filter:uid=="'.\
#         $EVTPART1.'",field(summary)=~"(?i)Urlaub" limit:count=1,from=0',1)\
         $EVTPART1.'",field(summary)=~"(?i)Urlaub" limit:count=1',1)\
}

was auch immer das machen soll... So funktioniert das bei mir nun. Vielen Dank für die Unterstützung!

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19331
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #11 am: 20 Juni 2022, 19:36:24 »
Ich habe das jetzt so angepasst, dass ich aus dem Beispiel aus dem Forum nur das from=0 entfernt habe
[...]
was auch immer das machen soll... So funktioniert das bei mir nun. Vielen Dank für die Unterstützung!
Das steht in der commandref unter "<limitSpec>".
Kann sein, dass da unterschiedliche Zeitformate eine Rolle spielen, was vermutlich auch der Grund war, warum ich mein notify auch entsprechend geändert hatte (aber wohl vor der Wiki-Änderung). Wie dem auch sei, im Wiki hab ich's jetzt auch die from-Zeitgrenze rausgenommen...
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline fhemthom

  • New Member
  • *
  • Beiträge: 26
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #12 am: 04 Oktober 2022, 08:11:43 »
Moin,

ich muss das mal wieder hochholen, da es nicht mehr funktioniert. Warum auch immer - ich bin am verzweifeln :(
Die Definition des notify sieht so aus:

Urlaubstage:changed:.*start|Urlaubstage:changed:.*end {
   my $stat=($EVTPART2 eq "start")?1:0;
   fhem("set Urlaubstag $stat") if defined fhem('get '.$NAME.' events filter:uid=="'.
#         $EVTPART1.'",field(summary)=~"(?i)Urlaub" limit:count=1,from=0',1)
         $EVTPART1.'",field(summary)=~"(?i)Urlaub" limit:count=1',1)
}

Es wird allerdings nur das start event getriggert, niemals das "end" event. Die triggeredByEvent Zeit steht - obwohl das Event schon lange vorbei ist immer noch auf "changed: ID_DES_EVENTS end" Spannend ist - dass wenn ich das "end" von Hand triggere mit:

trigger Urlaubstage changed: ID_DES_EVENTS end

wird der Urlaubstag auf 0 gesetzt.

Kann mir hier nochmal jemand helfen bitte? Ich habe mal wieder keine Ahnung wo ich ansetzen soll. Zu allem Überfluss sagt mir das Log auch noch:

get Urlaubstage end is deprecated and will be removed soon. Use get Urlaubstage events instead.
Das heisst ich muss das sowieso bald wieder anfannse? *seufz*

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 21457
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #13 am: 04 Oktober 2022, 09:25:56 »
Hi,

ich meine: die Zeile mit Kommentar versehen funktioniert an der Stelle nicht. Das ist mitten im String. Ich würde die Zeile löschen, ich "merke" mir so etwas immer vorübergehen im Kommentar. Kann aber sein da liege ich falsch, aber auf alle Fälle sieht das gruselig aus ;)

Ich fürchte den Fehler im Wiki habe ich seinerzeit da rein gebracht.  :o sorry
Habe ich später irgendwann gemerkt, beim "Event mit end" ist ja quasi gerade alles vorbei, from 0 liefert dann nichts mehr.

Kommt die Meldung im Log von etwas anderem? Du machst in dem notify kein get ... end,  zumindest kann ich mir das mit dem Code nicht erklären.

Du sagst der Event mit end kommt nicht mehr? Was ist das für ein Kalender der die Events liefert? Sind da die Termine irgendwie "komisch", hast Du da was geändert?

Mach mal eine get ... events Abfrage mit dem Filter (oder spiele selbst um den Sinn zu verstehen. Erklärung steht in der commandref)
format:custom="$M : $U : $T1-$T2" filter:field(summary)=~"(?i)Urlaub" limit:count=10,from=-5d da sollten "end" Einträge kommen.
Ein Sonderfall sind nämlich Serientermine, deswegen kam ursächlich die from=0 ins Spiel. Sonst bekommt man einen uralten Termin zurück, dachte ich. Aber eigentlich ist das egal, der Event ist ja aktuell.

Gruß Otto
« Letzte Änderung: 04 Oktober 2022, 16:16:36 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Offline fhemthom

  • New Member
  • *
  • Beiträge: 26
Antw:Urlaubskalender mit notify nach Wiki-Artikel funktioniert nicht
« Antwort #14 am: 10 Oktober 2022, 19:50:18 »
ich meine: die Zeile mit Kommentar versehen funktioniert an der Stelle nicht. Das ist mitten im String. Ich würde die Zeile löschen, ich "merke" mir so etwas immer vorübergehen im Kommentar. Kann aber sein da liege ich falsch, aber auf alle Fälle sieht das gruselig aus ;)

Meehh...  :o
Du hast natürlich Recht.

vielen Dank für den Pointer - jetzt geht es (wieder).