mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sanitas USB-Protokoll


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Thomas (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
  0x0000: 03 2C 03 14 03 1A 03 1A                         (.,......        )
  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:
  0x0000: 00 00 01 08 01 0C 01 0B                         (........        )
  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:
  0x0000: 00 00 02 18 02 15 02 16                         (........        )
  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:
  0x0000: 00 00 01 A2 01 A1 01 A1                         (...¢.¡.¡        )
  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:
  0x0000: BD 92 BD 92 BD 93 BD 93                         (½’½’½“½“        )
  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:
  0x0000: 13 32 15 2A 06 30 06 31                         (.2.*.0.1        )
  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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Gelöst.

So gehts:
Date:

Wir kriegen den Integer 48530 
Den Teilen wir auf in:
int Code1 = 48530  / 256  = 189
int Code2 = 48530  % 256  = 146

Nun in binär (mit führenden Nullen!):
string Code1 = 10111101
string Code2 = 10010010

Zusammennehmen:
string Date = Code1 + Code2 = 1011110110010010

Die ersten 7 Bits + 1920 sind das Datum: 1011110 = 94 + 1920 = 2014
Die nächsten 4 Bits sind das Monat: 1100 = 12
Die nächsten 5 Bits sind der Tag: 10010 = 18




Time:

Wir kriegen den Integer 4914 
Den Teilen wir auf in:
int Code1 = 4914 / 256  = 19
int Code2 = 4914 % 256  = 50

Nun in binär (mit führenden Nullen!):
string Code1 = 00010011
string Code2 = 00110010

Zusammennehmen:
string Time = Code1 + Code2 = 0001001100110010

Die ersten 8 Bits sind die Stunde: 00010011 = 19
Die zweiten 8 Bits die Minute: 00110010 = 50




Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.