Hi, ich benötige Hilfe, wenn ich für doif-Readings eine regex brauche. Nicht als Trigger sonder Zustand.
Folgendes device mit listing
Internals:
CFGFN ./myfhem/appl/appl_calendar.cfg
DEF Abfall
KALENDER Abfall
NAME AbfallTermine
NOTIFYDEV Abfall
NR 3548
NTFY_ORDER 50-AbfallTermine
STATE Gelber Sack und Papier in 1 Tag(en)
TYPE ABFALL
OLDREADINGS:
READINGS:
2018-06-24 11:54:09 Abfall_Biomuell_date 06.07.2018
2018-06-24 11:54:09 Abfall_Biomuell_days 12
2018-06-24 11:54:09 Abfall_Biomuell_description
2018-06-24 11:54:09 Abfall_Biomuell_location
2018-06-24 11:54:09 Abfall_Biomuell_text Biomüll
2018-06-24 11:54:09 Abfall_Biomuell_uid 0147e2893a534ba8ad9e4e64d6473a2d
2018-06-24 11:54:09 Abfall_Biomuell_weekday Freitag
2018-06-24 11:54:09 Abfall_GelberSack_date 25.06.2018
2018-06-24 11:54:09 Abfall_GelberSack_days 1
2018-06-24 11:54:09 Abfall_GelberSack_description
2018-06-24 11:54:09 Abfall_GelberSack_location
2018-06-24 11:54:09 Abfall_GelberSack_text Gelber Sack
2018-06-24 11:54:09 Abfall_GelberSack_uid ed98870647a447598d0f49e8f45ac4b5
2018-06-24 11:54:09 Abfall_GelberSack_weekday Montag
2018-06-24 11:54:09 Abfall_Papier_date 25.06.2018
2018-06-24 11:54:09 Abfall_Papier_days 1
2018-06-24 11:54:09 Abfall_Papier_description
2018-06-24 11:54:09 Abfall_Papier_location
2018-06-24 11:54:09 Abfall_Papier_text Papier
2018-06-24 11:54:09 Abfall_Papier_uid 5ec8169ee3814e9aa318760435f6f3a7
2018-06-24 11:54:09 Abfall_Papier_weekday Montag
2018-06-24 11:54:09 Abfall_Restmuell_date 04.07.2018
2018-06-24 11:54:09 Abfall_Restmuell_days 10
2018-06-24 11:54:09 Abfall_Restmuell_description
2018-06-24 11:54:09 Abfall_Restmuell_location
2018-06-24 11:54:09 Abfall_Restmuell_text Restmüll
2018-06-24 11:54:09 Abfall_Restmuell_uid 408bc6a7d2d2431380ac4039e80d7d57
2018-06-24 11:54:09 Abfall_Restmuell_weekday Mittwoch
2018-06-24 11:54:09 next Abfall_GelberSack|Abfall_Papier_1
2018-06-24 11:54:09 next_date 25.06.2018
2018-06-24 11:54:09 next_days 1
2018-06-24 11:54:09 next_description
2018-06-24 11:54:09 next_location
2018-06-24 11:54:09 next_text Gelber Sack und Papier
2018-06-24 11:54:09 next_weekday Montag
2018-06-24 11:54:09 state 1
Attributes:
alias Abholung:
group Abfall
room Kalender,Übersicht
stateFormat next_text in next_days Tag(en)
Ich möchte alle Readings mit Endung "days" auf "eq 0" oder "eq 1" abfragen.
Aktuell hab ich das noch explizit angegeben (funktioniert), da ich keine Möglichkeit gefunden hab, den Zustand generisch zu abzufragen:
defmod DI_AbfallCalendarStatusLED DOIF ([AbfallTermine:Abfall_Biomuell_days] eq "1" or\
[AbfallTermine:Abfall_Papier_days] eq "1" or\
[AbfallTermine:Abfall_Restmuell_days] eq "1" or\
[AbfallTermine:Abfall_GelberSack_days] eq "1") \
(set ...)\
also irgendwas in der Art mit gefräßig (.*):
defmod DI_AbfallCalendarStatusLED DOIF ([AbfallTermine:.*_days] eq "1")
(set Abfall_StatusLED on)\
Bisher jedoch kein Erfolg, mit "$*^...
Hat so was jemand am Laufen oder kann mir nen Stups geben?
Greets!
[AbfallTermine:.*_days] geht gar nicht
[AbfallTermine:".*_days"] liefert nur true oder false.
Zitat aus der Commandref:
ZitatAllgemeine Ereignistrigger können ebenfalls so definiert werden, dass sie nicht nur wahr zum Triggerzeitpunkt und sonst nicht wahr sind, sondern Inhalte des Ereignisses zurückliefern. Initiiert wird dieses Verhalten durch die Angabe eines Default-Wertes.
Syntax:
["regex for trigger",<default value>]
Anwendungsbeispiel:
define di_warning DOIF ([":^temperature",0]< 0 and [06:00-09:00] ) (set pushmsg danger of frost)
Damit wird auf alle Devices getriggert, die mit "temperature" im Event beginnen. Zurückgeliefert wird der Wert, der im Event hinter "temperature: " steht. Wenn kein Event stattfindet, wird der Defaultwert, hier 0, zurückgeliefert.
Ebenfalls kann ein Ereignisfilter mit Ausgabeformatierung angegeben werden.
hier also:
[AbfallTermine:"_days$",0] == 1
Damian, danke für die Info. Klappt.
Zitat von: Per am 25 Juni 2018, 10:50:14
Aber:Passt das noch?
Solange er die Abfrage nicht mit anderen Abfragen mit and verknüpft - ja.
Hier mal der code:
###################################################
# Abfallkalender Statusanzeige
###################################################
defmod DI_AbfallCalendarStatusLED DOIF ([AbfallTermine:"_days$",0] == 1) \
(set Abfall_StatusLED on)\
DOELSEIF( [AbfallTermine:"_days$",0] == 1 and [18:00])\
(set myBot msg Müll:\n[AbfallTermine:next_text] muss raus\nAbholung am [AbfallTermine:next_weekday], [AbfallTermine:next_date]) \
DOELSEIF( [AbfallTermine:"_days$",0] == 0 and [00:00-10:00]) \
(set Abfall_StatusLED on)\
DOELSE\
(set Abfall_StatusLED off)
attr DI_AbfallCalendarStatusLED do always
hat funktioniert, wie ich will
Zitat von: knopf_piano am 25 Juni 2018, 14:24:31
Hier mal der code:
###################################################
# Abfallkalender Statusanzeige
###################################################
defmod DI_AbfallCalendarStatusLED DOIF ([AbfallTermine:"_days$",0] == 1) \
(set Abfall_StatusLED on)\
DOELSEIF( [AbfallTermine:"_days$",0] == 1 and [18:00])\
(set myBot msg Müll:\n[AbfallTermine:next_text] muss raus\nAbholung am [AbfallTermine:next_weekday], [AbfallTermine:next_date]) \
DOELSEIF( [AbfallTermine:"_days$",0] == 0 and [00:00-10:00]) \
(set Abfall_StatusLED on)\
DOELSE\
(set Abfall_StatusLED off)
attr DI_AbfallCalendarStatusLED do always
hat funktioniert, wie ich will
Dann aber zufällig, denn
[AbfallTermine:"_days$",0] == 1 and [18:00]
ist niemals wahr, weil das Ereignis und Zeittrigger nicht gleichzeitig wahr sein können.
[AbfallTermine:"_days$",0] ist eben nur eine Ereignis- und keine Zustandsabfrage.
ok zufällig..., wie komm ich dann zu dem wirklichen Zustand?
Zitat von: knopf_piano am 25 Juni 2018, 15:00:15
ok zufällig..., wie komm ich dann zu dem wirklichen Zustand?
Um 18:00 Uhr willst du welches Reading abfragen?
Es gibt ja mehrere, die mit "days" enden.
So etwas kannst du ggf. mit Aggregationsfunktion abfragen.
mit aggregieren hat's vorerst nicht geklappt.
Falls ich eine Lösung habe, kommt die hier rein...
hab das jetzt anders gelöst, bleibt erstmal so:
defmod DI_AbfallCalendarStatusLED DOIF ([AbfallTermine:next_days] eq "1" or ([AbfallTermine:next_days] eq "0" and [00:00-10:00])) \
(set Abfall_StatusLED on)\
DOELSEIF( [AbfallTermine:next_days] eq "1" and [18:00])\
(set myBot msg Müll:\n[AbfallTermine:next_text] muss raus\nAbholung am [AbfallTermine:next_weekday], [AbfallTermine:next_date]) \
DOELSE\
(set Abfall_StatusLED off)
attr DI_AbfallCalendarStatusLED do always