AT und ical

Begonnen von AndreasB, 06 Oktober 2022, 09:22:02

Vorheriges Thema - Nächstes Thema

AndreasB

Moin,

ich habe ein Problem bei at und ical. Seitdem ich mal von Jessie auf Bullseye gegangen bin, liefert

my $abfall = fhem("get Abfall_Kalender events limit:when=tomorrow");

schon 2 Tage vorher das Event zurück, welches sonst nur am Vortag definiert war. Seltsamerweise liefert es keinen Wert, wenn ich bei dem at Event ein set Abfall execNow ausführe.

Wo ist da der Unterschied? Vielen Dank.

Gruß,

Andreas

MadMax-FHEM

Bzgl. des Problems selbst kann ich nichts sagen ABER: das gewählte Unterforum ist ja wohl mal ganz FALSCH!

Zitat
In diesem Board bitte keine Themen mit Fragen starten, sondern ausschließlich funktionsfähige Codeschnipsel posten.

Bitte nimm Dir die Zeit, das richtige Board für Dein Thema bzw. Deine Frage auszuwählen!

Dazu bitte in der Liste http://fhem.de/MAINTAINER.txt nachschauen, welches Modul in welchem Unterforum/Board betreut wird.
Im Zweifelsfall bitte "Anfängerfragen" nutzen.

Danke!

Also ins passende Unterforum verschieben!
Kannst du selbst machen, da muss es einen "Link"/"Knopf" geben...

Welches Unterforum: help Modulname in fhemWEB-cmd oder wenn sonst keine Idee wenigstens mal nach Anfängerfragen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Hallo Andreas,

was liefert Dir get Abfall_Kalender events limit:when=tomorrow zu welchem Zeitpunkt exakt zurück?

Ich habe bei deinem Problem das es Gefühl, es ist zum einen das Abfall Modul (Spekulation ob im Einsatz)? oder eine zeitliche Überschneidung je nach dem wann das Calendar Device triggert.

Empfehlung: löse das ohne ein extra Modul nur mit dem Calendar. Das Modul wird nicht mehr gepflegt? Zumindest ist der Autor seit zwei Jahren nicht mehr da gewesen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

AndreasB

Hallo Otto,

das ist ja das seltsame. Angenommen der Termin steht als ganztägiger Termin drin, Datum zum Beispiel 08.10.22.

Dann würde heute den ganzen Tag ein

get Abfall_Kalender events limit:when=tomorrow

eine leere Antwort ergeben. Auch wenn ich den at Befehl sofort ausführe, dann bekomme ich eine leere Antwort. Nur wenn ich den zeitgesteuert zu irgendeiner Uhrzeit 2 Tage vorher ausführen lasse, würde ich heute erhalten

08.10.2022 00:00 24h Bioabfall

Die Termine sind im Kalender als wiederkehrende Termine definiert, also alle 14 Tage zum Beispiel.

Mir ist das mit dem Wechsel von Jessie auf Bullseye aufgefallen, das war vor ca. 3,5 Wochen (habe halt lange damit gewartet). Ob es da zu diesem Zeitpunkt noch Änderungen an ical oder at gab, weiß ich leider nicht.

Das Abfallmodul ist bei mir nicht im Einsatz. Ist der Kalender von nextcloud, welche ich einlese

ical url https://***:*****@xxx.xxx.xxx.xxx/remote.php/dav/calendars/ab2/abfallkalender/?export

Andreas

Otto123

zeig mal bitte ein list des at.
und die Ausgabe von get Abfall_Kalender events limit:from=0,count=3

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

AndreasB

Internals:
   COMMAND    {

Abfall();

}
   DEF        *18:00 {

Abfall();

}
   FUUID      5c42ec16-f33f-c011-11ea-9366eb4b6ee5fd4b
   NAME       Abfall
   NR         13
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 18:00:00
   TIMESPEC   18:00
   TRIGGERTIME 1665072000
   TRIGGERTIME_FMT 2022-10-06 18:00:00
   TYPE       at
   eventCount 5
   READINGS:
     2022-10-06 10:58:56   state           Next: 18:00:00
Attributes:
   room       Unsorted

get Abfall_Kalender ..

07.10.2022 00:00 24h Bioabfall
13.10.2022 00:00 24h Gelbe
15.10.2022 00:00 24h Altpapier


