AlCalzone / ioBroker.ble

Monitor Bluetooth Low Energy beacons
MIT License
41 stars 14 forks source link

Feature request: miscale V1/V2 #148

Open Ilovegym66 opened 5 years ago

Ilovegym66 commented 5 years ago

It was nice to have xiaomi miscale in the adapter, you found some codes here https://github.com/chaeplin/Xiaomi_scale_scan/blob/master/Xiaomi_scale_scan.py

and here https://github.com/chaeplin/nrf51822_and_arduino/blob/master/_12-xiaomi_scale_scan/_12-xiaomi_scale_scan.ino

AlCalzone commented 5 years ago

Should be easy to implement. Could you please use the nRF Connect App to capture 2-3 of those advertisements for me? Best case with the corresponding value from the scale itself, so I can cross-check with the codes you linked. Like 0.0kg => abcdef01234... 1.5kg => def01234abc... 75.7 kg => ...

Ilovegym66 commented 5 years ago

mi scale 19,8kg 0204e30707031216330000f81b 0,00kg 0284e307070312351700000c03

hmm der Wert ändert sich nicht oft.. aber der ble-adapter hat sie selbst erkannt und diese Einträge angelegt, siehe json (ist ein json, habs nur umbenannt nach zip! ) ble.0.e7_91_6e_10_48_db.json.zip

Ilovegym66 commented 5 years ago

Screenshot_2019-07-03 objects - ioBroker

Ilovegym66 commented 5 years ago

Screenshots from app - but the result everytime the same.. Photos(1).zip

AlCalzone commented 5 years ago

Die Links scheinen zu einer anderen Version der Waage zu gehören. Mit nur zwei Werten kann ich mir leider keinen Reim darauf machen, was anders ist. Wenn möglich bitte noch ein paar mehr Werte sammeln, ein paar enger beisammen, ein paar weiter entfernt. Und wenn möglich auch noch 1-2 mit jeder unterstützten Einheit. Ich brauche keine Screenshots aus der App.

Ilovegym66 commented 5 years ago

Das Problem war, dass der BLE Adapter ja nur alle paar Sekunden den Wert einfaengt, und die Waage ( ich habe die MiScale V2 ) den Wert dauernd aendert ( hab mich mit einem Fuss draufgestellt.. aber da das Gewicht konstant zu halten, ist ne Kunst..).. Muss mir mal ein paar Gewichte besorgen, damit ich in Ruhe die Werte auslesen kann..

AlCalzone commented 5 years ago

Hahaha ok

Ilovegym66 commented 5 years ago

so mal mit Eimer Wasser und n paar Bücher Werkzeugkoffer etc getestet.. :-) es kam heute ein paar Datenpunkte noch dazu, als ich mich draufstellte.. aber die änderten sich nicht...

0,0kg 021b 00a4e3070704113833fdff0050 0,0kg 041b 00e307070312343000007c06c9 0,0kg 071b 00070412082afdff0c03b8043e 0,0kg 0c1b 0003c0043e1d02010401db4810

hier der 181b ändert sich je nach Gewicht, anscheinend in hex das Gewicht..?? 0,0kg 181b 0284e307070411392200001009 3,9kg 181b 0224e307070412082afdff0c03 4,9kg 181b 02a4e307070313042efdff3007 7,1kg 181b 0224e3070704113717fdff8c05 8,9kg 181b 0224e3070704120318fdfff406 12kg 181b 0224e3070704113516fdff6009 16kg 181b 0284e307070411392200001009 51kg 181b 0204e3070704120e3000007427 106,3kg 181b 0284e3070704120b0c0000fc03

AlCalzone commented 5 years ago

Hmm - so richtig kann ich mir noch keinen Reim drauf machen. Z.B. haben 0,0kg und 16,0kg den identischen Wert. Dann gibt es Messungen bei denen die letzten zwei Bytes wie bei V1 den Messwert in 200tel kg angeben. Und andere wo es wieder nicht passt. 🤔

Ilovegym66 commented 5 years ago

Hmm ja, ich hab die Befürchtung, dass der ble Adapter nicht schnell genug aktualisiert hat, habe jetzt Mal die history eingeschaltet, und messe morgen Abend noch einmal 😉, irgendwie muss das hinbekommen sein... Die App openscale kann's auch..

AlCalzone commented 5 years ago

Die App macht es mit einer aktiven Verbindung, da gibt's ne realtime Messung.

Ilovegym66 commented 4 years ago

Schau Mal hier, da ist alles erklärt: https://github.com/oliexdev/openScale/wiki/Xiaomi-Bluetooth-Mi-Scale

N1tan commented 4 years ago

Würde Ein Plugin für die Scale2 ebenfalls begrüßen. Leider hab ich noch keine Erfahrung in IObroker Adaptern & TS, daher kann ich das aktuell nicht umsetzen. Hier sind meine Ergebnisse für Scale2 (Scale1 & Scale2 unterscheiden sich):

[bluetooth]# info 2F:28:03:00:2E:29
Device 2F:28:03:00:2E:29 (random)
        Name: MIBFS
        Alias: MIBFS
        Paired: no
        Trusted: no
        Blocked: no
        Connected: no
        LegacyPairing: no
        UUID: Body Composition          (0000181b-0000-1000-8000-00805f9b34fb)
        ManufacturerData Key: 0x0157
        ManufacturerData Value:
  0c 95 41 bb 58 32                                ..A.X2
        ServiceData Key: 0000181b-0000-1000-8000-00805f9b34fb
        ServiceData Value:
  02 24 b2 07 01 06 03 37 2e fe ff f0 41           ......./.....

ServiceData Aufbau (02 24 b2 07 01 06 03 37 2e fe ff f0 41):

Count Byte Alias
0 02 ctrl0
1 24 ctrl1
2 b2 year0
3 07 year1
4 01 month
5 06 day
6 03 hours
7 37 min
8 2e sec
9 fe impedance0
10 ff impedance1
11 f0 weight0
12 41 weight1

ctrl0 & ctrl1 (Die relevanten sind beschrieben) 0x02 << 8 | 0x24 = 0 = isLBSUnit 0 0 0 0 0 1 0

0 0 = isImpedance 1 0 0 1 = isStabilized 0 0 = isCattyUnit

Datum & Uhrzeit

$year = ((year1 & 0xFF) << 8) | (year0 & 0xFF);
$month = month;
$day = day;
$hours = hours;
$min = min;
$sec = sec;

Gewicht

if (isLBSUnit || isCattyUnit) {
    $weight = (((weight1 & 0xFF) << 8) | (weight0 & 0xFF)) / 100.0f;
} else {
    $weight = (((weight1 & 0xFF) << 8) | (weight0 & 0xFF)) / 200.0f;
}

Impedanz

if (isImpedance) {
    $impedance = ((impedance1 & 0xFF) << 8) | (impedance0 & 0xFF);
}