Hi!
Ich habe hier ein kniffliges Problem: Ich habe eine (drahtgebundene)
Übertragung, bei der ich die Nachrichten einwandfrei mitlesen kann. Die
Nachrichten sind über eine Checksumme/CRC/irgendwas geschützt.
Leider bekomme ich das Polynom/XOR-Maske/Init-States für die CRC nicht
heraus. Mittlerweile habe ich in MATLAB es per "Brute-Force" auf alle
Polynome zwischen 0x100 und 0x1FF getestet, zusätzlich jeweils noch mit
allen XOR-Masken am Ende und allen Init-States von 0x00 bis 0xFF. Kein
Treffer.
Eine Checksumme im Sinne von XOR oder Summe/Differenz scheint es auch
nicht zu sein, denn "gerade" Summen führen sowohl zu ungeraden wie auch
geraden Checksummen.
Hat jemand noch eine Idee?
verschiedene Nachrichten:
0x00 0x01 0x00 0xC4
0x00 0x01 0x01 0xC3
0x00 0x01 0x02 0xCA
(unterscheiden sich nur minimal - die ersten beiden würden als Differenz
passen - die dritte dann aber schon nicht mehr?)
0x77 0x02 0x01 0x80 0x23
0x76 0x02 0x01 0x80 0x35
0x75 0x02 0x01 0x80 0x0F
0x74 0x02 0x01 0x80 0x19
0x73 0x02 0x01 0x80 0x7B
0x72 0x02 0x01 0x80 0x6D
0x71 0x02 0x01 0x80 0x57
0x70 0x02 0x01 0x80 0x41
0x6F 0x02 0x01 0x80 0xF4
…
0x1D 0x02 0x01 0x80 0xEA
0x1C 0x02 0x01 0x80 0xFC
…
0x12 0x02 0x01 0x80 0x38
0x11 0x02 0x01 0x80 0x02
0x10 0x02 0x01 0x80 0x14
0x90 0x02 0x01 0x80 0x25
0x8F 0x02 0x01 0x80 0x90
0x8E 0x02 0x01 0x80 0xCA
(hier könnte ich alle Nachrichten die mit 0x90 bis 0x10 anfangen
extrahieren. Es variiert nur in einem Byte - kann man hier evtl. auf die
Tabelle zurückrechnen? Also "0x23 ist der Tabellenwert, der durch x^0x80
indiziert wurde. x wurde durch y^0x01 indiziert, y durch z^0x02 und z
durch 0x77^Init-Wert")
Vielen Dank!
Grüße
Lutz
Lutz B. schrieb:> Ich habe eine (drahtgebundene)> Übertragung, bei der ich die Nachrichten einwandfrei mitlesen kann.
und um welches Gerät handelt es sich genau?
hatte neulich so ne Nummer ... da wurde für jedes Byte in der Message n
anderes Polynom verwendet.
Habs schlussendlich Byte für Byte, Bit für Bit aufgedröselt. Da war
zusätzlich zum wechselnden Polynom nochmal die Nibbles übereinander xor
und vertauscht. Ätzend.
Lutz B. schrieb:> es handelt sich um verschiedene Nachrichten.
Aber hoffentlich um die gleiche Checksummenfunktion.
Wie kommst du auf die Idee, dezimal der hexadezimalen Darstellung
vorzuziehen???
Lutz B. schrieb:> 0x00 0x01 0x02 0xCA> 0x8E 0x02 0x01 0x80 0xCA
Hast du noch mehr solcher Übereinstimmungen im letzten Byte bei 4 und 5
Byte Nachrichten?
Hi!
So kann ich es per C&P direkt in MATLAB verwursten. Sonst muss ich immer
die entsprechenden Konvertierfunktionen quälen, bei '0x...' sogar in
Gänsefüsschen als String etc. so geht es per
"test = [ <paste> ];", evtl. noch mit nem reshape. Egal.
Gut, gleiche Checksummenfunktion kann ich nicht sicher sein. Hatte aber
zuerst versucht, die Checksumme nur über die kurzen Nachrichten zu
finden - zumindest da sollte sie hoffentlich gleich sein. Jetzt rechne
ich noch mal (nur) auf den Nachrichten mit Sequenznummern.
Tom M. schrieb:> Lutz B. schrieb:>> 0x00 0x01 0x02 0xCA>> 0x8E 0x02 0x01 0x80 0xCA>> Hast du noch mehr solcher Übereinstimmungen im letzten Byte bei 4 und 5> Byte Nachrichten?
Hi!
Nein, leider eben nicht. Die "196/C4 und 195/C3" fehlen in den
"Sequenznachrichten" leider... Habe nur noch "0x80 0x13 0x29 0x08 0x10
0xC4", was aber die Antwort vom Gerät ist - die hatte ich bewusst
weggelassen weil man da evtl. wirklich nicht weiß ob die Polynome etc.
gleich sind...
Super! Vielen Dank Mathias!
Ich hatte derweil mit den neu extrahierten Daten noch mal versucht die
Sache zu knacken und hatte, da ich glücklicherweise nur die ersten 4
Nachrichten testete, auch Glück:
Sequenznummern Polynom XOR / Init
16-23 0x07 0 / 0xff
24-39 0x07 0x80 / 0xff
40-47 0x07 0 / 0xff
usw.
Ist das bei dir implizit berücksichtigt? Bin nicht genug bewandert um zu
erkenne, ob dies bei dir in "crc8_algo" drin steckt? Ist das
standardmäßig so? Weil mit dem Init von 0xf3 bekomme ich bei mir keine
korrekten Werte?
Grüße
Lutz
Kan asta schrieb:> Lutz will einfach nicht mit der Info raus, wo die Daten herkommen.
Es handelt sich wohl um eine geheime AKW Anlage die jetzt mit AVR & Co.
erweitert wird, so eine Art Blinkenlights für unsere Nachbarn im All.
Lutz B. schrieb:> Ich hatte derweil mit den neu extrahierten Daten noch mal versucht die> Sache zu knacken und hatte, da ich glücklicherweise nur die ersten 4> Nachrichten testete, auch Glück:> ...> Ist das bei dir implizit berücksichtigt? Bin nicht genug bewandert um zu> erkenne, ob dies bei dir in "crc8_algo" drin steckt? Ist das> standardmäßig so? Weil mit dem Init von 0xf3 bekomme ich bei mir keine> korrekten Werte?
K.A..
Welche Daten?
Welche Routine?
Welche Hardware?
Mit der Handvoll Daten die du gütiger weise hier eingestellt hast kann
das eigentlich nur Chuck Norris 100%ig verifizieren.
Nein, völlig langweilig: Abbrandsteuerung für einen
Spartherm-Brenneinsatz (Kamin). Da aber teilweise hier viele
Bedenkenträger rumlaufen wollte ich das Thema Kohlenmonoxidvergiftung
oder sonstwas hier erstmal raushalten, bis eine Lösung gefunden wird.
Mittlerweile habe ich es dank Mathias Code-Beispiel (nochmals vielen
Dank!) auch ohne "if-Orgie" hinbekommen - interessant, dass sich das
Ergebnis dann so "regelmäßig" ändert.
Ist das "Auslassen" der "Division" bei gesetzten MSB irgendwas häufiger
verwendetes? Außer Verwirrung des Betrachters erkenne ich keinen
Vorteil...
Mathias, kannst du beschreiben, wie du auf die Lösung gekommen bist?
Grüße
Lutz
Lutz B. schrieb:> Da aber teilweise hier viele Bedenkenträger rumlaufen
Da hast du Recht. Der Thread wäre 3x so groß, und vor deiner
Türe würde schon die Feuerwehr stehen.
Lutz B. schrieb:> Ist das "Auslassen" der "Division" bei gesetzten MSB irgendwas häufiger> verwendetes? Außer Verwirrung des Betrachters erkenne ich keinen> Vorteil...
Das ist die Mathematik hinter der CRC-Berechnung und soll keine
Verwirrung stiften ;-). Die genaue mathematische Beschreibung hat sich
bisher meines Interessendunstkreises entzogen.
> Mathias, kannst du beschreiben, wie du auf die Lösung gekommen bist?
Mit dem Standard CRC-8 Algorithmus ausprobiert. Als Startwert ist
eigentlich 0xff üblich, was die Sache hier "etwas" verlängert hat. Bei
der guten alten CRC-8 sind eigentlich alle Schweinereien bei der
Implementierung in "The Wild" und es gibt z.B. auch 8-Bit Prüfsummen die
aus den unteren 8-Bit einer 16-Bit CRC bestehen.
Stimmt die CRC jetzt für alle Pakete? Bei deinen Beispieldaten war die
letzte CRC nicht richtig.
@Mathias K. (Gast):
Ist zwar schon 'ne Weile her, aber magst Du erzählen was Du gebaut hast?
Hab auch so'ne Steuerung die nun kaputt ist (bevor ich Hand angelegt
habe).
War das eine S-Thermatik Pro?
Gruß
Gut, nun ist die Steuerung wieder heile:
Nachdem mir Spartherm gestern telefonisch mitgeteilt hat, ich müsse die
Steuerung über einen Fachhändler einschicken: Platinentausch 400-500
EUR.
Ich glaube es hackt! Da ist neben Stromversorgung ein bisschen PIC, ein
RS485-Wandler und ein billiges QVGA-Display mit Touch drauf. Selbst als
komplettes Development-Kit vom ungarischen Hersteller kostet das keine
100 EUR...
Also habe ich zunächst selbst mein Glück probiert und ein bißchen
rumgemessen. Fazit: Der Li-Ion-Akku war kaputt und deswegen ist die
Spannungsversorgung zusammengebrochen. Akku ausgelötet -> läuft wieder.
Habe jetzt eine AA-Halterung eingebaut und bei *eichelt einen neuen Akku
bestellt. Falls ich den noch öfter tauschen muss... :-(
Trotzdem würde mich interessieren was Mathias K. sich da gebaut hat.
Eigentlich ist das Terminal ja nur eine Anzeige/Bedienung der
abgesetzten Steuerung (verbunden über RS485). Da die Steuerung ja auch
autark arbeitet, schwebt mir vor, die Messwerte und Register in meine
Haussteuerung zu übernehmen und an der Stelle ein Android-Tablet meiner
Haussteuerung zu montieren...
Hallo,
habe auch so eine Steuerung und das Protokoll würde mich auch
interessieren.
Möchte diese Messwerte dann mit openHAB anzeigen lassen.
Was gibt es bereits an bekannten Infos dazu ?