FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Freee84neu am 10 November 2018, 23:30:49

Titel: Verständnis frage DOIF
Beitrag von: Freee84neu am 10 November 2018, 23:30:49
Hi

Habe gerade einen Diof angelegt

([Dummy_Waschmaschine] eq "STANDBY") (set ECHO_G000JN0573370NNU speak Die Wäsche ist fertig bitte leer machen und ausschalten)
attr do always
attr repeatcmd 20
attr repeatsame 5


Dieser soll bei Waschmaschine STANDBY am Echo alle 20 sek. was ausgeben und das 5 mal, jedoch sollte er bei Waschmaschine ungleich STANDBY schon vorher aufhören eventuell zb. nach dem 3 mal

In der Commandref steht

Anwendungsbeispiel: Nach dem Eintreffen des Ereignisses wird die push-Meldung stündlich wiederholt, bis Frost ungleich "on" ist.

define di_push DOIF ([frost] eq "on")(set pushmsg "danger of frost")
attr di_push repeatcmd 3600

Eine Begrenzung der Wiederholungen kann mit dem Attribut repeatsame vorgenommen werden
attr di_push repeatsame 3

Jedoch macht er immer 5 Wiederholungen und hört nicht vorher auf obwohl Waschmaschine ungleich STANDBY ist. Was hab ich da denn jetzt falsch verstanden
Titel: Antw:Verständnis frage DOIF
Beitrag von: OdfFhem am 11 November 2018, 00:12:53
Sinnvoll wäre hier sicherlich ein list vom <DOIF-Device>.


Nach den bisherigen Informationen würde ich Folgendes sagen:

statt

attr repeatcmd 20


wohl eher

attr <DOIF-Device> repeatcmd 20


Gilt dann natürlich analog für die restlichen attr-Angaben.
Titel: Antw:Verständnis frage DOIF
Beitrag von: Freee84neu am 11 November 2018, 00:22:30
Sorry

Hier ein list

Internals:
   CFGFN     
   DEF        ([Dummy_Waschmaschine] eq "STANDBY") (set ECHO_G000JN0573370NNU speak Die Wäsche ist fertig bitte leer machen und ausschalten)

   MODEL      FHEM
   NAME       Waschmaschine_Fertig_Wiederholung
   NR         11979
   NTFY_ORDER 50-Waschmaschine_Fertig_Wiederholung
   STATE      initialized
   TYPE       DOIF
   .attraggr:
   .attrminint:
   READINGS:
     2018-11-11 00:19:13   cmd             0
     2018-11-11 00:19:13   mode            enabled
     2018-11-11 00:19:13   state           initialized
   Regex:
   attr:
     cmdState:
     cmdpause:
     repeatcmd:
       20
     repeatsame:
       5
     wait:
     waitdel:
   condition:
     0          ::InternalDoIf($hash,'Dummy_Waschmaschine','STATE') eq "STANDBY"
   devices:
     0           Dummy_Waschmaschine
     all         Dummy_Waschmaschine
   do:
     0:
       0          set ECHO_G000JN0573370NNU speak Die Wäsche ist fertig bitte leer machen und ausschalten
     1:
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   internals:
     0           Dummy_Waschmaschine:STATE
     all         Dummy_Waschmaschine:STATE
   itimer:
   uiState:
   uiTable:
Attributes:
   do         always
   repeatcmd  20
   repeatsame 5
Titel: Antw:Verständnis frage DOIF
Beitrag von: OdfFhem am 11 November 2018, 07:50:23
repeatcmd sorgt dafür, dass immer wieder ein wait_timer gesetzt wird - unter Berücksichtigung von repeatsame.

Ohne alternativen Ausführungszweig wird der wait_timer nicht vorzeitig beendet.


Soll dieser wait_timer-Rhythmus vorzeitig beendet werden, braucht man - wie auch sonst - einen alternativen Ausführungszweig. Dazu reicht die Ergänzug eines einfachen
DOELSE ()

In diesem Fall kann man evtl. auch auf das do always verzichten ...
Titel: Antw:Verständnis frage DOIF
Beitrag von: Freee84neu am 11 November 2018, 08:01:03
Danke für die Erklärung.

Macht auch alles Sinn

Hat mir sehr geholfen