Calendar, CalView & Co

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

Vorheriges Thema - Nächstes Thema

TubeHead

#15
... so kann man es natürlich auch machen 8)

Ich habe es jetzt anders gelöst.
Ursprünglich wollte ich ja einen der Indikatoren abwechselnd in den entsprechenden Farben abwechselnd blinken lassen. Das kann AWTRIX aber nativ nicht. Blinken ja, aber nicht im Wechsel mit zwei oder drei Farben. Das hätte per MQTT in einer Schleife an alle drei Pixeluhren gesendet werden müssen; zu viel Aufwand und Payload...
Ich setze daher nun eine CustomApp mit den entsprechenden Farben.

Das Modul "Abfall" nutze ich nicht. Ich bin den manuellen Weg gegangen mit zwei DOIF:

defmod set_trash DOIF ([13:00] and defined fhem('get calendar events filter:field(summary)=~"Restmüll" limit:when=tomorrow')) (set $SELF bk 1)\
DOELSEIF ([13:00] and defined fhem('get calendar events filter:field(summary)=~"Gelbe" limit:when=tomorrow')) (set $SELF ye 1)\
DOELSEIF ([13:00] and defined fhem('get calendar events filter:field(summary)=~"Papier" limit:when=tomorrow')) (set $SELF bl 1)\
DOELSE (set $SELF bk 0, set $SELF ye 0, set $SELF bl 0)
attr set_trash do always
attr set_trash group Kalender
attr set_trash readingList bk ye bl
attr set_trash room 980 - Umwelt
attr set_trash stateFormat bk,ye,bl

setstate set_trash 0,0,0
setstate set_trash 2026-02-08 11:34:44 bk 0
setstate set_trash 2026-02-08 11:34:44 bl 0
setstate set_trash 2026-02-08 11:34:44 cmd 4
setstate set_trash 2026-02-08 11:34:44 cmd_event set_trash
setstate set_trash 2026-02-08 11:34:44 cmd_nr 4
setstate set_trash 2026-02-08 11:23:19 mode enabled
setstate set_trash 2026-02-08 11:34:44 state cmd_4
setstate set_trash 2026-02-08 11:23:19 timer_01_c01 08.02.2026 13:00:00
setstate set_trash 2026-02-08 11:23:19 timer_02_c02 08.02.2026 13:00:00
setstate set_trash 2026-02-08 11:23:19 timer_03_c03 08.02.2026 13:00:00
setstate set_trash 2026-02-08 11:34:44 ye 0

... und ...

defmod set_pixel_muell DOIF ([set_trash] eq "0,0,0") (set MQTT publish pixel1/custom/trash {} )\
DOELSEIF ([set_trash] eq "1,0,0") (set MQTT publish pixel1/custom/trash {"draw":[{"df": [4, 0, 24, 8, "#BEBEBE"]},{"dt": [4, 1, "M ü l l", "#00FF00"]}]} )\
DOELSEIF ([set_trash] eq "0,1,0") (set MQTT publish pixel1/custom/trash {"draw":[{"df": [4, 0, 24, 8, "#FFFF00"]},{"dt": [4, 1, "M ü l l", "#00FF00"]}]} )\
DOELSEIF ([set_trash] eq "0,0,1") (set MQTT publish pixel1/custom/trash {"draw":[{"df": [4, 0, 24, 8, "#0000FF"]},{"dt": [4, 1, "M ü l l", "#00FF00"]}]} )\
DOELSEIF ([set_trash] eq "1,1,0") (set MQTT publish pixel1/custom/trash {"draw":[{"df": [2, 0, 13, 8, "#FFFF00"]},{"df": [17, 0, 13, 8, "#BEBEBE"]},{"dt": [3, 1, "M ü  l l", "#101010"]}]} )\
DOELSEIF ([set_trash] eq "0,1,1") (set MQTT publish pixel1/custom/trash {"draw":[{"df": [2, 0, 13, 8, "#FFFF00"]},{"df": [17, 0, 13, 8, "#0000FF"]},{"dt": [3, 1, "M ü  l l", "#ff33ff"]}]} )\
DOELSEIF ([set_trash] eq "1,0,1") (set MQTT publish pixel1/custom/trash {"draw":[{"df": [2, 0, 13, 8, "#BEBEBE"]},{"df": [17, 0, 13, 8, "#0000FF"]},{"dt": [3, 1, "M ü  l l", "#000000"]}]} )\
DOELSEIF ([set_trash] eq "1,1,1") (set MQTT publish pixel1/custom/trash {"draw":[{"df": [0, 0, 10, 8, "#FFFF00"]},{"df": [11, 0, 10, 8, "#BEBEBE"]},{"df": [22, 0, 10, 8, "#0000FF"]},{"dt": [4, 1, "M ü l l", "#00FF00"]}]} )
attr set_pixel_muell group Kalender
attr set_pixel_muell room 980 - Umwelt

