VariFlight ADS-B - Flightradar em chinês

O Flightradar, de certa forma, tornou-se um nome familiar, de fato substituindo o conceito de "local onde você pode assistir a aeronave em tempo real" . Embora na verdade existam vários sites grandes e pequenos projetos ainda mais, é comum ver na mídia as notícias sobre o evento da aviação com a frase "de acordo com o site do Flightradar" e uma captura de tela de outro recurso.

Existem várias publicações no Habré sobre radarporting nas quais ou nos comentários aos quais não apenas o Flightradar é mencionado. Nesta publicação, falarei sobre o serviço chinês de rastreamento de tráfego aéreo e seu receptor ADSB chinês , que eles enviam gratuitamente.



Radarspotting é uma atividade interessante o suficiente para cativar um número notável de pessoas. Vários artigos sobre Habré descrevem muito bem a essência da lição:


O receptor recebe, transmitido por aviões, um sinal na frequência de 1090 MHz, decodifica e transmite em algum formato. Por exemplo, assim:

{"updatetime":1537902225,"UTC Time":"2018-09-25 19:03:45","anum":"TCETM","fnum":"KKK6944","position":{"long":30.66455078125,"lat":39.351677},"height":10005.06,"speed":888.96,"angle":130}, 

Essa atividade não é apenas interessante, mas tornou-se a atividade de várias empresas:


Poucas pessoas pensam como ganham a vida e como serviços como o Flightradar funcionam. Um exemplo disso pode ser visto na wikipedia " serviço público da web que permite o monitoramento em tempo real da posição da aeronave no ar ". O próprio artigo e o título dão uma falsa impressão do Flightradar como um tipo de serviço de entretenimento.

De fato, tendo surgido como um hobby no início dos anos 2000, essas empresas atingiram rapidamente um período de recuperação e aumentaram sua renda a cada ano. Por exemplo, o Flightaware, fundado em 2005, tornou-se lucrativo já em 2006, ganhando mais de US $ 1 milhão nos primeiros 18 meses e apresentando um crescimento anual de 40 a 75%. De acordo com alguns recursos, a receita anual do Flightaware excede US $ 9 milhões, e o Flightradar mais de US $ 2 milhões.

Se na Europa existe o Flightradar, nos EUA - Flightaware, na China existe o VariFlight. Da mesma forma, o serviço negocia status de vôos, estatísticas e arquivos de vôos, realiza análises e previsões para clientes - organizações e clientes individuais.

Palavras próprias do VariFlight:

  <meta name="description" content="VariFlight         .    ,      ,    .    ,     ,         ."> <meta name="keywords" content=" ,   ,  ,  ,  ,  ,  ,  ,  ,   ,  ,  ,  ,  ,  "> <meta property="og:url" content="http://www.variflight.com/ru/"> 

As empresas trocam dados, tanto próprios quanto os obtidos, por exemplo, da Federal Aviation Administration dos EUA. Mas você pode obter o máximo lucro de seus próprios receptores, cuja operação não custa à empresa nada. eles são instalados por entusiastas de radarspotting, você só precisa gastar dinheiro em fabricação e transporte. Portanto, a partir de certo ponto, as empresas começaram a vender e distribuir seus receptores gratuitamente. Gratuito para onde a empresa ainda não possui cobertura com sua rede de receptores e para onde não há dados.

O custo dos dados justifica a distribuição “gratuita” dos receptores (preste atenção ao texto embaixo da tabela - o receptor continua sendo propriedade da Flightaware, formalmente alugada gratuitamente).


Em 2015, a rede Flightradar tinha mais de 8.000 receptores ativos e o Flightaware tinha cerca de 4.500. Mas a Flightaware começou a distribuir os receptores dois anos antes, e o Flightradar já estava construindo sua rede há quase dez anos. Atualmente, existem mais de 15.000 receptores na rede Flightaware. O software receptor Flightaware está sendo aprimorado constantemente e atualmente trabalha com dados FMSDATA, FMSWX.

Mapa de localização dos receptores em março de 2017:

imagem

Orange é grátis para receptores Flightaware, branco para receptores caseiros e vermelho para PlanePlotter pago.

Esta é a cobertura da rede de receptores Flightaware em dezembro de 2015:


E em março de 2017, a rede de receptores Flightaware ( status atual no local ) forneceu essa cobertura:

imagem

Nem sempre é possível instalar receptores, portanto, em 2018, os dados dos receptores terrestres são complementados pelos dados dos satélites Iridium NEXT - "Pela primeira vez, será possível monitorar continuamente aeronaves em qualquer lugar do mundo" .


Cor cinza-azul - dados dos satélites Iridium NEXT. Verde e amarelo (o último é MLAT ) - dados dos receptores terrestres.

O raio da zona que uma estação cobre é limitado pela curvatura da superfície da Terra e pelos obstáculos que cobrem o horizonte, e não ultrapassa 450 km, no máximo. E no "caso usual" de cerca de 150 km. Com raras passagens troposféricas para essa radiofrequência, é possível olhar além do horizonte. Um exemplo das zonas de cobertura máxima das estações que transmitem no Planeradar.ru:


Picos agudos nos diagramas de recepção são apenas casos isolados de recepção a distâncias muito grandes.


A animação abaixo mostra o que causa a necessidade de enviar receptores. Fora da UE / EUA, esse hobby não é muito popular. Pode haver uma razão para o custo de um hobby, e este mapa indica indiretamente o nível de bem-estar, educação técnica e densidade populacional na região. Talvez o assunto seja de interesse prático - os usuários que transmitem os dados de seus receptores recebem uma conta corporativa gratuita do Flightaware , que custa US $ 90 por mês.


E assim a situação é descrita. O mercado para esse serviço está crescendo, o mercado precisa de mais dados e o VariFlight também começou a implantar sua rede. Em abril de 2018, a VariFlight anunciou que estava procurando voluntários para hospedar equipamentos gratuitos. Um exemplo dessa postagem em uma postagem do Instagram .

E em agosto, deparei com esta oferta para solicitar o receptor gratuitamente em http://flightadsb.feeyo.com (o site foi fechado em setembro de 2019 - o novo site flightadsb.variflight.com e o link para solicitar o dispositivo aqui ). Depois de estudar o site, notei que a empresa está procurando membros voluntários da rede em países próximos às fronteiras da China. E, ao preencher o questionário, ele não esperava que o Distrito Federal do Sul estivesse na zona de interesse da empresa.


No próprio aplicativo, é necessário indicar no mapa o local da instalação (local da instalação ), o piso da instalação da antena no prédio ( piso da instalação , por exemplo, 7/9 - 7º andar de um prédio de 9 andares), o código do aeroporto mais próximo ( código do aeroporto - eu indiquei o código IATA) e Faça o download das fotografias do horizonte no site de instalação. O restante é quase o mesmo que o pedido no Aliexpress, exceto os itens Título, Nacionalidade, Ocupação, Empresa. É preenchido em inglês com um nome completo.

Depois de verificar o e-mail algumas semanas depois, encontrei dois e - mails do ADSB that 系统 (Sistema de exibição do ADS-B) de que o aplicativo foi aprovado quase imediatamente e de que o pacote estava correndo para mim por um longo tempo, já tendo passado na alfândega.


Na segunda letra havia um nome de usuário, senha e número da faixa do pacote. E também uma instrução que eu não notei e li quando ... você mesmo sabe quando eles costumam ler a instrução.


O login correspondeu ao nome completo no aplicativo e a senha é claramente enviada para todos. Portanto, altere a senha imediatamente (e faça o login, se necessário).

Em geral, a frase “Isso é algum tipo de absurdo” do jogo Greve repentina aparece cada vez mais na minha cabeça, se alguém se lembra de como os alemães falam russo no jogo com sotaque. Às vezes quieto, às vezes barulhento.

A propósito, o perfil era a única página em inglês, então tudo será em chinês. Em Habré, a wtigga publicou um excelente artigo sobre a Internet chinesa "Internet e software chineses: sobre dolorosas" . Eu senti toda a dor agora. Se você ainda não leu, é hora de se preparar.


O navegador Google Chrome com a função de tradução ajudará você a trabalhar no site, mas muitas páginas que acabaram nem sempre são possíveis para ele.


Os lugares serão frases engraçadas.


E, portanto, efetue login com os dados do segundo email.


E vá para Informações pessoais . Como se viu, o Google Chrome nem sempre pode traduzir uma página ou falha na primeira vez. Nesse caso, após várias tentativas de tradução automática, tivemos que copiar o texto para o Google Tradutor. Portanto, posto uma dica para quem enfrenta o mesmo problema.

Existem duas guias na página, cuja ativa é marcada com uma linha vermelha. No primeiro você não pode tocar em nada.


  1. Nome completo
  2. O seu número de telefone
  3. Seu email
  4. Código do aeroporto
  5. O nome do seu receptor ADSB

O ponto QQ é o mensageiro chinês Tencent QQ .

Na segunda guia, altere a senha


  1. Senha antiga
  2. Nova senha
  3. Repita a nova senha

Fora isso, a tradução automática quase sempre funciona. O design do mapa do site é muito próximo ao site do Flightradar e os "recursos" da tradução não impedem seu uso.


Após uma inspeção detalhada, o serviço é diferente, por exemplo, uma funcionalidade interessante que o Flightaware não possui - um mapa de calor , traduzido pelo Google Chrome como "análise térmica".


Um recurso interessante em alguns voos:


Provavelmente não há informações sobre os aeroportos de partida e desembarque para este voo.

Visão geral do pacote e do receptor


De acordo com o número da faixa, o pacote foi enviado em 6 de setembro e recebido em 18 de setembro. A caixa tem dimensões sólidas que surpreenderam os funcionários dos correios. No caminho dos correios para dentro, algo sacudiu, retiniu e rolou.


A caixa aberta ficou um pouco surpresa com a falta de materiais de embalagem.


Para comparação, a caixa no receptor Flightaware.


Surpreendentemente, o conteúdo da caixa não pareceu ser afetado. Somente na antena houve um arranhão - o filme foi arrancado.


O próprio receptor possui as inscrições de apenas dois conectores - alimentação e HDMI. Além de dois, todos os conectores são exibidos em um lado. LAN, 2 portas USB, conector de quatro pinos (suposição de que essa interface serial foi confirmada discando para BCM 14 (TXD / transmissão de 8 pinos),
BCM 15 (RXD de 10 pinos / recebimento)), alimentação de 5 volts e conector SMA (fêmea) para antena.


No lado oposto, atrás de dois orifícios no gabinete, existem LEDs verde e vermelho. E ao lado dele está um adesivo com o "número de série" do receptor, gravado à mão. O receptor também possui HDMI e microUSB.


A tampa do receptor possui duas orelhas para montagem na parede, o que a distingue positivamente da quase caixa do receptor Flightaware, na qual o fabricante forneceu apenas quatro pernas de silicone na parte inferior.


Verificando se essas duas orelhas podem ser usadas para montar o receptor:


Flightaware Flightfeeder de cabeça para baixo:


Para comparar tamanhos de receptor:


A questão natural é "o que há dentro?" Tendo removido a tampa fixada por 4 parafusos, vemos esse arranjo.


Os conectores estão localizados em uma placa receptora separada, feita na forma de uma placa de expansão para o Raspberry Pi 3 Modelo B V1.2.

Para comparação, uma fotografia de um Flightaware Flightfeeder (G6) sem capa. Essa geração de receptores foi enviada até cerca de 2017. Construído no RPi 2 Modelo B v.1.1 e no Modo-S Beast -decodificador simplificado para um canal.


O verso desse design ocultava um elemento inesperado. Um radiador maciço localizado na parte inferior da placa é uma surpresa. A necessidade é incompreensível (uma semana depois, acho que é uma "performance tropical". Nas minhas condições, o radiador está um pouco quente).


Além disso, a placa de expansão está conectada ao conector RPi de quatro pinos com três fios soldados nos pontos de teste PP27 (USB VCC), PP44 (USB D-),
PP45 (USB D +).


I.e. nada pode ser conectado ao conector USB superior direito. Portanto, a foto do gabinete localizado acima mostra que, dos dois conectores USB emparelhados, o slot no gabinete é apenas o oposto ao mais próximo da LAN.


Eles fizeram o mesmo no Flightaware, soldando o receptor nos contatos de um dos conectores.

A maior parte da placa de expansão é uma tela de metal. Das partes visíveis, os conectores estão de um lado e, do lado oposto, dois indicadores e uma certa “bobina” com derivações. Lembra shunt com resistência variável. Talvez 1div0 , autor do artigo "Por que dobrar as faixas?" sabe o que é isso. Durante a operação normal, o LED verde está aceso. Nesse caso, a luz vermelha está acesa - eu não sei. Até eu assistir a sua inclusão.


No lado dos conectores existem conectores de energia e antena, e um conector de quatro pinos de finalidade desconhecida.

Todos os eletrônicos estão escondidos sob uma grande tampa de estanho da tela. Com o Flightaware Flightfeeder, a placa do receptor não está protegida. No fórum do Flightaware, os desenvolvedores responderam a essa pergunta: a carcaça metálica do próprio receptor é suficiente para protegê-lo contra interferências externas.


Uma tentativa de olhar sob a tela foi um sucesso da segunda abordagem. A tampa caiu e acabou ...


... como se viu, tudo foi em vão - a marcação com microchips foi cuidadosamente cortada.


Olhando para o futuro, direi que acabou sendo um receptor RTLSDR quase comum - RTL2832U DVB-T (0bda: 2838), chamado "dongles", "assobios" e que são dedicados a vários artigos sobre Habré que dão uma idéia desses dispositivos e como eles simplificaram e baratearam a implementação da recepção e processamento de sinais de rádio em computadores. Por exemplo:


O último descreve bem os antecedentes da questão:
A publicação do chip RTL2832U para receptores de televisão digital no formato DVB-T não prometeu nenhuma sensação, porque a Realtek já estava um pouco atrasada com seu lançamento. Em 2010, um padrão DVB-T2 mais progressivo com codificação de informações mais eficiente já estava sendo introduzido, portanto, inicialmente, a novidade não atraiu muita atenção. Por dois anos, sintonizadores USB baratos baseados nele foram usados ​​para a finalidade pretendida, até o início de 2012 houve um vazamento de algumas informações técnicas sobre os modos operacionais deste chip. Descobriu-se que, para receber rádio analógico (FM) e digital (DAB) na banda VHF, esse chip usa o princípio de decodificação de software de uma banda de frequência previamente digitalizada a partir do éter. I.e. Grosso modo, ele digitaliza um sinal de alta frequência da entrada da antena, e a filtragem de uma portadora específica e a detecção (extração de informações úteis) do fluxo digital recebido são deixadas para o processador central. Obviamente, isso foi feito por razões econômicas, da mesma maneira que no momento do pôr do sol, o Dial-UP, "soft-modems" extremamente baratos, que também representavam apenas um par avançado de DACs e ADCs, se espalhou e todo o processamento de sinal foi realizado pela CPU. thread com a maior prioridade.

Ao contrário dos "sintonizadores regulares" que tenho, esta instância do usb id 0bda: 2832 possui um número de série de 17 dígitos.
Dispositivo 005 do barramento 001: ID 0bda: 2832 Realtek Semiconductor Corp. RTL2832U DVB-T
Encontrado sintonizador Rafael Micro R820T
I.e. análogo ao "apito azul" usado para criar receptores ADSB caseiros. Na foto, o receptor está no OrangePI.


Montando o receptor de volta, instalei um radiador por precaução. Comprado especificamente para a conclusão de roteadores e outros equipamentos domésticos.


Fonte de alimentação 5V 2A. Parece mais sólido do que a fonte de alimentação do Flightaware Flightfeeder. Mas com um plugue chinês ... tentei me lembrar de onde estava o adaptador.


Em uma caixa de papelão branco havia uma bolsa de veludo tão agradável.


"... no peito - uma lebre, em uma lebre - um pato, em um pato - um ovo, em um ovo - uma agulha ..."


Dentro havia um quebra-cabeça de três adaptadores, que resolveu a questão "onde está o meu adaptador".


Em uma caixa de papelão marrom havia um pára-raios "CA-23RP 2.5GHZ 400W Made in Japan". Não conheço essa configuração de outros receptores ADS-B. Muito razoável para proteção contra acidentes de baixa potência.


É provável que a antena interna teste o receptor sem instalar uma antena externa. Não é adequado para uso prático. Mas é vendido no Aliexpress / Ebay como uma “antena ADS-B”, mas seu verdadeiro objetivo é dado pela inscrição na sola magnética. Eu costumava pegar aviões nessa antena não mais do que dentro de um raio de 30 a 40 km.

Perto do adaptador N (fêmea) - SMA (macho). Talvez um presente em caso de conexão de um filtro ou amplificador de baixo ruído.


Cabo coaxial para uma antena de 5 metros com conectores N e SMA e um cabo de par trançado de 10 metros ("cobre 100% livre de oxigênio, blablabla").


Cabo da antena marcado com KOPA PLESS RG400-KF MIL-C-17. Cabo coaxial flexível com trança dupla do Google M17 / 128-RG400 RG-400 com uma cor diferente da bainha:

  • Frequência máxima de operação 6 GHz
  • A uma frequência de 1,20 GHz, a atenuação máxima é de 0,54 dB / m

É muito duvidoso que essas sejam as características do cabo chinês. A propósito, o Flightaware incluía um péssimo cabo de antena, embora italiano. Encurtar o cabo da antena para várias dezenas de centímetros três vezes aumentou o número de pacotes recebidos pelo receptor Flightaware.


Antena externa e sua fixação ao mastro.


A singularidade do FlightFeeder ADS-B VariFlight no Facebook:


A antena é um pouco menor em diâmetro que o Flightaware


Suporte de mastro Flightaware de duralumin


Um presente com o símbolo do VariFlight. A julgar pelas inscrições no verso, esta etiqueta deve ser presa na bagagem em caso de perda no aeroporto, preenchendo os dados de contato do proprietário.



Primeira inclusão


Ligar a energia não mudou nada fundamental na aparência do dispositivo. Somente os indicadores da LAN estavam acesos, o roteador possui um novo nome de host raspberrypi na lista de endereços IP dhcp emitidos. O HDMI tinha a saída de inicialização RPi usual e a solicitação de login.


E é isso. A interface da web esperada para esses dispositivos no IP: 8080 não estava disponível. A varredura das portas do dispositivo encontrou apenas a porta 22. Na tentativa de efetuar login como usuário e senha padrão, ele foi enviado para longe no console e no ssh:

 login as: pi pi@raspberrypi's password: Access denied 

O receptor ligou e desligou várias vezes, permaneceu ligado por dias, supondo que poderia estar baixando algo naquele momento ou tentando acessar servidores na China. Nem o indicador vermelho nem o verde acendem.

Nesse momento, fui para fora do local em busca de perguntas frequentes, suporte técnico ou qualquer outra coisa que pudesse dizer que esse dispositivo deveria e não deveria. Fiz o login pela primeira vez, mas isso não mudou nada fundamentalmente - não há formulários de contato ou de feedback. A única coisa encontrada foi que o destinatário estava vinculado a uma conta e tinha o status offline. Percebi o fato de o sistema ter sido visto pela última vez na rede em 2 de setembro às 17.18, horário de Pequim, quatro dias antes de ser enviado por correio. I.e. Foi verificado e conectado à conta.


Depois de passar alguns dias perambulando pelos sites da "Internet chinesa", aos quais alguns links se referiam externamente ou que estavam fora do site, e cansados ​​de seu design original, percebi que este produto não possui suporte técnico. E naquele momento lembrei de dois e-mails do ADSB 展示 系统 (sistema de exibição do ADS-B).

"Isso é algum tipo de bobagem" - mais uma vez ouvi uma voz familiar com um sotaque na minha cabeça. Meu e-mail para este endereço retornou o PostMaster feeyo.com


E então o olho chamou a atenção para a segunda letra, que havia escapado do olhar (devido ao novo design incomum do GMail). Isso acabou por ser uma instrução de instalação para o VariFlight ADS-B. É hora de descobrir como deveria funcionar.

Conheça 准 常 准 ADS-B 设备 安装 说明


Abaixo está uma tradução das instruções em 6 páginas e em dois idiomas, a maioria dos quais são ilustrações.

Instruções de instalação do VariFlight ADS-B



Breve descrição


O VariFlight ADS-B é um equipamento projetado para entusiastas da aviação civil para rastrear aeronaves. O kit consiste em um receptor ADS-B, uma fonte de alimentação, um cabo de manobra (cabo de manobra), uma antena e um cabo para ele.


Localização da antena


, ; . ADS-B , .


, ADS-B , :

  1. .
  2. - ADS-B .
  3. .


, . IP , DHCP.





ADS-B


O primeiro método
Nas configurações do seu roteador, encontre o endereço IP do receptor ADS-B e abra http // XXX.XXX.XXX: 8080 em um navegador da web, onde XXX.XXX.XXX é o endereço IP interno na sua rede local.


Método 2:

Abra o link flightadsb.variflight.com em um navegador da web, faça login e clique em Aeroporto


O terceiro método, apenas para voluntários

chineses Para usuários chineses, é possível o uso do WeChat.


Nesta instrução terminou. De acordo com esta instrução, o dispositivo funciona parcialmente - ele recebe IP na rede local, mas não exibe uma interface da web na qual é possível reconhecer o dump1090 - um decodificador Mode S projetado para dongles RTLSDR e usado nesses dispositivos.

imagem

Sem o trabalho dump1090, nenhum dado chegará ao servidor. É estranho que o dispositivo tenha funcionado durante a verificação antes do envio. "Isso é algum tipo de bobagem." Como os chineses não estão interessados ​​no destino do dispositivo, e nenhum sinal de suporte técnico pode ser encontrado, minha consciência fica completamente limpa se eu tentar consertá-lo.

Nós assumimos o controle do dispositivo


Depois de desmontar o receptor, imediatamente após o recebimento, fiz a imagem microSD no estado anterior à primeira inicialização e examinei um pouco o conteúdo, suspeitando imediatamente que o receptor estava enviando dados para o servidor - havia arquivos e scripts com endereços de serviço em / root /.

Redefinir senha do usuário PI


Instruções para alterar a “senha esquecida” com fotos podem ser encontradas neste link .

Eu desmontei o receptor novamente. Para acessar o microSD, desaparafuse todos os parafusos e remova as duas placas. No futuro, enquanto trabalhava com o receptor, não o montei novamente no prédio. teve que mudar dois microSD com sistemas diferentes.

Retiramos o microSD da Rpi, fazemos uma cópia de backup no computador, se você ainda não o fez, e editamos o arquivo - cmdline.txt .

 dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait 

No final desta linha, adicione

 init=/bin/sh 

Retornamos o microSD ao RPi, conectamos o monitor e o teclado. Nós conectamos o poder. Quando as linhas pararem de correr na tela, pressione Enter. Um prompt do console aparece, no qual digitamos

 mount -rw -o remount / passwd pi sync exec /sbin/init 

As linhas correm repetidamente e esperam que elas parem de correr e depois as desligam. Obtemos o microSD da RPi. No computador, editamos ou restauramos a cópia de backup do cmdline.txt - exclua “init = / bin / sh”.

