Wir bekommen jeden morgen um 09:30 bzw. 10.00 Uhr eine Meldung, obwohl die Maschine nicht gelaufen ist. Was muss ich ändern? (Der u.g. Code steuert ein Dummy und bezieht seine Daten über ein FritzDect)
Erklärung:
Miele_W1 = FritzDECT
Verbrauch = Verbrauch {ReadingsNum("$name","power",0)} // User reading aus FritzDECT
W1Betrieb = Dummy
Internals:
CFGFN
DEF ([Miele_W1:Verbrauch] == 0)
(set W1Betrieb off)
DOELSEIF
([Miele_W1:Verbrauch] > 50)
(set W1Betrieb on)
DOELSEIF
(([W1Betrieb:state] eq "off") and ([09:30-22:00|AT] or [10:00-23:30|WE]))
({fhem("\"sudo gammu-smsd-inject TEXT +49XXXXXXXXXX -text 'Miele W1 ist fertig!'\"")})
({fhem("\"sudo gammu-smsd-inject TEXT +49XXXXXXXXXX -text 'NACHRICHT NOCH IM TESTBETRIEB - Bitte um Feedback wenn es zuverlässig läuft - Miele W1 ist fertig!'\"")})
DOELSE ()
attr doif_W1 wait 0:0:3800
FUUID 6523162d-f33f-af37-d4d2-1cb300d2f4093e76
MODEL FHEM
NAME doif_W1
NOTIFYDEV W1Betrieb,global,Miele_W1
NR 22388
NTFY_ORDER 50-doif_W1
STATE cmd_1
TYPE DOIF
VERSION 27740 2023-07-10 09:31:11
eventCount 36
READINGS:
2023-10-10 22:44:21 cmd 1
2023-10-10 22:44:21 cmd_event doif_W1
2023-10-10 22:44:21 cmd_nr 1
2023-10-10 22:42:30 mode enabled
2023-10-10 22:44:21 state cmd_1
2023-10-10 22:42:31 timer_01_c03 11.10.2023 09:30:00|AT
2023-10-10 22:42:31 timer_02_c03 11.10.2023 22:00:00|AT
2023-10-10 22:42:31 timer_03_c03 11.10.2023 10:00:00|WE
2023-10-10 22:42:31 timer_04_c03 10.10.2023 23:30:00|WE
Regex:
accu:
bar:
barAvg:
collect:
cond:
Miele_W1:
0:
Verbrauch ^Miele_W1$:^Verbrauch:
1:
Verbrauch ^Miele_W1$:^Verbrauch:
W1Betrieb:
2:
state ^W1Betrieb$:^state:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Miele_W1','Verbrauch') == 0
1 ::ReadingValDoIf($hash,'Miele_W1','Verbrauch') > 50
2 (::ReadingValDoIf($hash,'W1Betrieb','state') eq "off") and (::DOIF_time($hash,0,1,$wday,$hms,"AT") or ::DOIF_time($hash,2,3,$wday,$hms,"WE"))
days:
0 AT
1 AT
2 WE
3 WE
do:
0:
0 set W1Betrieb off
1:
0 set W1Betrieb on
2:
0 {fhem("\"sudo gammu-smsd-inject TEXT +XXXXXXXXXXX -text 'Miele W1 ist fertig!'\"")}
1 {fhem("\"sudo gammu-smsd-inject TEXT +XXXXXXXXXXX -text 'NACHRICHT NOCH IM TESTBETRIEB - Bitte um Feedback wenn es zuverlässig läuft - Miele W1 ist fertig!'\"")}
3:
0
helper:
NOTIFYDEV W1Betrieb,global,Miele_W1
globalinit 1
last_timer 4
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
interval:
0 -1
1 0
2 -1
3 2
intervalfunc:
localtime:
0 1697009400
1 1697054400
2 1697011200
3 1696973400
readings:
all Miele_W1:Verbrauch W1Betrieb:state
realtime:
0 09:30:00
1 22:00:00
2 10:00:00
3 23:30:00
time:
0 09:30:00
1 22:00:00
2 10:00:00
3 23:30:00
timeCond:
0 2
1 2
2 2
3 2
timer:
0 0
1 0
2 0
3 0
timers:
2 0 1 2 3
triggertime:
1696973400:
localtime 1696973400
hash:
1697009400:
localtime 1697009400
hash:
1697011200:
localtime 1697011200
hash:
1697054400:
localtime 1697054400
hash:
uiState:
uiTable:
Attributes:
group Waschmaschine
room doif
Internals:
CFGFN
FUUID 6523155c-f33f-af37-3a7e-6ec99654a7038ae9
NAME W1Betrieb
NR 22270
STATE off
TYPE dummy
eventCount
READINGS:
2023-10-10 22:44:21 state off
Attributes:
devStateIcon state
event-on-change-reading state
group Waschmaschine
room doif
setList on off[/b]
Hallo Sebastian,
Ich rate mal, dass Du gerne eine Mitteilung bekommen möchtest, sobald die Maschine fertig ist? Aber nur zu bestimmten Uhrzeiten? Und ich vermute, das erkennst Du zuverlässig daran, dass die Bedingung ([Miele_W1:Verbrauch] == 0) erfüllt ist?
In dem Fall benötigst Du meiner Meinung nach nicht vier Zweige im DOIF, sondern lediglich zwei.
cmd_1: Verbrauch == 0 -> Dummy auf off setzen
cmd_2: Verbrauch > 50 -> Dummy auf on setzen
Zu Deiner Frage: Du bekommst die Mitteilungen, da die Bedingung (([W1Betrieb:state] eq "off") and ([09:30-22:00|AT] or [10:00-23:30|WE])) das so hergibt. DOIF dümpelt im cmd_1 oder cmd_4 und wird offensichtlich von den Zeiten getriggert. Wenn Du das nicht möchtest, müsstest Du das Triggern eigentlich verhindern können, indem Du der Bedingung ein Fragezeichen voranstellst, also z. B. [?09:30-22:00|AT].
Auch wenn Du das nicht gefragt hast: Du setzt im DOIF den Status des Dummys und das Dummy triggert das DOIF. Gefühlt möchtest Du zu viele Dinge in einem DOIF erledigen, die man aus Gründen der Übersichtlichkeit evt. trennen sollte? Ich würde Dir spontan empfehlen, ein zweites DOIF zur Überwachung des Dummys und nur für den Mitteilungsversand zu erstellen. Da kannst Du dann die Zeiten - nicht triggernd - in die Bedinungen des Mitteilungsversands einbeziehen.
Nebenbei: Das DOELSE () am Ende verwirrt mich. Ich vermute, dass ist über.
Viele Grüße,
Martin
Hallo,
bei mir läuft es mit diesem DOIF perfekt:
([sonoff_Waschmaschine:ENERGY_Power] > 200 and [sonoff_Waschmaschine:running] eq "off") (setreading sonoff_Waschmaschine running on) ({my $energy=ReadingsNum("sonoff_Waschmaschine","ENERGY_Total","");
fhem ("set du_WaschmaschineStart_energy $energy")})
DOELSEIF ([sonoff_Waschmaschine:ENERGY_Power] < 3 and [sonoff_Waschmaschine:running] eq "on") (setreading sonoff_Waschmaschine running off) ({my $energy_now=ReadingsNum("sonoff_Waschmaschine","ENERGY_Total","");
my $kWhPreis = ReadingsNum("Tibber", "kWhPreis", 0);
my $energy_start=ReadingsNum("du_WaschmaschineStart_energy","state","");
my $verbrauch=($energy_now - $energy_start);;;;
my $kosten=($verbrauch * $kWhPreis);;;;
$verbrauch=sprintf("%.2f",$verbrauch);;;;
$kosten=sprintf("%.2f",$kosten);;;;
fhem ("set Telegrambot message Die Waschmaschine ist fertig\nVerbrauch: $verbrauch kWh\nKosten: $kosten €")};;)
vielleicht hilft es ja.
Meine DOIF:
defmod di_EM3 DOIF (([CUL_EM_3:peak] > 1) and ([WaMaMail] eq "off")) (set WaMaMail on) DOELSEIF (([CUL_EM_3:"^peak:.0$"]) and ([WaMaMail] eq "on")) ({DebianMail('deine@mail.de','Waschmaschine fertig',(ReadingsTimestamp("CUL_EM_3","state","0")));; fhem "set GONGen toggle";; fhem "set WaMaMail off"})\
attr di_EM3 do always
attr di_EM3 room WaschTrock
Das mit dem Tag und Nacht oder WannAuchImmer kriegst Du selber hin.