[gelöst] DOIF mit repeatcmd statt ursprünglich cmdpause

Begonnen von Gisbert, 02 Februar 2020, 13:05:09

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo,

ich versuche mich - bisher vergeblich - an einem DOIF welches folgende Aufgabe erfüllen soll. Vielleicht noch als Ergänzung, ich habe bisher eine funktionierende Lösung mit einem zusätzlichen dummy und einen define at ... innerhalb des Ausführungsteils; ich wollte das jetzt verschlanken, scheitere aber bisher.

Die Aufgabe:
Wenn die Bedingung erfüllt ist, dann soll ein Lüfter für 1200 Sekunden laufen.
Anschließend soll der Lüfter erst nach weiteren 600 Sekunden Pause laufen, wenn die Bedingung erneut erfüllt wird.
Also 20 Minuten laufen, 10 Minuten Pause, ..., falls die Bedingung erfüllt ist.
Wenn die Bedingung nicht erfüllt ist, soll der Lüfter ausgehen.

Meine (abstrahierte) Definition:
define Luefter DOIF (Bedingung wahr) (set Aktor on for 1200) (Bedingung nicht wahr) (set Aktor off)
attr Luefter cmdpause 1800:2
attr Luefter do always

set Aktor on for 1200: funktioniert natürlich, d.h. der Aktor kümmert sich um das Ausschalten.

Nachdem der Lüfter aus ist, geht er eben nicht nach 10 Minuten wieder an, wobei sichergestellt ist, dass die Bedingung wahr ist und ein oder mehere Events (zur Bedingung) vorhanden sind. Es dauert dann etwas mehr als 30 Minuten, bis der Lüfter wieder läuft.

Wie muss man die commandref an dieser Stelle verstehen?
ZitatMit dem Attribut cmdpause <Sekunden für cmd_1>:<Sekunden für cmd_2>:... wird die Zeitspanne in Sekunden angegeben für eine Zwangspause seit der letzten Zustandsänderung. In der angegebenen Zeitspanne wird ein Kommando nicht ausgeführt, auch wenn die dazugehörige Bedingung wahr wird.

Vielleicht gibt mir jemand den richtigen Schubs.
Viele Grüße
Gisbert

