IR Protocol Axa Raambediening.

Hoi,

Ik heb een axa raamuitzetter liggen met infrarood afstandsbediening. Deze wil ik gaan toevoegen aan mijn domotica systeem, bij voorkeur met behoud van de afstandsbediening. Vandaar dat ik het ding een beetje aan het uitpluizen ben. Aangezien jullie altijd graag alles willen weten hierbij eerst hetgeen wat ik tot nu toe heb ontdekt.

De unit zelf word aangestuurd door middel van een PIC, de 12F683, uiteraard beveiligd. De PIC heeft 6 IO's. 1 voor motor open, 1 voor motor dicht, 1 voor motor overbelast, 1 voor LED, 1 voor 'raam-zit-echt-dicht'-beveiligings tactile en 1 voor de infrarood ontvanger. Bij bediening van de afstandsbediening gaat de motor draaien. Als de motor aan het einde van open of dicht zit word de motor "overbelast", gaat de betreffende pin hoog en draait de motor even de de andere kant op. Als het raam open staat word dit ontdekt door de tactile en gaat de led knipperen. De afstand bediening bevat eenzelfde PIC, uiteraard ook beveiligd. Als ik een toets indruk word er een 56 kHz infrarood pulstrein verzonden welke de infrarood ontvanger weer vertaald in een logische pulstrein. Dit omzetten werkt heel simpel: 56 kHz aanwezig -> Ontvanger geeft 0. Geen 56 kHz aanwezig - > Ontvanger geeft 1. Een complete bit(!) word doorgegeven in tijdsbestek van 1 miliseconde. Een 0 is 200 microseconde laag en 800 microseconde hoog. Een 1 is 800 microseconde laag en 200 microseconde hoog.(Was dit niet een Manchester code ?)

Op deze manier word een pulstrein van 14 bytes verzonden, startbit niet meegeteld. En deze pulstrein probeer ik te ontcijferen. Ik had namelijk verwacht dat de afstandbediening constant hetzelfde zou verzenden. Dit blijkt echter niet zo te zijn. Als voorbeeld twee pulstreinen van twee toetsindrukken achter elkaar.

S0 10010111 00000111 00110011 11001011 00000110 10110101 00111000 01000011
{0000000 00000000 000000010} [01101101] 11001101 0111111 (1)

S0 11000100 11101110 00100001 10101101 10111010 10010111 10001111 11001101 {0000000 00000000 000000010} [01101110] 10011101 1000101 (0)

Als ik iets beter kijk, zijn mij een paar dingen al duidelijk: S0 is startbit. Gedeelte {} is constant hetzelfde. Gedeelte [] is een teller welke bij elke nieuwe drukknop actie een verhoogd en () is even pariteits bit. Verder ben ik het verhaal een beetje kwijt. (Op verzoek kan ik vanavond meer codes posten.)

Nu kan ik zelf een nieuw programma schrijven en in beide PIC's schieten, maar ik vind het leuker om te ontdekken hoe dit protocol werkt.

Dus: Kan iemand mij een schop in de goede richting geven ?? Hetzij door het protocol te kennen en een tipje van de sluier te lichten of door toch een verband te zien ?? Zoveel ervaring heb ik niet met het ontcijferen van protocollen....

PE9SMS

Special Member

Leuke uitdaging..
>4 miljard zal wel refereren aan 2^32.

Politie Keurmerk Veilig Wonen
Maar dat is nog niet alles. De AXA Remote 2.0 is ook een heel veilig product. Het maakt gebruik van meer dan 4 miljard roulerende codes en het is onmogelijk dat iemand anders met een andere afstands- bediening uw raam opent.

This signature is intentionally left blank.

Meer dan 4 miljard codes passen echt niet in die PIC, dus het moet uitgerekend kunnen worden. Maar bedankt voor de tip, ik zal me eens in roulerende codes gaan verdiepen... ;).

De counter werkt volgens een bepaald patroon. Zoals je het nu zegt isber geen communicatie terug naar de AB.

Het patroon ligt dus vast. Staatber in het boekje Iets over inleren?

Waarschijnlijk krijg je bij 2 afstandsbedieningen dat ze uit sync raken. Weet niet of dat uberhaubt mogelijk is.

Kun je eens een paar opeenvolgende codes plaatsen, het liefst in hex.

GMT+1
Arco

Special Member

Is dus een vorm van code hopping. Normaal wordt die om de duizend codes (min of meer) herhaald. Of je zult ze allemaal moet opslaan, of je moet de 'seed' code weten.
Met twee of meer afstandsbedieningen zit daar dezelfde 'seed' code in; ze genereren dus beide dezelfde codes...

[Bericht gewijzigd door Arco op zondag 3 april 2016 00:12:31 (26%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Goedemorgen,

Ik heb hierbij nog een paar opvolgende code's:

B S 01011111 01100111 01011011 11010110 10010111 01110000 01001111 00110011 00000000 00000000 00000010 01110011 10101000 11111000

B S 10101000 11010101 11011100 10110111 10100010 00111110 00110100 11110001 00000000 00000000 00000010 01110100 11010011 11010000

B S 00001111 01011110 10000010 10110100 00100011 00001100 10111011 10111100 00000000 00000000 00000010 01110101 00001100 01010100

B S 10110110 10000110 10101010 00001110 01100000 11011111 01010001 00101001 00000000 00000000 00000010 01110110 10010110 10110111

B S 10001100 01111101 01100100 11111011 11011000 11111100 00100111 11011101 00000000 00000000 00000010 01110111 10001000 11001001

M S 10110010 00100011 01001011 01110101 11111000 10000000 11011011 00010101 00000000 00000000 00000010 01111000 11010111 00000011

M S 00110110 01111000 10000111 00110101 11001010 01110011 00101111 10101000 00000000 00000000 00000010 01111001 00100011 01111011

M S 00001000 11110110 01001011 00000010 10111010 00001000 10110101 11000000 00000000 00000000 00000010 01111010 10011000 01000010

Of dezelfde codes in Hex:
B S 5F 67 5B D6 97 70 4F 33 00 00 02 73 A8 F8
B S A8 D5 DC B7 A2 3E 34 F1 00 00 02 74 D3 D0
B S 0F 5E 82 B4 23 0C BB BC 00 00 02 75 0C 54
B S B6 86 AA 0E 60 DF 51 29 00 00 02 76 96 B7
B S 8C 7D 64 FB D8 FC 27 DD 00 00 02 77 88 C9

M S B2 23 4B 75 F8 80 DB 15 00 00 02 78 D7 03
M S 36 78 87 35 CA 73 2F A8 00 00 02 79 23 7B
M S 08 F6 4B 02 BA 08 B5 C0 00 00 02 7A 98 42

B = bovenste knop op afstandsbediening. S = Startbit. M = middelste knop.

Ik heb ook op de aangegeven site gekeken en me wat ingelezen over roterende codes. Ik denk dat bytes 9 - 12 de teller zijn.

Wat wil ik verder nog doen:
- Tweede en mogelijk derde afstandsbediening lenen en ook uitlezen.
- bijhouden welke bits er altijd 1 of 0 zijn.
- Eens kijken of ik logisch kan rekenen met sommige bytes en wat er dan gebeurd. (or xor etc..)
- Omzetten van bittrein naar text automatisch maken. (Doe ik nu nog handmatig met een oscilloscoop.
- Afstandbediening indrukken zonder dat de ontvanger het ontvangt om te kijken hoever het geheugen de teller bijhoud.

@Arco: Als ik meerdere afstandsbedieningen heb, is het dan mogelijk de code eruit te filteren ? En weet je misschien hoe ?

Shiptronic

Overleden

Is het een optie om gewoon relais over de knoppen te solderen en die aan te sturen ?

Wie de vraag stelt, zal met het antwoord moeten leren leven.
Arco

Special Member

@Arco: Als ik meerdere afstandsbedieningen heb, is het dan mogelijk de code eruit te filteren ? En weet je misschien hoe ?

Dat is moeilijk. (anders had het ook weinig nut... :) )
Beschrijving van Keeloq: http://ww1.microchip.com/downloads/en/AppNotes/91002a.pdf

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

het lijkt erop dat de actuator met meerdere AB's bediend kan worden (tot 8 stuks).

het is dus mogelijk om 1 AB met relais aan je domotica te hangen en een AB op de bank te laten liggen. dat is de makkelijke optie :p

het aparte is dat 1 AB ook meerdere actuators aan kan sturen. kennelijk is de counter dus deel van het bericht, want het aanmelden bestaat enkel uit het indrukken van de bovenste knop.

aangezien er geen communicatie van de actuator naar de AB is (er zit geen IR led in de actuator), kan de AB dus niet weten of er een gewone 'open' actie wordt uitgevoerd, of een 'aanmeld' actie.

dat zou haast betekenen dat iedere zendactie alle informatie bevat. (uniek ID, welke knop, checksum/CRC of encryption key)
[edit]
het lijkt erop dat je als je de eerste 12 bytes in een CRC algoritme gooit, de laatste 2 bytes de CRC zijn.

de truc is nu dus de eerste 8 bytes te ontcijferen op basis van de waarde van de counter

http://www.lammertbies.nl/comm/info/crc-calculation.html
voorbeeld van jouw 5e bericht:

GMT+1

subtiele kick:

er zijn dus 3 dingen die we weten:
- Uniek ID van de remote (geheim)
- Counter waarde
- Knop die is ingedrukt

misschien zijn er meerdere variabelen die het bericht samenstellen, maar daar kan ik nu niets voor bedenken.

het zou interessant zijn als je 2 berichten met dezelfde counter kon versturen. wat gebeurd er als je de batterij uit de remote haalt? begint de timer weer bij 0?

probeer eens:
batterij eruit, druk knop 1 in, neem signaal op
batterij eruit, druk knop 1 in, neem signaal op
batterij eruit, druk knop 2 in, neem signaal op

als bij de eerste 2 het signaal hetzelfde is, lijkt het erop dat de unieke ID vastligt (deze kan natuurlijk ook na iedere reset random zijn)

GMT+1
Arco

Special Member

Aangezien het een picje is wat erin zit, zal het wel Keeloq zijn. Daar zitten diverse codes in voor bescherming.
De seed code wordt random aangemaakt. Ook wordt deze bij sommige apparaten bij batterij vervangen opnieuw aangemaakt, zodat 'ie opnieuw ingeleerd moet worden.
(dit voor max. bescherming en om een andere code te kunnen gebruiken voor het uiterst zeldzame geval dat je 2 AB's hebt die dezelfde code hebben)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Arco,

dat zou goed kunnen.
het is echter zo dat in de openingspost staat dat zowel de remote als actuator dezelfde PIC bevatten.

ik zie in dat Keeloq iets over propietary protocol. is dit protocol vrij te implementeren?

ik zag eerder een linkje (lijkt nu weg) waar bij de zenders kant-en-klare IC's waren. ik kan me niet voorstellen dat ze die niet gebruiken, aangezien er verder niets bijzonders aan die AB zit.

GMT+1
Arco

Special Member

ik zie in dat Keeloq iets over propietary protocol. is dit protocol vrij te implementeren?

Ja,
Je moest alleen wel een NDA ondertekenen en terugsturen dan kreeg je de documentatie opgestuurd...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Bedankt voor het meedenken. Wegens mijn werk heb ik er even geen tijd voor gehad maar a.s. zondag heb ik weer een hobby dagje en wilde ik verder experimenteren. Dan wilde ik inderdaad signalen gaan namaken, teller verhogen/verlagen, zelfde signalen sturen etc... en dat gaan uitproberen. Even geduld nog....

Wat betreft Keeloq. Naar aanleiding van een eerder gemelde link heb ik me hier al een beetje in verdiept. Als ik alles goed heb begrepen heeft Keeloq genoeg aan ongeveer 64 bits. De afstandbediening stuurt er 112 (14 Bytes). Ook heeft Keeloq een duidelijke leermodus nodig en dat is bij de afstandsbediening ook niet nodig. Als ik de spanning van de motor afhaal is hij daarna de afstandbediening vergeten. Ik moet daarna eenmaal een toets indrukken waarna hij de afstandbediening opnieuw herkent. Als ik te lang wacht dan is het "helaas pindakaas" en moet ik eerst de batterijen weer verwijderen. Ook gezien de kleine PICjes denk ik eerder dat ze zelf wat in elkaar geflanst hebben. Het is uiteindelijk maar een raamopener en geen kluis. Ik verwacht dus eerder dat ze wat logica op de code loslaten zodat direct copieeren niet mogelijk is.

(Overigens is het nog de eerste versie en niet de tweede.)

Tot zover... Wordt vervolgt.

Helaas niet. Het was de bedoeling om het protocol te ontcyferen, maar je weet wel hoe dat gaat: andere projecten, verplichtingen en mooi weer hebben er voor gezorgd dat het weer terug in de doos zit. Wachtend op een koude winteravond of ander moment dat ik mij wer verveel.... (dat doet hij al zeker 4 jaar namelijk.)

GJ_

Moderator

Op 2 april 2016 21:32:47 schreef PE9SMS:
Leuke uitdaging..
>4 miljard zal wel refereren aan 2^32.
[...De AXA Remote 2.0 is ook een heel veilig product. Het maakt gebruik van meer dan 4 miljard roulerende codes en het is onmogelijk dat iemand anders met een andere afstands- bediening uw raam opent...]

Nou onmogelijk, meneer de inbrekert is al een heel eind op weg geholpen met de lijst van TS :-)

Bijna wil ook de IR-code ontfutselen, maar toch geprobeerd de 1-wire seriële data decoderen.
De Remote heeft nl. 2x RJ12 6-polig connectoren waarvan per 2 pinnen een plus, een min, en 1-wire comm.

Met de ZeroPlus Lab-C(16128) en standaard programma bleef ik stranden, via,via, heb ik toch maar Pulsview (sigrok.org) geïnstalleerd deze werkt m.i. beter en is eenvoudiger.

Nadat ik de basis settings goed had staan, kon ik de serie-data sample'n erna de decoder los te laten (UART) kon ik de hex. waarden zien en met ASCII kon ik STOP zien wanneer ik met de Wandbediening (van AXA) op "stop" had gedrukt.
Verder zie ik ook 0A en 0D verschijnen (linefeed&carrige return).
Vervolgens nog, 2 0 0 spatie , dit is mij onduidelijk.

Dat er op dezelfde lijn twee richting verkeer is zie ik dat 'ontvanger' OK terug meldt, als er geen, verminking onderweg is en de commando geaccepteerd is.