Autor Thema: MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen  (Gelesen 535 mal)

Offline Stelaku

  • Full Member
  • ***
  • Beiträge: 211
MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen
« am: 16 September 2022, 17:44:44 »
Hallo alle zusammen
Ich beisse mir schon seit mehreren Tagen die Zähne aus einen passenden ignoreRegexp zu finden um eine vielzahl von topics die z.b so aussehen
Anzeige unter MQTT traffic in FHEM
ble2mqtt/7C_3F_80_C3_A2_63/present
davon kommen dann mit unter mehr als 20 verschieden MAC Adressen rein.
Es hat schon ein paar tage gebraucht bis ich herausgefunden habe das der in FHEM traffic angezeigte topic nicht ganz der richtige ist wie er gesendet wird.
Denn unter einen anderen MQTT Explorer wird mir der o.g. topic so angezeigt
ble2mqtt/7C:3F:80:C3:A2:63/presentmein erster Ansatz war es jetzt ganz stumpf einfach alle nicht gewollten MAC Adressen in ignoreRegexp der reiche nach einzutragen sind ja nur 20  :).
ungefähr so
attr attr MQTT2_FHEM_Server ignoreRegexp ble2mqtt/7C:2F:80:C3:A2:63/present|ble2mqtt/7D:E7:EF:D5:0C:F5|ble2mqtt/70:98:45:24:D9:04...usw.
was erstmal zu einen extrem langen attr. geführt hat und natürlich nicht alle  ungewollten MAC Adressen erfassen kann rgentwo kommt immer wieder eine Adresse durch die nicht gewollt ist.

meine zwei topics die in FHEM durchkommen sollen sehen so aus.
ble2mqtt/7C:2F:80:C3:A2:63
ble2mqtt/7C:2F:80:B2:2F:8E
Mein Regex Versuch der nicht so richtig alles rausfilter sieht so aus.
ble2mqtt\/[^7]
Leider kommen da naturlich noch alle MAC adressen mit durch die z.b 70: als erste Zahl haben.
Ich habe auch versucht einfach alle Ziffern zu negieren was aber auch nicht zum Erfolg führte
ble2mqtt\/[^7][^C]:[^2][^F]:[^8][^0]:[^C][^3]:[^A][^2]:[^6][^3]
habt Ihr vieleicht noch eine Idee wie ich das hinbekommen kann.

Viele Grüsse

Stephan





Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19338
Antw:MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen
« Antwort #1 am: 16 September 2022, 18:38:20 »
Ich würde das vermutlich nicht über ignoreRegexp lösen, sondern (etwas weniger effzient, aber einfacher zu pflegen) über "Erdungs"-Topics in einem der MQTT2_DEVICE-Instanzen, die du dafür vermutlich angelegt hast.

Der Spur nach so:
ble2mqtt/[^/]+/present {}
ble2mqtt/7C_3F_80_C3_A2_63/present 7C_3F_80_C3_A2_63
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline Stelaku

  • Full Member
  • ***
  • Beiträge: 211
Antw:MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen
« Antwort #2 am: 16 September 2022, 19:38:00 »
Hallo Beta-User
Ich habe ein MQTT2_DEVICE in der ich die beiden G-Tags mit den dazugehörigen topics auswerte.
Das funktioniert auch ohne Probleme
hier die raw von dem Device
defmod G_TAGS MQTT2_DEVICE
attr G_TAGS IODev MQTT2_FHEM_Server
attr G_TAGS event-on-change-reading .*
attr G_TAGS readingList ble2mqtt/7C_2F_80_C3_A2_63/present:.* { $EVENT ? {G_TAG1=>'present'} : {G_TAG1=>'absent'} }\
ble2mqtt/7C_2F_80_B2_2F_8E/present:.* { $EVENT ? {G_TAG2=>'present'} : {G_TAG2=>'absent'} }
attr G_TAGS room MQTT2_DEVICE
attr G_TAGS stateFormat GTag1     G_TAG1\
<br>\
GTag2     G_TAG2

setstate G_TAGS GTag1     present\
<br>\
GTag2     present