sub Abfall()
{

my $abfall = fhem("get Abfall_Kalender events limit:when=tomorrow");

if (defined $abfall and length $abfall) {

   Log 1, "Abfall " . $abfall;
   
   my $thema = substr($abfall, 21);

     my $datei='';
     
     if ($thema eq 'Bioabfall') {
       $datei = '/opt/fhem/bio.lst';
     }
     else {
       $datei = '/opt/fhem/mailing.lst';
     }
     
     open (DATEI, $datei) or die $!;
       my @mail_liste = <DATEI>;
     close (DATEI);
     
     foreach (@mail_liste){
       
        DebianMail($_ ,$thema . ' Tonne bitte herausstellen','Beckers Hausautomation');
       
     }
     
     fhem 'set teleBot message @**** ' . $thema . ' Tonne bitte herausstellen';
} else {
    Log 1, "Heute nix rausstellen";
}
return 0;
}



betateilchen

kannst Du das bitte nochmal in eine von Menschen lesbare Form bringen, zum Beispiel durch Verwendung von code tags?

Danke.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

AndreasB

Hoffe, ich habe es richtig verstanden


sub Abfall()
{
   my $abfall = fhem("get Abfall_Kalender events limit:when=tomorrow");

   if (defined $abfall and length $abfall) {
      
      Log 1, "Abfall " . $abfall;
   
      my $thema = substr($abfall, 21);

      my $datei='';
     
      if ($thema eq 'Bioabfall') {
         $datei = '/opt/fhem/bio.lst';
      }
      else {
         $datei = '/opt/fhem/mailing.lst';
      }
     
      open (DATEI, $datei) or die $!;
         my @mail_liste = <DATEI>;
      close (DATEI);
     
      foreach (@mail_liste){
       
         DebianMail($_ ,$thema . ' Tonne bitte herausstellen','Beckers Hausautomation');
       
      }
     
      fhem 'set teleBot message @**** ' . $thema . ' Tonne bitte herausstellen';
   } else {
      Log 1, "Heute nix rausstellen";
   }
      
   return 0;
}

Otto123

#8
Nein es waren Code Tags gemeint, hier steht wie es geht
https://forum.fhem.de/index.php/topic,71806.0.html
Die Beiträge kann man auch editieren und nicht nochmal neu schreiben

Ich habe aber noch keine Ahnung warum der Code in der sub einen Tag falsch gehen soll. ::)
Außer das vielleicht die Zeitzonen bei allen beteiligten Geräten irgendwie verbogen sind?
Mal ein paar Abfragen für die FHEM Kommandozeile (einzeln)
{qx(timedatectl)}
{qx(date)}
{qx(printenv)}

Und hier in den ersten Zeilen die Zeitzonen Infos vom Kalender
get Abfall_Kalender vcalendar
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

AndreasB

Hallo,

nochmal sorry, ich muss noch lernen, hier was zu posten. Also der Code liefert ja das Event immer an 2 Tagen, aber nur, wenn der at zu der angegebenen Uhrzeit startet. Wenn man ein ExecNow 2 Tage vorher macht, dann wird der Event nicht zurückgeliefert.

