Problem mit Befehlszweig nach DOELSE

Begonnen von wk, 06 November 2017, 18:25:46

Vorheriges Thema - Nächstes Thema

wk

Hallo,
ich habe ein Problem mit einer Befehlsfolge nach DOELSE.

Mein Fußbodenheizungsstrang wird von einem Relais an einem Wemos D1 mini geschaltet.
Schicke ich einen Event an den Wemos, so schaltet er das Relais und schickt eine Bestätigung zurück.
Da es doch hin und wieder Funkstörungen gibt, prüfe ich nach 60 sec, ob die Bestätigung gekommen ist. Wenn nicht, wiederhole ich den Befehl. Wenn nach weiteren 10 sec noch keine Bestätigung da ist, gibt es einen Alarm über telebot auf mein Handy.
defmod EHz DOIF ([[$SELF:HAn]-[$SELF:HEn]])\
(set We_Ez event HzAn)\
{if ("[EHz:Hzstat]" ne "an") \
{fhem "set We_Ez event HzAn"}}\
{if ("[EHz:Hzstat]" ne "an") \
{fhem "set telebot send Esszimmerheizung!!!"}}\
DOELSE\
(set We_Ez event HzAus)\
{if ("[EHz:Hzstat]"  ne "aus") \
{fhem "set We_Ez event HzAus"}}\
{if ("[EHz:Hzstat]"  ne "aus") \
{fhem "set telebot send Esszimmerheizung!!!"}}\

attr EHz alias Esszimmer
attr EHz devStateIcon cmd_1.*:sani_heating@red:cmd_2 cmd_2.*|initialized:sani_heating@blue:cmd_1
attr EHz readingList HAn HEn Hzstat
attr EHz room ESPEasy,Heizung
attr EHz setList HAn:time HEn:time
attr EHz wait 0,60,10:0,60,10
attr EHz webCmd HAn:HEn
attr EHz webCmdLabel Anfang:Ende
attr EHz widgetOverride devStateIcon:textField-long


Das Einschalten funktioniert super. Die einzelnen Befehle cmd_1_1, cmd_1_2 und cmd_1_3 kommen zeitlich wie vorgesehen.
Das Problem ist das Ausschalten im Befehlszweig DOELSE. Es wird nur ein Befehl cmd_2 geschickt, der Rest wird ignoriert.
Ich habe schon alle meine Ideen ausprobiert mit Klammern, Strichpunkten usw.

Wer kann mir bitte auf die Sprünge helfen, wo der Knoten im Code (im Hirn?) liegt?

kumue

DOELSE kennt doch nur den Ausführungsteil/Befehle und prüft nicht auf Bedingungen, würde ich aufgrund von
define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)
behaupten...

wk

Die Prüfungen mache ich daher in Perl und nicht in Fhem. So funktioniert es auch im oberen Teil, denn es ist kein DOELSEIF.

Ellert

Für mich sieht die Definition gut aus.

Wie stellst Du fest, dass cmd_2_1 und cmd_2_2 nicht ausgeführt werden?

wk

man sieht es im Event monitor und auch an den Readings in der DOIF.

Ellert

#5
Könntest Du es nachvollziehbar aufzeichen und posten?

Und  noch einen Logbefehl in die einzelnen Sequenzen einbauen, vor dem if.

wk

Ich habe es von Perl weg geändert auf:

DOELSE
(set We_Ez event HzAus)
(IF ([EHz:Hzstat]  ne "aus") (set We_Ez event HzAus))
(IF ([EHz:Hzstat]  ne "aus") (set telebot send Esszimmerheizung!!!))


und jetzt geht es wie gewünscht.
Warum nicht gleich?

wk

Um die Unterschiede zu dokumentieren, habe ich noch einmal die alte Version eingespielt.

2017-11-07 09:36:22 DOIF EHz cmd_nr: 1
2017-11-07 09:36:22 DOIF EHz cmd_seqnr: 1
2017-11-07 09:36:22 DOIF EHz cmd: 1.1
2017-11-07 09:36:22 DOIF EHz cmd_event: set_cmd_1
2017-11-07 09:36:22 DOIF EHz cmd_1_1
2017-11-07 09:36:22 DOIF EHz wait_timer: 07.11.2017 09:37:22 cmd_1_2 set_cmd_1
2017-11-07 09:36:22 DOIF EHz Hzstat: an
2017-11-07 09:37:22 DOIF EHz wait_timer: no timer
2017-11-07 09:37:22 DOIF EHz cmd_nr: 1
2017-11-07 09:37:22 DOIF EHz cmd_seqnr: 2
2017-11-07 09:37:22 DOIF EHz cmd: 1.2
2017-11-07 09:37:22 DOIF EHz cmd_event: set_cmd_1
2017-11-07 09:37:22 DOIF EHz cmd_1_2
2017-11-07 09:37:22 DOIF EHz wait_timer: 07.11.2017 09:37:32 cmd_1_3 set_cmd_1
2017-11-07 09:37:32 DOIF EHz wait_timer: no timer
2017-11-07 09:37:32 DOIF EHz cmd_nr: 1
2017-11-07 09:37:32 DOIF EHz cmd_seqnr: 3
2017-11-07 09:37:32 DOIF EHz cmd: 1.3
2017-11-07 09:37:32 DOIF EHz cmd_event: set_cmd_1
2017-11-07 09:37:32 DOIF EHz cmd_1

2017-11-07 09:39:11 DOIF EHz cmd_nr: 2
2017-11-07 09:39:11 DOIF EHz cmd: 2
2017-11-07 09:39:11 DOIF EHz cmd_event: set_cmd_2
2017-11-07 09:39:11 DOIF EHz cmd_2
2017-11-07 09:39:12 DOIF EHz Hzstat: aus

Nach der Änderung sieht es so aus:

2017-11-07 09:42:56 DOIF EHz cmd_nr: 1
2017-11-07 09:42:56 DOIF EHz cmd_seqnr: 1
2017-11-07 09:42:56 DOIF EHz cmd: 1.1
2017-11-07 09:42:56 DOIF EHz cmd_event: set_cmd_1
2017-11-07 09:42:56 DOIF EHz cmd_1_1
2017-11-07 09:42:56 DOIF EHz wait_timer: 07.11.2017 09:43:56 cmd_1_2 set_cmd_1
2017-11-07 09:42:56 DOIF EHz Hzstat: an
2017-11-07 09:43:56 DOIF EHz wait_timer: no timer
2017-11-07 09:43:56 DOIF EHz cmd_nr: 1
2017-11-07 09:43:56 DOIF EHz cmd_seqnr: 2
2017-11-07 09:43:56 DOIF EHz cmd: 1.2
2017-11-07 09:43:56 DOIF EHz cmd_event: set_cmd_1
2017-11-07 09:43:56 DOIF EHz cmd_1_2
2017-11-07 09:43:56 DOIF EHz wait_timer: 07.11.2017 09:44:06 cmd_1_3 set_cmd_1
2017-11-07 09:44:06 DOIF EHz wait_timer: no timer
2017-11-07 09:44:06 DOIF EHz cmd_nr: 1
2017-11-07 09:44:06 DOIF EHz cmd_seqnr: 3
2017-11-07 09:44:06 DOIF EHz cmd: 1.3
2017-11-07 09:44:06 DOIF EHz cmd_event: set_cmd_1
2017-11-07 09:44:06 DOIF EHz cmd_1

2017-11-07 09:44:43 ESPEasy We_Ez event HzAus
2017-11-07 09:44:43 DOIF EHz cmd_nr: 2
2017-11-07 09:44:43 DOIF EHz cmd_seqnr: 1
2017-11-07 09:44:43 DOIF EHz cmd: 2.1
2017-11-07 09:44:43 DOIF EHz cmd_event: set_cmd_2
2017-11-07 09:44:43 DOIF EHz cmd_2_1
2017-11-07 09:44:43 DOIF EHz wait_timer: 07.11.2017 09:45:43 cmd_2_2 set_cmd_2
2017-11-07 09:44:43 DOIF EHz Hzstat: aus
2017-11-07 09:45:43 DOIF EHz wait_timer: no timer
2017-11-07 09:45:43 DOIF EHz cmd_nr: 2
2017-11-07 09:45:43 DOIF EHz cmd_seqnr: 2
2017-11-07 09:45:43 DOIF EHz cmd: 2.2
2017-11-07 09:45:43 DOIF EHz cmd_event: set_cmd_2
2017-11-07 09:45:43 DOIF EHz cmd_2_2
2017-11-07 09:45:43 DOIF EHz wait_timer: 07.11.2017 09:45:53 cmd_2_3 set_cmd_2
2017-11-07 09:45:53 DOIF EHz wait_timer: no timer
2017-11-07 09:45:53 DOIF EHz cmd_nr: 2
2017-11-07 09:45:53 DOIF EHz cmd_seqnr: 3
2017-11-07 09:45:53 DOIF EHz cmd: 2.3
2017-11-07 09:45:53 DOIF EHz cmd_event: set_cmd_2
2017-11-07 09:45:53 DOIF EHz cmd_2


Warum es mit Perl-Befehlen nur im ersten Zweig funktioniert und nicht im DOELSE-Zweig kann ich nicht sagen. Aber vielleicht hilft diese Erkenntnis etwas weiter.
Auf die Lösung mit dem Fhem-IF innerhalb des DOIF bin ich gestern durch den Thread "https://forum.fhem.de/index.php/topic,78705.msg706620.html#msg706620" gekommen.

Vielen Dank an Euch Alle.