Der Vollständigkeit halber, ein list des (echten) Devices:
Internals:
   CFGFN      ./FHEM/Luefterschaltung.cfg
   DEF        (([?07:00-22:30|8] or [?07:30-22:30|7]) and [TH.Haushaltsraum:humidity] > 55 and [?TH.Haushaltsraum:temperature] > 18
and [?TH.Kuhlmannweg8:temperature] < 23 and [?D.Haushaltsraum] =~ "on")
(set HWR.Ventilator_ESP_Router command gpio 14 set high for 1200)
DOELSEIF (([TH.Haushaltsraum:humidity] <= 55 or [TH.Haushaltsraum:temperature] <= 18 or [D.Haushaltsraum] =~ "off") or [+06:00:00])
(set HWR.Ventilator_ESP_Router command gpio 14 set low)
DOELSEIF ([HWR.Ventilator_ESP_Router:14] == 0)
   FUUID      5c430dc7-f33f-b139-f96d-7f285d01284df736
   MODEL      FHEM
   NAME       Haushaltsraum.Lueftung
   NOTIFYDEV  HWR.Ventilator_ESP_Router,global,D.Haushaltsraum,TH.Haushaltsraum
   NR         637
   NTFY_ORDER 50-Haushaltsraum.Lueftung
   STATE      cmd_3
   TYPE       DOIF
   VERSION    20929 2020-01-10 09:44:35
   READINGS:
     2020-02-02 12:53:04   Device          TH.Haushaltsraum
     2020-02-02 12:45:05   cmd             3
     2020-02-02 12:45:05   cmd_event       HWR.Ventilator_ESP_Router
     2020-02-02 12:45:05   cmd_nr          3
     2020-02-02 12:53:04   e_D.Haushaltsraum_STATE 12.8 on
     2020-02-02 12:45:05   e_HWR.Ventilator_ESP_Router_14 0
     2020-02-02 12:53:04   e_TH.Haushaltsraum_humidity 58
     2020-02-02 12:53:04   e_TH.Haushaltsraum_temperature 21.4
     2020-02-02 10:04:21   mode            enabled
     2020-02-02 12:45:05   state           cmd_3
     2020-02-02 10:04:21   timer_01_c01    03.02.2020 07:00:00|8
     2020-02-02 10:04:21   timer_02_c01    02.02.2020 22:30:00|8
     2020-02-02 10:04:21   timer_03_c01    03.02.2020 07:30:00|7
     2020-02-02 10:04:21   timer_04_c01    02.02.2020 22:30:00|7
     2020-02-02 10:04:21   timer_05_c02    02.02.2020 16:04:21
     2020-02-02 10:05:56   wait_timer      no timer
   Regex:
     accu:
     cond:
       D.Haushaltsraum:
         0:
         1:
           &STATE     ^D.Haushaltsraum$
         2:
       HWR.Ventilator_ESP_Router:
         0:
         1:
         2:
           14         ^HWR.Ventilator_ESP_Router$:^14:
       TH.Haushaltsraum:
         0:
           humidity   ^TH.Haushaltsraum$:^humidity:
         1:
           humidity   ^TH.Haushaltsraum$:^humidity:
           temperature ^TH.Haushaltsraum$:^temperature:
   attr:
     cmdState:
     cmdpause:
       1800
       2
       2
     repeatsame:
     wait:
     waitdel:
   condition:
     0          (::DOIF_time($hash,0,1,$wday,$hms,"8") or ::DOIF_time($hash,2,3,$wday,$hms,"7")) and ::ReadingValDoIf($hash,'TH.Haushaltsraum','humidity') > 55 and ::ReadingValDoIf($hash,'TH.Haushaltsraum','temperature') > 18  and ::ReadingValDoIf($hash,'TH.Kuhlmannweg8','temperature') < 23 and ::InternalDoIf($hash,'D.Haushaltsraum','STATE') =~ "on"
     1          (::ReadingValDoIf($hash,'TH.Haushaltsraum','humidity') <= 55 or ::ReadingValDoIf($hash,'TH.Haushaltsraum','temperature') <= 18 or ::InternalDoIf($hash,'D.Haushaltsraum','STATE') =~ "off") or ::DOIF_time_once($hash,4,$wday)
     2          ::ReadingValDoIf($hash,'HWR.Ventilator_ESP_Router','14') == 0
   days:
     0          8
     1          8
     2          7
     3          7
   do:
     0:
       0          set HWR.Ventilator_ESP_Router command gpio 14 set high for 1200
     1:
       0          set HWR.Ventilator_ESP_Router command gpio 14 set low
     2:
       0         
     3:
   helper:
     DEVFILTER  ^global$|^D.Haushaltsraum$|^HWR.Ventilator_ESP_Router$|^TH.Haushaltsraum$
     NOTIFYDEV  global|D.Haushaltsraum|HWR.Ventilator_ESP_Router|TH.Haushaltsraum
     event      humidity: 58,T: 21.4 H: 58,temperature: 21.4,dewpoint: 12.8
     globalinit 1
     last_timer 5
     sleepdevice TH.Haushaltsraum
     sleepsubtimer -1
     sleeptimer -1
     timerdev   TH.Haushaltsraum
     timerevent humidity: 58,T: 21.4 H: 58,temperature: 21.4,dewpoint: 12.8
     triggerDev TH.Haushaltsraum
     bm:
       DOIF_Attr:
         cnt        6
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.02. 10:05:56
         max        0.0234968662261963
         tot        0.0376739501953125
         mAr:
           del
           Haushaltsraum.Lueftung
           wait
       DOIF_Get:
         cnt        20
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.02. 12:18:13
         max        2.40802764892578e-05
         tot        0.000343561172485352
         mAr:
           HASH(0x558661709300)
           Haushaltsraum.Lueftung
           ?
       DOIF_Notify:
         cnt        1992
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.02. 12:01:51
         max        0.113728046417236
         tot        1.34965753555298
         mAr:
           HASH(0x558661709300)
           HASH(0x55865ea858c8)
       DOIF_Set:
         cnt        81
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.02. 12:13:19
         max        0.0034019947052002
         tot        0.0099036693572998
         mAr:
           HASH(0x558661709300)
           Haushaltsraum.Lueftung
           checkall
     timerevents:
       humidity: 58
       T: 21.4 H: 58
       temperature: 21.4
       dewpoint: 12.8
     timereventsState:
       humidity: 58
       state: T: 21.4 H: 58
       temperature: 21.4
       dewpoint: 12.8
     triggerEvents:
       humidity: 58
       T: 21.4 H: 58
       temperature: 21.4
       dewpoint: 12.8
     triggerEventsState:
       humidity: 58
       state: T: 21.4 H: 58
       temperature: 21.4
       dewpoint: 12.8
   internals:
     all         D.Haushaltsraum:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   localtime:
     0          1580709600
     1          1580679000
     2          1580711400
     3          1580679000
     4          1580655861
   readings:
     all         TH.Haushaltsraum:humidity TH.Haushaltsraum:temperature HWR.Ventilator_ESP_Router:14
   realtime:
     0          07:00:00
     1          22:30:00
     2          07:30:00
     3          22:30:00
     4          16:04:21
   time:
     0          07:00:00
     1          22:30:00
     2          07:30:00
     3          22:30:00
     4          +06:00:00
   timeCond:
     0          0
     1          0
     2          0
     3          0
     4          1
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   timers:
     1           4
   trigger:
   triggertime:
     1580655861:
       localtime  1580655861
       hash:
     1580679000:
       localtime  1580679000
       hash:
     1580709600:
       localtime  1580709600
       hash:
     1580711400:
       localtime  1580711400
       hash:
   uiState:
   uiTable:
Attributes:
   cmdpause   1800:2:2
   comment    Hardware: IWEAS 4.0 (in abgespeckter Form, da nur das Relais benötigt wird)
Software: esp_wifi_repeater, Stand 21.12.2019
Relais hängt an GPIO14:
Anschalten: set <device> command gpio 14 set high
Anschalten für 20 min: set <device> command gpio 14 set high for 1200
Ausschalten: set <device> command gpio 14 set low
   devStateIcon cmd_1:vent_ventilation_level_3@red (cmd_2|cmd_3):vent_ventilation@gray
   do         always
   icon       vent_ventilation
   room       CUL_HM
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Gisbert

Hallo,

in der letzten Stunde wollte der Lüfter gar nicht mehr angehen, obwohl die Bedingung(en) erfüllt waren.
Wenn ich das Attribut cmdpause lösche, läuft der Lüfter sofort los.
Aber dann wird er sofort wieder anlaufen, sobald das nächste Event reinkommt, so dass die Bedingunge(en) erfüllt sind.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Gisbert

Hallo,

ich habe heute Geburtstag, Glückwünsche und Hilfestellung zu meinem kleinen Problem werden gerne entgegen genommen ;).

Vielen Dank im voraus und viele Grüße
Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Frank_Huber

#3
define Luefter DOIF (Bedingung wahr) (set Aktor on for 1200) (Bedingung nicht wahr) (set Aktor off)
attr Luefter cmdpause 1800:2
attr Luefter do always


da fehlt doch das DOELSEIF vor (Bedingung nicht wahr)

btw: Happy birthday! :-)

Per


Gisbert

Zitat von: Frank_Huber am 03 Februar 2020, 12:52:20
define Luefter DOIF (Bedingung wahr) (set Aktor on for 1200) (Bedingung nicht wahr) (set Aktor off)
attr Luefter cmdpause 1800:2
attr Luefter do always


da fehlt doch das DOELSEIF vor (Bedingung nicht wahr)

btw: Happy birthday! :-)
@Frank, hast recht, diese Beschreibung war aber nur dafür gedacht, dass sich jemand nicht durch das list durchwühlen und alles haarklein nachvollziehen muss.
In "echt" ist da ein DOELSEIF drin.

attr Luefter repeatcmd 1800:0
@Per,
vielen Dank, dieser Hinweis war goldrichtig!
Ich teste grade das Attribut repeatcmd; ich hatte es bisher noch nie eingesetzt, entsprechend musste ich das Brett/Balken vor mein Stirn erst wegbekommen.
Bisher läuft's, werde dann mal den Threadtitel verändern.

Vielleicht noch als Ergänzung. bzw. Verfeinerung, da ich das Ausschalten jetzt durch Fhem heraus mache, da der Aktor sich zwischendurch neu startet, und dann vergisst er das Ausschalten.
Dann muss man die Zeiten zwischen repeatcmd und wait sinnvoll aufteilen, um das folgende Verhalten zu bekommen:
- 20 Minuten lüften
- 10 Minuten Pause
- ...
define Luefter DOIF (Bedingung wahr) (set Aktor on) (set Aktor off) DOELSEIF (Bedingung nicht wahr) (set Aktor off)
attr Luefter do always
attr Luefter repeatcmd 600:60
attr Luefter repeatsame 18:2
attr Luefter wait 0,1200:0


Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome