Ich habe folgendes DOIF
([PufferObenGed] < ([VorlaufSoll] + 5) and [s12:"off"]) {myUtils_PufferKesseltemp()}
DOELSEIF ([PufferObenGed] > ([VorlaufSoll] + 10) and [s12:"off"]) (set THBrenner desired 20)
mit folgenden List
ZitatInternals:
DEF ([PufferObenGed] < ([VorlaufSoll] + 5) and [s12:"off"]) {myUtils_PufferKesseltemp()}
DOELSEIF ([PufferObenGed] > ([VorlaufSoll] + 10) and [s12:"off"]) (set THBrenner desired 20)
NAME Pufferbrenner
NR 137
NTFY_ORDER 50-Pufferbrenner
STATE initialized
TYPE DOIF
READINGS:
2017-09-05 08:52:15 Device VorlaufSoll
2017-09-05 08:48:21 cmd 0
2017-09-05 08:52:15 e_PufferObenGed_STATE 39.7
2017-09-05 08:52:15 e_PufferObenGed_events 39.7
2017-09-05 08:52:15 e_VorlaufSoll_STATE 25
2017-09-05 08:52:15 e_VorlaufSoll_events 25
2017-09-05 08:48:21 state initialized
condition:
0 InternalDoIf($hash,'PufferObenGed','STATE') < (InternalDoIf($hash,'VorlaufSoll','STATE') + 5) and EventDoIf('s12',$hash,'off',1)
1 InternalDoIf($hash,'PufferObenGed','STATE') > (InternalDoIf($hash,'VorlaufSoll','STATE') + 10) and EventDoIf('s12',$hash,'off',1)
devices:
0 PufferObenGed VorlaufSoll s12
1 PufferObenGed VorlaufSoll s12
all PufferObenGed VorlaufSoll s12
do:
0:
0 {myUtils_PufferKesseltemp()}
1:
0 set THBrenner desired 20
2:
helper:
event 25
globalinit 1
last_timer 0
sleeptimer -1
triggerDev VorlaufSoll
triggerEvents:
25
triggerEventsState:
state: 25
internals:
0 PufferObenGed:STATE VorlaufSoll:STATE
1 PufferObenGed:STATE VorlaufSoll:STATE
all PufferObenGed:STATE VorlaufSoll:STATE
itimer:
readings:
regexp:
0:
1:
all:
state:
STATE:
trigger:
all s12
Attributes:
group PufferladungKessel
room Heizung
"s12" ist der Schalter für die WWLadung. Wenn Diese läuft, soll der Pufferspeicher nicht geladen werden.
Der state von S12 ist "off".
List s12:
ZitatInternals:
DEF 5
IODev FIRMATA1
NAME s12
NR 55
PIN 5
STATE off
TYPE FRM_OUT
READINGS:
2017-09-04 20:55:57 state Initialized
2017-09-05 08:26:29 value off
Attributes:
IODev FIRMATA1
alias 05WWSpeicherLadung
group WWSpeicherladungKessel,Schalter
room Heizung
stateFormat value
Aber sobald ich "s12" als Bedingung mit in die DOIF eintrage, Inizialisiert die DOIF endlos.
Ohne die "s12"-Bedingung klappt alles wunderbar. Habe ich da was in der Syntax falsch, oder
habe ich (wie so oft :)) einen Denkfehler?
Versuche mal [? s12....
Gruß Rolf
... and [S12] eq "off)
und im ersten Zweig den Ausführungsteil bitte noch in Klammern setzen.
([PufferObenGed] < ([VorlaufSoll] + 5) and [s12] eq "off") ({myUtils_PufferKesseltemp()})
DOELSEIF ([PufferObenGed] > ([VorlaufSoll] + 10) and [s12] eq "off") (set THBrenner desired 20)
Vielen Dank für eure Tips. Hat aber leider alles nicht geholfen. Die DOIF initialisiert stetig weiter.
(([PufferObenGed] < ([VorlaufSoll] + 5)) and [s12] eq "off") ({myUtils_PufferKesseltemp()})
Und wenn du den "kleiner" Vergleich in eine extra Klammer machst?
m.E. ist diese Annahme falsch:
ZitatDer state von S12 ist "off".
Zitat von: Bobsonbob am 05 September 2017, 08:57:30
READINGS:
2017-09-04 20:55:57 state Initialized
2017-09-05 08:26:29 value off
Du solltest also auf "value" triggern bzw. abfragen, nicht auf "state" bzw. "STATE".
Ich rate dem Hilfesuchenden sich wenigstens Ansatzweise mit der DOIF Syntax zu beschäftigen. Hierzu gibt es eine sehr sehr ausführliche Commandref.
Es hilft nichts wenn hilfsbereite User Dir den Code vorkauen und Du es nicht verstanden hast.
Grüße
Zitat von: Bobsonbob am 05 September 2017, 08:57:30
Aber sobald ich "s12" als Bedingung mit in die DOIF eintrage, Inizialisiert die DOIF endlos.
so wie du das "beschreibst" würde ich denken, das das DOIF andauernd (wiederholend) initialisiert. wie auch immer du das festgestellt hast...
wenn ich mir die anderen kommentare und lösungsvorschläge so durchlese, würde ich eher vermuten, das dein DOIF nicht den Zustand "initialized" verlässt -> was wiederum bedeutet keine deiner Bedingungen wird erfüllt!
die lösung wird wohl sein den vorschlag von darkness und Beta-User zu kombinieren.
Ich danke denen, die mir bei meiner Frage eine Hilfreiche Antwortgegeben haben. Der Lösungsvorschlag von BetaUser hat mir weiter geholfen. Manchmal sieht man vor Wald die Bäume nicht. Da hilft es leider auch nichts, zum 100sten Mal in die Commandref zu schauen. Ich bin Anfänger und stelle eine Frage, weil ich echt nicht weiter weiss. Die abweisenden Bemerkungen kann man ja ignorieren ;D. Aber nochmal vielen Dank den lieben Usern, die mir hier weiter helfen. Cooles Forum. Vieeeelen Dank
Schön, dass es funktioniert hat; gut war, dass du ein List der beteiligten devices mitgeliefert hast, sonst wäre das evtl. noch lange so gegangen ;) .
Als Hilfestellung für zukünftige Probleme: Neben dem Blick in die Commandref ist bei konkreten Ereignissen immer auch ein Blick in den Event-Monitor hilfreich; da gibt es auch die Möglichkeit, ein notify (oder DOIF) direkt zu erstellen oder zu editieren. Damit geht es nach meiner Erfahrung am schnellsten, die Funktion scheint aber nicht sehr bekannt zu sein.
Btw.: m.E. wäre ein notify auf "PufferObenGed" völlig ausreichend, den Rest könnte man auch gut mit perl-code lösen. Das scheinst Du ja zu beherrschen, da auch eine perl-Funktion aufgerufen wird.
Hallo Beta-User,
Das mit dem Event-Monitor kenne ich noch nicht.
Werde ich mir aber später mal genau ansehen.
Du bist eine echte Bereicherung für dieses Forum.
Vielen lieben Dank vom
Perl-Spezi ;D ;D
https://wiki.fhem.de/wiki/Event_monitor
Bitte Gelöst nicht vergessen, wenn das Thema gelöst ist :)