[Gelöst] Fhem2Fhem - excludeEvents - Negieren

Begonnen von kurt6908, 20 Oktober 2019, 08:34:22

Vorheriges Thema - Nächstes Thema

kurt6908

Hallo,

ich habe ein kleines Problem und brächte Unterstützung.

Ich habe in meiner Garage einen DuoFern-Garagentoröffner mittels Fhem2Fhem an meine Fhem-Installation im Haus angebunden. So weit so gut und es funtkioniert alles.

Nun habe ich bei Fhem2Fhem mittels "addStateEvent" auch erreicht, dass der Status des lokalen Dummies dem Status des entfernten Gerätes entspricht. Nun werden jedoch auch Schaltbefehle des entfernten Gerätes als "Status" im dortigen Log eingetragen, jedoch nicht korrekt im Dummy.

Ich könnte nun über "excludeEvents" die "falschen Status" (z.B. getStatus) rausselektieren, in Summe sind es aber mehr als die "richtigen" (z.B. openend und closed).

Kann man nun in "excludeEvents" auch eine negative Ausschlussliste hinterlegen?
z.B.:
excludeEvents = (?:.*Garage_Tor.opened)&(?:.*Garage_Tor.closed)

oder muss ich wirklich jedes auszuschließendes Event angeben
z.B.:
excludeEvents = (.*Garage_Tor.getStatus)|(.*Garage_Tor.xxx1)|(.*Garage_Tor.xxx2)|......

Bis dato habe ich nicht die richtige Regex gefunden, die es erlaubt, die kleinere negative Ausschlußliste zu produzieren.

Für Eure Unterstützung schon mal herzlichen Dank.

Gruß

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

rudolfkoenig

Ich fuerchte ich habe das Problem nicht verstanden, dafuer braeuchte ich 2 demo-fhem.cfg mit trigger zum Nachstellen.

excludeEvents wird als
      next if($excl && ($rname =~ m/^$excl$/ || "$rname:$msg" =~ m/^$excl$/));ausgefuehrt, mit $rname als Name der Remote-Geraetes, und $rmsg als Nachricht.

Wenn ich damit Probleme haette wuerde ich:
- als erstes die genauen Events aufschreiben, am besten aus telnet mit "inform onWithState", Notfalls mit dem Event-Monitor.
- diese in der FHEM-Kommandozeile testen mit
{ "Garage_Tor:getStatus" =~ m/^(?:.*Garage_Tor.opened)&(?:.*Garage_Tor.closed)$/ }Es gibt auch nette Regexp-Tester im Internet, mit mehr Erklaerung und Hilfe.

ABER:
- der Regexp tut vmtl. nicht das, was man beabsichtigt, insb. ist & kein _UND_ Operator. Weiterhin komplizieren ?: und die Klammern das Ganze unnoetig
- man sollte keine "Ausnahme von der Ausnahme" (excludeEvents ist ja sowas) bauen, sondern die Positivliste (das was in der Definition hinter LOG: steht) passend setzen.
- eine Formulierung wie "bei Garage nur open, sonst alles" sollte auch darueber gehen, sowas kriege ich aber nicht aus den Finger geschuettelt. Ich wuerde fuer sowas zwei FHEM2FHEM Verbindungen aufmachen, und nicht stundenlang am Regexp basteln.

kurt6908

Hallo,

vielen Dank für die schnelle Rückmeldung.

Ich glaube, Du hast es schon verstanden, was ich benötige: eine Ausnahme von der Ausnahme ;=)

als Text mal:

Liebes Fhem2Fhem exclude Events, und zwar alle, die nicht "openend" und nicht "closed" sind.

Vielleicht wäre es auch anders herum möglich:

Liebes Fhem2Fhem addState Event, und zwar nur "openend" oder "closed", alle anderen ignoriere als State.

Aktuell bekomme ich bei den "falschen" State-Events folgende Fehlermeldung

Zitat
2019.10.20 10:25:45 3: setreading dy_Garage_Tor set_down : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.

2019.10.20 10:25:45 3: notify_dy_Garage_Tor return value: Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.

bei folgenden notify:

ZitatGarage_Tor { $EVENT=~s/://; fhem("setreading dy_Garage_Tor $EVENT") }

"set_down" oder auch "set_up" sind solchen falchen State-Events, die ich gerne durch den excludeEvents ausschließen möchte. Einzelne gehen ja auch, aber die Liste der falschen ist länger, so dass ich eben nur "openend" und "closed", die den obigen Fehler nicht produzieren, durchlassen möchte.

Oder warum reagiert Fhem2Fhem bei "opened" und "closed" anders als bei "set_down" oder "getStatus" ?

Viele Grüße

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

rudolfkoenig

Hast Du schon versucht ein dummy mit identischem Namen zu definieren?
FHEM2FHEM sollte in diesem Fall die Aufgabe der notify uebernhemen.

kurt6908

Hallo,

vielen Dank :=)

Kleiner Hinweis, kurzer rename und große Wirkung ... jetzt funktioniert es mit allen "states", keine Fehlermeldung mehr und der state wird richtig gesetzt.

Trotz Wiki und Forum wäre ich auf diese Lösung nicht gekommen, ich habe immer den Weg über einen eigenen notify gesucht.

Vielen Dank nochmal.

Gruß

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger