[erledigt] doif - was mach ich falsch?

Begonnen von the ratman, 09 Januar 2018, 22:52:32

Vorheriges Thema - Nächstes Thema

the ratman

ich will feststellen, ob ein feiertag ist(
[urlaub:state] ne "none"
or
[bw:state] ne "none"
or
(
[$SELF:time] eq "$mday-$month-$year"
and
[$SELF:zustand] eq "ein"
)
)

(
set $SELF feiertag ja
)

DOELSE

(

)

(
set $SELF feiertag nein
)


das doif schaltet mir den feiertag nicht um


sicherheitshalber das listingInternals:
   DEF        Internals:
   DEF        (
[urlaub:state] ne "none"
or
[bw:state] ne "none"
or
(
[$SELF:time] eq "$mday-$month-$year"
and
[$SELF:zustand] eq "ein"
)
)

(
set $SELF feiertag ja
)

DOELSE

(

)

(
set $SELF feiertag nein
)

   NAME       doif_istfeiertag
   NR         142
   NTFY_ORDER 50-doif_istfeiertag
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2018-01-10 11:30:00   cmd             0
     2018-01-09 22:42:54   feiertag        nein
     2018-01-10 11:30:00   mode            enabled
     2018-01-10 11:30:00   state           initialized
     2017-12-25 12:25:56   text            test text
     2018-01-09 22:47:39   time            09-01-2018
     2018-01-09 22:52:55   zustand         aus
   Regex:
   condition:
     0            ReadingValDoIf($hash,'urlaub','state') ne "none" or ReadingValDoIf($hash,'bw','state') ne "none" or ( ReadingValDoIf($hash,'doif_istfeiertag','time') eq "$mday-$month-$year" and  ReadingValDoIf($hash,'doif_istfeiertag','zustand') eq "ein" )
   devices:
     0           urlaub bw doif_istfeiertag
     all         urlaub bw doif_istfeiertag
   do:
     0:
       0           set doif_istfeiertag feiertag ja
     1:
       0           
       1           set doif_istfeiertag feiertag nein
   helper:
     DOIF_Readings_events
     DOIF_eventas
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   readings:
     0           urlaub:state bw:state doif_istfeiertag:time doif_istfeiertag:zustand
     all         urlaub:state bw:state doif_istfeiertag:time doif_istfeiertag:zustand
   uiState:
   uiTable:
Attributes:
   alias      ists ein feiertag?
   group      umrechnen
   icon       helper_doif
   readingList feiertag time text zustand urlaub_anzeigen
   room       logik und schalten
   setList    feiertag urlaub_anzeigen time text zustand

   NAME       doif_istfeiertag
   NR         145
   NTFY_ORDER 50-doif_istfeiertag
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2018-01-09 22:47:39   Device          doif_istfeiertag
     2018-01-09 22:42:54   cmd             2
     2018-01-09 22:42:54   cmd_event       doif_istfeiertag
     2018-01-09 22:42:54   cmd_nr          2
     2018-01-09 22:47:39   e_doif_istfeiertag_time 09-01-2018
     2018-01-09 22:47:39   e_doif_istfeiertag_zustand ein
     2018-01-09 22:42:54   feiertag        nein
     2018-01-09 22:42:49   mode            enabled
     2018-01-09 22:42:54   state           cmd_2
     2017-12-25 12:25:56   text            test text
     2018-01-09 22:47:39   time            09-01-2018
     2018-01-09 22:42:55   zustand         ein
   Regex:
   condition:
     0            ReadingValDoIf($hash,'urlaub','state') ne "none" or ReadingValDoIf($hash,'bw','state') ne "none" or ( ReadingValDoIf($hash,'doif_istfeiertag','time') eq "$mday-$month-$year" and  ReadingValDoIf($hash,'doif_istfeiertag','zustand') eq "ein" )
     1            ReadingValDoIf($hash,'urlaub','state') eq "none" or ReadingValDoIf($hash,'bw','state') eq "none" or ReadingValDoIf($hash,'doif_istfeiertag','time') ne "$mday-$month-$year" or ReadingValDoIf($hash,'doif_istfeiertag','zustand') eq "aus"
   devices:
     0           urlaub bw doif_istfeiertag
     1           urlaub bw doif_istfeiertag
     all         urlaub bw doif_istfeiertag
   do:
     0:
       0           set doif_istfeiertag feiertag ja
     1:
       0           set doif_istfeiertag feiertag nein
     2:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      time: 09-01-2018
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   doif_istfeiertag
     timerevent time: 09-01-2018
     triggerDev doif_istfeiertag
     timerevents:
       time: 09-01-2018
       Device: doif_istfeiertag
       e_doif_istfeiertag_time: 09-01-2018
       e_doif_istfeiertag_zustand: ein
     timereventsState:
       time: 09-01-2018
       Device: doif_istfeiertag
       e_doif_istfeiertag_time: 09-01-2018
       e_doif_istfeiertag_zustand: ein
     triggerEvents:
       time: 09-01-2018
       Device: doif_istfeiertag
       e_doif_istfeiertag_time: 09-01-2018
       e_doif_istfeiertag_zustand: ein
     triggerEventsState:
       time: 09-01-2018
       Device: doif_istfeiertag
       e_doif_istfeiertag_time: 09-01-2018
       e_doif_istfeiertag_zustand: ein
   internals:
   itimer:
   readings:
     0           urlaub:state bw:state doif_istfeiertag:time doif_istfeiertag:zustand
     1           urlaub:state bw:state doif_istfeiertag:time doif_istfeiertag:zustand
     all         urlaub:state bw:state doif_istfeiertag:time doif_istfeiertag:zustand
   trigger:
   uiState:
   uiTable:
Attributes:
   alias      ists ein feiertag?
   group      umrechnen
   icon       helper_doif
   readingList feiertag time text zustand urlaub_anzeigen
   room       logik und schalten
   setList    feiertag urlaub_anzeigen time text zustand
→do↑p!dnʇs↓shit←

Per

Lt. List gab es nach der Änderung der Def keine Änderung einer auszuwertenten "Variable". Daher hat das DOIF keinen Anlass, was zu tun.

the ratman

es gab genug änderungen, das kommt jetzt nur vom rumspielen.
ich tipp ja auf [$SELF:time] eq "$mday-$month-$year" weiß aber nicht, was ich da falsch mache.
mit punkten $mday.$month.$year hab ichs auch schon probiert ... geht auch ned.
→do↑p!dnʇs↓shit←

Per

Muss das nicht setreading statt set sein?

the ratman

#4
hatte ich auch schon probiert - ist dem guten stück vollkommen egal

er schaltet mir auch den doelse, also cmd_2 aber cmd_1 kriegt er nicht hin.
ich mach hier (
[$SELF:time] eq "$mday.$month.$year"
and
[$SELF:zustand] eq "ein"
)
wohl nen fehler.
das reading time stimmt mit 10.01.2018 auch.
und weil ich nicht sicher war, ob die . gehen, hatt ichs vorher auch mit - im datum
→do↑p!dnʇs↓shit←

Per

Mach mal ein
or 1
in die Bedingungen vom ersten Zweig. Damit sollte er immer zuschlagen und du kannst dir die Events als e_ Reading anschauen.

ist $month sicher "01" oder "1"?

the ratman

#6
Zitatist $month sicher "01" oder "1"?
hmm, gute frage

weißt du, wie man das beim timewidget auf "ohne führende 0" ändern kann. wäre der einfachste weg zum testen.
'time' => 'time:datetime,datepicker:true,timepicker:false,theme:default,inline:false,format:d.m.Y',
also für format:d.m.Y' d und m ohne 0, geht das?



nachtrag: du hast recht, habs reading händisch mal von der 0 befreit ... schon schaltet er
wenn ich jetzt noch wüsste, wie ich die 0 weg oder auf der andern seite hinkriegen könnte...
→do↑p!dnʇs↓shit←

Per

Zitat von: the ratman am 10 Januar 2018, 15:28:26wenn ich jetzt noch wüsste, wie ich die 0 weg oder auf der andern seite hinkriegen könnte...
Nein, bin keine "Perle". Google sollte aber ein paar Treffer bieten.
Wie erstellst du denn den Eintrag? Wenn du auf beiden Seiten (erstellen und vergleichen) den selben Code verwendest, dürfte es keine Probleme geben.

the ratman

#8
erstellt wirds eben in ner readingsgroup mit dem datetime widget.
da könnte sich auch das format anpassen lassen. derzeit: format:d.m.Y
da das widget aber javascript ist und ich auch nix gefunden hab, wo es um führende nullen geht ...

man könnte natürlich im doif ein userreading machen, aber da sind wir wieder bei regex. etwas, dass ich nie kapiert hab.
bliebe noch eine fertige variable, aber scheints gibts nicht mehr als $mday und $month.

sprich: der onkel ist ahnungslos wie immer bei solchen dingen.

probiert, aber versagt:
aus https://wiki.fhem.de/wiki/DOIF/Zeitspanne_zwischen_zwei_Terminen_schalten abgeschrieben und daraus
[$SELF:time:"^(\d\d).(\d\d).(\d\d\d\d)":($1*1).".".($2*1).".".$3] eq "$mday.$month.$year"
gebastelt.
denke, die richtung stimmt, nur gehen tuts noch nicht.
→do↑p!dnʇs↓shit←

Damian

[$SELF:time] eq $hms

sollte ohne Probleme funktionieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

leider nein, ist $hms ein datum?
→do↑p!dnʇs↓shit←

Damian

Zitat von: the ratman am 10 Januar 2018, 18:52:41
leider nein, ist $hms ein datum?

nein, es ist die aktuelle Uhrzeit im Format HH:MM:SS mit führenden Nullen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

weil ich halt ein datum brauch ... $hms kannt sogar ich schon *fg*

jaja, i weß, time als name für n datum ist ein bissi irreführend, hat sich aber halt aus div. bastel-tests (aus unbenenn-faulheit) ergeben.
→do↑p!dnʇs↓shit←

Damian

Zitat von: the ratman am 10 Januar 2018, 19:26:15
weil ich halt ein datum brauch ... $hms kannt sogar ich schon *fg*

jaja, i weß, time als name für n datum ist ein bissi irreführend, hat sich aber halt aus div. bastel-tests (aus unbenenn-faulheit) ergeben.

ja, du hast Recht, ich habe mich von deiner Namens-Terminologie [$SELF:time] wohl irritieren lassen ;)

Na dann eben [$SELF:time] eq sprintf("%02d.%02d.%04d", $mday,$month,$year) mit führenden Nullen oder

[$SELF:time] eq sprintf("%d.%d.%d", $mday,$month,$year) ohne führende Nullen.

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

the ratman

habs grade selber geschafft

obige abschreibübung aus deinem wiki passte, nur hab ich das ? nicht gemacht.
so [?$SELF:time:"^(\d\d).(\d\d).(\d\d\d\d)":($1*1).".".($2*1).".".$3] eq "$mday.$month.$year" funzt es also

auf jeden fall vielen dank fürs helfen!
→do↑p!dnʇs↓shit←