MQTT2_SERVER ignoreRegexp nur zwei MAC Adressen durchlassen

Begonnen von Stelaku, 16 September 2022, 17:44:44

Vorheriges Thema - Nächstes Thema

Stelaku

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/present
mein 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





Beta-User

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-elitedesk@Debian 12, 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

Stelaku

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



Beta-User

Dann pack doch da einfach diese weitere Zeile in der readingList dazu:ble2mqtt/[^/]+/present {}
Server: HP-elitedesk@Debian 12, 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

DetlefR

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

rudolfkoenig

ZitatEs 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.

Stelaku

#6
Vielen dank für eure Antworten

@Beta-User
ZitatDann 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

Beta-User

#7
Zitat von: Stelaku am 16 September 2022, 21:13:18
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...
Server: HP-elitedesk@Debian 12, 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

PatrickR

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

Stelaku

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