Rollo Funkprotokoll von Fa. Rollo

Begonnen von GuentherP, 02 Juni 2026, 17:02:28

Vorheriges Thema - Nächstes Thema

GuentherP

Hallo,
ich habe mit vor einiger Zeit einen neuen Funk Rollo von Rolladen.de zugelegt. Jetzt versuche ich ihn mit Hilfe des Signalduino anzusteuern. Folgendes habe ich bisher herausgefunden.
Der Rollo sendet auf 433,92 Mhz. Nach einer Synchronistaionsphase wird ein Manchester Code(8 Byte) gesendet. Der Code ist mit XOR verschleiert. Wenn ich das Rohsignal nach Manchester codieren bekomme ich für die Up-Taste bei 10 aufeinander Betätigungen folgenden folgende Werte

  MC-Code          XOR angewendet   Byte0   Byte1     Byte2    Byte3    Byte4    Byte5    Byte6    Byte7
2223a2933ee64822 22018131add8ae6a 00100010 00000001 10000001 00110001 10101101 11011000 10101110 01101010
3736b7862bf34f37 37018131add8bc78 00110111 00000001 10000001 00110001 10101101 11011000 10111100 01111000
3031b0812cf44e30 30018131add8ba7e 00110000 00000001 10000001 00110001 10101101 11011000 10111010 01111110
3938b98825fd4d39 39018131add8b074 00111001 00000001 10000001 00110001 10101101 11011000 10110000 01110100
131293a20fd74313 13018131add89450 00010011 00000001 10000001 00110001 10101101 11011000 10010100 01010000
141594a508d04214 14018131add89256 00010100 00000001 10000001 00110001 10101101 11011000 10010010 01010110
1d1c9dac01d9411d 1d018131add8985c 00011101 00000001 10000001 00110001 10101101 11011000 10011000 01011100
1a1b9aab06de401a 1a018131add89e5a 00011010 00000001 10000001 00110001 10101101 11011000 10011110 01011010
0f0e8fbe13cb470f 0f018131add88c48 00001111 00000001 10000001 00110001 10101101 11011000 10001100 01001000
080988b914cc4608 08018131add88a4e 00001000 00000001 10000001 00110001 10101101 11011000 10001010 01001110

Byte 2 - 5 sind soweit klar, sie beinhalten das Kommando sowie eine Adresse des Rollos. Bei Byte7 habe ich auch eine gewissen Algorithmus erkannt. Ich vermute dass das ein Zähler ist. Byte 6 ist Byte 7 XOR 0xD0.
Wo ich nicht weiterkomme ist Byte 0

tostmann

#1
Byte 0 ist kein Inhaltsfeld, sondern der Seed deiner XOR-Entschleierung.

Deine "XOR-Anwendung" ist ein Präfix-XOR: deob = MC XOR MC[i-1], mit deob[0] = MC[0]. Gegenprobe Zeile 1:

MC   22 23 a2 93 3e e6 48 22
deob 22 01 81 31 ad d8 ae 6a   <- passt über alle 8 Bytes und alle 10 Zeilen

MC ist also das laufende XOR (Präfix-XOR) von deob. Das erste Klartextbyte hat keinen Vorgänger, die Firmware muss deob[0] pro Frame also setzen - und genau dieser Wert ist dein Byte 0. Deshalb "wandert" es scheinbar zusammenhanglos: es ist der Initialisierungswert, der die komplette Funkfolge bei jedem Druck anders aussehen lässt, obwohl deob[1..5] konstant bleibt.

Der Seed ist aber nicht zufällig, sondern an Byte 7 gekoppelt:

B0 XOR B7 = 0x40 | cnt

Obere Nibble konstant 4, untere ein sauberer 4-Bit-Zähler. Nach cnt sortiert:

cnt  B0  B7
 f   37  78
 e   30  7e
 d   39  74
 -   (c b a 9 nicht dekodiert)
 8   22  6a
 7   0f  48
 6   08  4e
 -   (5 4 nicht dekodiert)
 3   13  50
 2   14  56
 1   1d  5c
 0   1a  5a

Lückenloser +/-1-Zähler über f...0; die sechs Lücken sind schlicht nicht dekodierte Frames, und deine Listenreihenfolge ist nicht die Sendereihenfolge. Die Zählrichtung lässt sich aus dieser ungeordneten Menge nicht festlegen.

Zwei strukturelle Korrekturen:

1) Byte 6 ist B7 XOR 0xC4, nicht 0xD0. Probe Zeile 1: 6a XOR D0 = BA, tatsächlich ist B6 = AE = 6a XOR C4. Und 0xC4 = B1^B2^B3^B4^B5 (01^81^31^ad^d8). B6 ist damit das Paritätsbyte, das B1^...^B7 = 0 erzwingt - also determiniert, kein eigener Freiheitsgrad.

2) Pro Frame bleiben damit nur zwei freie Bytes, B0 und B7, und die sind über den Zähler gekoppelt. "Byte 0 isoliert dekodieren" ist deshalb die falsche Fragestellung - es ist der zählerabhängige Seed.

Was zum Senden noch fehlt, ist die exakte Abbildung cnt -> (B0, B7). Du hast eine Gleichung (B0 XOR B7 = 0x40|cnt), brauchst eine zweite, um B7(cnt) festzunageln. Aus 10 nicht-zusammenhängenden Frames bekomme ich keine saubere Inversion: die XOR-Differenzen benachbarter cnt in B7 sind meist 0x06, teils 0x0a - nicht konstant, also kein simpler linearer Shift. Das riecht nach einer Bit-Permutation des Zählers in B0/B7, ist aber Hypothese, nicht belegt.

Zum Schließen:
  • Eine lückenlose, monoton steigende Serie aufnehmen (idealerweise 16+ Drücke ohne ausgelassene Frames, in bekannter Reihenfolge) - das fittet B7(cnt) direkt.
  • Dazu eine Serie von einem zweiten Handsender / anderer Adresse, um zu trennen, welche Bits Adresse und welche Zähler tragen - und ob der Seed in B0 derselbe ist oder um die Adresse versetzt.