Xiaomi Bluetooth Themometer/Hygrometer mit Display

Begonnen von distel, 05 Januar 2018, 22:07:59

Vorheriges Thema - Nächstes Thema

distel

Hallo zusammen,

vor Kurzem habe ich eins der (neuen?) Xiaomi Bluetooth Themometer/Hygrometer für etwas über 15€ mit Display beim China-Mann erstanden. Wollte natürlich schauen, ob die Dinger sich irgendwie auch ohne Xiaomi-App anzapfen lassen. Inspiriert von der Arbeit von CoolTux (74_XiaomiFlowerSens.pm - Xiaomi Flower Monitor) hab ich mich ans Probieren gemacht. Für ein Modul hat es noch nicht gereicht, aber immerhin habe ich die Messwerte auslesen können und will das nicht für mich behalten:

Diverse Eigenschaften lassen sich "einfach" und Standardkonform auslesen:
gatttool -b <MAC> --char-read --handle=0x0018
Characteristic value/descriptor: 64 => 100 (Prozent)


Sämtliche Characteristics findet ihr in der folgenden Tabelle:
https://docs.google.com/spreadsheets/d/1Otu4BgNkEcUJEP6lkLFhPKsjk6Sjl0pS6F2sal6ofZw/edit?usp=sharing

Messwerte rückt das Thermometer allerdings erst raus, nachdem man bestimmte Notifications aktiviert hat:
gatttool -b <MAC> --char-write-req --handle=0x0010 --value=0100 --listen
Characteristic value was written successfully
Notification handle = 0x000e value: 54 3d 31 37 2e 33 20 48 3d 35 32 2e 35 00 => T=17.3 H=52.5
... (insges. 12 Notifications)


Da der Sensor scheint recht nervös (auch laut Display). Vermutlich schreibt er deshalb gleich 12 Messwerte raus. Danach gibt es aber keine neuen Meßwerte mehr. Erst, wenn wieder angefordert wird.

In ein eigenes Modul werde ich das ganze wohl nicht gießen (können/zeitlich hinbekommen). Ergo hoffe ich, Euch zumindest die Entscheidung zum Kauf zu erleichtern bzw. mit meinen Bemühungen ggf. andere zum Coding zu animieren. Für mich muss ich eh noch aufgrund von Reichweite etc. prüfen, ob nicht eh ein weitere RasPi (o.ä.) gebraucht wird, auf dem dann auch ein einfacher cron-Job die Arbeit verrichten könnte.


Gruß Dirk
NUC-I37100
Docker: eBus, fhem, ha-bridge, unifi
Hardware: Homematic, FS20, Somfy RTS, 1wire, FBAHA, enOcean

CoolTux

Weisst Du wie man von 54 3d 31 37 2e 33 20 48 3d 35 32 2e 35 00
nach
T=17.3 H=52.5
kommt?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

distel

NUC-I37100
Docker: eBus, fhem, ha-bridge, unifi
Hardware: Homematic, FS20, Somfy RTS, 1wire, FBAHA, enOcean

CoolTux

Das ist ja ne Billige Nummer.

Daraus lässt sich ja super einfach ein Modul machen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

nanocosmos

Habe auch so ein Ding hier rumliegen. Sieht ganz schick aus. [emoji4]
Wäre klasse, wenn man das in FHEM einbinden könnte.
Vielen Dank schon mal für eure Mühen!

CoolTux

Ich schaue es mir die nächsten 10 Tage mal an.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

nanocosmos


CoolTux

Ich baue alles erstmal ins FlowerSens Modul mit ein. Ich werde das Modul in späteren Versionen umbenennen und ein allgemeines Xiaomi BLE Modul daraus machen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

distel

Zitat von: CoolTux am 06 Januar 2018, 22:25:47
Ich baue alles erstmal ins FlowerSens Modul mit ein.

Sehr cool! Stehe gern für Fragen/Tests zur Verfügung. Gebe dir gern auch Schreibrechte auf die Tabelle.


Gruß Dirk

PS: werde Mal etwas bzgl Reichweite testen. Denke, ich komme nicht um nen dezentralen SensorHub drumherum.
NUC-I37100
Docker: eBus, fhem, ha-bridge, unifi
Hardware: Homematic, FS20, Somfy RTS, 1wire, FBAHA, enOcean

CoolTux

Du kannst einen kleinen Pi Zero nehmen und das ganze dann per ssh machen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

#10
Erster Prototype ist fertig. Bitte einmal testen

https://github.com/LeonGaultier/fhem-XiaomiBTLESens/archive/devel.zip



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