setstate set_pixel_muell cmd_1
setstate set_pixel_muell 2026-02-08 11:34:44 Device set_trash
setstate set_pixel_muell 2026-02-08 11:21:15 cmd 1
setstate set_pixel_muell 2026-02-08 11:21:15 cmd_event set_pixel_muell
setstate set_pixel_muell 2026-02-08 11:21:15 cmd_nr 1
setstate set_pixel_muell 2026-02-08 11:34:44 e_set_trash_STATE 0,0,0
setstate set_pixel_muell 2026-02-08 11:21:00 mode enabled
setstate set_pixel_muell 2026-02-08 11:21:15 state cmd_1

Inzwischen habe ich auch die Daten vom Google-Kalender anstelle der lokalen Datei eingebunden. Nun warte ich auf 13:00 Uhr, um zu schauen, ob auch alles automatisch funktioniert ;)

EDIT:
Funktioniert nicht wie erwartet  >:(  Ich habe (mal wieder) übersehen, das ein DOIF beim ersten Treffer beendet wird. Ich muss also die Abfragen noch umstellen... Irgendwann lerne ich das auch noch mal  ::)

TubeHead

Ich komme hier nicht weiter  :-X

Das erste DOIF habe ich in drei einzelne zerlegt (set_trash1, set_trash2, set_trash3), jeweils für eine "Tonne". Die ReadingList ist nur in set_trash1 verblieben; die anderen setzen dort das Reading.
Das funktioniert soweit vollkommen schmerzfrei! Aber...

Um es zu testen, hatte ich die Triggerzeit knapp in die Zukunft bei allen verlegt. Nach dem Trigger aber haben alle drei (!) ausgelöst, was nicht mit dem Inhalt des Kalenders übereinstimmt. Morgen ist die graue und die gelbe Tonne dran, nicht aber die blaue. Dennoch wird auch die "gefunden".

Was übersehe ich hier?

defmod set_trash1 DOIF ([14:00] and defined fhem('get calendar events filter:field(summary)=~"Restmüll" limit:when=tomorrow')) (set $SELF bk 1)\
DOELSE (set $SELF bk 0)
attr set_trash1 group Kalender
attr set_trash1 readingList bk ye bl
attr set_trash1 room 980 - Umwelt
attr set_trash1 stateFormat bk,ye,bl

setstate set_trash1 1,1,1
setstate set_trash1 2026-02-08 14:00:00 bk 1
setstate set_trash1 2026-02-08 14:00:00 bl 1
setstate set_trash1 2026-02-08 14:00:00 cmd 1
setstate set_trash1 2026-02-08 14:00:00 cmd_event timer_1
setstate set_trash1 2026-02-08 14:00:00 cmd_nr 1
setstate set_trash1 2026-02-08 13:29:55 mode enabled
setstate set_trash1 2026-02-08 14:00:00 state cmd_1
setstate set_trash1 2026-02-08 14:30:52 timer_01_c01 09.02.2026 14:00:00
setstate set_trash1 2026-02-08 14:00:00 ye 1

defmod set_trash2 DOIF ([14:00] and defined fhem('get calendar events filter:field(summary)=~"Gelbe" limit:when=tomorrow')) (set set_trash1 ye 1)\
DOELSE (set set_trash1 ye 0)
attr set_trash2 group Kalender
attr set_trash2 room 980 - Umwelt

setstate set_trash2 cmd_1
setstate set_trash2 2026-02-08 14:00:00 cmd 1
setstate set_trash2 2026-02-08 14:00:00 cmd_event timer_1
setstate set_trash2 2026-02-08 14:00:00 cmd_nr 1
setstate set_trash2 2026-02-08 13:19:14 mode enabled
setstate set_trash2 2026-02-08 14:00:00 state cmd_1
setstate set_trash2 2026-02-08 14:30:52 timer_01_c01 09.02.2026 14:00:00

defmod set_trash3 DOIF ([14:00] and defined fhem('get calendar events filter:field(summary)=~"Papier" limit:when=tomorrow')) (set set_trash1 bl 1)\
DOELSE (set set_trash1 bl 0)
attr set_trash3 group Kalender
attr set_trash3 room 980 - Umwelt

setstate set_trash3 cmd_1
setstate set_trash3 2026-02-08 14:00:00 cmd 1
setstate set_trash3 2026-02-08 14:00:00 cmd_event timer_1
setstate set_trash3 2026-02-08 14:00:00 cmd_nr 1
setstate set_trash3 2026-02-08 13:19:01 mode enabled
setstate set_trash3 2026-02-08 14:00:00 state cmd_1
setstate set_trash3 2026-02-08 14:30:52 timer_01_c01 09.02.2026 14:00:00

TomLee

Hallo,

vermute der Mischmasch aus DOIF Syntax und Perl Syntax geht so nicht im DOIF-Modus.

Versuchs mal im Perl-Modus:

defmod set_trash3 DOIF { if ([14:00] and defined fhem('get calendar events filter:field(summary)=~"Papier" limit:when=tomorrow')) {fhem('set set_trash1 bl 1')}\
else  {fhem('set set_trash1 bl 0')}}

Gruß Thomas