Calendar, CalView & Co

Begonnen von TubeHead, 07 Februar 2026, 14:40:02

Vorheriges Thema - Nächstes Thema

TubeHead

Hallo liebe Leute,

ich versuche mich gerade daran, Müllabfuhrtermine optisch auf den vorhandenen Ulanzi's darzustellen. Mit den Ulanzi's (AWTRIX) habe ich keine Probleme; die werden schon exzessiv eingesetzt. Aber mit dem Kalendermodul haperts...

Aktuell nutze ich eine lokale ICS, die wohl auch gelesen wird. Wenn ich den Dateinamen ändere erhalte ich bei "lastResponse" einen Error, wenn der Dateiname stimmt, erhalte ich ein OK.

Aktuell so definiert:

defmod kalender Calendar ical file ./abfallkalender.ics 3600
attr kalender group Kalender
attr kalender room 980 - Umwelt

setstate kalender initialized
setstate kalender 2026-02-07 13:45:35 lastResponse OK
setstate kalender 2026-02-07 13:43:45 nextWakeup 2026-02-07 14:43:45
setstate kalender 2026-02-07 14:22:02 state initialized

Das Intervall ist natürlich sinnlos kurz, aber zum Testen wohl erstmal ok.

Wenn ich jetzt ...
get kalender events format:full... absetze, sollte doch, nach meinem rudimentären Verständnis, eine Auflistung aller Termine in der Datei erfolgen, oder nicht?
Es passiert aber... nix ...

Letztendlich möchte ich einen Tag vorher (i.d.R. ein Sonntag, aber nicht immer!) schauen, was in der ICS bei "SUMMARY" steht und das dann per MQTT zu den Ulanzi's senden.

Da stehe ich jetzt vollkommen auf dem Schlauch, wie man das (mit DOIF) macht...

Könnte mich da bitte jemand DAU-konform einnorden?

Nobbynews

#1
Schon mal ein
set kalender reload oder
set kalender update vor dem get ausgeführt?

Und dann besser in das richtige Unterforum verschieben:
ZitatModule: 57_Calendar.pm Maintainer: neubert Forum: Unterstützende Dienste/Kalendermodule

TubeHead

... japp ... Beides mehrfach. Ändert nichts.
Ok... Wie verschiebe ich als Nutzer einen Thread? Darf ich das denn?

Nobbynews


Otto123

#4
Hi,
Zitat von: TubeHead am 07 Februar 2026, 14:40:02Könnte mich da bitte jemand DAU-konform einnorden?
vornweg, es wäre generell sinnvoller spezielle Fragen in einem spezielleren Unterforum zu stellen. Das passenden Unterforum findet man mit: help Calendar bzw. help DOIF
Du solltest den Thread passend verschieben. Unten links gibt es einen Button ...

Die readings kommen mir eigenartig vor:
lastResponse OK - So ein Reading gibt es bei mir nicht?!
state initialized - sieht aus wie nur definiert und nichts geladen.
calname - hier steht bei meinen Kalendern immer der name des Kalenders drin. Aber vielleicht darf der fehlen.
nextUpdate sollte es eigentlich geben wenn ein Interval angegeben ist (welches per default bei 3600 liegt)?
Ein
get kalender events sollte alle Events liefern.

Was wird denn bei
get kalender vcalendar oder
get kalender vevents ausgegeben?

Wie ist die ics Datei entstanden? Was steht da drin?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle

aktives Mitglied des FHEM e.V. (Technik)

Nobbynews

Zitat von: Otto123 am 07 Februar 2026, 16:11:22Die readings kommen mir eigenartig vor:
lastResponse OK - So ein Reading gibt es bei mir nicht?!
Hmmm, das gibt es bei mir allerdings:
READINGS:
    2026-02-07 03:05:01  calname        Abfall
    2026-02-07 03:05:00  lastResponse    OK
    2026-02-07 03:05:01  lastUpdate      2026-02-07 03:05:00
    2026-02-07 03:05:01  nextUpdate      2026-02-08 03:05:00
    2026-02-07 03:05:01  nextWakeup      2026-02-08 03:05:00
    2026-02-07 03:05:01  state          triggered
Attributes:
  cutoffLaterThan 040d
  cutoffOlderThan 14d

Scheint so, als ob die ics-Datei nicht in Ordnung ist.
Bei mir liefert ein get Abfall events
23.01.2026 00:00 24h Bioabfall
30.01.2026 00:00 24h Restabfall
04.02.2026 00:00 24h Leichtverpackungen
06.02.2026 00:00 24h Bioabfall
12.02.2026 00:00 24h Papier
13.02.2026 00:00 24h Restabfall
19.02.2026 00:00 24h Leichtverpackungen
21.02.2026 00:00 24h Bioabfall
27.02.2026 00:00 24h Restabfall
04.03.2026 00:00 24h Leichtverpackungen
06.03.2026 00:00 24h Bioabfall
12.03.2026 00:00 24h Papier
13.03.2026 00:00 24h Restabfall
18.03.2026 00:00 24h Leichtverpackungen

TubeHead

Ok, ich hangle mich mal anhand Deiner Fragen dazu durch...

Wenn ich "get kalender events" in der Kommandozeile absetze, erhalte ich ein leeres Popup. Setze ich es mit dem Button "get" und entsprechend im Dropdown "events" ausgewählt ab, passiert nichts.

Wenn ich vcalendar abfrage, erhalte ich eine Fehlermeldung:
fhem?detail=kalender line 8:
Uncaught SyntaxError: Unexpected string

Wenn ich vevents abfrage, erhalte ich ein leeres Resultat resp. es passiert nichts; wie events.

Die ICS habe ich mal beigefügt. Die stammt von unserem zuständigen Entsorger und wurde z.B. vom Google-Kalender anstandslos übernommen.

Du darfst diesen Dateianhang nicht ansehen.

Die habe ich in das root von FHEM kopiert, also dort, wo auch die fhem.cfg verweilt. Die scheint er auch zu finden, denn sobald ich den Dateinamen ändere, erhalte ich einen Error.

Otto123

#7
Du solltest den Thread nicht schließen! Öffne ihn bitte wieder!

Die ICS Datei ist im Windows Format (CR LF) gespeichert, ich weiß nicht ob Calendar (Linux) damit klar kommt, ich denke nicht.

Hast Du eventuell selbst verursacht oder ist falsch geliefert.
Das Tool dos2unix könnte helfen. Oder die Datei mit Notpad ++ öffnen und im unix Formal (LF) speichern.

sudo apt install dos2unix
Zitat von: TubeHead am 07 Februar 2026, 16:24:24vom Google-Kalender anstandslos übernommen.
Warum bindest Du dann nicht den direkt ein? Ist doch besser als eine lokale Datei?
Google wird wohl beim Import das Windows Format tolerieren ... Linux tut dies normalerweise nicht und die Effekte sind meist "lustig"

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle

aktives Mitglied des FHEM e.V. (Technik)

Nobbynews

#8
Ich habe jetzt die ics-Datei von meinem Entsorger nicht wie @Otto überprüft.
Inhaltlich sieht die Datei aber ok aus.
Vielleicht mal
./abfallkalender.ics durch
/opt/fhem/abfallkalender.ics ersetzen?

Allerdings habe ich das über einen Google-Kalender eingebunden.

TubeHead

#9
... das war ja mal eine Sache ;) Aber nun ist ja wieder offen  8)

Ich habe die Datei nun mal mit NP++ zu UNIX/UTF8 geändert und wieder zurück kopiert. Dann Reload und Update... Ändert leider nichts

Über den Google-Kalender werde ich es später einbinden. Das hatte ich auch zuerst versucht, aber mit gleichen Ergebnissen. Daher hatte ich mit entschieden, erstmal zum Rumfrickeln mit einer Datei zu arbeiten, um evtl. andere Fehlerquellen ausschließen zu können, die mit dem Abgreifen bei Google zusammenhängen könnten.

@Nobbynews
Habe ich gerade auch mal gemacht. Ändert aber auch nichts...


PS: Kann mir mal wer eine bei einem selbst funktionierende ICS zur Verfügung stellen? Dann teste ich die mal um zu sehen, ob hier was an der Datei oder irgendwo anders was nicht stimmt...

Otto123

#10
Kann ich nicht nachvollziehen: Deine Datei im Unix Format nach /opt/fhem, exakt Deine Definition, set kalender reload gemacht, funktioniert einwandfrei:
define kalender Calendar ical file ./abfallkalender.ics
#   CFGFN     
#   DEF        ical file ./abfallkalender.ics
#   FUUID      698760b4-f33f-9d3c-3c44-fc7127b3c6413a43
#   NAME       kalender
#   NOTIFYDEV  global
#   NR         42
#   NTFY_ORDER 50-kalender
#   STATE      triggered
#   TYPE       Calendar
#   eventCount 11
#   READINGS:
#     2026-02-07 16:56:56   lastUpdate      2026-02-07 16:56:55
#     2026-02-07 16:56:56   nextUpdate      2026-02-07 17:56:55
#     2026-02-07 16:56:56   nextWakeup      2026-02-07 17:56:55
#     2026-02-07 16:56:56   state           triggered
#
setstate kalender triggered
setstate kalender 2026-02-07 16:56:56 lastUpdate 2026-02-07 16:56:55
setstate kalender 2026-02-07 16:56:56 nextUpdate 2026-02-07 17:56:55
setstate kalender 2026-02-07 16:56:56 nextWakeup 2026-02-07 17:56:55
setstate kalender 2026-02-07 16:56:56 state triggered

get events liefert
Zitat02.02.2026 00:00 24h Bioabfall
09.02.2026 00:00 24h Restmüll
09.02.2026 00:00 24h Gelbe Tonne
16.02.2026 00:00 24h Bioabfall
16.02.2026 00:00 24h Papier
23.02.2026 00:00 24h Gelbe Tonne
23.02.2026 00:00 24h Restmüll
02.03.2026 00:00 24h Bioabfall
09.03.2026 00:00 24h Restmüll
09.03.2026 00:00 24h Gelbe Tonne
16.03.2026 00:00 24h Bioabfall
16.03.2026 00:00 24h Papier
23.03.2026 00:00 24h Gelbe Tonne
23.03.2026 00:00 24h Restmüll
30.03.2026 00:00 24h Bioabfall
07.04.2026 00:00 24h Gelbe Tonne
07.04.2026 00:00 24h Restmüll
13.04.2026 00:00 24h Bioabfall
13.04.2026 00:00 24h Papier
20.04.2026 00:00 24h Gelbe Tonne
20.04.2026 00:00 24h Restmüll
27.04.2026 00:00 24h Bioabfall
04.05.2026 00:00 24h Gelbe Tonne
04.05.2026 00:00 24h Restmüll
11.05.2026 00:00 24h Papier
11.05.2026 00:00 24h Bioabfall
18.05.2026 00:00 24h Restmüll
18.05.2026 00:00 24h Gelbe Tonne
26.05.2026 00:00 24h Bioabfall
01.06.2026 00:00 24h Gelbe Tonne
01.06.2026 00:00 24h Restmüll
08.06.2026 00:00 24h Bioabfall
08.06.2026 00:00 24h Papier
15.06.2026 00:00 24h Restmüll
15.06.2026 00:00 24h Gelbe Tonne
22.06.2026 00:00 24h Bioabfall
29.06.2026 00:00 24h Gelbe Tonne
29.06.2026 00:00 24h Restmüll
06.07.2026 00:00 24h Bioabfall
06.07.2026 00:00 24h Papier
13.07.2026 00:00 24h Gelbe Tonne
13.07.2026 00:00 24h Restmüll
20.07.2026 00:00 24h Bioabfall
27.07.2026 00:00 24h Restmüll
27.07.2026 00:00 24h Gelbe Tonne
03.08.2026 00:00 24h Papier
03.08.2026 00:00 24h Bioabfall
10.08.2026 00:00 24h Restmüll
10.08.2026 00:00 24h Gelbe Tonne
17.08.2026 00:00 24h Bioabfall
24.08.2026 00:00 24h Restmüll
24.08.2026 00:00 24h Gelbe Tonne
31.08.2026 00:00 24h Bioabfall
31.08.2026 00:00 24h Papier
07.09.2026 00:00 24h Restmüll
07.09.2026 00:00 24h Gelbe Tonne
14.09.2026 00:00 24h Bioabfall
21.09.2026 00:00 24h Restmüll
21.09.2026 00:00 24h Gelbe Tonne
28.09.2026 00:00 24h Papier
28.09.2026 00:00 24h Bioabfall
05.10.2026 00:00 24h Restmüll
05.10.2026 00:00 24h Gelbe Tonne
12.10.2026 00:00 24h Bioabfall
19.10.2026 00:00 24h Gelbe Tonne
19.10.2026 00:00 24h Restmüll
26.10.2026 00:00 24h Bioabfall
26.10.2026 00:00 24h Papier
02.11.2026 00:00 24h Gelbe Tonne
02.11.2026 00:00 24h Restmüll
09.11.2026 00:00 24h Bioabfall
16.11.2026 00:00 24h Restmüll
16.11.2026 00:00 24h Gelbe Tonne
23.11.2026 00:00 24h Bioabfall
23.11.2026 00:00 24h Papier
30.11.2026 00:00 24h Gelbe Tonne
30.11.2026 00:00 24h Restmüll
07.12.2026 00:00 24h Bioabfall
14.12.2026 00:00 24h Restmüll
14.12.2026 00:00 24h Gelbe Tonne
18.12.2026 00:00 24h Papier
18.12.2026 00:00 24h Bioabfall
28.12.2026 00:00 24h Gelbe Tonne
28.12.2026 00:00 24h Restmüll
Habe es aber auch mit dem Windows Format probiert, scheint egal zu sein. Da liegt bei Dir ein andere Fehler vor!!!
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle

aktives Mitglied des FHEM e.V. (Technik)

TubeHead

 :o Kapiere ich nicht  :'(
Ist vielleicht das Modul irgendwie bei mir defekt? kann ich das manuell nach FHEM kopieren, um das ausschließen zu können?

Otto123

#12
was sagt
version Calendar
Zitat von: TubeHead am 07 Februar 2026, 17:02:26manuell nach FHEM kopieren
besser nicht :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle

aktives Mitglied des FHEM e.V. (Technik)

TubeHead

 ;D  ;D  ;D
Ich hatte gerade die gleiche Idee und ein komplettes FHEM-Update gemacht. Jetzt funktioniert das...  O:-)

War da mal in den vergangenen Monaten eine Version mit einer Macke? Scheint so... Und bei meinem Glück habe ich natürlich genau die noch gehabt...
Nun gut... Das Problem wäre gelöst... Gut das wir drüber gesprochen haben  ;)

Ich versuche jetzt mal, ob ich alleine dahinter komme, wie ich "morgige termine" mit DOIF fassen kann, um die Pixels anzusteuern. Kann also sein, da ich mich dazu noch mal melde...

Nobbynews

#14
Zitat von: TubeHead am 07 Februar 2026, 17:09:23Ich versuche jetzt mal, ob ich alleine dahinter komme, wie ich "morgige termine" mit DOIF fassen kann, um die Pixels anzusteuern. Kann also sein, da ich mich dazu noch mal melde...
Dafür verwende ich das Modul Abfall: https://wiki.fhem.de/wiki/ABFALL
defmod myAbfall ABFALL Abfall
attr myAbfall calendarname_praefix 0
attr myAbfall date_style date
attr myAbfall delimiter_reading |
attr myAbfall delimiter_text_reading und
attr myAbfall room 00_A,Unsorted
attr myAbfall stateFormat {"heute ".ReadingsVal($name,"now_text","keine Tonne")."\
<br>".ReadingsVal($name,"next_text","")." in ".ReadingsVal($name,"next_days","").\
" Tag(en)\
<br> am ".ReadingsVal($name,"next_weekday","")}
attr myAbfall weekday_mapping Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag

