[Gelöst] 2 DOIFs die sich gegenseitig beeinflussen

Begonnen von Wassergerd, 13 Mai 2019, 18:57:58

Vorheriges Thema - Nächstes Thema

Wassergerd

Hallo,
ich versuche mir "Ampeln" für meine zwei Garagen zu basteln.
Ziel: Bei geschlossenem Garagentor leuchtet der LED Streifen 10 Sekunden lang rot, bei komplett geöffnetem Tor für 15 Sekunden grün, bei einer Stellung dazwischen 35 Sekunden lang gelb.
Die Stellung der Tore überwache ich über an vier Kanäle eins HM-MOD-EM-8 angeschlossene Reedkontakte. Die "Ampeln" sind zwei als TASMOTA_DEVICE angelegte H801. Der HM-MOD-EM-8 gibt bei geschlossenem Reedkontakt eine "0" und bei geöffnetem Reedkontakt eine "1" über meine CCU2. Die Kontkte habe ich jeweild Garage1_geschl, Garage1_offen, Garage2_geschl und Garage2_offen genennt
Zur Zeit liegt die ganze "Ampel" als Testaufbau auf meinem Schreibtisch. Ich habe immer nur einen der beiden H801 in Betrieb.

Jetzt zu meinem Problem:
Habe ich z.B. den H801 für Garage 2 angeschlossen und öffne die Garage 1 leuchtet, für die im DOIF eingestellten 10 Sekunden, der LED Streifen von Garage 2 rot. Ebenso beim schließen der Garage 1. Umgekehrt habe ich das gleiche Problem. Also, wenn ich Garage 2 öffne/ schließe leuchtet für 10 Sekunden Garage 1 rot.
Hier die DOIFs:


define di_Ampel2 DOIF ([Garage2_geschl] eq "0" and [Garage2_offen] eq "1" )(set Garage2_Ampel cmd Color 1)(set Garage2_Ampel off) \
DOELSEIF \
([Garage2_geschl] eq "1" and [Garage2_offen] eq "1" )(set Garage2_Ampel cmd Color 7)(set Garage2_Ampel off)\
DOELSEIF \
([Garage2_geschl] eq "1" and [Garage2_offen] eq "0" )(set Garage2_Ampel cmd Color 2)(set Garage2_Ampel off)\
DOELSE \
(set Garage2_Ampel off)
attr di_Ampel2 do always
attr di_Ampel2 group Garage2
attr di_Ampel2 room Garage
attr di_Ampel2 wait 0,10:0,35:0,15

define di_Ampel1 DOIF ([Garage1_geschl] eq "0" and [Garage1_offen] eq "1" )(set Garage1_Ampel cmd Color 1)(set Garage1_Ampel off) \
DOELSEIF \
([Garage1_geschl] eq "1" and [Garage1_offen] eq "1" )(set Garage1_Ampel cmd Color 7)(set Garage1_Ampel off) \
DOELSEIF \
([Garage1_geschl] eq "1" and [Garage1_offen] eq "0" )(set Garage1_Ampel cmd Color 2)(set Garage1_Ampel off)\
DOELSE \
(set Garage1_Ampel off)
attr di_Ampel1 do always
attr di_Ampel1 group Garage1
attr di_Ampel1 room Garage
attr di_Ampel1 wait 0,10:0,35:0,15


Habt ihr irgend eine Idee was da schief gehen könnte?

Damian

Hast du eine Kreuzung in deiner Garage? Was hat die eine Garage mit der anderen zu tun?

Du hast nur Devicenamen angegeben z. B. [Garage2_geschl], damit wird auf jedes Event des Devices getriggert. Bei der Angabe [Garage2_geschl:state] wird dagegen nur auf Events von Status reagiert. Vielleicht ist das dein Problem.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

a: leuchtet nur der Streifen von Garage2 bei Garage1 oder beide?
b: ein List beider DOIF innerhalb der 10 Sekunden Leuchtdauer
c: was passiert, wenn du den Befehl set Garage2_Ampel cmd Color 7 manuell (Kommandozeile) absetzt?

d: wenn du die Reihenfolge der Abfragen änderst, kannst du Abfragen einsparen:
DOIF ([Garage2_geschl] eq "1" and [Garage2_offen] eq "1" ) (...) \
DOELSEIF ([Garage2_geschl] eq "1") (...)\
DOELSEIF ([Garage2_offen] eq "1" ) (...)\
DOELSE (...)

Wassergerd

Erst mal Danke für die Antworten und sorry für meine späte Rückmeldung. Ich war dienstlich etwas eingespannt.
@Damian [Garage2_geschl:state] brachte keine Veränderung. Außer das beide Garagen an einem HM-MOD-EM-8 hängen haben sie nix mit einander zu tun.

@Per
zu a: wenn ich die eine Garage öffne sehe ich im DOIF für die andere Garage sofort cmd_1_1 und auf der eigentlichen Garage SEHR kurz cmd_1_1 und dann cmd_2_1. D.h. es leuchten beide erst rot, die Garage bei der das Tor geöffnet wird schaltet auf color 7 (so in etwa gelb) um. Die "Ampel" für das nicht verwendete Tor leuchtet dann für die im "Wait" eingestellte Zeit und wird dann abgeschaltet.
zu b: was ist ein "List"?
zu c: wenn ich "set Garage2_Ampel cmd Color 7" (oder auch 1 oder 2) einschalte schaltet sich auch nur Garage 2 ein (bei Garage 1 auch nur Garage 1)

Wassergerd

Manchmal hilft es wenn man mal eine Zusammenfassung tippt.
Ich habe das Problem mit dem löschen des "do always" gelöst.
Vermutl. wurde das Ganze durch die gemeinsame Verwendung des HM-MOD-EM-8 getriggert.
Die jeweils andere Garage hat ihren korrekten zustand in der "Ampel" angezeigt

Per

Zitat von: Wassergerd am 15 Mai 2019, 15:55:34zu b: was ist ein "List"?
list Garage2_geschl
im cmd-Feld.
Ein Ausschnitt aus dem Eventlog wäre auch sinnvoll. Nicht das der HM-MOD-EM-8 zwei Signale abgibt.

DasQ

Zitat von: Wassergerd am 13 Mai 2019, 18:57:58
define di_Ampel2 DOIF ([Garage2_geschl] eq "0" and [Garage2_offen] eq "1" )(set Garage2_Ampel cmd Color 1)(set Garage2_Ampel off) \
DOELSEIF \
([Garage2_geschl] eq "1" and [?Garage2_offen] eq "1" )(set Garage2_Ampel cmd Color 7)(set Garage2_Ampel off)\
DOELSEIF \
([Garage2_geschl] eq "1" and [?Garage2_offen] eq "0" )(set Garage2_Ampel cmd Color 2)(set Garage2_Ampel off)\
DOELSE \
(set Garage2_Ampel off)
attr di_Ampel2 do always
attr di_Ampel2 group Garage2
attr di_Ampel2 room Garage
attr di_Ampel2 wait 0,10:0,35:0,15

define di_Ampel1 DOIF ([Garage1_geschl] eq "0" and [Garage1_offen] eq "1" )(set Garage1_Ampel cmd Color 1)(set Garage1_Ampel off) \
DOELSEIF \
([Garage1_geschl] eq "1" and [?Garage1_offen] eq "1" )(set Garage1_Ampel cmd Color 7)(set Garage1_Ampel off) \
DOELSEIF \
([Garage1_geschl] eq "1" and [?Garage1_offen] eq "0" )(set Garage1_Ampel cmd Color 2)(set Garage1_Ampel off)\
DOELSE \
(set Garage1_Ampel off)
attr di_Ampel1 do always
attr di_Ampel1 group Garage1
attr di_Ampel1 room Garage
attr di_Ampel1 wait 0,10:0,35:0,15

ich habs nicht ganz kapiert aber wenn du so pingpong (schneeball) spiel hast, kann es sein das die sich gegenseitig triggern. mit dem ? hab ichs bei mir wegbekommen.

p.s. da hats oberhalb des forum-eingabe-fenster an knobb mit ner raute # drauf. damit kannst du code besser einbauen
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Wassergerd

#7
@Per
noch mal danke für den "list" Tipp. (Das werde ich beim Fehlersuchen sicher noch mal brauchen  ;)) Der HM-MOD-EM-8 tut was er soll. Während der 10 sec. passiert hier nichts. Habs mit dem List auch genauso gesehen.
Es wurde nur das DOIF getriggert (woher auch immer).

Die Lösung war das Löschen des "do always"
Hab noch weitere Versuche gemacht. Wenn Garage1 ganz offen ist während Garage2 betätigt wird leuchtet es nicht 10 sec rot, sondern 15 sec grün. Bei Garage2_geschl 1 und Garage2_offen 1 (also während der Torfahrt) war es dann gelb.

@DasQ
was würde das "?" denn bedeuten? ???

Aber, wie auch immer, seitdem das "do always" weg ist, tut die "Ampel" was sie soll.
Jetzt muss ich "den ganzen Kram" nur noch in der Garage einbauen. Auf meinem Schreibtisch bringt das nicht soooo viel  ;D

Wassergerd

@DasQ
den Knopf für den Code hab ich beim ersten Post gesucht und erst nachdem ich [Gelöst] geschrieben hab gefunden.....

DasQ

Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Wassergerd


Per

Zitat von: Wassergerd am 16 Mai 2019, 17:47:54Die Lösung war das Löschen des "do always"
Das glaube ich nicht. Das ist vllt. ein Workaround, die Ursache muss aber tiefer liegen. Und die Fragezeichen im Vorschlag von DasQ machen auch nicht das, was sich der Autor wünscht. Im Gegenteil, hier rufen sie andere Reaktionen hervor.

Wassergerd

#12
ZitatDas glaube ich nicht. Das ist vllt. ein Workaround, die Ursache muss aber tiefer liegen. Und die Fragezeichen im Vorschlag von DasQ machen auch nicht das, was sich der Autor wünscht. Im Gegenteil, hier rufen sie andere Reaktionen hervor.
Hmmm. Also das "?" hab ich noch nicht reingebastelt.
Die readings des HM-MOD-EM-8 sind so wie sie sein sollen. (Packe da gerne noch mal den output des "List" hier rein sobald ich wieder Zuhause bin.)
Was aus meiner Sicht passiert ist, ist dass das DOIF für Garage1 getriggert wird sobald Garage2 betätigt wird. (Und umgekehrt) Garage1 zeigt also immer seinen aktuellen Zustand wenn Garage2 betätigt wird. (Und umgekehrt). Das tut das DOIF nicht mehr wenn das "do always" weg ist.
Für mich ist also die Frage jetzt: Was sorgt dafür dass das DOIF für Garage1 getriggert wird, wenn ich Garage2 betätige? (Und Umgekehrt)

Per

Zitat von: Wassergerd am 17 Mai 2019, 15:43:57Für mich ist also die Frage jetzt: Was sorgt dafür dass das DOIF für Garage1 getriggert wird, wenn ich Garage2 betätige? (Und Umgekehrt)
Für mich auch. Da kann ein Auszug vom Eventlog helfen und ein List beider DOIF kurz nach dem falschen Auslösen.