A última vez que retornamos o microSD de volta ao RPi. Ligue. Entre com sucesso com uma nova senha. Ativamos o ssh digitando raspi-config e selecionando SSH no menu.

Então, com o comando top, quero ver como o receptor vive e observar inesperadamente os processos wget e ... dump-1090. Cena silenciosa. Eu verifico no navegador http // XXX.XXX.XXX: 8080 - há uma interface.


Para não dizer isso inesperadamente, mas definitivamente incomum. Verifico o segundo método com as instruções - também está tudo bem: o ícone do receptor ficou verde e abaixo da lista de aviões que ele ouviu.

Seria possível terminar com isso, mas em primeiro lugar, usar o RPi3 apenas para isso seria imperdoável. E segundo, se este dispositivo funcionasse de forma estável. Por exemplo, ele desapareceu da lista de endereços IP do roteador DHCP, enquanto estava disponível ao acessar o IP recebido anteriormente e, ao mesmo tempo, não havia imagem no HDMI. Mas o mais importante foi a instabilidade da transmissão. Segundo as estatísticas na página do receptor, funcionava várias horas por dia. Às vezes, um dia inteiro, às vezes várias horas, às vezes zero horas. Demorou vários dias para estudar o sistema - nem todo software foi instalado. Repositórios chineses ... A voz alemã finalmente se convenceu de que precisamos criar um receptor ADS-B para uma pessoa saudável e, para isso, precisamos rolar a imagem do PiAware em outro microSD. O microSD original ainda era útil para descobrir como funciona.No mínimo, salve os arquivos de / root. Faça uma imagem desejável.

PiAware


PiAware é um software Linux para transferir dados de voo para o FlightAware. Contém garfo dump1090-mutability. Segundo os desenvolvedores, uma das diferenças é que ele não envia pacotes para os servidores da FlightAware se eles não diferem do primeiro. I.e. se o avião não mudou de velocidade, altitude, esses dados não precisam ser processados ​​e, portanto, reduzem a carga no servidor.

Cerca de dois anos atrás, o FlightAware começou a traduzir textos do site para o russo. E muito para criar sua própria estação PiAware pode ser encontrado fora do local . A essência da criação de uma estação em RPi com RTLSDR resume-se à gravação de uma imagem PiAware no Raspbian Linux pronta para microSD usando Etcher. Em seguida, antes de inserir o cartão no RPi e aguardar o download, é necessário fazer algumas alterações. Para habilitar o acesso SSH, crie um arquivo vazio sem a extensão com o nome ssh na partição de inicialização (/ boot partition). E você pode fazer as configurações necessárias no arquivo piaware-config.txt , por exemplo, especificar um IP estático ou ativar o WiFi e especificar o SSID / senha, desde que um adaptador USB WiFi compatível esteja conectado. As mesmas configurações podem ser feitas no console com o comando piaware-config Setting_name Possible_values .

Se você já possui uma conta no Flightaware, após 5 minutos a estação será anexada à conta , após receber um identificador exclusivo. E o receptor terá sua própria página de estatísticas.

Por padrão, o usuário do PI tem uma senha de flightaware. É uma boa ideia alterar sua senha imediatamente.

"Testes"


Os testes estão entre aspas, apenas impressões. Ter dois dispositivos com quase o mesmo software pode avaliar suas habilidades.

Eu tenho um receptor Flightaware gratuito e a primeira coisa que experimentei foi a antena VariFlight completa. Acabei de substituir a antena Flightaware por ela. E enquanto eu estudava o receptor VariFlight, as estatísticas do FlightFeeder foram coletadas na página do Flightaware. A conclusão é decepcionante. Embora nada tenha mudado no alcance máximo, como o FlightFeeder, na direção da visibilidade direta, pegando alguns a uma distância de 400 km, mas as estatísticas de aeronaves por hora / dia caíram 2-3 vezes. Certamente aceita lados por mais de 300 quilômetros, mas vê um pouco menos de mensagens. Não sei o que há dentro do corpo da antena - não é dobrável.

Uma antena Flightaware foi conectada ao receptor VariFlight e mostrou estatísticas da mesma ordem. E com uma antena nativa ainda mais baixa.


Vou decodificar as estatísticas. As estatísticas 10-05 a 10-07 são um receptor VariFlight com uma antena Flightaware. Em 10-08, a antena completa foi conectada e de 10-09 a 10-11 as estatísticas do kit VariFlight. 10-12, o script send_message.py foi alterado para coletar dados do Flightaware Flightfeeder. Depois disso, o VariFlight enviou dados dele e de 10 a 13 - estatísticas diárias com base nos dados do Flightaware Flightfeeder. Além disso, por exemplo, para voos 10-18 - 396, pacotes 814176, para voos 10-19 - 471, pacotes 860415.

Vamos avaliar o quanto o receptor VariFlight é suscetível a interferências de rádio. Para fazer isso, varra o intervalo de 800 MHz a 1200 MHz e gere um mapa de calor.

 sudo apt-get install python-imaging sudo wget https://raw.githubusercontent.com/keenerd/rtl-sdr-misc/master/heatmap/heatmap.py sudo chmod +x heatmap.py sudo systemctl stop dump1090-fa sudo rtl_power -f 800M:1200M:100k -i 30 -c 50% -e 30m -g 30 -F 9 >scan.csv 

Após meia hora (-e 30m), a digitalização para e uma imagem é gerada.
 ./heatmap.py scan.csv scan.png 

Reiniciando o dispositivo para restaurar o dump1090.
E copie a imagem resultante para um computador usando (win) scp.
Este é um fragmento de uma varredura de mapa térmico com uma frequência de 1090 MHz. Imagem completa disponível por clique.



Listras amarelas brilhantes são uma comunicação móvel. Nada de incomum - ele não possui pré-filtros como o Flightfeeder e é muito interrompido pelas estações móveis. Nisso, é absolutamente o mesmo que o simples "apito azul" mencionado anteriormente. Talvez a fabricação na forma de uma placa de expansão especial faça algum sentido, por exemplo, o papel das “trilhas dobradas” nessa placa não está claro. Fazendo uma placa especializada, não seria difícil instalar um amplificador de baixo ruído e um filtro SAW a 1090 MHz. Só de olhar para os scripts no dispositivo, tive uma idéia do por que isso foi feito - um script chamado acars.py.


Quanto o amplificador e o filtro melhorariam as características do receptor mostra um exemplo do grupo acima mencionado no Facebook. Em vez de um receptor comum, um dos usuários do VariFlight Box conectou um dongle especializado da Flightaware, o que o levou à classificação máxima de cerca de mil usuários (é claro, o local da instalação e outra antena também afetaram).

A FlightAware lança dois modelos de dongle - Pro Stick e Pro Stick Plus, que ainda são o mesmo "apito azul", mas têm um amplificador de sinal preliminar, e o último possui adicionalmente um filtro SAW que elimina sinais desnecessários em áreas com muita interferência, por exemplo nas cidades, esses modelos estão equipados com um conector de antena SMA. Esses dongles são usados ​​nos receptores Flightaware Flightfeeder Orange.


com a tampa removida


O nome do script "acars.py" indica que a ausência de filtros não é um erro e é um salvamento. Sistema de endereço e comunicação de comunicações da aviaçãoO Sistema de Endereçamento e Comunicação de Comunicações de Aeronaves (ACARS) é um sistema de radiocomunicação digital usado na aviação para transmitir mensagens curtas entre uma aeronave e estações terrestres. A frequência de operação do ACARS na Europa é 131.725 MHz. Portanto, o dispositivo não pode ter um filtro apenas para 1090 MHz, caso contrário, não poderá receber um sinal em 131 MHz. O que está dentro da antena é desconhecido, não vou quebrá-la, mas é óbvio que sua "ampla cobertura" também é fornecida pelos criadores. Da mesma forma que o método acima, um mapa de calor foi gerado na faixa de 100 MHz a 500 MHz. Um fragmento de um mapa térmico de varredura a uma frequência de 450 MHz. Imagem completa também disponível por clique.