Ich stehe mit MQTT noch vollkomen am Anfang und freue mich über alle Erfolge die dank MQTT2_SERVER auch nicht so schwer sind.
mir geht es, vieleicht auch vollkommen unbegründet, darum die anderen völlig überflüssigen Topics aus FHEM rauszuhalten um so wenig wie möglich trafic in Fhem zu haben.
Kann auch sein das ich mir darüber unbegründet gedanken mache. Und das der Systemlast nichts ausmacht. Hab da noch keine Erfahrung mit.
Wollte nur nicht gleich von anfang an mit MQTT alles zu spammen.

Gruß

Stephan



Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19338
Antw:MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen
« Antwort #3 am: 16 September 2022, 20:07:29 »
Dann pack doch da einfach diese weitere Zeile in der readingList dazu:ble2mqtt/[^/]+/present {}
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline DetlefR

  • Full Member
  • ***
  • Beiträge: 297
Antw:MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen
« Antwort #4 am: 16 September 2022, 20:09:38 »
Hallo Stephan,

ich weiß nicht, was du als ble2mqtt benutzt. Aber bei den Varianten die ich bisher getestet habe, gab es so etwas wie eine Whitelist in die man die gewünschten MAC Adressen eintragen konnte.
Das verhindert unnötigen Traffic gleich am Ursprung.

Gruß
Detlef

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 25828
Antw:MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen
« Antwort #5 am: 16 September 2022, 20:24:47 »
Zitat
Es hat schon ein paar tage gebraucht bis ich herausgefunden habe das der in FHEM traffic angezeigte topic nicht ganz der richtige ist wie er gesendet wird.
Liegt wohl an dieser Diskussion: https://forum.fhem.de/index.php?topic=96608
Da meine eigenen Argumente von damals mich inzwischen nicht mehr ganz ueberzeugen, habe ich diese Konvertierung jetzt abschaltbar gemacht, mit dem topicConversion Attribut.

Offline Stelaku

  • Full Member
  • ***
  • Beiträge: 211
Antw:MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen
« Antwort #6 am: 16 September 2022, 21:13:18 »
Vielen dank für eure Antworten

@Beta-User
Zitat
Dann pack doch da einfach diese weitere Zeile in der readingList dazu:
habe ich gemacht
defmod G_TAGS MQTT2_DEVICE
attr G_TAGS IODev MQTT2_FHEM_Server
attr G_TAGS event-on-change-reading .*
attr G_TAGS readingList ble2mqtt/7C_2F_80_C3_A2_63/present:.* { $EVENT ? {G_TAG1=>'present'} : {G_TAG1=>'absent'} }\
ble2mqtt/7C_2F_80_B2_2F_8E/present:.* { $EVENT ? {G_TAG2=>'present'} : {G_TAG2=>'absent'} }\
ble2mqtt/[^/]+/present {}
attr G_TAGS room MQTT2_DEVICE
attr G_TAGS stateFormat GTag1     G_TAG1\
<br>\
GTag2     G_TAG2

setstate G_TAGS GTag1     present\
<br>\
GTag2     present
setstate G_TAGS 2022-09-16 20:45:07 G_TAG1 present
setstate G_TAGS 2022-09-16 20:45:07 G_TAG2 present
setstate G_TAGS 2022-09-16 17:50:13 IODev MQTT2_FHEM_Server
setstate G_TAGS 2022-09-16 17:52:13 lastseen 2022-09-16 17:52:13
setstate G_TAGS 2022-09-16 17:52:13 state present
Das scheint aber nichts daran zu ändern das ich im MQTT trafic immer noch alle anderen topic mit angezeigt bekomme.
das sind die topics von gerade mal 2 Sekunden. Sehr redselig das mqtt2ble Programm.

Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7C_2F_80_B2_2F_8E/rssi -94
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/D0_BB_81_DA_C8_DE/rssi -72
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7C_2F_80_B2_2F_8E/rssi -78
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/1B_23_90_24_5A_5A/lastseen 1113354125
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/1B_23_90_24_5A_5A/present 1
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7C_2F_80_B2_2F_8E/lastseen 1113354125
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7C_2F_80_B2_2F_8E/present 1
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/A0_9E_1A_97_73_5E/lastseen 1113354121
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/A0_9E_1A_97_73_5E/present 1
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7C_2F_80_C3_A2_13/rssi -11
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7C_2F_80_C3_A2_13/lastseen 1113354121
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7C_2F_80_C3_A2_13/present 1
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/E0_5E_1C_82_14_28/lastseen 1113354121
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/E0_5E_1C_82_14_28/present 1
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/C8_B2_1E_CC_7D_7D/lastseen 1113354127
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/C8_B2_1E_CC_7D_7D/present 1
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/D0_BB_81_DA_C8_DE/rssi -83
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/D0_BB_81_DA_C8_DE/lastseen 1113354127
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/D0_BB_81_DA_C8_DE/present 1
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/heartbeat 1113354127
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7C_2F_80_C3_A2_13/rssi -80
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/00_CC_41_31_28_BD/lastseen 1113354131
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/00_CC_41_31_28_BD/present 1
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7A_1C_71_B9_4B_E8/lastseen 1113354131
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7A_1C_71_B9_4B_E8/present 1
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7A_3E_9E_9C_9D_D8/lastseen 1113354131
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/7A_3E_9E_9C_9D_D8/present 1
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/D0_BB_81_DA_C8_DE/rssi -72
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/C8_B2_1E_CC_7D_7D/rssi -72
Net__MQTT__Simple_RNXSHRYRLJ_ ble2mqtt/C8_B2_1E_CC_7D_7D/rssi -87

@Detlef

Ich teste das perl Programm was von PatrikR aus diesem thread bereitgestellt wird.

https://forum.fhem.de/index.php/topic,127173.msg1223941.html#msg1223941


Leider habe ich in den Programm so weit wie ich das mit meinen doch sehr beschränkten perl
Kenntnissen gesehen habe keine möglichkeit, eine white list einzufügen, gefunden.Ich würde es auch als Beste Lösung betrachten
die topics gleich am Ursprung zu begrenzen.

Viele Grüsse

Stephan
« Letzte Änderung: 16 September 2022, 21:23:41 von Stelaku »

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19338
Antw:MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen
« Antwort #7 am: 16 September 2022, 21:23:01 »
Das scheint aber nichts daran zu ändern das ich im MQTT trafic immer noch alle anderen topic mit angezeigt bekomme.
Grundsätzlich macht MQTT2_SERVER auch nichts anderes wie andere Server: Er leitet weiter, was er bekommt, auch ignoreRegexp führt nur dazu, dass das nicht mehr an die Clients weiterverteilt wird. Der Verkehr ist und bleibt aber da. Meine Zeile bewirkt dann halt nur bei Weiterleitung, dass es einen Client gibt, der dann nichts mit der Info anfängt....

Von daher ist das "Abgewöhnen an der Quelle" immer der bessere Weg.

Es gibt übrigens mit OpenMQTTGateway noch eine Lösung für BT-Erkennung; diese firmware kann whitelisting, aber vermutlich kann das wieder nicht in die Ortsbestimmungslösung aus dem anderen Thread verwendet werden...
« Letzte Änderung: 16 September 2022, 21:24:49 von Beta-User »
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline PatrickR

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 965
Antw:MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen
« Antwort #8 am: 17 September 2022, 00:17:26 »
Mahlzeit!

Auch wenn ich MQTT2_SERVER nicht einsetze, was wäre denn mit Negative Lookahead (https://perldoc.perl.org/perlre#Extended-Patterns), in etwa:

attr gedoens ignoreRegexp ble2mqtt/(?!(7C:2F:80:C3:A2:63|7C:2F:80:B2:2F:8E)):

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Offline Stelaku

  • Full Member
  • ***
  • Beiträge: 211
Antw:MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen
« Antwort #9 am: 17 September 2022, 09:30:55 »
Moin Patrick

genau das hatte ich  gesucht. Ein Regex auf meine beiden MAC Adressen die dann einfach negiert werden.
Und so funktioniert es dann auch im MQTT2_SERVER mit ingnoreRegexp

ble2mqtt\/(?!(7C:2F:80:C3:A2:73|7C:2F:80:B2:2F:7E))

Vielen dank euch allen für die hilfe.

Jetzt juckt es mir nur noch in den Fingern das Skript von Patrick genauer zu verstehen um dort
vieleicht eine kleine wihtelist einzufügen. Damit an der Quelle nur das gesendet wird was ich brauche.

Viele Grüsse

Stephan