ble2mqtt - Bluetooth Anwesenheitserkennung

Begonnen von drhirn, 07 April 2022, 13:45:09

Vorheriges Thema - Nächstes Thema

PatrickR

#90
Neue Version: 0.09

  • Erweitertes Debugging
  • Code Cleanup

/Edit: Anhang entfernt. Neue Version siehe unten.

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

hubiuwe

Hallo zusammen

ble2mqtt ist ja ein toller Ansatz ;D, find ich toll und habe es gleich getestet.
Funktioniert bei mir. Bis auf den Batteriestatus, ich habe einen G-Tag.
Mit lepresenced kommt der Batteriestatus an.

Übrigens CPAN hatte bei mir nicht funktioniert, ich musste "make" nach installieren.
zu den APT Paketen sollte also noch "make" ergänzt werden.
apt-get install bluez libexpect-perl libnet-server-perl libreadonly-perl make
Die beste Automatik ist die, die man abschalten kann!

PatrickR

Hi!

Zitat von: hubiuwe am 20 Januar 2023, 17:22:33
Funktioniert bei mir. Bis auf den Batteriestatus, ich habe einen G-Tag.
Mit lepresenced kommt der Batteriestatus an.
Kannst Du mal ein Debug-Log erstellen?

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

Wernieman

#93
Erstmal .. netter Ansatz und Danke für die Mühe ..

-- wieder gelöscht, da Problem vor dem Bildschirm saß --

Es hätte nicht jemand den Code, um für jedes "MAC-Device" ei8n eigenes Reading zu haben?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Lehmi54

Hallo Patrick,
Die Lösung ist für mich perfekt, herzlichen Dank für Deine Mühe!
Ich habe 3 Raspis mit ble2mqttd und 3 G-Tags und MQTT2-Server auf dem Raspi 4, sowie die dazugehörigen 9 MQTT2_DEVICEs für Presence.
Funktioniert, was die Presence angeht, tadellos.
Starte ble2mqttd über Service und Konfig-Datei.
Ich mußte für die Batteriewerte die vollständigen MAC-Adressen im Filter angeben,
mit .* war da nichts. Logisch gatttool braucht halt die mac.
Habe aber das gleiche Problem, wie hubiuwe, keine oder unzuverlässigen (unknown) Batteriewerte.
Am Raspi 4 und 2 keine Werte, beim Zero W mal eins, zwei, nie die 3 Batteriewerte der G-Tags nach dem restart.
Habe mal testweise in Zeile 353 des Scripts die Abfrage nach dem Batterieservice " && $devices{$mac}{'batteryservice'} " entfernt.
Nach dem restart des ble2mqttd-Services funktioniert die Batterieabfrage für alle 3 G-Tags auf allen 3 Raspis bis jetzt.
Bin mir ehrlicherweise nicht so richtig über die Konsequenzen meiner Änderung im Klaren, einfach zu wenig Programmierwissen.
Viele Grüße
Uwe
2x Raspberry 4 und 3 - FHEM 6.2
z-wave Netzwerk, SIGNALduino

PatrickR

Hi!

Zitat von: Lehmi54 am 23 Januar 2023, 12:37:22
Ich mußte für die Batteriewerte die vollständigen MAC-Adressen im Filter angeben,
mit .* war da nichts. Logisch gatttool braucht halt die mac.
Hmm eigentlich sollte das nicht nötig sein. ble2mqttd schaut, welche Geräte vorbeikommen (und den Filter matchen, sofern gesetzt) und zusätzlich den Battery Service anbieten.

Zitat von: Lehmi54 am 23 Januar 2023, 12:37:22
Habe aber das gleiche Problem, wie hubiuwe, keine oder unzuverlässigen (unknown) Batteriewerte.
Am Raspi 4 und 2 keine Werte, beim Zero W mal eins, zwei, nie die 3 Batteriewerte der G-Tags nach dem restart.
Da ich das aktuell bei mir nicht rekonstruiert bekomme: Wie genau äußert sich das? Verstehe ich das richtig, dass immer ein Teil Deiner 3 Tags Werte liefert und nach einem Neustart ein anderer Teil? Wenn ein Tag einen Wert liefert, klappt es dann bei diesem Tag immer während einer "Session", d. h. ohne Neustart?

Zitat von: Lehmi54 am 23 Januar 2023, 12:37:22
Habe mal testweise in Zeile 353 des Scripts die Abfrage nach dem Batterieservice " && $devices{$mac}{'batteryservice'} " entfernt.
Nach dem restart des ble2mqttd-Services funktioniert die Batterieabfrage für alle 3 G-Tags auf allen 3 Raspis bis jetzt.
Bin mir ehrlicherweise nicht so richtig über die Konsequenzen meiner Änderung im Klaren, einfach zu wenig Programmierwissen.
Naja, es gibt zwei mögliche Konsequenzen: Es werden je nach MAC-Filter auch Geräte gefragt, die den Service nicht anbieten, ggf. mit Timeouts. Während der Abfrage wird nicht gescannt, d. h. es könnte sein, dass PRESENCE auf absent geht. Die zweite Konsequenz könnte sein, dass die Tags nicht antworten, weil die Abfrage auf einen Standardwert zurückfällt. Wenn Du einen engen MAC-Filter gesetzt hast, könnte man ggf. damit leben.