No mapa de calor, você pode ver painéis de controle, sensores de segurança, campainhas sem fio, sensores sem fio de estações meteorológicas, radioamadores, estações de rádio FM e assim por diante.

Por exemplo, configurando rtl_433, você pode ver os dados dos sensores sem fio vizinhos das estações meteorológicas e, se desejar, usá-los como o autor deste artigo .


E, executando rtl_tcp, você pode ouvir rádio amador e rádio FM.


Curiosamente, nem todos os radioamadores walkie-talkie mantêm exatamente a frequência. Foi engraçado ver como os amadores de rádio avaliavam como ouviam o interlocutor, e a frequência de uma das estações de rádio estava em algum lugar à margem.

Mas o receptor chinês no sistema nativo mostrou precisão - 0 PPM. Sobre o método de medir o PPM pode ser encontrada no artigo sobre Habré quwy «Mais uma vez sobre o recebimento de HF na SDR-a RTL» . É altamente recomendável ajustar o PPM para obter a melhor recepção. Foi o que os chineses fizeram. Há um pequeno erro no Piaware que pode e deve ser corrigido especificando o valor PPM correto com o comando sudo piaware-config rtlsdr-ppm <PPM value> comando.
Instruções de calibração RTLSDR com rtl_test e kalibrate-rtl
  rtl_test -p 

Aguardamos cerca de 10 minutos até o valor estabilizar. Esse será o ppm desejado.

Você pode melhorar a precisão com os sinais de torres móveis usando o utilitário kalibrate-rtl.
 sudo apt-get install libtool autoconf automake libfftw3-dev git clone https://github.com/asdil12/kalibrate-rtl.git cd kalibrate-rtl git checkout arm_memory ./bootstrap ./configure make sudo make install kal -s GSM900 

, «power» .
kal -c < > -e < PPM, rtl_test> -v
«average absolute error». ppm, , sudo piaware-config rtlsdr-ppm < PPM>


Como resultado, podemos dizer que o receptor VariFlight para ferro é um pouco melhor do que você pode montar sozinho. Essa é uma boa base para começar a praticar esse hobby (e mostrou testes de ferro que podem ser usados ​​para uma grande variedade de outras tarefas. Além disso, existem três portas USB gratuitas).

Uma desvantagem definitiva como um receptor ADSB é o software e a interface do site em chinês. Se você não pode fazer nada com o site chinês, pode modificar o software do próprio receptor. A maneira mais fácil é instalar o PiAware e configurar a distribuição no VariFlight. Em seguida, você pode configurar a distribuição no Flightradar24 e obter uma conta com condições especiais também. Um exemplo do uso de uma conta com recursos especiais é o acesso aos dados de arquivo do Flightaware (a falha da An-148 Saratov Airlines).
imagem


Damos dados ao VariFlight


Retornamos ao conteúdo do diretório raiz. Pode ser encontrado no GitHub . Os nomes dos arquivos indicam inequivocamente suas funções.

 root@raspberrypi:/home/pi# ls /root -l total 24 drwxr-xr-x 8 root root 4096 Nov 22 2016 dump1090 drwxr-xr-x 5 root root 4096 Oct 16 18:54 get_message -rwxr-xr-x 1 root root 567 Nov 22 2016 install.sh drwxr-xr-x 7 root root 4096 Nov 22 2016 rtl-sdr -rwxr-xr-x 1 root root 62 Nov 22 2016 synctime.sh -rwxr-xr-x 1 root root 1300 Nov 29 2016 task.sh 

install.sh
 #!/bin/bash apt-get update apt-get install cmake libusb-1.0-0-dev build-essential vim ntpdate -y apt-get remove ntp cd get_message/ mv rtl-sdr-blacklist.conf /etc/modprobe.d/ mv dump.sh /etc/init.d/dump chmod +x /etc/init.d/dump mv task.sh ../ chmod +x ../task.sh cd ../rtl-sdr/ mkdir rtl cd rtl cmake ../ -DINSTALL_UDEV_RULES=ON make install ldconfig cd ../../dump1090/ make cd /root/get_message/ python get_ip.py ps aux | grep py update-alternatives --config editor crontab -e * * * * * /root/task.sh >/dev/null 2>&1 * * */6 * * /root/synctime.sh >/dev/null 2>&1 


As últimas linhas do install.sh mostram que o cron adiciona duas tarefas - execute task.sh a cada minuto e synctime.sh a cada 6 dias

synctime.sh
 #!/bin/bash /usr/sbin/ntpdate 115.182.42.248 > /dev/null 2>&1 


115.182.42.248 - Pequim Telecomunicações Co., Ltd, Pequim, China.
observações: Observe que o CNNIC não é um ISP e não é
: habilitado para investigar reclamações de abuso de rede.
observações: Entre em contato com o tech-c ou admin-c da rede.
task.sh
 #!/bin/bash ps -eaf | grep dump1090 | grep -v grep if [ $? -eq 1 ] then /etc/init.d/dump stop sleep 1 /etc/init.d/dump start echo `date "+%G-%m-%d %H:%M:%S"`" dump1090 restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" dump1090 running" echo "------------------------------------------------------------------------" fi ps -eaf | grep send_message.py | grep -v grep # if not found - equals to 1, start it if [ $? -eq 1 ] then python -O /root/get_message/send_message.py & echo `date "+%G-%m-%d %H:%M:%S"`" send_message restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" send_message running" echo "------------------------------------------------------------------------" fi ps -eaf | grep get_ip.py | grep -v grep # if not found - equals to 1, start it if [ $? -eq 1 ] then python /root/get_message/get_ip.py echo `date "+%G-%m-%d %H:%M:%S"`" get_ip restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" get_ip running" echo "------------------------------------------------------------------------" fi 


O script task.sh, executado a cada minuto pelo cron, verifica e, se necessário, reinicia os scripts dump1090, send_message.py e get_ip.py.
 pi@raspberrypi:~ $ ps -eaf | grep dump1090 | grep -v grep root 830 1 14 Oct12 ? 13:49:25 ./dump1090 --net --net-sbs-port 30003 pi@raspberrypi:~ $ ps -eaf | grep get_ip.py | grep -v grep pi@raspberrypi:~ $ ps -eaf | grep send_message.py | grep -v grep root 838 1 0 Oct12 ? 00:09:20 python -O /root/get_message/send_message.py 

O diretório get_message contém scripts python, um dos quais, send_message.py, envia dados.

 root@raspberrypi:/home/pi# ls /root/get_message -l total 40 -rw-r--r-- 1 root root 954 Nov 22 2016 acars.py -rw-r--r-- 1 root root 1341 Nov 22 2016 acars.sh -rw-r--r-- 1 root root 173 Nov 22 2016 config.ini drwxr-xr-x 8 root root 4096 Nov 22 2016 dump1090 -rwxr-xr-x 1 root root 1731 Nov 22 2016 get_ip.py drwxr-xr-x 3 root root 4096 Nov 22 2016 get_message1117 -rwxr-xr-x 1 root root 3400 Dec 7 2016 init.sh -rw-r--r-- 1 root root 33 Oct 16 18:51 md5.txt -rwxr-xr-x 1 root root 1143 Oct 12 18:16 send_message.py -rw-r--r-- 1 root root 16 May 27 2016 UUID 

