[gelöst] DOIF mit reading-regex für Zustand

Begonnen von knopf_piano, 24 Juni 2018, 12:23:25

Vorheriges Thema - Nächstes Thema

knopf_piano

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!
zotac nano mit proxmox und ganz viel zeug drauf

Damian

[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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

knopf_piano

Damian, danke für die Info. Klappt.
zotac nano mit proxmox und ganz viel zeug drauf

Per


Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

knopf_piano

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
zotac nano mit proxmox und ganz viel zeug drauf

Damian

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.



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

knopf_piano

ok zufällig..., wie komm ich dann zu dem wirklichen Zustand?
zotac nano mit proxmox und ganz viel zeug drauf

Damian

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.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

knopf_piano

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


zotac nano mit proxmox und ganz viel zeug drauf