die gute alte Waschmaschine / doif

Begonnen von SebastianStorb, 10 Oktober 2023, 22:53:31

Vorheriges Thema - Nächstes Thema

SebastianStorb

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]

mähschaf

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

juergen012

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.
Fhem unter Proxmox

DL8EI Ralph

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.
Fernmelde-Opa übernahm FHEM-Installation und kämpft sich so durch.
Installation hat FS20, Homematic und einge exotische Teile.