Ich baue bei Gelegenheit mal eine Debug-Version, um das Problem weiter einzugrenzen.

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

PatrickR

#96
@Lehmi54, hubiuwe:
Testversion (0.09dev) für das Batterieproblem.

ble2mqttd versucht nun so lange den Tag zu erkennen (inkl. Battery Service), bis es klappt. Wenn es funktioniert müsste ich es noch etwas optimieren.

Patrick

/Edit: Datei entfernt, da überholt
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

Lehmi54

Hi,
Du bist so fix!!! Danke
habe die dev Version installiert. Aller 6s sucht er noch verzweifelt nach dem ...AE
Jan 23 16:59:11 Raspi2-Kelller-XXX ble2mqttd: main::query_task: Executing query task, 1 items in queue, querying 7C:2F:80:XX:XX:AE, zumindest hat er die anderen 2 Gefunden, wenn auch mit dem Wert "unknown".
Nach ca. 10 min nach dem AE suchen, hat er aufgegeben
pi@Raspi2-Kelller-135:~ $ gatttool -b 7C:2F:80:XX:XX1:AE -t public --char-read --uuid=0x2a19
handle: 0x001b   value: 4b

bietet allerdings den richtigen Wert.
Habe 3x hintereinande gatttool gestartet mit völlig unterschiedlichen Ergebnissen.
pi@Raspi2-Kelller-135:~ $ sudo service ble2mqttd restart
pi@Raspi2-Kelller-135:~ $ gatttool -b 7C:2F:80:XX:XX:CF -t public --char-read --uuid=0x2a19
connect to 7C:2F:80:95:56:CF: Function not implemented (38)
pi@Raspi2-Kelller-135:~ $ gatttool -b 7C:2F:80:XX:XX:CF -t public --char-read --uuid=0x2a19
connect to 7C:2F:80:95:56:CF: Transport endpoint is not connected (107)
pi@Raspi2-Kelller-135:~ $ gatttool -b 7C:2F:80:XX:XX:CF -t public --char-read --uuid=0x2a19
handle: 0x001b   value: 2f

Besuch kommt gerade...
Viele Grüße
Uwe
2x Raspberry 4 und 3 - FHEM 6.2
z-wave Netzwerk, SIGNALduino

hubiuwe

Hallo PatrickR
Mit der neuen Version sieht es schon besser aus jetzt kommt auch das MQTT-Toppic "battery" vorbei, welches ich vorher ja garnicht gesehen habe.
Ich habe im MAC Filter die komplette MAC und auch mal einen REGEX versucht, es funktionierte beides.
Die Logfiles kommen per PN.

Das Battery- und batterytime reading kommen jetzt auch bei Fhem an. ;D ;D ;D.

Vielen Dank für die Mühen.
Die beste Automatik ist die, die man abschalten kann!

PatrickR

Hi!

Zitat von: Lehmi54 am 23 Januar 2023, 17:15:01
Nach ca. 10 min nach dem AE suchen, hat er aufgegeben
Wenn er aufhört ist der Tag entweder absent oder die Abfrage hat funktioniert.

Zitat von: Lehmi54 am 23 Januar 2023, 17:15:01
Habe 3x hintereinande gatttool gestartet mit völlig unterschiedlichen Ergebnissen.
pi@Raspi2-Kelller-135:~ $ sudo service ble2mqttd restart
pi@Raspi2-Kelller-135:~ $ gatttool -b 7C:2F:80:XX:XX:CF -t public --char-read --uuid=0x2a19
connect to 7C:2F:80:95:56:CF: Function not implemented (38)
pi@Raspi2-Kelller-135:~ $ gatttool -b 7C:2F:80:XX:XX:CF -t public --char-read --uuid=0x2a19
connect to 7C:2F:80:95:56:CF: Transport endpoint is not connected (107)
pi@Raspi2-Kelller-135:~ $ gatttool -b 7C:2F:80:XX:XX:CF -t public --char-read --uuid=0x2a19
handle: 0x001b   value: 2f

Hmm redet noch irgendwas anderes mit dem G-Tag, z. B. die App oder so? Tritt das Problem auch auf, wenn ble2mqttd nicht läuft?

Zitat von: Lehmi54 am 23 Januar 2023, 17:15:01
Besuch kommt gerade...
Schönen Gruß!

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

