FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: the ratman am 19 Dezember 2017, 22:00:06

Titel: doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 19 Dezember 2017, 22:00:06
was mach ich falsch?
ich kriege immer nur "ja", nie "nein"
Internals:
   CFGFN     
   DEF        ## urlaub, sondertag oder feiertag

(
(
[doif_urlaub:urlaub_von:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday"
and
[doif_urlaub:urlaub_io] eq "ein"
)
or
(
[doif_frei:frei:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday"
and
[doif_frei:frei_io] eq "ein"
)
or
[br:state] ne "none"
)
(
   set $SELF feiertag ja;
)

DOELSEIF ## kein urlaub, sondertag oder feiertag

(
(
[doif_urlaub:urlaub_bis:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday"
or
[doif_urlaub:urlaub_io] eq "aus"
)
and
[doif_frei:frei_io] eq "aus"
and
[br:state] eq "none"
)
(
   set $SELF feiertag nein;
)

DOELSE
   NAME       doif_istfeiertag
   NR         1507
   NTFY_ORDER 50-doif_istfeiertag
   STATE      ja
   TYPE       DOIF
   READINGS:
     2017-12-19 21:49:44   Device          doif_urlaub
     2017-12-19 21:49:20   cmd             1
     2017-12-19 21:49:20   cmd_event       doif_frei
     2017-12-19 21:49:20   cmd_nr          1
     2017-12-19 21:49:43   e_doif_frei_frei 19.12.2017
     2017-12-19 21:49:43   e_doif_frei_frei_io aus
     2017-12-19 21:49:44   e_doif_urlaub_urlaub_bis 20.12.2017
     2017-12-19 21:49:44   e_doif_urlaub_urlaub_io aus
     2017-12-19 21:49:44   e_doif_urlaub_urlaub_von 19.12.2017
     2017-12-19 21:49:20   feiertag        ja
     2017-12-19 21:49:20   state           ja
   Regex:
     STATE:
       doif_istfeiertag:
         STATE:
           feiertag   ^doif_istfeiertag$:^feiertag:
   condition:
     0            ( ReadingValDoIf($hash,'doif_urlaub','urlaub_von','','^(\d\d).(\d\d).(\d\d\d\d)','$3."-".($2*1)."-".($1*1)') eq "$year-$month-$mday" and ReadingValDoIf($hash,'doif_urlaub','urlaub_io') eq "ein" ) or ( ReadingValDoIf($hash,'doif_frei','frei','','^(\d\d).(\d\d).(\d\d\d\d)','$3."-".($2*1)."-".($1*1)') eq "$year-$month-$mday" and ReadingValDoIf($hash,'doif_frei','frei_io') eq "ein" ) or ReadingValDoIf($hash,'br','state') ne "none"
     1            ( ReadingValDoIf($hash,'doif_urlaub','urlaub_bis','','^(\d\d).(\d\d).(\d\d\d\d)','$3."-".($2*1)."-".($1*1)') eq "$year-$month-$mday" or ReadingValDoIf($hash,'doif_urlaub','urlaub_io') eq "aus" ) and ReadingValDoIf($hash,'doif_frei','frei_io') eq "aus" and ReadingValDoIf($hash,'br','state') eq "none"
   devices:
     0           doif_urlaub doif_frei br
     1           doif_urlaub doif_frei br
     all         doif_urlaub doif_frei br
   do:
     0:
       0              set doif_istfeiertag feiertag ja;
     1:
       0              set doif_istfeiertag feiertag nein;
     2:
       0         
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      urlaub_io: aus
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   doif_urlaub
     timerevent urlaub_io: aus
     triggerDev doif_urlaub
     timerevents:
       urlaub_io: aus
     timereventsState:
       urlaub_io: aus
     triggerEvents:
       urlaub_io: aus
     triggerEventsState:
       urlaub_io: aus
   internals:
   itimer:
   readings:
     0           doif_urlaub:urlaub_von doif_urlaub:urlaub_io doif_frei:frei doif_frei:frei_io br:state
     1           doif_urlaub:urlaub_bis doif_urlaub:urlaub_io doif_frei:frei_io br:state
     all         doif_urlaub:urlaub_von doif_urlaub:urlaub_io doif_frei:frei doif_frei:frei_io br:state doif_urlaub:urlaub_bis
   trigger:
   uiState:
   uiTable:
Attributes:
   alias      haben wir einen feiertag?
   cmdState   nein|ja
   group      umrechnen
   icon       helper_doif
   readingList feiertag:nein,ja
   room       logik und schalten
   state      [$SELF:feiertag]
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Damian am 19 Dezember 2017, 22:25:57
Zitat von: the ratman am 19 Dezember 2017, 22:00:06
was mach ich falsch?
ich kriege immer nur "ja", nie "nein"
Internals:
   CFGFN     
   DEF        ## urlaub, sondertag oder feiertag

(
(
[doif_urlaub:urlaub_von:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday"
and
[doif_urlaub:urlaub_io] eq "ein"
)
or
(
[doif_frei:frei:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday"
and
[doif_frei:frei_io] eq "ein"
)
or
[br:state] ne "none"
)
(
   set $SELF feiertag ja;
)

DOELSEIF ## kein urlaub, sondertag oder feiertag

(
(
[doif_urlaub:urlaub_bis:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday"
or
[doif_urlaub:urlaub_io] eq "aus"
)
and
[doif_frei:frei_io] eq "aus"
and
[br:state] eq "none"
)
(
   set $SELF feiertag nein;
)

DOELSE
   NAME       doif_istfeiertag
   NR         1507
   NTFY_ORDER 50-doif_istfeiertag
   STATE      ja
   TYPE       DOIF
   READINGS:
     2017-12-19 21:49:44   Device          doif_urlaub
     2017-12-19 21:49:20   cmd             1
     2017-12-19 21:49:20   cmd_event       doif_frei
     2017-12-19 21:49:20   cmd_nr          1
     2017-12-19 21:49:43   e_doif_frei_frei 19.12.2017
     2017-12-19 21:49:43   e_doif_frei_frei_io aus
     2017-12-19 21:49:44   e_doif_urlaub_urlaub_bis 20.12.2017
     2017-12-19 21:49:44   e_doif_urlaub_urlaub_io aus
     2017-12-19 21:49:44   e_doif_urlaub_urlaub_von 19.12.2017
     2017-12-19 21:49:20   feiertag        ja
     2017-12-19 21:49:20   state           ja
   Regex:
     STATE:
       doif_istfeiertag:
         STATE:
           feiertag   ^doif_istfeiertag$:^feiertag:
   condition:
     0            ( ReadingValDoIf($hash,'doif_urlaub','urlaub_von','','^(\d\d).(\d\d).(\d\d\d\d)','$3."-".($2*1)."-".($1*1)') eq "$year-$month-$mday" and ReadingValDoIf($hash,'doif_urlaub','urlaub_io') eq "ein" ) or ( ReadingValDoIf($hash,'doif_frei','frei','','^(\d\d).(\d\d).(\d\d\d\d)','$3."-".($2*1)."-".($1*1)') eq "$year-$month-$mday" and ReadingValDoIf($hash,'doif_frei','frei_io') eq "ein" ) or ReadingValDoIf($hash,'br','state') ne "none"
     1            ( ReadingValDoIf($hash,'doif_urlaub','urlaub_bis','','^(\d\d).(\d\d).(\d\d\d\d)','$3."-".($2*1)."-".($1*1)') eq "$year-$month-$mday" or ReadingValDoIf($hash,'doif_urlaub','urlaub_io') eq "aus" ) and ReadingValDoIf($hash,'doif_frei','frei_io') eq "aus" and ReadingValDoIf($hash,'br','state') eq "none"
   devices:
     0           doif_urlaub doif_frei br
     1           doif_urlaub doif_frei br
     all         doif_urlaub doif_frei br
   do:
     0:
       0              set doif_istfeiertag feiertag ja;
     1:
       0              set doif_istfeiertag feiertag nein;
     2:
       0         
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      urlaub_io: aus
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   doif_urlaub
     timerevent urlaub_io: aus
     triggerDev doif_urlaub
     timerevents:
       urlaub_io: aus
     timereventsState:
       urlaub_io: aus
     triggerEvents:
       urlaub_io: aus
     triggerEventsState:
       urlaub_io: aus
   internals:
   itimer:
   readings:
     0           doif_urlaub:urlaub_von doif_urlaub:urlaub_io doif_frei:frei doif_frei:frei_io br:state
     1           doif_urlaub:urlaub_bis doif_urlaub:urlaub_io doif_frei:frei_io br:state
     all         doif_urlaub:urlaub_von doif_urlaub:urlaub_io doif_frei:frei doif_frei:frei_io br:state doif_urlaub:urlaub_bis
   trigger:
   uiState:
   uiTable:
Attributes:
   alias      haben wir einen feiertag?
   cmdState   nein|ja
   group      umrechnen
   icon       helper_doif
   readingList feiertag:nein,ja
   room       logik und schalten
   state      [$SELF:feiertag]


Da kann man nur feststellen, dass immer nur die erste Bedingung wahr ist, warum - wird dir keiner sagen können, denn nur du kannst die Zustände der abgefragten Readings überprüfen, die zu cmd_1 führen.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 19 Dezember 2017, 22:36:43
die zustände passen und werden auch immer aktuell aus den div. quellen übernommen im doif.

das problem liegt also meiner meinung nach bei meiner deffinition - nur wo, das kapier ich eben nicht.
fangt schon damit an, das ich in teilen euer https://wiki.fhem.de/wiki/DOIF/Zeitspanne_zwischen_zwei_Terminen_schalten mißbraucht hab, und nicht sicher bin, ob das so stimmt, was ich draus verbrochen hab.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Damian am 19 Dezember 2017, 22:51:42
Zitat von: the ratman am 19 Dezember 2017, 22:36:43
die zustände passen und werden auch immer aktuell aus den div. quellen übernommen im doif.

das problem liegt also meiner meinung nach bei meiner deffinition - nur wo, das kapier ich eben nicht.
fangt schon damit an, das ich in teilen euer https://wiki.fhem.de/wiki/DOIF/Zeitspanne_zwischen_zwei_Terminen_schalten mißbraucht hab, und nicht sicher bin, ob das so stimmt, was ich draus verbrochen hab.

Dazu kannst du dir einfach ein DOIF definieren, dass nur die einzelnen Abfragen beinhalten z. B. nur:

[doif_urlaub:urlaub_von:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday"

[br:state] ne "none"

usw.

und schauen was passiert wahr oder nicht wahr.

Und dann Logik-Verständnis mitbringen, daran scheitern bereits viele, z. B.

nicht (A oder B) ist nicht das Gleiche wie nicht A oder nicht B sondern ...
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 20 Dezember 2017, 12:40:07
irgendwie geht auch eure laborversion nicht.
die schaffts nicht aus dem status "initialized" weg und es steht auch nix im log.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Per am 20 Dezember 2017, 13:04:49
Steht denn was passendes im EveltLog? Und was sagen die Readings?
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 20 Dezember 2017, 13:13:59
das logfile sagt gar nix.
die readings werden aus den anderen devics korrekt ausgelesen und im doif auch eingetragen (e_xxx)

der 2. teil - also das umschalten auf "nein" funzt (wobei da auch diese datumsaufdröselung nicht wichtig ist, weil er auch auf direkt auf das ein/aus-schalten des kalenders reagieren darf.
der 1. teil geht eben teilweise nicht. davon
(
[?doif_urlaub:urlaub_von:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday"
and
[doif_urlaub:urlaub_io] eq "ein"
)
or
(
[?doif_frei:frei:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday"
and
[doif_frei:frei_io] eq "ein"
)
diesen code hab ich, wie gesagt, aus dem labor abgetippselt. ich hab allerdings die zeit weggelassen, weil ich nur das datum brauch. da ich mal grundsätzlich nicht versteh, wie der code mit dem datum zw. urlaub_von und urlaub_bis umgeht, brauch ich da eben ein wenig hilfe.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Per am 20 Dezember 2017, 14:09:12
Zitat von: the ratman am 20 Dezember 2017, 13:13:59da ich mal grundsätzlich nicht versteh, wie der code mit dem datum zw. urlaub_von und urlaub_bis umgeht, brauch ich da eben ein wenig hilfe.
Perl ist auch nicht meine Muttersprache, daher nehme ich für sowas entweder ideone.com und/oder
Code (https://fhem.de/commandref_DE.html#DOIF_Readings) Auswählen
DOIF_Readings.
Wobei ich in deinem Fall eher mit dem Datum direkt arbeiten würde. Da du nur "Gleich" brauchst, ist das Format (yyyy-mm-dd oder dd.mm.yyyy) egal.

[doif_urlaub:urlaub_von] ~= "$mday.$month.$year"
Behebt zwar nicht den Fehler an sich, umgeht ihn aber
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 20 Dezember 2017, 14:15:26
ZitatDa du nur "Gleich" brauchs
das versteh ich eben nicht.
ich hab doch nur datum1 und datum2 und brauche auch an allen tagen dazwischen meinen urlaub.

mein problem ist auch, dass ich ja sogar die labor-version aus dem doif-wiki (link findest irgendwo weiter oben) mit den selben problemen nicht zum laufen krieg.
das ding hat mich ja erst auf die idee gebracht, dass mit 2 kalendern zu machen (waf-freundlichkeit wäre enorm).

ums genau zu beschreiben, was ich machen will:
ich habe ein datum für den urlaubsbeginn und eines für das ende des urlaubs.
dazu kommt noch ein ein/aus button, falls man die funktion ganz abstellen will.
daraus will ich wissen, ob heute nun ein urlaubstag ist, oder nicht.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Per am 20 Dezember 2017, 15:11:18
Das geht aber aus deinem DOIF (ohne den Perl-Teil) nicht hervor.
Versuch doch erstmal, ganz ohne Perl, das DOIF zu gestalten. Kannst ja mit Dummys arbeiten.

Urlaub wäre z.B., wenn Aktuell >= Beginn und Aktuell <= Ende ist.

Noch einfacher ist es, wenn du dir eine eigene Ferien äh Urlaubs-Datei machst und gg. die prüfst.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 20 Dezember 2017, 15:40:38
ich wollt eig. meine feiertage-datei verwenden, kann nur nicht verlangen, dass meine holde dort was einträgt. drum diese umwege.
und ähnlich deinem tipp bastel ich grad was, hab aber noch ne wichtigere baustelle derzeit im fhem.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Ellert am 20 Dezember 2017, 15:53:17
Ist nicht das Calendar-Modul die bessere Wahl?
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 20 Dezember 2017, 16:00:25
ja, ist es, wie einen beitrag vorher geschrieben.

mußt du mir nur noch sagen, wie ich in das textfile vom floorplan aus nen urlaub eintragen und wieder löschen kann. das wäre sowieso mein liebster weg gewesen.

nachtrag:
nun hab ich das doif nur für den urlaubsteil ganz nachgebaut und, so hoff ich, vereinfacht:

(
[?$SELF:urlaub_von] eq "$mday.$month.$year"
)

(
set $SELF urlaub_heute ja
)
   
DOELSEIF

(
[?$SELF:urlaub_bis] eq "$mday.$month.$year"
or
["^global$:^MODIFIED $SELF$"]
)

(
set $SELF urlaub_heute nein
)

funzt auch nicht - die readings passen und lassen sich stellen.
und was macht ["^global$:^MODIFIED $SELF$"] eigentlich?
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 21 Dezember 2017, 00:23:56
langsam verzweifel ich.
ich such mir einen ab, finde aber nix konkretes, ob man mit datum im doif ebenso rechnen kann, wie mit zeiten.
wenn ja, müsste dann ja ein simples ([datum1] <= [datum2]) funzen, ohne gleich auf unixtime umrechnen zu müssen (wie immer ich das im doif auch hinkriegen würde)?
also nach muster
(
[$SELF:urlaub_von:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".$2."-".$1] >= "$year-$month-$mday"
and
[$SELF:urlaub_bis:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".$2."-".$1] <= "$year-$month-$mday"
and
[$SELF:urlaub_io] eq "ein"
)
was natürlich nicht geht ...

wenn ja, bin ich aber scheints zu blöd für - kann man mir helfen?
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Ellert am 21 Dezember 2017, 08:32:00
Zitat von: the ratman am 21 Dezember 2017, 00:23:56
langsam verzweifel ich.
ich such mir einen ab, finde aber nix konkretes, ob man mit datum im doif ebenso rechnen kann, wie mit zeiten.
wenn ja, müsste dann ja ein simples ([datum1] <= [datum2]) funzen, ohne gleich auf unixtime umrechnen zu müssen (wie immer ich das im doif auch hinkriegen würde)?
also nach muster
(
[$SELF:urlaub_von:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".$2."-".$1] >= "$year-$month-$mday"
and
[$SELF:urlaub_bis:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".$2."-".$1] <= "$year-$month-$mday"
and
[$SELF:urlaub_io] eq "ein"
)
was natürlich nicht geht ...

wenn ja, bin ich aber scheints zu blöd für - kann man mir helfen?
([datum1] <= [datum2]), le aber {"100%" le "99%" } ist 1
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 21 Dezember 2017, 10:54:26
du sprichst in kreuzworträtseln ...

wären 1 oder 2 sätze möglich, die ich auch versteh?
nach nem konkreten beispiel trau ich mich schon eh nicht fragen.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Damian am 21 Dezember 2017, 10:59:11
Zitat von: the ratman am 21 Dezember 2017, 10:54:26
du sprichst in kreuzworträtseln ...

wären 1 oder 2 sätze möglich, die ich auch versteh?
nach nem konkreten beispiel trau ich mich schon eh nicht fragen.

Du vergleichst Zeichenketten und keine Zahlen, daher gelten hier Vergleichsoperatoren für Zeichenketten und nicht für Zahlen, also: le statt <=, ge statt >=, lt statt <, gt statt > usw.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 21 Dezember 2017, 11:02:36
ahh, jetzt kapier ichs!

DAS geht? le und ge?
man kann mit "buchstaben" rechnen?

auf jeden fall probier ichs und dank dir für die info!

geht leider nicht - "isnt numeric"
[$SELF:urlaub_von:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".$2."-".$1] ge "$year-$month-$mday"
and
[$SELF:urlaub_bis:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".$2."-".$1] le "$year-$month-$mday"
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Per am 21 Dezember 2017, 11:38:48
Natürlich nicht.
Bei Stings gilt:
"1" < "9"
und
"10" < "9"
Bei Zahlen aber:
1<9
und
10 > 9
Bisher hast du ja nur auf Gleich geprüft, da ist == bei Zahlen gleich mit eq bei Strings.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 21 Dezember 2017, 12:03:25
und was mach ich da?
du redest mit einem, der 0 ahnung vom programmieren hat (ausser html is über nacht ne programmiersprache geworden *g*)
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Per am 21 Dezember 2017, 12:18:07
Versuch doch noch mal die Ausgangswerte (Reading, Eingabe, woher kommen die Daten) darzustellen.

Das Zerlegen der Readings in Datumswerte kannst du parallel, wie schon geschrieben, mittels DOIF_Reading (https://forum.fhem.de/index.php/topic,77690.msg708629.html#msg708629) üben. Da kannst du mit Perl spielen, bis du was Passendes hast.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 21 Dezember 2017, 13:43:28
die readings kommen aus 2 readingsgroups und einem calendar
schauen dann z.b. so aus (nur mal schnell aus der raw-def kopiert) und sind auch immer korrekt.setstate doif_istfeiertag 2017-12-21 11:06:18 Device doif_istfeiertag
setstate doif_istfeiertag 2017-12-21 11:03:50 cmd 2.2
setstate doif_istfeiertag 2017-12-21 11:03:50 cmd_event doif_istfeiertag
setstate doif_istfeiertag 2017-12-21 11:03:50 cmd_nr 2
setstate doif_istfeiertag 2017-12-21 11:03:50 cmd_seqnr 2
setstate doif_istfeiertag 2017-12-21 11:06:18 e_doif_istfeiertag_frei_datum 21.12.2017
setstate doif_istfeiertag 2017-12-21 11:06:18 e_doif_istfeiertag_frei_io aus
setstate doif_istfeiertag 2017-12-21 11:06:18 e_doif_istfeiertag_urlaub_bis 30.12.2017
setstate doif_istfeiertag 2017-12-21 11:06:18 e_doif_istfeiertag_urlaub_io aus
setstate doif_istfeiertag 2017-12-21 11:06:18 e_doif_istfeiertag_urlaub_von 05.12.2017
setstate doif_istfeiertag 2017-12-21 11:03:50 feiertag nein
setstate doif_istfeiertag 2017-12-21 00:17:59 frei_datum 21.12.2017
setstate doif_istfeiertag 2017-12-21 00:18:01 frei_io aus
setstate doif_istfeiertag 2017-12-20 19:53:12 frei_txt test text
setstate doif_istfeiertag 2017-12-21 11:03:50 state cmd_2
setstate doif_istfeiertag 2017-12-20 20:04:42 urlaub_art zuhause
setstate doif_istfeiertag 2017-12-21 11:03:56 urlaub_bis 30.12.2017
setstate doif_istfeiertag 2017-12-21 11:06:18 urlaub_io aus
setstate doif_istfeiertag 2017-12-20 23:54:20 urlaub_von 05.12.2017

damit wir auf dem neuesten stand sind - so schaut das doif aus

(
(
[$SELF:urlaub_von:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".$2."-".$1] ge "$year-$month-$mday"
and
[$SELF:urlaub_bis:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".$2."-".$1] le "$year-$month-$mday"
and
[$SELF:urlaub_io] eq "ein"
)
or
(
[$SELF:frei_datum] eq "$mday.$month.$year"
and
[$SELF:frei_io] eq "ein"
)
or
[bw:state] ne "none"
)

(
set $SELF feiertag ja
)

DOELSE

()

(
set $SELF feiertag nein
)
das funzt auch, bis eben auf die urlaubsberechnung. auch der besondere tag "frei_datum" haut hin. es happert also "nur" noch am urlaubs-teil. der ist immer noch fast 1:1 aus dem wiki-beispiel. hab nur die berechnung für führende nullen raus, weil das eh korrekt aus der readingsgroup kommt.

doif-readings - juhuu - aber "Beliebiger Perlausdruck ". wie gsagt ... keinen schimmer hab. wenn du bei mir irgendwas mit perl siehst, liegt das daran, dass ichs ohne hirn und verstand abgeschrieben hab ...
ich habs nie kapiert, ich kapiers nicht und ich werds nie kapieren.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: Per am 21 Dezember 2017, 16:53:36
Das:
[$SELF:urlaub_von:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".$2."-".$1]
wäre ein "beliebiger" Perlausdruck. Natürlich nicht ganz beliebig, dieser enthält eine DOIF-Komponente.

Jetzt noch die Ausgabeformatierung (https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen)
[mydevice:myreading:"(\d\d):(\d\d):(\d\d)":"hours: $1, minutes $2, seconds: $3"]
im Hinterkopf, kannst du dich rantasten. Zumindest mache ich das so, mangels Fhem im Zugriff kann ich dir kein fertiges Ergebnis liefern.
Titel: Antw:doif - wieder mal auf fehlersuche ...
Beitrag von: the ratman am 21 Dezember 2017, 21:37:51
ich gebs auf ...