Forum: Mikrocontroller und Digitale Elektronik Sanitas USB-Protokoll


von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe hier gerade eine Körperwaage vor mir stehen.
Die redet ihre Daten per USB (als HID-Device...)

Folgende Daten habe ich:

[quote]
Messungen 1+2+3+4+5+6


Gewicht: 81.2, 78.8, 79.4, 79.4, 80.4, 81.6
Fett: 0, 26.4, 26.8, 26.7, 27.2, 27.7
Wasser: 0, 53.6, 53.3, 53.4, 53.0, 52.7
Muskel: 0, 41.8, 41.7, 41.7, 41.5, 41.2
Datum: 18.12.2014, 18.12.2014, 19.12.2014, 19.12.2014, 19.12.2014, 
19.12.2014
Zeit: 19:50, 21:42, 06:48, 06:49, 06:50, 06:50
Aktivitätsgrad: 2, 2, 2, 2, 2, 2
[/quote]

Und folgendes Konte ich klar erkennen:
[quote]
Datei: usblog_complete_transfered..txt
Zeile 33 + 35, Gewicht:
1
  0x0000: 03 2C 03 14 03 1A 03 1A                         (.,......        )
2
  0x0000: 03 24 03 30 FF FF FF FF                         (.$.0ÿÿÿÿ        )
0x032C: 812
0x0314: 788
0x031A: 794
0x031A: 794
0x0324: 804
0x0330: 816

Zeile 65 + 67, Fett:
1
  0x0000: 00 00 01 08 01 0C 01 0B                         (........        )
2
  0x0000: 01 10 01 15 FF FF FF FF                         (....ÿÿÿÿ        )
0x0000: 0
0x0108: 264
0x010C: 268
0x010B: 267
0x0110: 272
0x0115: 277

Zeile 97 + 99, Wasser:
1
  0x0000: 00 00 02 18 02 15 02 16                         (........        )
2
  0x0000: 02 12 02 0F FF FF FF FF                         (....ÿÿÿÿ        )
0x0000: 0
0x0218: 536
0x0215: 533
0x0216: 534
0x0212: 530
0x020F: 527

Zeile 129 + 131, Muskelmasse:
1
  0x0000: 00 00 01 A2 01 A1 01 A1                         (...¢.¡.¡        )
2
  0x0000: 01 9F 01 9C FF FF FF FF                         (.Ÿ.œÿÿÿÿ        )
0x0000: 0
0x01A2: 418
0x01A1: 417
0x01A1: 417
0x019F: 415
0x019C: 412
[/quote]

Nur mit Datum und Uhrzeit hapert es. Übersehe ich irgendwas?
Es müssen ja irgendwie Minuten sein. Aber wie ich auch rechne (Minuten 
seit Mitternacht, Minuten seit dem Jahr 0) es kommt nix sinnvolles raus.
Vielleicht müssen die vier Bytes von Datum und Uhrzeit ja auch 
zusammengenommen einen Timestamp geben, aber auch da kommt nix 
sinnvolles raus:
[quote]
Zeile 161 + 163, Datum:
1
  0x0000: BD 92 BD 92 BD 93 BD 93                         (½’½’½“½“        )
2
  0x0000: BD 93 BD 93 00 00 00 00                         (½“½“....        )
0xBD92: 48530
0xBD92: 48530
0xBD93: 48531
0xBD93: 48531
0xBD93: 48531
0xBD93: 48531

Zeile 193 + 194, Uhrzeit:
1
  0x0000: 13 32 15 2A 06 30 06 31                         (.2.*.0.1        )
2
  0x0000: 06 32 06 32 FF FF FF FF                         (.2.2ÿÿÿÿ        )
0x1332: 4914
0x152A: 5418
0x0630: 1548
0x0631: 1585
0x0632: 1586
0x0632: 1586
[/quote]

Anbei die komplette Transferdatei. Ich vermute das weiter oben (oder 
unten) nochmal Angaben zu den jeweiligen Personen stehen. Jede Person 
(bis zu 10) hat 60 Speicherplätze - was sich recht gut mit den 
übertragenen Daten deckt.

Jemand eine Idee ?

von P. K. (pek)


Lesenswert?

Mach doch zwei möglichst identische Übertragungen (z.B. nur eine 
Messung, dann übertragen, wieder nur eine Messung, wieder übertragen).
Wo das Gewicht, Fett, etc. ist, weist Du ja schon. Wenn Du jetzt die 
Differenz der beiden Files anschaust, müsste auch die Zeit irgendwo als 
Differenz erscheinen. Jetzt noch überlegen, welches Format die Zeit hat.
Danach kannst Du das Datum angehen (wieder Einzelmessung, über Nacht). 
Wenn Du Glück hast ist das Datum separat, wenn nicht zusammen mit der 
Zeit (dann wären die differierenden Stellen wieder am gleichen Ort).

von Thomas (Gast)


Lesenswert?

Gelöst.

So gehts:
1
Date:
2
3
Wir kriegen den Integer 48530 
4
Den Teilen wir auf in:
5
int Code1 = 48530  / 256  = 189
6
int Code2 = 48530  % 256  = 146
7
8
Nun in binär (mit führenden Nullen!):
9
string Code1 = 10111101
10
string Code2 = 10010010
11
12
Zusammennehmen:
13
string Date = Code1 + Code2 = 1011110110010010
14
15
Die ersten 7 Bits + 1920 sind das Datum: 1011110 = 94 + 1920 = 2014
16
Die nächsten 4 Bits sind das Monat: 1100 = 12
17
Die nächsten 5 Bits sind der Tag: 10010 = 18
18
19
20
21
22
Time:
23
24
Wir kriegen den Integer 4914 
25
Den Teilen wir auf in:
26
int Code1 = 4914 / 256  = 19
27
int Code2 = 4914 % 256  = 50
28
29
Nun in binär (mit führenden Nullen!):
30
string Code1 = 00010011
31
string Code2 = 00110010
32
33
Zusammennehmen:
34
string Time = Code1 + Code2 = 0001001100110010
35
36
Die ersten 8 Bits sind die Stunde: 00010011 = 19
37
Die zweiten 8 Bits die Minute: 00110010 = 50

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.