DOIF soll nur einmal das cmd ausführen

Begonnen von australien, 30 Dezember 2020, 11:16:38

Vorheriges Thema - Nächstes Thema

australien

Hallo zusammen

ich habe eine IR Heizung, diese schaltet je nach Temp und Humid. Funktioniert auch soweit.
Nur möchte ich nicht immer den Befehl ausführen lassen, wenn der Status der gleiche ist, sprich die IR Heizung ist auf off, dann kein off mehr hinterhersenden.
Der Trigger wird ja bei jedem auslesen der Temp und Humid ausgelöst, da sich die ja ändern.

Es gibt sicher eine einfache Lösung, nur kann ich diese nicht sehen ;)

hier mein code


([Bad_Thermostat:temperature:d0]<20 or [Bad_Thermostat:temperature:d0]>=21)
(set MQTT2_Stecker_IR_Bad off)
DOELSEIF
([Bad_Thermostat:humidity:d0]<75 and [Bad_Thermostat:temperature:d0]<24)
(set MQTT2_Stecker_IR_Bad off)
DOELSE
(set MQTT2_Stecker_IR_Bad on)



danke für Eure Hilfe
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

amenomade

Das was Du willst ist die standard Funktion vom DOIF: wenn er sich in einem Zustand befindet, schickt er keinen neuen Befehl, so lange die gleiche Bedingung wahr bleibt.

Es sei denn, Du hast andere Attribute gesetzt, aber das sieht man nicht, da Du kein vollständiges "list" vom DOIF lieferst. Ein DOIF funktioniert nicht nur nach seiner DEF Zeile.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

australien

das dachte ich mir auch, dass mit der Standardfunktion.

hier ist das list
Internals:
   DEF        ([Bad_Thermostat:temperature:d0]<20 or [Bad_Thermostat:temperature:d0]>=21)
(set MQTT2_Stecker_IR_Bad off)
DOELSEIF
([Bad_Thermostat:humidity:d0]<75 and [Bad_Thermostat:temperature:d0]<24)
(set MQTT2_Stecker_IR_Bad off)
DOELSE
(set MQTT2_Stecker_IR_Bad on)

   FUUID      5fc68cf2-f33f-fbda-8e6c-9aa33c474100ccaf
   MODEL      FHEM
   NAME       do_IR_Bad
   NOTIFYDEV  Bad_Thermostat,global
   NR         773
   NTFY_ORDER 50-do_IR_Bad
   STATE      off
   TYPE       DOIF
   VERSION    23418 2020-12-26 10:04:12
   READINGS:
     2020-12-30 18:18:08   Device          Bad_Thermostat
     2020-12-30 18:18:08   cmd             2
     2020-12-30 18:18:08   cmd_event       Bad_Thermostat
     2020-12-30 18:18:08   cmd_nr          2
     2020-12-30 18:18:08   e_Bad_Thermostat_humidity 58
     2020-12-30 18:18:00   e_Bad_Thermostat_temperature 21.4
     2020-12-29 14:13:07   e_MQTT2_Stecker_IR_Bad_STATE on
     2020-12-29 14:12:52   mode            enabled
     2020-12-30 18:18:08   state           off
   Regex:
     accu:
     cond:
       Bad_Thermostat:
         0:
           temperature ^Bad_Thermostat$:^temperature:
         1:
           humidity   ^Bad_Thermostat$:^humidity:
           temperature ^Bad_Thermostat$:^temperature:
   attr:
     cmdState:
       0:
         off
       1:
         off
       2:
         on
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Bad_Thermostat','temperature','','d0')<20 or ::ReadingValDoIf($hash,'Bad_Thermostat','temperature','','d0')>=21
     1          ::ReadingValDoIf($hash,'Bad_Thermostat','humidity','','d0')<75 and ::ReadingValDoIf($hash,'Bad_Thermostat','temperature','','d0')<24
   do:
     0:
       0          set MQTT2_Stecker_IR_Bad off
     1:
       0          set MQTT2_Stecker_IR_Bad off
     2:
       0          set MQTT2_Stecker_IR_Bad on
   helper:
     DEVFILTER  ^global$|^Bad_Thermostat$
     NOTIFYDEV  global|Bad_Thermostat
     event      humidity: 58,T: 21.4 H: 58
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Bad_Thermostat
     timerevent humidity: 58,T: 21.4 H: 58
     triggerDev Bad_Thermostat
     DOIF_eventa:
       cmd_nr: 2
       cmd: 2
       cmd_event: Bad_Thermostat
       off
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: Bad_Thermostat
       state: off
     timerevents:
       humidity: 58
       T: 21.4 H: 58
     timereventsState:
       humidity: 58
       state: T: 21.4 H: 58
     triggerEvents:
       humidity: 58
       T: 21.4 H: 58
     triggerEventsState:
       humidity: 58
       state: T: 21.4 H: 58
   internals:
   perlblock:
   readings:
     all         Bad_Thermostat:temperature Bad_Thermostat:humidity
   trigger:
   uiState:
   uiTable:
Attributes:
   cmdState   off|off|on
   devStateIcon {my $light = ReadingsVal($name,"state","off");; my $temp = ReadingsVal("Bad_Thermostat","temperature",99);; my $hum = ReadingsVal("Bad_Thermostat","humidity",99);;  "<div><a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."T $temp°  H $hum%</a></div>" }
   room       2.1.Bad
   webCmd     on:on:off


2020.12.30 17:34:29 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 17:35:22 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 17:39:48 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 17:40:41 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 17:45:05 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 17:45:59 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 17:50:24 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 17:51:17 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 17:55:42 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 18:04:32 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 18:06:18 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 18:07:12 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 18:11:36 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 18:12:29 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 18:18:00 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
2020.12.30 18:18:08 3: MQTT2_DEVICE set MQTT2_Stecker_IR_Bad off
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

MadMax-FHEM

Vielleicht "hüpft" das DOIF zwischen cmd1 und cmd2.

cmd1 wenn die Temperatur geschickt wird/triggert

cmd2 wenn humidity kommr/triggert

Allerdings nutze ich kein DOIF und daher "rate" ich nur... ;)

(sollte es "Blödsinn" sein: einfach ignorieren ;)  )

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

amenomade

Ja, so würde ich es auch analysieren. Um das festzustellen, einfach im Eventmonitor das DOIF beobachten (oder Log3 Ausgaben im DOIF einbauen)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus