(gelöst)Rätsel: Hilfe bei der Entschlüsselung eines Protokolls gesucht

Begonnen von mumpitzstuff, 07 Mai 2018, 21:08:10

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Ich habe mir das Protokoll der Divoom Timebox angesehen, um daraus vielleicht später ein Modul zu basteln und bin auf etwas gestoßen, für das ich keine Erklärung finden konnte. Vielleicht hat ja jemand von euch eine Idee?

Nachrichtenaufbau:

01 0d 00 43 00 03 04 16 19 03 04 00 03 04 00 00 64 e6 00 02

1.)  01 = Header
2.)  0d 00 = Länge der Nachricht
3.)  43 00 = Funktion (Wecker)
4.)  03 04 = Weckfunktion aktivieren
5.)  16 = Stunde (in hex)
6.)  19 = Minute (in hex)
7.)  03 04 = Sonntag
8.)  00 = Szene
9.)  03 04 00 00 = Unbekannt aber immer gleich
10.) 64 = Lautstärke (1 - 100)
11.) e6 00 = Prüfsumme
12.) nicht vorhanden = Wenn weder Samstag noch Freitag noch
       Donnerstag ausgewählt ist (oberes nibble von 7.) == 0), ansonsten
       kommt hier der Wert 04 dazu (oberes nibble von 7.) != 0).
13.) 02 = Footer

Offene Fragen:

1.) Sonntag und Montag ergeben in 3 Kombinationen immer 2 Byte. Sobald aber ein anderer Tag dazu kommt, ergeben sich immer nur 1 Byte Werte. Hier mal ein paar Beispiele:

03 04 = Sonntag
03 06 = Sonntag + Montag
07 = Sonntag + Montag + Dienstag
0F = Sonntag + Montag + Dienstag + Mittwoch
1F = Sonntag + Montag + Dienstag + Mittwoch + Donnerstag
3F = Sonntag + Montag + Dienstag + Mittwoch + Donnerstag + Freitag
7F = Alle Tage
40 = Samstag
60 = Samstag + Freitag
70 = Samstag + Freitag + Donnerstag
78 = Samstag + Freitag + Donnerstag + Mittwoch
7C = Samstag + Freitag + Donnerstag + Mittwoch + Dienstag
7E = Samstag + Freitag + Donnerstag + Mittwoch + Dienstag + Montag
03 05 = Montag
00 = kein Tag gesetzt

Wenn man sich das Binär mal verdeutlicht, dann sollte eigentlich sowas raus kommen:

       Samstag   Freitag   Donnerstag   Mittwoch   Dienstag   Montag   Sonntag
0         1              1               1                  1               1              1             1       =  01111111 = 7F  (passt)
0         1              1               0                  0               0              0             0       =  01100000 = 60  (passt)
0         0              0               0                  0               1              1             1       =  00000111 = 07  (passt)
0         0              0               0                  0               0              0             1       =  00000001 = 01  (passt nicht, es muss 03 04 sein)

Sobald also Montag oder Sonntag oder Montag + Sonntag allein stehen passt es nicht mehr. Kann das jemand logisch irgendwie herleiten?

Das Einzige was mir noch eingefallen ist:

Wenn die Tage 2 Byte lang sind, dann muss man das erste Byte vom zweiten Byte abziehen. Das ergäbe dann für Sonntag = 1, Montag = 2 und Sonntag + Montag = 3 und würde dann wieder in Konzept passen. Diese Variante ist mir jedoch etwas zu sehr an den Haaren herbei gezogen und lässt sich auch blöd kodieren, da man für die 3 Varianten immer eine Sonderbehandlung benötigt.

jochen_f

#1
So falsch liegst du mit deiner Vermutung nicht :-)

01 = Start
02 = Stop
03 = ESC

Wenn im Datenteil irgendwo 01,02 oder 03 gesendet werden soll,  wird stattdessen 03 und dann 03 + der eigentliche Wert gesendet.

Deine Übertragung lautet also eigentlich ohne Framing und Escapes:

0d 00 43 00 01 16 19 01 00 01 00 00 64 e6 00

Gruß, Jochen

mumpitzstuff

Ahhhhhh super vielen Dank! Dann ist die Lösung wie meistens doch so einfach.

jochen_f

Achja, und den Begriff Prüfsumme scheinen die auch sehr wörtlich genommen zu haben. Es sieht wirklich wie die Summe aller vorherigen Bytes aus. Ich hätte eher eine Art CRC erwartet.

mumpitzstuff

Ja die ist ganz einfach. Das Zeug wird über Bluetooth verschickt und ich hoffe das hier noch mal eine Sicherungsebene darüber liegt. Ich muss aber zugeben, dass ich mich mit den Details bei Bluetooth nicht so auskenne.