setstate myAbfall heute keine Tonne\
<br>Papier in 5 Tag(en)\
<br> am Donnerstag
setstate myAbfall 2026-02-07 03:05:01 Bioabfall_date 21.02.2026
setstate myAbfall 2026-02-07 03:05:01 Bioabfall_days 14
setstate myAbfall 2026-02-07 03:05:01 Bioabfall_description
setstate myAbfall 2026-02-07 03:05:01 Bioabfall_location XXXXXX
setstate myAbfall 2026-02-07 03:05:01 Bioabfall_text Bioabfall
setstate myAbfall 2026-02-07 03:05:01 Bioabfall_uid 771bc15115f74d2d381207c9a7db77b4googlecom
setstate myAbfall 2026-02-07 03:05:01 Bioabfall_weekday Samstag
setstate myAbfall 2026-02-07 03:05:01 Leichtverpackungen_date 19.02.2026
setstate myAbfall 2026-02-07 03:05:01 Leichtverpackungen_days 12
setstate myAbfall 2026-02-07 03:05:01 Leichtverpackungen_description
setstate myAbfall 2026-02-07 03:05:01 Leichtverpackungen_location XXXXX
setstate myAbfall 2026-02-07 03:05:01 Leichtverpackungen_text Leichtverpackungen
setstate myAbfall 2026-02-07 03:05:01 Leichtverpackungen_uid 6295763663e516a0e3ce2fa8c200ed5cgooglecom
setstate myAbfall 2026-02-07 03:05:01 Leichtverpackungen_weekday Donnerstag
setstate myAbfall 2026-02-07 03:05:01 Papier_date 12.02.2026
setstate myAbfall 2026-02-07 03:05:01 Papier_days 5
setstate myAbfall 2026-02-07 03:05:01 Papier_description
setstate myAbfall 2026-02-07 03:05:01 Papier_location XXXXXXX
setstate myAbfall 2026-02-07 03:05:01 Papier_text Papier
setstate myAbfall 2026-02-07 03:05:01 Papier_uid 466e495c3fdd071ffc55fa2dabe65118googlecom
setstate myAbfall 2026-02-07 03:05:01 Papier_weekday Donnerstag
setstate myAbfall 2026-02-07 03:05:01 Restabfall_date 13.02.2026
setstate myAbfall 2026-02-07 03:05:01 Restabfall_days 6
setstate myAbfall 2026-02-07 03:05:01 Restabfall_description
setstate myAbfall 2026-02-07 03:05:01 Restabfall_location XXXXXXX
setstate myAbfall 2026-02-07 03:05:01 Restabfall_text Restabfall
setstate myAbfall 2026-02-07 03:05:01 Restabfall_uid 8b4d88152540f37961bd9bc8d255f0c6googlecom
setstate myAbfall 2026-02-07 03:05:01 Restabfall_weekday Freitag
setstate myAbfall 2026-02-07 03:05:01 next Papier_5
setstate myAbfall 2026-02-07 03:05:01 next_date 12.02.2026
setstate myAbfall 2026-02-07 03:05:01 next_days 5
setstate myAbfall 2026-02-07 03:05:01 next_description
setstate myAbfall 2026-02-07 03:05:01 next_location XXXXXX
setstate myAbfall 2026-02-07 03:05:01 next_text Papier
setstate myAbfall 2026-02-07 03:05:01 next_weekday Donnerstag
setstate myAbfall 2026-02-07 03:05:01 state 5


Meine Ulanzi steuere ich über das reading next_days an:
defmod nNextDays notify myAbfall:next_days:.1 {\
 my $art = ReadingsVal("myAbfall","next_text","");;\
 ULANZI_SetCustomTonne("myULANZI",$art);;\
}\
Und dann noch in 99_myUtils (Quelle: https://forum.fhem.de/index.php?topic=140239.0
sub ULANZI_SetCustomTonne {
    my ($name, $tonne) = @_;
   
    my %icon  = ("Papier"            => 12154,
                "Restabfall"        => 12155,
                "Leichtverpackungen" => 12212,
                "Bioabfall"          => 12442);               
   
    my %data = (
        textCase => "2",
        scrollSpeed => "80",
        text  => "Tonne rausstellen",
        icon => "$icon{$tonne}",
        lifetime => "64800",
        lifetimeMode => "0",
        #pushIcon => "2",
        repeat => "2",
        color => "#FFFFFF"
    );

    ULANZI_SetCustom($name, "Tonne", \%data);
}

sub ULANZI_publish {
    my ($name, $topic, $payload) = @_;

    my $hash = $defs{$name};

    my $devtopic = AttrVal($name, "devicetopic", undef);
    my $payload_str = JSON->new->encode($payload);
    IOWrite($hash, "publish", "$devtopic/$topic " . $payload_str);
}


sub ULANZI_SetCustom {
    my ($name, $appname, $payload) = @_;

    my $hash = $defs{$name};

    ULANZI_publish($name, "custom/$appname", $payload);
}


Durch Drücken der mittleren Taste an der Ulanzi kann die Anzeige beendet werden:
defmod nULANZI_button notify myULANZI:button.* {\
if ($EVTPART0 eq "buttonSelect"){\
 if (ReadingsNum("myAbfall","next_days",0) == 1){\
  fhem ("set MQTT2_Server publish awtrix_bb70d4/custom/Tonne {}");;\
  }\
 }\
}