distel

Zitat von: CoolTux am 09 Januar 2018, 08:20:28
Erster Prototype ist fertig. Bitte einmal testen

Hallo,

hab Dein Modul ins FHEM Verzeichnis entpackt und per reload 74_XiaomiBTLESens neu geladen.
Anschließend ein neues Device mit define xSense XiaomiBTLESens <MAC> angelegt.
Jetzt noch Attribut model auf thermoHygroSense und verbose auf 5 gesetzt.

defmod xSens XiaomiBTLESens <MAC>
attr xSens model thermoHygroSens
attr xSens room XiaomiBTLESens
attr xSens verbose 5

setstate xSens fetch sensor data
setstate xSens 2018-01-09 19:43:12 battery ok
setstate xSens 2018-01-09 19:43:12 batteryLevel 100
setstate xSens 2018-01-09 19:43:05 lastGattError Internal application error
setstate xSens 2018-01-09 19:43:12 state fetch sensor data


Das Auslesen des Batterie-Status ist also schon mal kein Thema. Aber Messwerte kommen noch nicht an. Im Log schaut das dann im Sekundentakt so aus:
2018.01.09 19:50:12 4: XiaomiBTLESens (xSens) - CallBatteryFirmware: call function ExecGatttool_Run
2018.01.09 19:50:12 5: XiaomiBTLESens (xSens) - ExecGatttool_Run: call gatttool with command gatttool -i hci0 -b <MAC> --char-read -a 0x18 2>&1 /dev/null and loop 0
2018.01.09 19:50:12 5: XiaomiBTLESens (xSens) - ExecGatttool_Run: gatttool loop result Characteristic value/descriptor,64
2018.01.09 19:50:12 4: XiaomiBTLESens (xSens) - ExecGatttool_Run: gatttool result Characteristic value/descriptor,64
2018.01.09 19:50:12 4: XiaomiBTLESens (xSens) - ExecGatttool_Done: gatttool return string: xSens|<MAC>|ok|read|0x18|{"gtResult":"64 "}
2018.01.09 19:50:12 5: XiaomiBTLESens (xSens) - ProcessingNotification
2018.01.09 19:50:12 4: XiaomiBTLESens (xSens) - ProcessingNotification: handle 0x18
2018.01.09 19:50:12 5: XiaomiBTLESens (xSens) - Thermo/Hygro Sens Handle0x18
2018.01.09 19:50:12 4: XiaomiBTLESens (xSens) - WriteReadings: Readings were written

Dann geht es mit den selben Einträgen wieder von vorne los.

Da hab ich erstmal Attribut disable auf 1 gesetzt.

Es scheint mir so, als werde die Routine zum Auslesen der Messwerte also gar nicht erst erreicht.


Gruß Dirk
NUC-I37100
Docker: eBus, fhem, ha-bridge, unifi
Hardware: Homematic, FS20, Somfy RTS, 1wire, FBAHA, enOcean

CoolTux

Danke Dir Dirk,

Schaue ich mir an. Eventuell ist hier noch was drin vom Pflanzensensor.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Neue Version. Kannst Du bitte noch mal testen?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

distel

Zitat von: CoolTux am 09 Januar 2018, 20:20:38
Neue Version. Kannst Du bitte noch mal testen?

Man, man, man - so fix!. Also hier gehts weiter:

Installation analog oben.
Einige Meldungen wie die folgende - weiß nicht, ob das vorher auch so war, aber der Vollständigkeit halber sei es erwähnt.
2018.01.09 20:27:20 1: PERL WARNING: Subroutine XiaomiBTLESens_Initialize redefined at ./FHEM/74_XiaomiBTLESens.pm line 102.


Dann wird es interessanter:
2018.01.09 20:27:30 3: XiaomiBTLESens (xSens) - enabled
2018.01.09 20:27:30 4: XiaomiBTLESens (xSens) - WriteSensData: call function ExecGatttool_Run
2018.01.09 20:27:30 4: XiaomiBTLESens (xSens) - stateRequestTimer: Call Request Timer
2018.01.09 20:27:30 5: XiaomiBTLESens (xSens) - ExecGatttool_Run: call gatttool with command timeout 15 gatttool -i hci0 -b <MAC> --char-write-req -a 0x10 -n 100 --listen 2>&1 /dev/null and loop 0
2018.01.09 20:27:45 5: XiaomiBTLESens (xSens) - ExecGatttool_Run: gatttool loop result Characteristic value was written successfully
2018.01.09 20:27:45 4: XiaomiBTLESens (xSens) - ExecGatttool_Run: gatttool result Characteristic value was written successfully
2018.01.09 20:27:45 4: XiaomiBTLESens (xSens) - ExecGatttool_Done: gatttool return string: xSens|<MAC>|ok|write|0x10|{"gtResult":"no data response"}
2018.01.09 20:27:45 5: XiaomiBTLESens (xSens) - ProcessingErrors
2018.01.09 20:27:45 4: XiaomiBTLESens (xSens) - WriteReadings: Readings were written


In einem anderen Durchlauf gibt es sogar einen Fehler gemeldet (vermutlich hat gatttool einfach zu viel zu tun ;-)):
2018.01.09 20:28:01 4: XiaomiBTLESens (xSens) - WriteSensData: call function ExecGatttool_Run
2018.01.09 20:28:01 5: XiaomiBTLESens (xSens) - ExecGatttool_Run: call gatttool with command timeout 15 gatttool -i hci0 -b <MAC> --char-write-req -a 0x10 -n 100 --listen 2>&1 /dev/null and loop 0
2018.01.09 20:28:06 5: XiaomiBTLESens (xSens) - ExecGatttool_Run: gatttool loop result connect error,Function not implemented (38)
2018.01.09 20:28:06 5: XiaomiBTLESens (xSens) - ExecGatttool_Run: call gatttool with command timeout 15 gatttool -i hci0 -b <MAC> --char-write-req -a 0x10 -n 100 --listen 2>&1 /dev/null and loop 1


Ich hab dann etwas auf der Kommando-Zeile rumprobiert:

Mein ursprünglicher Aufruf (funktioniert):
gatttool -b <MAC> --char-write-req --handle=0x0010 --value=0100 --listen

Dein Aufruf (funktioniert nicht):
gatttool -b <MAC> --char-write-req -a 0x10 -n 100 --listen

"Kreuzung" aus beidem (funktioniert):
gatttool -b <MAC> --char-write-req -a 0x0010 --value=0100 --listen

=> Ergo -n 100 ist nicht das selbe wie --value=0100


Nach einem Neustart habe ich folgendes noch im Log gefunden:
2018.01.09 20:43:10 3: XiaomiBTLESens (xSens) - defined with BTMAC <MAC>
2018.01.09 20:43:11 4: XiaomiBTLESens (xSens) - CallBatteryFirmware: call function ExecGatttool_Run
2018.01.09 20:43:11 4: XiaomiBTLESens (xSens) - stateRequestTimer: Call Request Timer
2018.01.09 20:43:12 5: XiaomiBTLESens (xSens) - ExecGatttool_Run: call gatttool with command gatttool -i hci0 -b <MAC> --char-read -a 0x18 2>&1 /dev/null and loop 0
2018.01.09 20:43:18 5: XiaomiBTLESens (xSens) - ExecGatttool_Run: gatttool loop result Characteristic value/descriptor,64
2018.01.09 20:43:18 4: XiaomiBTLESens (xSens) - ExecGatttool_Run: gatttool result Characteristic value/descriptor,64
2018.01.09 20:43:18 4: XiaomiBTLESens (xSens) - ExecGatttool_Done: gatttool return string: xSens|<MAC>|ok|read|0x18|{"gtResult":"64 "}
2018.01.09 20:43:18 5: XiaomiBTLESens (xSens) - ProcessingNotification
2018.01.09 20:43:18 4: XiaomiBTLESens (xSens) - ProcessingNotification: handle 0x18
2018.01.09 20:43:18 5: XiaomiBTLESens (xSens) - Thermo/Hygro Sens Handle0x18
2018.01.09 20:43:18 1: PERL WARNING: Illegal hexadecimal digit ' ' ignored at ./FHEM/74_XiaomiBTLESens.pm line 653.
2018.01.09 20:43:18 3: eval: {XiaomiBTLESens_ExecGatttool_Done('xSens|<MAC>|ok|read|0x18|{"gtResult":"64 "}')}
2018.01.09 20:43:18 4: XiaomiBTLESens (xSens) - WriteReadings: Readings were written

Die Interpretation der 64 erfolgt inkl. nachfolgendem Leerzeichen und gibt zumindest eine Warning

PS: Ich frage mich, wie lange ich das noch durchhalte, sämtliche MACs zu ersetzen. Und das wo die Funkeichweite eher kurz ist...
NUC-I37100
Docker: eBus, fhem, ha-bridge, unifi
Hardware: Homematic, FS20, Somfy RTS, 1wire, FBAHA, enOcean