FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Helmi55 am 08 Dezember 2021, 12:49:20

Titel: #erledigt# DOIF senden zu bestimmter Uhrzeit und bestimmtem state
Beitrag von: Helmi55 am 08 Dezember 2021, 12:49:20
Hallo
ich verzweifle gerade wieder an einem DOIF obwohl ich die Command Reform gelesen habe, finde ich den Fehler nicht.
Mein Ziel ist es um eine bestimmte Uhrzeit UND einem bestimmten state von einem dummy eine Meldung zu senden:
defmod di_BadHeizungMeldung DOIF ([12:33] and [du_time:state] == "05:00" or "06:00") (set Pushover1 msg 'BadHeizung:' '[du_time:state]')

Hier also um 12:33 und wenn im state 05:00 oder 06:00 steht die Meldung zu senden.
Im dummy ist das state aber  07:00

Hier das List vom dummy
Internals:
   FUUID      612b60e0-f33f-ee2d-e06c-e2206505d4fdda73
   NAME       du_time
   NR         594
   STATE      07:00
   TYPE       dummy
   READINGS:
     2021-12-08 12:30:15   state           07:00
Attributes:
   alias      Bad Startzeit
   readingList state
   room       Badezimmer
   setList    state:05.00,05.30,06.00,06.30,07.00,15.15,17.00,17.30,18.00,18.30
   verbose    5


Die setList ist mit Absicht mit 06.00 das dies von FHEMapp kommt.....

Ich habe schon statt == auch eq verwendet - ohne Erfolg.
Ebenso die Uhrzeiten in [] statt ""

Alles ohne Erfolg

Die Meldung wird immer gesendet und sollte ja nur gesendet werden wenn 12:33 UND 07:00 stimmt.

Was mach ich da bitte wieder falsch?

Gruß
Helmut
Titel: Antw:DOIF senden zu bestimmter Uhrzeit und bestimmtem state
Beitrag von: Otto123 am 08 Dezember 2021, 13:00:30
Hi,

sowas geht nicht! [du_time:state] == "05:00" or "06:00" (dieser Ausdruck ist immer wahr, da "06:00" immer wahr ist  ;)
Das muss so aussehen: [du_time:state] == "05:00" or [du_time:state] == "06:00" allerdings wird damit ein numerischer Vergleich durchgeführt, d.h. nur die Stunden werden verglichen!
Also wie Damian anmerkt so vergleichen: [du_time:state] eq "05:00" or [du_time:state] eq "06:00" dann wird ein lexikalischer Vergleich durchgeführt!

Gruß Otto
Titel: Antw:DOIF senden zu bestimmter Uhrzeit und bestimmtem state
Beitrag von: Damian am 08 Dezember 2021, 13:03:27
Zitat von: Otto123 am 08 Dezember 2021, 13:00:30
Hi,

sowas geht nicht! [du_time:state] == "05:00" or "06:00" (dieser Ausdruck ist immer wahr, da "06:00" immer wahr ist  ;)
Das muss so aussehen: [du_time:state] == "05:00" or [du_time:state] == "06:00"

Gruß Otto

Strings bitte mit eq vergleichen :)

[du_time:state] eq "05:00"
Titel: Antw:DOIF senden zu bestimmter Uhrzeit und bestimmtem state
Beitrag von: Helmi55 am 08 Dezember 2021, 13:49:19
Herzlichen Dank.
Ihr seid die Besten. So klappt es jetzt.
Schönen Tag

Gruß
Helmut
Titel: Antw:#erledigt# DOIF senden zu bestimmter Uhrzeit und bestimmtem state
Beitrag von: Helmi55 am 17 Dezember 2021, 17:45:58
Hallo
irgendwo ist der Wurm drinnen (wahrscheinlich wieder mein Fehler)

Wenn ich jetzt um 17:40 die Heizzeit auf 17:00 stelle bekomme ich sofort eine Pushmsg - obwohl [20:01] in DOIF steht?

defmod di_BadHeizungMeldung DOIF ([20:01] and [du_time:state] eq "15:15" or [du_time:state] eq "17:00" or [du_time:state] eq "17:30" or [du_time:state] eq "18:00" or [du_time:state] eq "18:30") (set Pushover1 msg 'BadHeizung:' '[du_time:state]') DOELSE


Was mach ich da wieder falsch?

Danke
Helmut
Titel: Antw:#erledigt# DOIF senden zu bestimmter Uhrzeit und bestimmtem state
Beitrag von: Otto123 am 17 Dezember 2021, 18:21:38
Hallo Helmut,

jedes Reading triggert Dein DOIF

Ich weiß nicht genau wie Du es wolltest aber bei A and B or C or D or E or F
Ist es wahr bei A und B
oder C
oder D
usw. :)

Mag sein Du wolltest: A and ( B or C or D or E or F  ) ;)

Gruß Otto
Titel: Antw:#erledigt# DOIF senden zu bestimmter Uhrzeit und bestimmtem state
Beitrag von: Helmi55 am 17 Dezember 2021, 18:34:55
Otto servus und Danke für deine Hilfe,

eigentlich wollte ich um 20:01 eine Meldung bekommen wenn eine der Bedingungen 15:15, 17:00, 17:30, 18:00 oder 18:30 im state stehen.
Hintergrund : die Heizung soll in der Früh aktiv sein (ich kann ja vergessen, wenn ich am Abend aktiviert habe, wieder auf Frühmodus zu schalten!! = alter Mann Modus  ;D ;D ;D)

Ich hatte bis jetzt nur Abfrage an einer bestimmten Uhrzeit über den aktuellen Zustand

Was muss ich da bitte noch ändern

Danke
Helmut
Titel: Antw:#erledigt# DOIF senden zu bestimmter Uhrzeit und bestimmtem state
Beitrag von: Otto123 am 17 Dezember 2021, 18:46:55
na zwei Klammern setzen :)
A and ( B or C or D or E or F  )

defmod di_BadHeizungMeldung DOIF ([20:01] and ([du_time:state] eq "15:15" or [du_time:state] eq "17:00" or [du_time:state] eq "17:30" or [du_time:state] eq "18:00" or [du_time:state] eq "18:30")) (set Pushover1 msg 'BadHeizung:' '[du_time:state]') DOELSE

Aber wahrscheinlich noch besser: Nur mit der Uhrzeit triggern!
defmod di_BadHeizungMeldung DOIF ([20:01] and ([?du_time:state] eq "15:15" or [?du_time:state] eq "17:00" or [?du_time:state] eq "17:30" or [?du_time:state] eq "18:00" or [?du_time:state] eq "18:30")) (set Pushover1 msg 'BadHeizung:' '[du_time:state]') DOELSE
Titel: Antw:#erledigt# DOIF senden zu bestimmter Uhrzeit und bestimmtem state
Beitrag von: Helmi55 am 17 Dezember 2021, 19:49:49
Danke Otto

ja diese Klammern - da stand ich schon in der Schule vor 50 Jahren auf Kriegsfuß

Schöne Feiertage - gesund bleiben
Helmut