Bluetooth: Xiaomi Temperatur/Luftfeuchtigkeit

Hallo

Einfach nur ein Thema, um an der Bluetooth-Erkennung meiner Xiaomi-Geräte zu arbeiten.
Ich stehe für Logs zur Verfügung (muss mir nur die Befehle in Erinnerung rufen…)

Es handelt sich um Temperatur- und Feuchtigkeitsmonitore mit Anzeige.

https://fr.aliexpress.com/item/4000373039226.html

@AlexTrovato wie integrieren wir Bluetooth-Geräte? Wie organisieren wir das deiner Meinung nach?

Das Problem mit Bluetooth ist, dass jeder Hersteller oft seine eigenen „APIs“ verwendet, nur wenige sind standardisiert. Man sollte Tests an diesem Gerät durchführen können… aber ich denke, es sollte ein Bluetooth-Untermenü in Xioami geben, um die Markenspezifika zu unterstützen.

Hallo zusammen, ich nutze diesen Beitrag über Bluetooth, um zu fragen, wer den Bluetooth-Dienst entwickelt hat. Ich habe einen Fall, bei dem das Bluetooth meiner Hauptplatine meines DIY-NAS nicht von diesem Dienst unterstützt wird („Adress family not supported by protocol“), daher würde ich ihn gerne kontaktieren, um mit ihm zu debuggen. :wink:

Hallo, ich bin der Schuldige. Wir nutzen heute eine Node.js-Bibliothek, die nicht alle Bluetooth-Adapter unterstützt. Besonders, wenn es Windows ist. Wir können privat weiterreden, um diese Diskussion nicht zu verschmutzen.

Es gibt keine Verschmutzung, im Gegenteil, es ist immer besser, wenn es öffentlich ist! So kann jeder sehen, wie weit die Entwicklung vorangeschritten ist. Ich ermutige euch, bei diesen Diskussionen öffentlich zu bleiben :slight_smile:

Machst du gerade weiter?
Brauchst du etwas?

@AlexTrovato er braucht wohl einen Tag, der 48 Stunden dauert, denke ich :smiley:

lol wem sagst du das?!
Entschuldige, aber ich war letzte Woche im Urlaub, ich bin heute Morgen wieder eingestiegen, also ist meine Verfügbarkeit begrenzt.

@Hamtaro

Brauchst du etwas?

Für die Xiaomi-Bluetooth-Geräte? Hast du welche? Wenn ja, können wir uns synchronisieren, damit du mir die notwendigen Informationen für die Integration gibst.
Ansonsten schaue ich bei den Konkurrenten, ob sie diese Geräte bereits integrieren.

Wie ich oben schon sagte, habe ich vier Temperatur- und Feuchtigkeitsmonitore.
Sie tauchen im Bluetooth-Gerät auf (mit zwei Kennungen pro Gerät, eine ohne Sonderzeichen und eine nur mit der Batterie), außer einem, der außer Reichweite sein muss.

Okay, entschuldige, ich muss es falsch gelesen haben. Super, dann organisieren wir das mal :slight_smile:

Hier haben wir eine super Analyse.

Jetzt kann ich blind weiterentwickeln, aber jetzt bleibt abzuwarten, wie du testen kannst?

  • Entweder mache ich ein kleines Programm nur zum Validieren, dass es funktioniert
  • Oder eine „Beta“-Version dieser neuen Integration

Aber wir sind nicht im Standard-Bluetooth, sondern im proprietären Xiaomi.

Wie du möchtest, aber ich gestehe, ein kleines Programm auszuführen wäre einfacher für mich.
Ich habe nichts auf meinem Mac für Gladys installiert.

Hey @Hamtaro,
erste Version dieses kleinen Tools.
Zur Info, es verwendet den Code der Bluetooth-Dienst von Gladys (um maximale Kompatibilität zu gewährleisten).

Es ist natürlich im Laufe der Zeit zu ergänzen.
Ich warte auf dein Feedback.

Zur Info, der Dienst erkennt Amazfit-Smartwatches.

Was macht dieses Programm?
Ich habe es auf dem Pi mit dem Benutzer pi gestartet.
Ich habe alle Abhängigkeiten installiert und jetzt läuft npm install, aber mit meiner aktuellen Verbindung aufgrund des Lockdowns und der Überlastung der Bouygues-4G-Antennen geht es langsam wie Kaugummi…

Es scheint eine vollständige Gladys-Installation durchzuführen… Ich dachte, es wäre ein kleines JS-Programm, um die Bluetooth-Infos abzurufen.

PS: Ich habe nichts gesagt, der Download ist gerade fertig und es extrahiert, was es will.

> usb@1.6.3 install /home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/usb
> prebuild-install --verbose || node-gyp rebuild

