Ultimamente, tenho feito bastante automação residencial DIY (RF; 433MHz) em muitos dispositivos diferentes - que funcionaram bem para todos, exceto um. É basicamente um robô de piscina com um controle remoto realmente ruim.
Eu coletei alguns dados usando um BladeRF SDR e GNU Radio. A coluna "outros 3" é basicamente a ação, enquanto "outro 1" parece ser serial e "outro 2" define o robô se você tiver vários em uso, eu acho (algum amigo meu que tem o mesmo valor diferente) há). Não sei ao certo qual o objetivo da contagem, mas acho que é para que o robô saiba quando o intervalo fica muito amplo eventualmente (faltando alguma informação?). Eu reduzi os bytes e seus significados, mas falho no cálculo do CRC (soma de verificação) correto para os dados.
VELHO - VEJA ATUALIZAÇÃO ABAIXO !!
Aqui estão alguns dados de amostra:
<other1 > <other2> <other3> <count > <crc >
10110100 00111110 10001111 11001000 00000001 11110111 01011110
10110100 00111110 10001111 11001000 00000001 11111000 01010011
10110100 00111110 10001111 11001000 00000001 11111001 01010100
10110100 00111110 10001111 11001000 00000001 11111010 01010001
10110100 00111110 10001111 11001000 00000001 11111011 01010010
10110100 00111110 10001111 11001000 00000001 11111100 01010111
10110100 00111110 10001111 11001000 00000001 11111101 01011000
10110100 00111110 10001111 11001000 00000001 11111110 01010101
10110100 00111110 10001111 11001000 00000001 11111111 01010110
10110100 00111110 10001111 11001000 00000001 00000000 01100111
10110100 00111110 10001111 11001000 00000001 00000001 01101000
10110100 00111110 10001111 11001000 00000001 00000010 01100101
10110100 00111110 10001111 11001000 00000001 00000011 01100110
10110100 00111110 10001111 11001000 00000001 00000101 01100100
10110100 00111110 10001111 11001000 00000001 00000111 01100010
added data:
10110100 00111110 10001111 11001000 00000010 00000110 01100100
10110100 00111110 10001111 11101010 00000010 01100101 10011010
10110100 00111110 10001111 11101010 00000001 01100100 10011100
10110100 00111110 10001111 11101010 00000001 01100011 10011101
10110100 00111110 10001111 11101010 00000001 01100110 10011010
Há uma contagem para cada solicitação que deve ser alterada e alguns comandos a serem enviados, por exemplo, a coluna "outros 3" pode ler 00000010 em vez de 00000001.
Seria muito útil se alguém pudesse me dar algumas dicas sobre onde procurar. Eu tentei técnicas diferentes como o XOR nos bytes ou o módulo de cálculo, etc. - Eu até tentei diferentes ferramentas de força bruta do algoritmo CRC - infelizmente sem sucesso ainda.
EDIT: Coloquei os dados no Excel e adicionei alguma função (basicamente compara cada 4 bits com os de cima - a última transmissão). Eu fiz isso quando reconheci que o CRC permaneceu o mesmo uma vez. Esse foi o caso em que a ação e a contagem foram aumentadas em 1. Dê uma olhada:
ATUALIZAR:
Encontrei outras especificações mais detalhadas. do mesmo fornecedor na rede, depois de pesquisar por horas e saiu o tão pensado CRC é de fato uma paridade. Também ajustei meu fluxograma de captura de rádio gnu e coletei alguns dados novos. Desconsidere os dados acima e dê uma olhada aqui:
other 1> other 2 > other 3> other 4 > parity
10110100 001111101000111111101010 00000001 011110101001 0101
10110100 001111101000111111101010 00000001 011110111001 0110
10110100 001111101000111111101010 00000001 011111001001 0011
10110100 001111101000111111101010 00000001 011111011001 0100
10110100 001111101000111111101010 00000010 011111101001 0100
10110100 001111101000111111101010 00000010 011111111001 0011
10110100 001111101000111111101010 00000010 100000001001 0011
10110100 001111101000111111101010 00000010 100000011001 0100
10110100 001111101000111111101010 00000001 100000101001 0100
10110100 001111101000111111101010 00000001 100000111001 0011
10110100 001111101000111111101010 00000001 100001001001 0110
10110100 001111101000111111101010 00000001 100001011001 0101
10110100 001111101000111111101010 00000010 100001101001 0101
10110100 001111101000111111101010 00000010 100001111001 0110
10110100 001111101000111111101010 00000010 100010001001 1011
10110100 001111101000111111101010 00000010 100010011001 1100
10110100 001111101000111111101010 00000001 100010101001 1100
10110100 001111101000111111101010 00000001 100010111001 1011
10110100 001111101000111111101010 00000001 100011001001 1110
10110100 001111101000111111101010 00000001 100011011001 1101
E aqui está novamente como o excel chique:
Alguém sabe como calcular essa paridade? Tentei dividir os dados, etc., e usar cálculos de paridade comuns, mas infelizmente sem sucesso ainda.
fonte
Respostas:
Oh cara, não me pergunte como, mas acho que descobri.
Vamos dar uma olhada:
Basicamente, você divide os dados em pacotes de 4 bits cada. Você concata cada primeira, segunda, terceira e quarta letra juntas separadamente. Isso pode ser visto nas colunas 1, 2, 3 e 4. Depois, você conta os 1s em cada um deles (o número de unidades é escrito ao lado de cada um deles). Se eles são pares, é um 0 para o bit de paridade; se eles são ímpares, é um. Portanto, antes de terminar, agora você deve adicionar 1 ao binário de antes (!). Isso correspondia todas as vezes e eu consegui gerar meus próprios quadros dessa maneira. Problema resolvido, parece. Perfeito. Muito obrigado a todos por contribuírem.
fonte