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
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.
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
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
Ja, so würde ich es auch analysieren. Um das festzustellen, einfach im Eventmonitor das DOIF beobachten (oder Log3 Ausgaben im DOIF einbauen)