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
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
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 (https://forum.fhem.de/index.php?action=profile;u=14026)seit zwei Jahren nicht mehr da gewesen.
Gruß Otto
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
zeig mal bitte ein list des at.
und die Ausgabe von get Abfall_Kalender events limit:from=0,count=3
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;
}
kannst Du das bitte nochmal in eine von Menschen lesbare Form bringen, zum Beispiel durch Verwendung von code tags?
Danke.
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;
}
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
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
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
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
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?
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
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...