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
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
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"
Herzlichen Dank.
Ihr seid die Besten. So klappt es jetzt.
Schönen Tag
Gruß
Helmut
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
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
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
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
Danke Otto
ja diese Klammern - da stand ich schon in der Schule vor 50 Jahren auf Kriegsfuß
Schöne Feiertage - gesund bleiben
Helmut