init.sh
 #!/bin/bash path='/root/get_message/' DATE=`date -d "today" +"%Y-%m-%d_%H:%M:%S"` result="" UUID="" execom="" FromServer="" SourceMD5="" device="" if ps -ef |grep dump1090 |grep -v grep >/dev/null then device="adsb" elif ps -ef |grep acarsdec |grep -v grep >/dev/null then device="acars" else device="unknow" fi IpAddr=`/sbin/ifconfig |grep "addr:" |grep -v 127.0.0.1 |cut -d ':' -f2 |cut -d ' ' -f1` if [ -f "/root/get_message/UUID" ] then UUID=`cat /root/get_message/UUID` fi execut(){ while read command do eval $command if [ $? -ne 0 ] then execom=$command result=0 break fi result=1 done <$path/package/exe.txt } removefile(){ rm -rf $path/package rm -f $path/*tar.gz* } main(){ ps -eaf | grep "pic.veryzhun.com/ADSB/update/newpackage.tar.gz" | grep -v grep if [ $? -eq 1 ] then /usr/bin/wget -P $path -c -t 1 -T 2 pic.veryzhun.com/ADSB/update/newpackage.tar.gz if [ -f "$path/newpackage.tar.gz" ] then dmd5=`md5sum $path/newpackage.tar.gz|cut -d ' ' -f1` if [ "$SourceMD5" = "$dmd5" ] then /bin/tar -xzf $path/newpackage.tar.gz -C $path echo $SourceMD5 > $path/md5.txt /bin/touch /usr/src/start.pid echo $DATE > /usr/src/start.pid execut if [ $result -eq 1 ] then curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom=$execom -d message="success" http://receive.cdn35.com/ADSB/result.php else curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom=$execom -d message="fail" http://receive.cdn35.com/ADSB/result.php fi removefile else curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom="------" -d message="post file has been changed" http://receive.cdn35.com/ADSB/result.php removefile fi else curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom="------" -d message="download failed" http://receive.cdn35.com/ADSB/result.php removefile fi fi } if curl -m 2 -s pic.veryzhun.com/ADSB/update.php >/dev/null;then removefile FromServer=`curl -m 2 -s -d UUID="$UUID" -d IpAddr="$IpAddr" -d Device="$device" pic.veryzhun.com/ADSB/update.php` SourceMD5=`echo $FromServer|cut -d ' ' -f1` length=`echo $SourceMD5 |wc -L` if [ $length -ne 32 ] then curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom="------" -d message="md5 style error" http://receive.cdn35.com/ADSB/result.php exit fi else curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom="------" -d message="curl failed" http://receive.cdn35.com/ADSB/result.php exit fi DesMD5=`cat $path/md5.txt` if [ "$SourceMD5" = "$DesMD5" ] then curl -m 2 -s -d UUID=$UUID -d date=$DATE -d execom="------" -d message="no update,md5 without change " http://receive.cdn35.com/ADSB/result.php exit else main fi 


O script init.sh verifica se há uma atualização e define um novo send_message.py
get_ip.py
 import socket import fcntl import struct import urllib2 import urllib import sys,os import ConfigParser import hashlib import json import uuid config = ConfigParser.ConfigParser() config.readfp(open(sys.path[0]+'/config.ini',"rb")) uuid_file=sys.path[0]+'/UUID' if os.path.exists(uuid_file) : file_object = open(uuid_file) mid = file_object.read() file_object.close() else : mid = uuid.uuid1().get_hex()[16:] file_object = open(uuid_file , 'w') file_object.write( mid ) file_object.close() def send_message(source_data): source_data=source_data.replace('\n','$$$') f=urllib2.urlopen( url = config.get("global","ipurl"), data = source_data, timeout = 60 ) tmp_return=f.read() request_json=json.loads(tmp_return) request_md5=request_json['md5'] del request_json['md5'] tmp_hash='' for i in request_json: if tmp_hash=='' : tmp_hash=tmp_hash+request_json[i] else : tmp_hash=tmp_hash+','+request_json[i] md5=hashlib.md5(tmp_hash.encode('utf-8')).hexdigest() if (md5 == request_md5): operate(request_json) else : print 'MD5 ERR' print "return: "+tmp_return; def get_ip_address(ifname): skt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) pktString = fcntl.ioctl(skt.fileno(), 0x8915, struct.pack('256s', ifname[:15])) ipString = socket.inet_ntoa(pktString[20:24]) return ipString def operate(request_json): if request_json['type'] == 'reboot' : os.system('/sbin/reboot') elif request_json['type'] == 'code' : fileHandle = open ( urllib.unquote( request_json['path'] ) , 'w' ) fileHandle.write( urllib.unquote( request_json['content'] ) ) fileHandle.close() else : print 'OK' eth=get_ip_address('eth0') send_message(mid+'|'+eth+'|') 


O significado da troca de rede realizada pelo script, eu particularmente não entendo. Um UUID exclusivo é gerado se estiver faltando. E há uma certa troca com os endereços especificados no arquivo config.ini. Provavelmente, esse script em particular é responsável por vincular os dados transmitidos e o IP à conta.

A linha “if request_json ['type'] == 'reboot': os.system ('/ sbin / reboot')” é digna de nota.

 [global] name = NEW ipurl = http://receive.cdn35.com/ADS-B_IP.php sendurl = http://adsb.feeyo.com/adsb/ReceiveCompressADSB.php version = 1.0 passwd = 'null' 

E, finalmente, o script enviando os dados
send_message.py
 import socket import urllib2 import urllib import sys import ConfigParser import zlib import base64 import os,uuid serverHost = 'localhost' serverPort = 30003 config = ConfigParser.ConfigParser() config.readfp(open(sys.path[0]+'/config.ini',"rb")) uuid_file=sys.path[0]+'/UUID' if os.path.exists(uuid_file) : file_object = open(uuid_file) mid = file_object.read() file_object.close() else : mid = uuid.uuid1().get_hex()[16:] file_object = open(uuid_file , 'w') file_object.write( mid ) file_object.close() sockobj = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sockobj.connect((serverHost,serverPort)) def send_message(source_data): try: source_data=base64.b64encode(zlib.compress(source_data)) f=urllib2.urlopen(url = config.get("global","sendurl"),data = urllib.urlencode({'from':mid,'code':source_data}),timeout = 2) return True except Exception,e: print str(e) return True tmp_buf='' while 1: buf = sockobj.recv(1024) if not buf: break if len(buf) != 0: tmp_buf=tmp_buf+buf if buf[len(buf)-1] == '\n': if send_message(tmp_buf) : tmp_buf='' 


Editei a linha serverHost = 'localhost' substituindo 'localhost' por 'ff-1234' - o nome da rede do meu Flightaware Flightfeeder e reiniciando o receptor VariFlight. Depois disso, os dados do Flightfeeder foram para o VariFlight.

Os scripts restantes são a recepção de mensagens ACARS. Talvez os restos de alguma funcionalidade ou função sejam implementados no futuro. Os scripts funcionam com /root/acarsdec-3.0/acarsdec, que está ausente neste caminho. ACARSDEC é um decodificador ACARS SDR que decodifica mensagens, por exemplo, a uma frequência de 131,725 ​​MHz. Aparentemente, com base na recepção desta frequência, não há filtros a 1090 MHz na entrada do receptor.


O Sistema de Comunicações de Aviação de Endereçamento e Relatórios (ACARS) é um sistema de comunicações digitais usado na aviação para transmitir mensagens curtas e relativamente simples entre uma aeronave e as estações terrestres, seja por meio de radiocomunicação direta ou via sistemas de satélite.
Mais informações sobre o ACARS podem ser encontradas, por exemplo, aqui .

O script acars.sh é semelhante ao task.sh em sua implementação - reinicia o acarsdec e os scripts get_ip.py e acars.py se não detectar o processo necessário.