Lehmi54

Hi!
ZitatWenn er aufhört ist der Tag entweder absent oder die Abfrage hat funktioniert.
zur dev Version: Alle drei Dongle sind "zu Hause" also present, werden aber auch nach 15 min (abgebrochen) nicht gefunden, es geht sonst ewig... (Raspi 2 und 4 mit Bluetooth-Dongle) Raspi Zero (int. Bluetooth) keine Probleme, werden sofort erkannt.
ZitatHmm redet noch irgendwas anderes mit dem G-Tag, z. B. die App oder so? Tritt das Problem auch auf, wenn ble2mqttd nicht läuft?
Ich habe ble2mqttd gestopt mit hciconfig kein RX oder TX mehr, gatttool ausgeführt:
pi@RaspiZ139:~ $ gatttool -b 7C:2F:80:XX:XX:09 -t public --char-read --uuid=0x2a19
connect to 7C:2F:80:XX:XX:09: Function not implemented (38)
pi@RaspiZ139:~ $ gatttool -b 7C:2F:80:XX:XX:09 -t public --char-read --uuid=0x2a19
handle: 0x001b   value: 2f

Ja, tritt also auch dann auf!
Zitatredet noch irgendwas anderes mit dem G-Tag
Wie könnte ich das prüfen?
Hallo Patrick, ich habe Dir eine PM mit einem ausfürlichen Log gesendet.
Viele Grüße
Uwe
2x Raspberry 4 und 3 - FHEM 6.2
z-wave Netzwerk, SIGNALduino

PatrickR

#101
Hi!

Zitat von: Lehmi54 am 24 Januar 2023, 14:35:06
zur dev Version: Alle drei Dongle sind "zu Hause" also present, werden aber auch nach 15 min (abgebrochen) nicht gefunden, es geht sonst ewig... (Raspi 2 und 4 mit Bluetooth-Dongle) Raspi Zero (int. Bluetooth) keine Probleme, werden sofort erkannt.Ich habe ble2mqttd gestopt mit hciconfig kein RX oder TX mehr, gatttool ausgeführt:
Hmm klingt merkwürdig. Mangels Log (habe nur das von dem 139er bekommen, wo es funktioniert), kann ich dazu nix sagen.

Zitat von: Lehmi54 am 24 Januar 2023, 14:35:06
pi@RaspiZ139:~ $ gatttool -b 7C:2F:80:XX:XX:09 -t public --char-read --uuid=0x2a19
connect to 7C:2F:80:XX:XX:09: Function not implemented (38)
pi@RaspiZ139:~ $ gatttool -b 7C:2F:80:XX:XX:09 -t public --char-read --uuid=0x2a19
handle: 0x001b   value: 2f

Ja, tritt also auch dann auf!Wie könnte ich das prüfen?
Vermutlich nur mit einem Bluetooth-Sniffer wenn Du Dich nicht erinnerst. Hatte die Hoffnung, dass Du vielleicht eine Idee hast...

Hänge hier mal eine neue Version (0.9dev2) an, die das Battery-Reading in Ruhe lässt, wenn die Abfrage nicht funktioniert.

/Edit: Datei entfernt, da überholt

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

Lehmi54

Hi!
Hallo Patrick, danke Dir für die neue dev2, habe Dir mal per PM eine akt. Log gesendet.
Zitatwenn Du Dich nicht erinnerst
Alle 3 G-Tags waren noch nie gepaart und haben mit lepresenced (auch battery) ohne Probleme funktioniert.
Danke und viele Grüße
Uwe
2x Raspberry 4 und 3 - FHEM 6.2
z-wave Netzwerk, SIGNALduino

PatrickR

#103
Hi!

Neue Version 0.10:

  • Informationen von erkannten Geräten werden nun wiederholt angefragt. Schlägt die Abfrage fehl, werden neue Abfragen mit steigender Wartezeit gestartet. Eine erfolgreiche Abfrage ist die Voraussetzung für eine spätere Ermittlung von Batteriewerten
  • Batteriewerte werden nun bei einem Fehlschlag in kürzeren Zeitabständen wiederholt abgefragt.
  • Für hartnäckige Fälle, in denen aus unerfindlichem Grund die obige Abfrage fehlschlägt und daher keine Batteriewerte  abgefragt werden gibt es die Option --forcebattery. Sie fragt Batteriewerte auch dann ab, wenn nicht klar ist, ob der Tag diese Abfrage unterstützt. Um unnötigen Lärm zu vermeiden muss zwingend auch ein MAC-Filter (--mac) gesetzt sein.

Patrick

/Edit: Anhang entfernt. Neue Version siehe unten.
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

isy

Spannende Entwicklung mit mqtt.
Ich lese mal mit
Ein Weg wird erst zu einem Weg, wenn man ihn geht