Hallo zusammen,
Die Lösung des Problems ist hier beschrieben:
http://forum.fhem.de/index.php/topic,46048.msg380372.html#msg380372 (http://forum.fhem.de/index.php/topic,46048.msg380372.html#msg380372)
ich habe da ein seltsames Phänomen:
Wenn ich ein EIB - Device über die WEB - Oberfläche bediene, so werden 2 Events ausgelöst. Hier ein Codeschnipsel zum Nachvollziehen:
define test EIB 7/7/7
attr test IODev KNX
attr test model dpt1
define di_test DOIF ([test] eq "on")\
({Log(3, "on")})\
DOELSEIF ([test] eq "off")\
({Log(3, "off")})\
DOELSE\
({Log(3, "sonstwas")})
attr di_test do always
Wenn ich mir dann das Logfile ansehe kommt so etwas raus:
2015.12.22 15:35:59 3: on
2015.12.22 15:35:59 3: on
2015.12.22 15:36:00 3: off
2015.12.22 15:36:01 3: off
Wenn ich allerdings über die ETS den Gruppenmonitor ansehe, erscheint am BUS nur jeweils ein Telegramm.
Wenn ich dann über die ETS einen Befehl absetze, so wird das DOIF nur einmal getriggert.
Vielleicht kann sich jemand (Andi ? ::) ) das Thema mal ansehen?
lG
Wolfgang
Hallo Wolfgang,
mir ist so, als hätten wir das schonmal wo diskutiert. Wenn ich mich recht entsinne, ist das quasi das echo auf dem Bus.
Aktiver mal setG / getG. Dann müsste vor dem ersten Log-Eintrag ein set, vor dem zweiten ein get auftauchen.
Grüße, Andi
Hallo Andi,
ja das ist so. Das stört natürlich ein wenig bei Logiken. Ggf könnte man ja Telegramme von der eigenen Physikalischen Adresse schon im TUL unterdrücken. Problematisch wird dies aber wenn z.b. an einem EIBD mehrere Instanzen hängen.
Ich bin mir nicht sicher, welche Änderungen smurfix im KNXD eingeführt hat. Der EIBD im IP - Inteface - Modus hat als Physikalische Adresse immer die 0.0.0
lG
Wolfgang
Hallo Wolfgang,
nicht unbedingt...
wenn Du auf das get-Reading gehst, ist es eindeutig. Genau deshalb hat das ein user vorgeschlagen. Dieser wollte im übrigen explizit KEINE Ausfilterung der eigenen Nachrichten (ich auch nicht), weil es einfach so nicht stimmen würde...
Kommst Du damit klar?
Hallo Andi,
leider hat sich die Situation mit GetG1 verschlimmbessert:
2015.12.25 10:12:17 3: off
2015.12.25 10:12:17 3: off
2015.12.25 10:12:17 3: EIB encode: no model defined for EIB_7707. Replaced with DPT1.
2015.12.25 10:12:18 3: on
2015.12.25 10:12:18 3: on
2015.12.25 10:12:18 3: on
2015.12.25 10:12:19 3: EIB encode: no model defined for EIB_7707. Replaced with DPT1.
2015.12.25 10:12:19 3: off
Zur Erklärung:
1. Logeintrag: Ich habe set on gemacht, es kommen erst mal 2 off Events.
5. Logeintrag: Ich habe set off gemacht, es kommen erst mal 2 on Events.
Fragen über Fragen :(
lG
Wolfgang
Hallo Wolfgang,
zuerst - was ist das?
encode: no model defined for EIB_7707. Replaced with DPT1. (//http://encode:%20no%20model%20defined%20for%20EIB_7707.%20Replaced%20with%20DPT1.)
Um Deinem Problem näher zu kommen - bitte trotzdem mal getG und setG aktivieren, und in ein gemeinsames File loggen lassen.
Grüße, Andi
Hallo Andi,
zu:
EIB encode: no model defined for EIB_7707. Replaced with DPT1.Da hatte ich ein 2. Device mit der gleichen KNX - Adresse definiert. ... Sorry für die Konfusion.
Zum eigentlichen Problem:
Ja klar es werden SetG1 und GetG1 gesetzt. Mein Denkfehler war, daß DOIF ja sowohl bei einem Update von SetG1 als auch bei GetG1 getriggert wird und damit 2 mal durchlaufen wird.
Meine Abhilfe: Attribut event-on-update-reading GetG1 setzen.
Damit ergibt sich folgender Code:
define test EIB 7/7/7
attr test EIBreadingX 1
attr test IODev KNX
attr test event-on-update-reading getG1
attr test model dpt1
define di_test DOIF ([test] eq "on")\
({Log(3, "on")})\
DOELSEIF ([test] eq "off")\
({Log(3, "off")})\
DOELSE\
({Log(3, "sonstwas")})\
attr di_test do always
... Man muß halt an das Verhalten der eigenen BUS- Echos denken.
Könnte jemand, der einen WIKI - Account hat dazu einen kurzen Eintrag machen:
Unterdrückung der Events eigener BUS - Echos Werden KNX/EIB Devices aus FHEM gesetzt (z.B. durch Bedienung an FHEM - Web oder mit set - Befehl) werden diese immer 2 mal verarbeitet:
- Beim set - Befehl
- Beim Erscheinen des Befehls am KNX - Bus
Es werden also auch 2 Events in FHEM ausgelöst.
Dies ist manchmal bei der Weiterverarbeitung z.B. mit DOIF oder notify ein Problem.
Dies kann wie folgt vermieden werden:
EIB - Device anlegen:
define lamp1 EIB 0/1/1Attribut EIBreadingX aktivieren. Damit werden zusätliche Readings für gesendete und empfangene EIB - Telegramme erzeugt.
attr lamp1 EIBreadingX 1Attribut event-on-update-reading für GetG1 aktivieren. Damit wird nur ein Event erzeugt, wenn vom Bus ein Telegramm kommt. Das set - Telegramm (durch FHEM - WEB oder set - Befehl) erzeugt damit keinen Event mehr.
attr lamp1 event-on-update-reading getG1
lG
Wolfgang