prebuild-install info begin Prebuild-install version 5.3.5
prebuild-install info looking for cached prebuild @ /home/pi/.npm/_prebuilds/e00ec3-usb-v1.6.3-node-v64-linux-arm.tar.gz
prebuild-install http request GET https://github.com/tessel/node-usb/releases/download/v1.6.3/usb-v1.6.3-node-v64-linux-arm.tar.gz
prebuild-install http 404 https://github.com/tessel/node-usb/releases/download/v1.6.3/usb-v1.6.3-node-v64-linux-arm.tar.gz
prebuild-install WARN install No prebuilt binaries found (target=10.21.0 runtime=node arch=arm libc= platform=linux)
make : on entre dans le répertoire « /home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/usb/build »
  CC(target) Release/obj.target/libusb/libusb/libusb/core.o
  CC(target) Release/obj.target/libusb/libusb/libusb/descriptor.o
  CC(target) Release/obj.target/libusb/libusb/libusb/hotplug.o
  CC(target) Release/obj.target/libusb/libusb/libusb/io.o
  CC(target) Release/obj.target/libusb/libusb/libusb/strerror.o
  CC(target) Release/obj.target/libusb/libusb/libusb/sync.o
  CC(target) Release/obj.target/libusb/libusb/libusb/os/poll_posix.o
  CC(target) Release/obj.target/libusb/libusb/libusb/os/threads_posix.o
  CC(target) Release/obj.target/libusb/libusb/libusb/os/linux_usbfs.o
  CC(target) Release/obj.target/libusb/libusb/libusb/os/linux_udev.o
../libusb/libusb/os/linux_udev.c:40:10: fatal error: libudev.h: Datei oder Verzeichnis nicht gefunden
 #include <libudev.h>
          ^~~~~~~~~~~
compilation terminated.
make: *** [libusb.target.mk:140: Release/obj.target/libusb/libusb/libusb/os/linux_udev.o] Fehler 1
make: Verlasse das Verzeichnis « /home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/usb/build »
gyp ERR! Build-Fehler 
gyp ERR! Stack Error: `make` ist mit dem Exit-Code: 2 fehlgeschlagen
gyp ERR! Stack     at ChildProcess.onExit (/usr/share/node-gyp/lib/build.js:262:23)
gyp ERR! Stack     at ChildProcess.emit (events.js:198:13)
gyp ERR! Stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
gyp ERR! System Linux 5.4.72-v7+
gyp ERR! command "/usr/bin/node" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/usb
gyp ERR! node -v v10.21.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 

> @abandonware/bluetooth-hci-socket@0.5.3-5 install /home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/@abandonware/bluetooth-hci-socket
> node-pre-gyp install --fallback-to-build

node-pre-gyp WARN Using request for node-pre-gyp https download 
node-pre-gyp WARN Tried to download(404): https://github.com/abandonware/node-bluetooth-hci-socket/releases/download/0.5.3-5/binding-0.5.3-5-node-v64-linux-arm.tar.gz 
node-pre-gyp WARN Pre-built binaries not found for @abandonware/bluetooth-hci-socket@0.5.3-5 and node@10.21.0 (node-v64 ABI, glibc) (falling back to source compile with node-gyp) 
make: Betreten des Verzeichnisses « /home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/@abandonware/bluetooth-hci-socket/build »
  CXX(target) Release/obj.target/binding/src/BluetoothHciSocket.o
In file included from ../src/BluetoothHciSocket.cpp:8:
../../../nan/nan.h: In function ‘void Nan::AsyncQueueWorker(Nan::AsyncWorker*)’:
../../../nan/nan.h:2294:62: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type]
     , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete)
                                                              ^
In file included from /usr/include/nodejs/src/node_buffer.h:25,
                 from ../src/BluetoothHciSocket.cpp:7:
../src/BluetoothHciSocket.cpp: At global scope:
/usr/include/nodejs/src/node.h:573:43: warning: cast between incompatible function types from ‘void (*)(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)’ {aka ‘void (*)(v8::Local<v8::Object>)’} to ‘node::addon_register_func’ {aka ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)’} [-Wcast-function-type]
       (node::addon_register_func) (regfunc),                          \
                                           ^
noble warning: adapter state unauthorized, please run as root or with sudo
               or see README for information on running without root/sudo:
               https://github.com/sandeepmistry/noble#running-on-linux
/home/pi/gladys-bluetooth-analyzer/index.js:23
    quit(colors.bold.red('Something went wrong'));
    ^

