Passa al contingut principal

Clonar comandament d’un tendal Bauhaus E3430-GBR amb arduino i RTL-SDR. Part 1.


Part 1, captura de senyal amb SDR.

Avui vos explique com he clonat un comandament d’un tendal amb un arduino, el seu mòdul de RF a 433 i un sintonitzador SDR.


Partim de què fa uns anys vaig comprar un tendal motoritzat per al pati en el Bauhaus.
El fabricant del tendal tal com apareix en el manual és depot18.de
https://www.bauhaus.se/media/pdf/Halvkassett.pdf
Aquest tendal inclou un comandament a 433Mhz i en el seu moment vaig intentar clonar-lo per diversos mètodes, un comandament específic per a copiar altres comandaments.


o un arduino amb un mòdul receptor de 433Mhz i un sketch dissenyat per a aquest propòsit.


Les proves varen acabar totes tal com van començar, independentment de la proximitat del comandament, la longitud de l’antena receptora, ...
Així que simplement vaig pensar que el comandament realment no emetia en la freqüència de 433,92Mhz, segurament l’emissió estaria desplaçada i per això no el vaig poder clonar.
Però fa un més aproximadament vaig escoltar en el podcast de programarfacil.com (el millor lloc per a començar en arduino i el món maker) on parlaven de SDR (Software Defined Radio) i va sortir també la paraula tendal (el podcaster també està interessat en tindre una còpia del comandament del seu tendal).


Sols faltava lligar caps i demanar una targeta DVB-T USB que siga compatible amb SDR i amb el sintonitzador R820T2, a mi m’han enviat una amb el xip FC0012, tot i que la descripció deia R820T2.
Coses de comprar en aliexpress i no llegir els comentaris (no soc el primer que li passa).
El sintonitzador R820T2 és millor perquè opera en un rang espectral superior al FC0012, però els dos operen en la banda de 433.9Mhz que és on emet el comandament del tendal, suficient per a les proves que volia fer.
En un principi el que volia era esbrinar si realment emet en eixa freqüència o pel contrari la freqüència d’emissió està desplaçada, però les eines per a SDR ens obrin un món de possibilitats.
Sobretot el Universal Radio Hacker (urh) que permet capturar i analitzar el senyal capturat.
No vos explique com instal·lar aquest programari atés que en la xarxa podreu trobar diverses formes de fer-ho. Jo ho he instal·lat en un Xubuntu linux amb pip (realment he creat un entorn virtual de python, però això no és necessari)
Una vegada instal·lat el urh (done per suposat que teniu els controladors instal·lats i funcionant) el primer que cal fer és veure en quina freqüència capturarem la nostra mostra. Cal iniciar l'analitzador des de "File -> Spectrum Analizer":


Hem d’anar prement el botó del comandament a prop del dispositiu SDR per veure en la imatge en quina freqüència central emet i seleccionar aquesta.
En el meu cas, com la meua targeta no sembla gestionar massa bé el guany i el soroll és molt elevat, el que he fet és desconnectar l’antena i apropar el comandament a la sintonitzadora.
Si teniu molt de soroll serà més difícil treballar amb el senyal i és possible que obtingueu valors incorrectes a l’hora de processar-la (ací el paràmetre noise que veurem endavant ens pot salvar).
Bé doncs, ja tenim la freqüència central del senyal, el guany, l’amplada de banda ..., ara cal enregistrar el senyal que emet el nostre comandament, tanquem aquesta finestra i seleccionem «File-> Record Signal»


Si ens adonem, ja tenim la freqüència, amplada de banda i el guany que hem seleccionat en la finestra anterior.
Li fem clic en el botó «Start» i comencem a enregistrar, en el meu cas tal com podeu observar en la imatge he polsat el botó del comandament del tendal 3 vegades.
Procedim a guardar l’arxiu que hem enregistrat i tanquem la finestra.
Automàticament ens apareixerà en la finestra principal el senyal enregistrat per a analitzar-la.


Tot i que en l’enregistrament hem capturat les 3 vegades que hem premut el botó del comandament, és molt important tractar-les per separat per veure si realment coincideixen. Es pot copiar i enganxar en un nou arxiu sense problemes.
La modulació que empra el meu comandament del tendal és OOK (On-Off Keying) basada en modulació per amplitud.
L’autodetecció de paràmetres va bastant bé i és un bon punt de partida, però sempre és millor acabar d’ajustar els paràmetres.
Si vos fixeu en la imatge anterior l’amplitud de la pulsació detectada és de 300, però si ampliem fins a veure les pulsacions i la seleccionem veurem que està al voltant de 350 (354 selected) tal com es pot apreciar en la següent imatge.

Ajustem aquest paràmetre amb el valor de noise, segurament farà falta pujar-lo un poc per a que no detecte el soroll com a un valor 1 i ja tindrem el senyal descodificat.
Els valors obtinguts per a cada pulsació són:

  1111111111111100001101001101101001101001101001001001001001101101001001101001101101101001101001101001101001001001101001001001101001001001100111111111111110000110100110110100110100110100100100100100110110100100110100110110110100110100110100110100100100110100100100110100100100110011111111111111000011010011011010011010011010010010010010011011010010011010011011011010011010011010011010010010011010010010011010010010011001111111111111100001101001101101001101001101001001001001001101101001001101001101101101001101001101001101001001001101001001001101001001001100111111111111110000110100110110100110100110100100100100100110110100100110100110110110100110100110100110100100100110100100100110110110110100011111111111111000011010011011010011010011010010010010010011011010010011010011011011010011010011010011010010010011010010010011011011011010001111111111111100001101001101101001101001101001001001001001101101001001101001101101101001101001101001101001001001101001001001101101101101
Com podem apreciar hi ha 7 preàmbuls i per tant s’envien 7 trames de dades diferents on cada trama està formada pels valors agrupats de 110 i 100 que equivalen a l'u i zero lògic. Aquesta codificació s’aprecia bastant bé en la imatge anterior on es veuen pulsacions llargues i curtes i espais llargs i curts.
1101001101101001101001101001001001001001101101001001101001101101101001101001101001101001001001101001001001101001001001100
1101001101101001101001101001001001001001101101001001101001101101101001101001101001101001001001101001001001101001001001100
1101001101101001101001101001001001001001101101001001101001101101101001101001101001101001001001101001001001101001001001100
1101001101101001101001101001001001001001101101001001101001101101101001101001101001101001001001101001001001101001001001100
1101001101101001101001101001001001001001101101001001101001101101101001101001101001101001001001101001001001101101101101000
1101001101101001101001101001001001001001101101001001101001101101101001101001101001101001001001101001001001101101101101000
1101001101101001101001101001001001001001101101001001101001101101101001101001101001101001001001101001001001101101101101
Si observem detingudament podem veure que al final de cada trama hi ha un zero de més (1000 quan hauria de ser 100) o li falten zeros (1 quan hauria de ser 100) degut a la interpretació que fa el programa. Corregim doncs aquests valors i substituïm el 110 per 1 i el 100 per 0 de forma que queda:
1011010100000110010111010101000100010001 HEX: B5065D5111
1011010100000110010111010101000100010001 HEX: B5065D5111
1011010100000110010111010101000100010001 HEX: B5065D5111
1011010100000110010111010101000100010001 HEX: B5065D5111
1011010100000110010111010101000100011110 HEX: B5065D511E
1011010100000110010111010101000100011110 HEX: B5065D511E
1011010100000110010111010101000100011110 HEX: B5065D511E
O siga, el que emet cada pulsació del comandament és:
4 * (PREÀMBUL + B5065D5111) + 3 * (PREÀMBUL + B5065D511E)
Hem de fer el mateix per a cada botó del nostre dispositiu, és una tasca tediosa però efectiva.
El següent pas és fer la prova pràctica en el nostre arduino i el mòdul RF de 433Mhz i enviar aquests senyals, però això ja és una altra història.

Comentaris