acars.sh
 #!/bin/bash ps -eaf | grep acarsdec | grep -v grep if [ $? -eq 1 ] then /root/acarsdec-3.0/acarsdec -n 127.0.0.1:8888 -o 0 -p -8 -r 0 127.272 126.475 & echo `date "+%G-%m-%d %H:%M:%S"`" acarsdec restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" acarsdec running" echo "------------------------------------------------------------------------" fi ps -eaf | grep get_ip.py | grep -v grep # if not found - equals to 1, start it if [ $? -eq 1 ] then python /root/get_message/get_ip.py echo `date "+%G-%m-%d %H:%M:%S"`" get_ip restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" get_ip running" echo "------------------------------------------------------------------------" fi ps -eaf | grep acars.py | grep -v grep # if not found - equals to 1, start it if [ $? -eq 1 ] then python /root/get_message/acars.py echo `date "+%G-%m-%d %H:%M:%S"`" acars restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" acars running" echo "------------------------------------------------------------------------" fi /usr/sbin/ntpdate cn.pool.ntp.org > /dev/null 


acars.py
 #!/usr/bin/env python import socket, traceback ,time,urllib2,urllib,sys,ConfigParser def send_message(source_data): try: f=urllib2.urlopen(url = config.get("global","sendurl"),data = urllib.urlencode({'from':config.get("global","name"),'code':source_data}),timeout = 10) print "return: "+f.read(); return True except Exception,e: print str(e) return False host = '127.0.0.1' port = 8888 config = ConfigParser.ConfigParser() config.readfp(open(sys.path[0]+'/config.ini',"rb")) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) while 1: try: message, address = s.recvfrom(8192) socket_udp_str='{0} :{1} \n\n'.format(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),message) send_message(socket_udp_str) except (KeyboardInterrupt, SystemExit): raise except: traceback.print_exc() 


No trabalho, fica assim:

 PID TTY STAT TIME COMMAND 20726 ? Ss 0:00 \_ sshd: pi [priv] 20732 ? S 0:00 \_ sshd: pi@pts/0 20734 pts/0 Ss 0:00 \_ -bash 20744 pts/0 R+ 0:00 \_ ps -afx 777 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 linux 907 ? Sl 737:23 ./dump1090 --net --net-sbs-port 30003 915 ? S 11:11 python -O /root/get_message/send_message.py 

ps -afx completamente
 pi@raspberrypi:~ $ ps -afx PID TTY STAT TIME COMMAND 2 ? S 0:00 [kthreadd] 3 ? S 0:59 \_ [ksoftirqd/0] 5 ? S< 0:00 \_ [kworker/0:0H] 7 ? S 5:28 \_ [rcu_sched] 8 ? S 0:00 \_ [rcu_bh] 9 ? S 0:01 \_ [migration/0] 10 ? S 0:01 \_ [migration/1] 11 ? S 0:05 \_ [ksoftirqd/1] 13 ? S< 0:00 \_ [kworker/1:0H] 14 ? S 0:01 \_ [migration/2] 15 ? S 0:04 \_ [ksoftirqd/2] 17 ? S< 0:00 \_ [kworker/2:0H] 18 ? S 0:01 \_ [migration/3] 19 ? S 0:04 \_ [ksoftirqd/3] 21 ? S< 0:00 \_ [kworker/3:0H] 22 ? S 0:00 \_ [kdevtmpfs] 23 ? S< 0:00 \_ [netns] 24 ? S< 0:00 \_ [perf] 25 ? S 0:00 \_ [khungtaskd] 26 ? S< 0:00 \_ [writeback] 27 ? S< 0:00 \_ [crypto] 28 ? S< 0:00 \_ [bioset] 29 ? S< 0:00 \_ [kblockd] 31 ? S< 0:00 \_ [rpciod] 32 ? S 0:00 \_ [kswapd0] 33 ? S< 0:00 \_ [vmstat] 34 ? S 0:00 \_ [fsnotify_mark] 35 ? S< 0:00 \_ [nfsiod] 44 ? S< 0:00 \_ [kthrotld] 46 ? S< 0:00 \_ [bioset] 47 ? S< 0:00 \_ [bioset] 48 ? S< 0:00 \_ [bioset] 49 ? S< 0:00 \_ [bioset] 50 ? S< 0:00 \_ [bioset] 51 ? S< 0:00 \_ [bioset] 52 ? S< 0:00 \_ [bioset] 53 ? S< 0:00 \_ [bioset] 54 ? S< 0:00 \_ [bioset] 55 ? S< 0:00 \_ [bioset] 56 ? S< 0:00 \_ [bioset] 57 ? S< 0:00 \_ [bioset] 58 ? S< 0:00 \_ [bioset] 59 ? S< 0:00 \_ [bioset] 60 ? S< 0:00 \_ [bioset] 61 ? S< 0:00 \_ [bioset] 62 ? S< 0:00 \_ [bioset] 63 ? S< 0:00 \_ [bioset] 64 ? S< 0:00 \_ [bioset] 65 ? S< 0:00 \_ [bioset] 66 ? S< 0:00 \_ [bioset] 67 ? S< 0:00 \_ [bioset] 68 ? S< 0:00 \_ [bioset] 69 ? S< 0:00 \_ [bioset] 70 ? S< 0:00 \_ [VCHIQ-0] 71 ? S< 0:00 \_ [VCHIQr-0] 72 ? S< 0:00 \_ [VCHIQs-0] 73 ? S< 0:00 \_ [iscsi_eh] 74 ? S< 0:00 \_ [dwc_otg] 75 ? S< 0:00 \_ [DWC Notificatio] 77 ? S 0:00 \_ [irq/92-mmc1] 78 ? S 0:00 \_ [VCHIQka-0] 79 ? S< 0:00 \_ [SMIO] 80 ? S< 0:00 \_ [deferwq] 83 ? S< 0:00 \_ [bioset] 84 ? S 0:11 \_ [mmcqd/0] 87 ? S 0:04 \_ [jbd2/mmcblk0p2-] 88 ? S< 0:00 \_ [ext4-rsv-conver] 89 ? S< 0:00 \_ [ipv6_addrconf] 172 ? S 415:15 \_ [w1_bus_master1] 224 ? S< 0:00 \_ [cfg80211] 227 ? S< 0:00 \_ [brcmf_wq/mmc1:0] 229 ? S 0:00 \_ [brcmf_wdog/mmc1] 493 ? S< 0:00 \_ [kworker/1:1H] 550 ? S< 0:00 \_ [kworker/3:1H] 632 ? S< 0:00 \_ [kworker/u9:0] 633 ? S< 0:00 \_ [hci0] 634 ? S< 0:00 \_ [hci0] 638 ? S< 0:00 \_ [kworker/u9:2] 3856 ? S< 0:00 \_ [kworker/2:1H] 9346 ? S< 0:00 \_ [kworker/0:1H] 15564 ? S 0:00 \_ [kworker/1:0] 17556 ? S 0:00 \_ [kworker/u8:2] 17878 ? S 0:00 \_ [kworker/0:0] 17879 ? S 0:00 \_ [kworker/2:2] 19234 ? S 0:00 \_ [kworker/u8:4] 19566 ? S 0:00 \_ [kworker/3:1] 20143 ? S 0:00 \_ [kworker/2:1] 20259 ? S 0:00 \_ [kworker/3:2] 20352 ? S 0:00 \_ [kworker/0:2] 20416 ? S 0:00 \_ [kworker/1:2] 20600 ? S 0:00 \_ [kworker/3:0] 20601 ? S 0:00 \_ [kworker/2:0] 20605 ? S 0:00 \_ [kworker/u8:0] 20725 ? S 0:00 \_ [kworker/0:1] 1 ? Ss 0:10 /sbin/init 134 ? Ss 1:00 /lib/systemd/systemd-journald 136 ? Ss 0:08 /lib/systemd/systemd-udevd 416 ? Ss 0:09 /usr/sbin/cron -f 426 ? Ss 0:01 /lib/systemd/systemd-logind 429 ? Ss 0:00 avahi-daemon: running [raspberrypi.local] 458 ? S 0:00 \_ avahi-daemon: chroot helper 433 ? Ss 0:00 /usr/bin/dbus-daemon --system --address=systemd: --no 450 ? Ss 0:02 /usr/sbin/thd --daemon --triggers /etc/triggerhappy/t 496 ? Ss 0:03 /sbin/wpa_supplicant -s -B -P /run/wpa_supplicant.wla 498 ? Ssl 0:13 /usr/sbin/rsyslogd -n 636 ? S 0:00 /usr/bin/hciattach /dev/serial1 bcm43xx 921600 noflow 640 ? Ss 0:00 /usr/lib/bluetooth/bluetoothd 729 ? Ss 0:02 /sbin/dhcpcd -q -w 749 ? Ss 0:00 /usr/sbin/sshd -D 20726 ? Ss 0:00 \_ sshd: pi [priv] 20732 ? S 0:00 \_ sshd: pi@pts/0 20734 pts/0 Ss 0:00 \_ -bash 20744 pts/0 R+ 0:00 \_ ps -afx 777 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 linux 907 ? Sl 737:23 ./dump1090 --net --net-sbs-port 30003 915 ? S 11:11 python -O /root/get_message/send_message.py 


