Seit kurzer Zeit habe ich den Fehler das der dritte set Befehl (set OG1_BK_MA_LOCK UNLOCK) nicht mehr unter dem DOIF Reading aktualisiert wird, wodurch das DOIF sich selbst blockiert.
list OG1_BK_MAST
Internals:
CFGFN /media/hdd/fhem/myprogram/markise_rasp01.pm
DEF ([M_OG1_BAL_P:desired_position] != 100 and [OG1_BK_MA_LOCK] ne "LOCK" and
[OG1_BK_SSSS_MD] eq "HELL" and
[ZOBRMD] eq "TROCKEN" and [ZOBWM100D] eq "WINDSTILL" and [bmp180:temperatureof] > 18)
(set OG1_BK_MA_LOCK LOCK)(set M_OG1_BAL_P position 100)(set OG1_BK_MA_LOCK UNLOCK)
DOELSEIF
([M_OG1_BAL_P:desired_position] != 0 and [OG1_BK_MA_LOCK] ne "LOCK" and
([ZOBRMD] eq "REGEN" or [ZOBWM100D] eq "WIND"))
(set OG1_BK_MA_LOCK LOCK)(set M_OG1_BAL_P position 0)(set OG1_BK_MA_LOCK UNLOCK)
DOELSEIF
([M_OG1_BAL_P:desired_position] != 0 and [OG1_BK_MA_LOCK] ne "LOCK" and
[OG1_BK_SSSS_MD] eq "DUNKEL")
(set OG1_BK_MA_LOCK LOCK)(set M_OG1_BAL_P position 0)(set OG1_BK_MA_LOCK UNLOCK)
MODEL FHEM
NAME OG1_BK_MAST
NR 5637
NTFY_ORDER 50-OG1_BK_MAST
STATE P100
TYPE DOIF
READINGS:
2018-06-17 09:45:22 Device OG1_BK_SSSS_MD
2018-06-17 09:45:20 cmd 1.3
2018-06-17 09:45:20 cmd_event set_cmd_1
2018-06-17 09:45:20 cmd_nr 1
2018-06-17 09:45:20 cmd_seqnr 3
2018-06-17 09:44:46 e_M_OG1_BAL_P_desired_position 100
2018-06-17 09:44:45 e_OG1_BK_MA_LOCK_STATE LOCK
2018-06-17 09:45:22 e_OG1_BK_SSSS_MD_STATE HELL
2018-06-17 09:45:17 e_bmp180_temperatureof 22.3
2018-06-17 09:44:25 mode enabled
2018-06-17 09:45:20 state cmd_1
2018-06-17 09:45:20 wait_timer no timer
Regex:
attrtimer:
wait:
0:
0
0
35
1:
0
0
35
2:
600
0
35
waitdel:
condition:
0 ReadingValDoIf($hash,'M_OG1_BAL_P','desired_position') != 100 and InternalDoIf($hash,'OG1_BK_MA_LOCK','STATE') ne "LOCK" and InternalDoIf($hash,'OG1_BK_SSSS_MD','STATE') eq "HELL" and InternalDoIf($hash,'ZOBRMD','STATE') eq "TROCKEN" and InternalDoIf($hash,'ZOBWM100D','STATE') eq "WINDSTILL" and ReadingValDoIf($hash,'bmp180','temperatureof') > 18
1 ReadingValDoIf($hash,'M_OG1_BAL_P','desired_position') != 0 and InternalDoIf($hash,'OG1_BK_MA_LOCK','STATE') ne "LOCK" and (InternalDoIf($hash,'ZOBRMD','STATE') eq "REGEN" or InternalDoIf($hash,'ZOBWM100D','STATE') eq "WIND")
2 ReadingValDoIf($hash,'M_OG1_BAL_P','desired_position') != 0 and InternalDoIf($hash,'OG1_BK_MA_LOCK','STATE') ne "LOCK" and InternalDoIf($hash,'OG1_BK_SSSS_MD','STATE') eq "DUNKEL"
devices:
0 M_OG1_BAL_P OG1_BK_MA_LOCK OG1_BK_SSSS_MD ZOBRMD ZOBWM100D bmp180
1 M_OG1_BAL_P OG1_BK_MA_LOCK ZOBRMD ZOBWM100D
2 M_OG1_BAL_P OG1_BK_MA_LOCK OG1_BK_SSSS_MD
all M_OG1_BAL_P OG1_BK_MA_LOCK OG1_BK_SSSS_MD ZOBRMD ZOBWM100D bmp180
do:
0:
0 set OG1_BK_MA_LOCK LOCK
1 set M_OG1_BAL_P position 100
2 set OG1_BK_MA_LOCK UNLOCK
1:
0 set OG1_BK_MA_LOCK LOCK
1 set M_OG1_BAL_P position 0
2 set OG1_BK_MA_LOCK UNLOCK
2:
0 set OG1_BK_MA_LOCK LOCK
1 set M_OG1_BAL_P position 0
2 set OG1_BK_MA_LOCK UNLOCK
3:
helper:
DOIF_Readings_events
DOIF_eventas
event HELL
globalinit 1
last_timer 0
sleepdevice set_cmd_1
sleepsubtimer -1
sleeptimer -1
triggerDev OG1_BK_SSSS_MD
triggerEvents:
HELL
triggerEventsState:
state: on
internals:
0 OG1_BK_MA_LOCK:STATE OG1_BK_SSSS_MD:STATE ZOBRMD:STATE ZOBWM100D:STATE
1 OG1_BK_MA_LOCK:STATE ZOBRMD:STATE ZOBWM100D:STATE
2 OG1_BK_MA_LOCK:STATE OG1_BK_SSSS_MD:STATE
all OG1_BK_MA_LOCK:STATE OG1_BK_SSSS_MD:STATE ZOBRMD:STATE ZOBWM100D:STATE
itimer:
readings:
0 M_OG1_BAL_P:desired_position bmp180:temperatureof
1 M_OG1_BAL_P:desired_position
2 M_OG1_BAL_P:desired_position
all M_OG1_BAL_P:desired_position bmp180:temperatureof
trigger:
uiState:
uiTable:
Attributes:
alias OG1 Balkon - Markise - Automatic
checkReadingEvent 0
devStateIcon initialize.*:control_minus P100:fts_sunblind P0:fts_sunblind_0
eventMap cmd_1:P100 cmd_1_1:P100 cmd_1_2:P100 cmd_1_3:P100
cmd_2:P0 cmd_2_1:P0 cmd_2_2:P0 cmd_2_3:P0
cmd_3:P0 cmd_3_1:P0 cmd_3_2:P0 cmd_3_3:P0
group OG1 Balkon - Markise
icon fts_sunblind
room OG1-Balkon,OG1-Kueche,Rolllaeden
sortby 08
wait 0,0,35:0,0,35:600,0,35
Im dummy sieht man aber das die Verriegelung aber gesetzt wird.
list OG1_BK_MA_LOCK
Internals:
CFGFN /media/hdd/fhem/myprogram/markise_rasp01.pm
NAME OG1_BK_MA_LOCK
NR 5635
STATE UNLOCK
TYPE dummy
READINGS:
2018-06-17 09:45:20 state off
Attributes:
alias OG1 Balkon - Markise - Automatic Sperre
devStateIcon LOCK:time_manual_mode@red UNLOCK:time_manual_mode@0CFB0C
eventMap on:LOCK off:UNLOCK
group OG1 Balkon - Markise
icon fts_sunblind
room OG1-Balkon,OG1-Kueche,Rolllaeden
sortby 07
Das DOIF an sich funktioniert, nur das eine Reading wird unter diesem DOIF nicht aktualisiert.
Was eigenartig daran ist, weil es nicht bei jedem gleich aufgebauten DOIF der Fall ist.
Seit kurzer Zeit? M.W. ist es immer so gewesen:
Zitat von: CommandRefTriggerung durch selbst ausgelöste Events
Standardmäßig unterbindet das DOIF-Modul Selbsttriggerung. D. h. das Modul reagiert nicht auf Events, die es selbst direkt oder indirekt auslöst. Dadurch werden Endlosschleifen verhindert.
https://fhem.de/commandref_DE.html#DOIF_selftrigger
Die Readings e_etwas sind die triggernde Events. Die Befehle "set OG1_BK_MA_LOCK LOCK/UNLOCK" in den Zweigen des DOIFs triggern nicht den DOIF.
OG1_BK_MA_LOCK wird aber richtig auf UNLOCK gesetzt, und das sollte den DOIF nicht blockieren: beim nächsten triggern (z.B. wegen bmp temperatur), wir die Bedingung "[OG1_BK_MA_LOCK] ne "LOCK"" richtig bewertet (wahr)
Wenn set OG1_BK_MA_LOCK UNLOCK triggern würde, würde das DOIF wieder die Bedingungen bewerten, und die Reihenfolge von Befehlen ausführen. Und das ohne Ende.
Mich wundert eher
2018-06-17 09:44:45 e_OG1_BK_MA_LOCK_STATE LOCK
. Hast Du hier was manuell gesetzt?
set OG1_BK_MA_LOCK UNLOCK wird nur bei einem Neustart von FHEM gesetzt und wird nicht zum Triggern benötigt.
set OG1_BK_MA_LOCK LOCK/UNLOCK dient nur als Verriegelung.
Ebenso wird e_M_OG1_BAL_P_desired_position nicht zum Triggern benötigt sondern nur als Bedienung.
Nach deinem Hinweis, wenn ich es richtig verstanden habe, würde eigentlich nur das Attribut selftrigger wait und wait 0,0,35:0,0,35:600,0,35 ausreichend sein.
e_bmp180_temperatureof, e_OG1_BK_SSSS_MD_STATE, e_ZOBRMD_STATE,e_ZOBWM100D_STATE lösen ohnehin einen Trigger aus.
Es ist mir nur ein Rätsel das es früher funktioniert hatte.
Ich werde mir nochmal den Ablauf testen.
Zitat von: Burny4600 am 17 Juni 2018, 19:43:51Ebenso wird e_M_OG1_BAL_P_desired_position nicht zum Triggern benötigt sondern nur als Bedienung.
Dann stell doch nen Fragezeichen davor.
ZitatDann stell doch nen Fragezeichen davor.
Danke für den Hinweis mit dem Fragezeichen.
Das habe ich bisher übersehen.