[Gelöst] - EIB - Device triggert 2 Events bei Bedienung über FHEMWEB

Begonnen von ZeitlerW, 22 Dezember 2015, 15:44:22

Vorheriges Thema - Nächstes Thema

ZeitlerW

Hallo zusammen,




Die Lösung des Problems ist hier beschrieben:

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



Andi291

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

ZeitlerW

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

Andi291

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?

ZeitlerW

#4
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

Andi291

Hallo Wolfgang,

zuerst - was ist das?
encode: no model defined for EIB_7707. Replaced with DPT1.

Um Deinem Problem näher zu kommen - bitte trotzdem mal getG und setG aktivieren, und in ein gemeinsames File loggen lassen.

Grüße, Andi

ZeitlerW

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/1

Attribut EIBreadingX aktivieren. Damit werden zusätliche Readings für gesendete und empfangene EIB - Telegramme erzeugt.
attr lamp1 EIBreadingX 1

Attribut 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