{qx(timedatectl)}

               Local time: Fr 2022-10-07 09:32:48 CEST
           Universal time: Fr 2022-10-07 07:32:48 UTC
                 RTC time: n/a
                Time zone: Europe/Berlin (CEST, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no


{qx(date)}

Fr 7. Okt 09:33:50 CEST 2022


{qx(printenv)}
LANG=de_DE.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/opt/fhem
LOGNAME=fhem
USER=fhem
INVOCATION_ID=c06ba65f83004f7d83703b25d0fd192c
JOURNAL_STREAM=8:305924
PERL_LWP_SSL_VERIFY_HOSTNAME=0


Ich habe die Ausgabe von vcalendar auf einen Eintrag gekürzt:

get Abfall_Kalender vcalendar

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:-//SabreDAV//SabreDAV//EN
X-WR-CALNAME:Abfallkalender
X-APPLE-CALENDAR-COLOR:#808080
REFRESH-INTERVAL;VALUE=DURATION:PT4H
X-PUBLISHED-TTL:PT4H
BEGIN:VEVENT
CREATED:20211130T162651Z
DTSTAMP:20211130T162651Z
LAST-MODIFIED:20211130T162651Z
SEQUENCE:1
UID:8db382f5-1be5-4b04-a7cf-d227f66ae999
DTSTART;VALUE=DATE:20221007
DTEND;VALUE=DATE:20221008
STATUS:CONFIRMED
SUMMARY:Bioabfall
RECURRENCE-ID;VALUE=DATE:20221006
END:VEVENT
END:VCALENDAR


Was mir hier auffällt, ist  RECURRENCE-ID;VALUE=DATE:20221006

Aber wie gesagt, es passiert ja nur, wenn der at automatisiert im Hintergrund abläuft.

Andreas

Otto123

Moin,

Zitat von: AndreasB am 07 Oktober 2022, 09:52:33
aber nur, wenn der at zu der angegebenen Uhrzeit startet. Wenn man ein ExecNow 2 Tage vorher macht, dann wird der Event nicht zurückgeliefert.
Was mich irgendwie auf die Fährte lockt, das 18:00 Uhr oder später irgendetwas anders ist :)
Die Zeitzone vom FHEM Server ist ok, der FHEM Prozess hat keine "extra Wurst" (man kann in Linux die Zeitzone pro Prozess einstellen)
Der Kalender hat keinen Zeitzoneneintrag soweit ich das erkenne.
Bedeutung der RECURRENCE-ID  https://icalendar.org/iCalendar-RFC-5545/3-8-4-4-recurrence-id.html
Der Eintrag scheint mir ok, sieht bei mir ähnlich aus:
BEGIN:VEVENT
DTSTART;VALUE=DATE:20220608
DTEND;VALUE=DATE:20220609
DTSTAMP:20221006T215911Z
UID:782tbfilu68su9klcstso9jbtc@google.com
RECURRENCE-ID;VALUE=DATE:20220607
CREATED:20170104T141625Z
DESCRIPTION:
LAST-MODIFIED:20211226T161149Z
LOCATION:
SEQUENCE:1
STATUS:CONFIRMED
SUMMARY:Papier
TRANSP:TRANSPARENT
END:VEVENT


Ich denke die Abfrage um/nach 18:00 Uhr liefert für tomorrow den (über)nächsten Tag, weil es irgendwo intern 18:00 + 6:00 - also schon 00:00 Uhr ist. Kannst Du das nachvollziehen mit der Abfrage vor/nach 18:00 Uhr?

Du könntest statt get Abfall_Kalender events limit:when=tomorrow
so abfragen:
get Abfall_Kalender events limit:from=12:00,count=1

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

AndreasB

Hallo,

es ist wohl egal, zur welcher Uhrzeit ich es ausführen lasse. Heute morgen um 10:05 Uhr, der Termin von übermorgen wird mir angezeigt. Führe ich das in der Eingabezeile aus, kein Ergebnis.

get Abfall_Kalender events limit:from=12:00,count=1

liefert das nächste Ereignis aus dem Kalender.

get Abfall_Kalender events limit:when=1

verhält sich analog zu

get Abfall_Kalender events limit:when=tomorrow

Wird mir nichts anderes übrig bleiben, als das mitgeliefert Datum auszuwerten.

Andreas


betateilchen

Zitat von: AndreasB am 06 Oktober 2022, 15:37:00
Das Abfallmodul ist bei mir nicht im Einsatz. Ist der Kalender von nextcloud, welche ich einlese

ical url https://***:*****@xxx.xxx.xxx.xxx/remote.php/dav/calendars/ab2/abfallkalender/?export

Kannst Du mal bitte den Kalender in ein ical exportieren und hier anhängen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

AndreasB

Hallo,

anbei der Export.

Aber jetzt wird es noch seltsamer:

Ich habe in der Sub versucht, die Zeit auszugeben.

Log 1, qx(date);

Seitdem funktioniert es. Kommentiere ich die Zeile aus, habe ich wieder das Verhalten wie vorher beschrieben.

Andreas

betateilchen

Zitat von: AndreasB am 08 Oktober 2022, 13:22:31
Ich habe in der Sub versucht, die Zeit auszugeben.
...
Seitdem funktioniert es. Kommentiere ich die Zeile aus, habe ich wieder das Verhalten wie vorher beschrieben.

Voodoo...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!