TypeError: quit is not a function
    at EventEmitter.gladys.event.once (/home/pi/gladys-bluetooth-analyzer/index.js:23:5)
    at Object.onceWrapper (events.js:286:20)
    at EventEmitter.emit (events.js:198:13)
    at BluetoothManager.broadcastStatus (/home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/lib/events/bluetooth.broadcastStatus.js:11:21)
    at BluetoothManager.stateChange (/home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/lib/events/bluetooth.stateChange.js:21:8)
    at Noble.emit (events.js:198:13)
    at Noble.onStateChange (/home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/@abandonware/noble/lib/noble.js:87:8)
    at NobleBindings.emit (events.js:198:13)
    at NobleBindings.onStateChange (/home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/bindings.js:121:8)
    at Hci.emit (events.js:203:15)
    at Hci.onSocketError (/home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/hci.js:549:10)
    at BluetoothHciSocket.emit (events.js:198:13)
    at Hci.setEventMask (/home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/hci.js:165:16)
    at Hci.pollIsDevUp (/home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/hci.js:119:12)
    at Hci.init (/home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/hci.js:103:10)
    at NobleBindings.init (/home/pi/gladys-bluetooth-analyzer/gladys/server/services/bluetooth/node_modules/@abandonware/noble/lib/hci-socket/bindings.js:78:13)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! gladys-bluetooth-analyzer@1.0.0 start: `node index.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Das Skript zum Starten von gladys-bluetooth-analyzer@1.0.0 ist fehlgeschlagen.
npm ERR! Dies ist wahrscheinlich kein Problem mit npm. Es gibt wahrscheinlich zusätzliche Protokollausgaben darüber.

npm ERR! Ein vollständiger Log dieser Ausführung kann gefunden werden in:
npm ERR!     /home/pi/.npm/_logs/2020-11-16T11_21_34_668Z-debug.log
pi@gladys:~/gladys-bluetooth-analyzer $ 

logs :

0 info it worked if it ends with ok
1 warn npm npm unterstützt Node.js v10.21.0 nicht
2 warn npm Sie sollten wahrscheinlich auf eine neuere Version von Node.js aktualisieren, da wir
3 warn npm keine Garantie geben können, dass npm mit dieser Version funktioniert.
4 warn npm Unterstützte Versionen von Node.js sind die neueste Version von 4, 6, 7, 8, 9.
5 warn npm Sie können die neueste Version unter https://nodejs.org/ finden
6 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'start' ]
7 info using npm@5.8.0
8 info using node@v10.21.0
9 verbose run-script [ 'prestart', 'start', 'poststart' ]
10 info lifecycle gladys-bluetooth-analyzer@1.0.0~prestart: gladys-bluetooth-analyzer@1.0.0
11 info lifecycle gladys-bluetooth-analyzer@1.0.0~start: gladys-bluetooth-analyzer@1.0.0
12 verbose lifecycle gladys-bluetooth-analyzer@1.0.0~start: unsafe-perm in lifecycle true
13 verbose lifecycle gladys-bluetooth-analyzer@1.0.0~start: PATH: /usr/share/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/pi/gladys-bluetooth-analyzer/node_modules/.bin:/usr/local/sbin:/usr/local/bi$
14 verbose lifecycle gladys-bluetooth-analyzer@1.0.0~start: CWD: /home/pi/gladys-bluetooth-analyzer
15 silly lifecycle gladys-bluetooth-analyzer@1.0.0~start: Args: [ '-c', 'node index.js' ]
16 silly lifecycle gladys-bluetooth-analyzer@1.0.0~start: Returned: code: 1  signal: null
17 info lifecycle gladys-bluetooth-analyzer@1.0.0~start: Failed to exec start script
18 verbose stack Error: gladys-bluetooth-analyzer@1.0.0 start: `node index.js`
18 verbose stack Exit status 1
18 verbose stack     at EventEmitter.<anonymous> (/usr/share/npm/node_modules/npm-lifecycle/index.js:283:16)
18 verbose stack     at EventEmitter.emit (events.js:198:13)
18 verbose stack     at ChildProcess.<anonymous> (/usr/share/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
18 verbose stack     at ChildProcess.emit (events.js:198:13)
18 verbose stack     at maybeClose (internal/child_process.js:982:16)
18 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
19 verbose pkgid gladys-bluetooth-analyzer@1.0.0
20 verbose cwd /home/pi/gladys-bluetooth-analyzer
21 verbose Linux 5.4.72-v7+
22 verbose argv "/usr/bin/node" "/usr/bin/npm" "start"
23 verbose node v10.21.0
24 verbose npm  v5.8.0
25 error code ELIFECYCLE
26 error errno 1
27 error gladys-bluetooth-analyzer@1.0.0 start: `node index.js`
27 error Exit status 1
28 error Das Skript zum Starten von gladys-bluetooth-analyzer@1.0.0 ist fehlgeschlagen.
28 error Dies ist wahrscheinlich kein Problem mit npm. Es gibt wahrscheinlich zusätzliche Protokollausgaben darüber.
29 verbose exit [ 1, true ]

Lol ok Bug erste Zeile… ich versuche es nochmal…
Aber ansonsten müssen NPM Bluetooth-Rechte erteilt werden, was ich in der Readme hinzufügen werde.

Das Programm dient dazu, zu überprüfen, ob der vorgeschlagene Code die Daten deines Bluetooth-Geräts korrekt abruft.
Es kopiert einen Teil von Gladys, da ich viel mit Bluetooth gearbeitet habe und jetzt, wo das erledigt ist, nicht nochmal von vorne anfangen möchte.

Ich sage dir Bescheid, wenn es aktualisiert ist.

Super, kannst du es bitte nochmal versuchen? Manchmal macht der Bluetooth „Zicken“ beim Verbinden mit dem Gerät. Und man muss sicherstellen, dass das Gerät nicht bereits mit einem anderen verbunden ist…
Du kannst sehen, dass es verbunden wurde, wenn du in den Geräteeinstellungen den Hersteller (oder das Modell) siehst.