Hauptmenü

Verständnis frage DOIF

Begonnen von Freee84neu, 10 November 2018, 23:30:49

Vorheriges Thema - Nächstes Thema

Freee84neu

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

OdfFhem

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.

Freee84neu

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

OdfFhem

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 ...

Freee84neu

Danke für die Erklärung.

Macht auch alles Sinn

Hat mir sehr geholfen