Isso mostra que você pode obter dados do PiAware quase sem forçar, de fato, apenas transferir scripts para o novo sistema. E se você já possui uma estação de anúncios - caseira, Flightradar24, Flightaware, o receptor existente pode ser usado a seu critério para outros objetivos e tarefas pessoais com uma consciência completamente limpa.

Instale o VariFlight no PiAware


Transferimos os arquivos necessários para o novo sistema do antigo. I.e. conteúdo do diretório raiz: diretório
get_message e arquivos install.sh, synctime.sh, task.sh.

No diretório get_message:
  • acars.py
  • acars.sh
  • config.ini
  • get_ip.py
  • init.sh
  • send_message.py

e o arquivo UUID é seu identificador na rede VariFlight.

Se você deseja começar a compartilhar dados sem ter um VariFlight Feeder, na primeira vez em que executar o script, seu UUID será gerado. Este arquivo e o nome do aeroporto mais próximo devem ser enviados para chengyi (at) variflight.com para criar sua conta no serviço.

Seguinte:
 pi@piaware:~ $ sudo apt-get install -y python ntpdate pi@piaware:~ $ su root@piaware:~# sh task.sh root@piaware:~# crontab -e 

Editando crontab no nano colando
 * * * * * /root/task.sh >/dev/null 2>&1 

Salve o arquivo pressionando [Ctrl + O] e feche [Ctrl + X].
 root@piaware:~# chmod 777 task.sh root@piaware:~# reboot 

Após a reinicialização, verificamos a página com suas estatísticas flightadsb.feeyo.com/user/rank
Na quarta coluna, deve haver uma inscrição verde online. E na lista de aeroportos, as placas aceitas (terceira coluna - há quantos segundos atrás um sinal foi recebido da aeronave).

Nesse ponto, meu rascunho "travou" indefinidamente, porque aqui eu queria escrever como executar um script no roteador com openwrt e ModeSMixer para distribuir dados para serviços e, assim, desligar este receptor e aplicá-lo para outros fins. Mas ainda não espero tempo livre e decidi publicar como está. Talvez alguém queira pedir um receptor gratuito e este artigo será útil.

ModeSMixer


Um receptor pode distribuir dados para vários serviços e o programa ModeSMixer é usado para isso.

O ModeSMixer é um aplicativo de console para combinar e retransmitir fluxos com dados do Modo-S em vários formatos. Exemplo de caso de uso:


O programa foi projetado para combinar e retransmitir diferentes formatos de fluxos de dados ModeS. O programa não possui configurações padrão. Tudo é definido por parâmetros.

O parâmetro --inConnect especifica os endereços e portas dos quais os dados são recebidos. E o parâmetro --outServer define o formato e a porta dos dados retransmitidos. Um exemplo na imagem ficará assim:
 ./modesmixer2 --inConnect 192.168.0.105:30005 --inConnect 127.0.0.1:30005 --outServer sbs10001:10001 --outServer beast:31001 --globes 32000:tablename:home --location XX.XXXXX:YY.YYYYY --web 8765 & 

O parâmetro --location determina a latitude e longitude do local de instalação da estação e o parâmetro --web determina a porta na qual a interface da web do programa funcionará. Leia mais sobre o programa aqui .

Depois de configurar a distribuição para vários serviços, o proprietário da estação recebe associação especial em cada serviço e acesso a informações não públicas e ao arquivo de voos por um determinado período de tempo.

No caso de usar o PiAware, os dados já são enviados para o FlightAware e tudo o que resta é coletar esses dados usando o modesmixer2. E no caso do Variflight, você precisa obter os dados do BaseStation em alguma porta livre, por exemplo, 10001. O parâmetro será semelhante a este --outServer msg: 10001. Se necessário, você pode adicionar a porta 10002 para o programa VirtualRadar: --outServer beast: 10002
 ./modesmixer2 --inConnect localhost:30005 --inConnect localhost:30105 --outServer msg:10001 --outServer beast:10002 --location <>:<> --web 8765 & 

Para que isso seja iniciado e reiniciado automaticamente, você precisa editar task.sh, adicionando:
 ps -eaf | grep modesmixer2 | grep -v grep # if not found - equals to 1, start it if [ $? -eq 1 ] then ./modesmixer2 --inConnect localhost:30005 --inConnect localhost:30105 --outServer msg:10001 --location <>:<> --web 8765 & echo `date "+%G-%m-%d %H:%M:%S"`" modesmixer2 restart" echo "------------------------------------------------------------------------" else echo `date "+%G-%m-%d %H:%M:%S"`" modesmixer2 running" echo "------------------------------------------------------------------------" fi 

Por fim, edite o script get_message / send_message.py, especificando uma nova porta de dados:
 serverHost = 'localhost' serverPort = 10001 


Enquanto isso,


enquanto este artigo estava em rascunho, surgiram notícias da China sobre esses serviços. Em novembro de 2018, as autoridades chinesas começaram a desativar os receptores ADSB de serviços estrangeiros. Isso pode ser visto nas estatísticas públicas das estações de Flightaware na China:



a notícia é que os entusiastas de radar chineses disseram que foram chamados por representantes das autoridades chinesas e visitados pela polícia, que “muito gentil e educadamente” pediu que parassem de enviar dados do ADS-B para o exterior serviços, que aparentemente "comprometem a segurança e a soberania nacional da China".

Alguns alegaram ter recebido uma ligação, mesmo que não tenham recebido um receptor do FlightRadar24 e FlightAware. Esses eventos causaram alvoroço entre os entusiastas e muitos deles pararam de transmitir dados ADS-B. Sabe-se que o FlightRadar24 tentou anonimizar as estações do usuário na China. Ainda não está claro como isso é espetacular.

Aviso às autoridades chinesas em inglês:


"Põe em risco a segurança nacional e a soberania da China", o fato de que esses serviços permitem a localização de aeronaves chinesas (americanas, européias e de outros países da ex-URSS). Por exemplo, a trajetória semanal do UAV de reconhecimento estratégico americano sobre águas internacionais a uma altitude de 16 km:

imagem

Existem dois sistemas de radar secundários no mundo dos EUA e da URSS. Portanto, esses receptores e serviços não podem mostrar o paradeiro da maioria dos aviões "soviéticos", helicópteros, a menos que estejam equipados com um transponder de radar "americano", necessário apenas para voos no espaço aéreo, por exemplo, EUA ou UE. Portanto, você pode ver algo interessante no território da Federação Russa nas áreas de fronteira, de preferência à beira-mar. Por exemplo, o oficial de inteligência americano mencionado acima é notavelmente visível em Krasnodar. Devido a essa localização costeira do receptor, o serviço PlaneRadar acima mencionado periodicamente recebe as notícias da mídia russa.


PS VariFlight ADS-B lança versão em inglês - flightadsb.variflight.com

Source: https://habr.com/ru/post/pt423989/


All Articles