Índice:

Alexa, onde estão minhas chaves ?: 4 etapas
Alexa, onde estão minhas chaves ?: 4 etapas

Vídeo: Alexa, onde estão minhas chaves ?: 4 etapas

Vídeo: Alexa, onde estão minhas chaves ?: 4 etapas
Vídeo: Alexa brigando com a Google assistente kkkk #alexa 2024, Julho
Anonim
Image
Image
Hacking Bluetooth Beacons
Hacking Bluetooth Beacons

Alexa é especialmente adequada para tarefas de recuperação de informações e monitoramento de ativos usando redes domésticas sem fio. É natural considerar a colocação de objetos de valor na grade para recuperação rápida. Nós hackeamos beacons bluetooth baratos de baixa energia para o alcance da rede e longevidade da bateria e construímos um aplicativo inteligente para que Alexa saiba onde deixamos as chaves.

Como fazer isso…

Etapa 1: hackear Beacons Bluetooth

Um conjunto de 3 beacons pode ser adquirido por menos de US $ 15 e é compatível com aplicativos Android / iOS, mas vamos desativar a privacidade. Além disso, encontrar nossas chaves não deve se transformar em encontrar nosso telefone.

Este tutorial adafruit sobre luzes inteligentes de engenharia reversa nos ajudou a controlar os faróis. Comece ativando a varredura de beacon para o endereço do dispositivo executando:

sudo hcitool lescan

Encontre e copie o endereço identificado com o nome 'iTag' e execute:

sudo gatttool -I

Conecte-se ao dispositivo interativamente executando:

conectar AA: BB: CC: DD: EE: FF

Tente executar 'help' para ver as opções ou 'principal' para ver os serviços:

Executando 'char-desc' seguido pelo identificador de serviço como acima, encontramos UUIDs que procuramos referenciando as especificações de características gatt e especificações de serviço. Para obter mais informações sobre esses serviços, verifique isto. Inspecionando o tráfego com o Wireshark, descobrimos que 0100111000000001 dispara o alarme e, logicamente, 0000111000000001 o desliga. Agora temos a função python simples:

import pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('conectar {}'. format (BD_ADDR)) child.expect ('Conexão bem-sucedida', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Em seguida, nos concentramos em criar a habilidade Alexa para acionar o beacon quando estivermos procurando as chaves.

Etapa 2: Criando uma habilidade e um aplicativo Alexa

Criando uma habilidade e um aplicativo Alexa
Criando uma habilidade e um aplicativo Alexa
Criando uma habilidade e um aplicativo Alexa
Criando uma habilidade e um aplicativo Alexa

Criamos uma habilidade que será vinculada a um servidor local. Em seguida, configuramos nosso servidor para executar qualquer ação que desejarmos, neste caso, fornecer uma aproximação de onde as chaves podem estar localizadas e fazer o sinalizador Bluetooth bipar. O Flask fornece uma biblioteca python simples e fácil de usar para servir a um aplicativo. Usando flask-ask, podemos configurar o servidor para se comunicar com nossa habilidade Alexa que construiremos mais tarde. Serviremos bem o aplicativo com Ngrok, que nos dará um link https de que precisaremos para nossa habilidade Alexa. Primeiro, construímos o aplicativo com a funcionalidade mais simples: fazer nosso beacon BLE emitir um bipe quando acionado.

#! / usr / bin / env pythonfrom flask import Flask from flask_ask import Ask, instrução import pexpect app = Flask (_ name_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '#Seu id de beacon bluetooth aqui @ ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Suas chaves estão por aqui em algum lugar." declaração return (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('conectar {}'. format (BD_ADDR)) child.expect ('Conexão bem-sucedida', tempo limite = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Usamos a função sound_alarm () que escrevemos anteriormente para fazer o bipe BLE. Para a função que será usada para o intent, adicionamos o decorador ask com o nosso intent "findkeys". Quando criarmos a habilidade Alexa no painel do desenvolvedor da Amazon, usaremos esse nome para nossa intenção. Escreva este script em um arquivo chamado app.py e execute

python app.py

Isso servirá seu aplicativo em https:// localhost: 5000. Execute um servidor ngrok e copie o link https gerado. Você precisará disso ao configurar a habilidade Alexa. Para mais detalhes, confira este post. Configuramos com sucesso um aplicativo simples, agora vamos escrever a habilidade Alexa. Navegue até o painel do desenvolvedor da Amazon e faça login. Clique em Alexa e comece com o kit Alexa Skill

Siga as instruções fornecidas pelo gui.

Na guia Interation Model, você deseja preencher a caixa Intent Schema com o seguinte:

Na caixa Expressões de exemplo, você deseja escrever alguns comandos de amostra que uma pessoa pode usar para invocar a habilidade. Nós escrevemos estes:

findkeys find minhas keysfindkeys onde minhas chaves findkeys Perdi minhas chaves

  • Na guia Configuração, certifique-se de escolher o ponto de extremidade do serviço para HTTPS. Copie seu link https e cole-o na caixa Padrão abaixo. A vinculação de contas pode ser deixada como Não.
  • No Certificado SSL, escolha a opção intermediária, "Meu ponto de extremidade de desenvolvimento é um subdomínio de um domínio que possui um certificado curinga de uma autoridade de certificação".
  • A guia Teste permitirá que você teste a nova habilidade digitando um de seus comandos de amostra.

Termine de preencher as duas últimas guias até que todas as marcas de seleção fiquem verdes. Em seguida, lance sua habilidade com o recurso de teste beta. Isso permite que você hospede sua habilidade em qualquer dispositivo de eco antes de publicá-la. Siga as instruções no link de e-mail para instalar a habilidade em seu dispositivo de eco.

Etapa 3: Tornando nossa habilidade mais inteligente

Tornando nossa habilidade mais inteligente
Tornando nossa habilidade mais inteligente
Tornando nossa habilidade mais inteligente
Tornando nossa habilidade mais inteligente
Tornando nossa habilidade mais inteligente
Tornando nossa habilidade mais inteligente

Colocamos os computadores ociosos espalhados pela casa para trabalhar na consulta do beacon bluetooth para relatar a força do sinal RSSI.

Fazendo leituras de várias máquinas, podemos utilizar a força do sinal para como um proxy para distância. Precisamos descobrir como usar isso para calcular a parte mais provável da casa para encontrar o farol.

Voltamo-nos para o aprendizado de máquina. Um trabalho crontab a cada 2 minutos cria um conjunto de dados de tuplas RSSI. Colocando o farol em locais diferentes como: 'Quarto', 'Banheiro', 'Cozinha', 'Área de estar', rotulamos os registros RSSI. Depois de mapear a casa, podemos usar modelos baseados em árvore como o XGBClassifier do xgboost.

A implementação xgboost de aumento de gradiente tratará os dados ausentes de leituras de tempo limite, treinando em alguns segundos. Use python pickle para persistir o modelo treinado e carregar em nosso aplicativo alexa retrievr. Quando a habilidade é chamada, o aplicativo procura a leitura RSSI do bluetooth e gera uma localização prevista, alexa pode responder sugerindo 'tente olhar no banheiro'.

Etapa 4: juntando tudo

Tendo um modelo para aproximar a última localização das chaves, podemos adicioná-lo ao aplicativo para melhorar a declaração retornada por Alexa. Modificamos o script para ler:

import osfrom flask import Flask from flask_ask import Ask, declaração importar pexpect importar pickle importar pandas as pd importar numpy as np de coleções importar defaultdict, Contador de reverse_read import reverse_readline app = Flask (_ name_) ask = Ask (app, '/') @ ask.intent ('findkeys') def retrievr (): os.system ("/ path / to / repo / sound_alarm.py &") speech_text = guess_locate () declaração de retorno (speech_text) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = enquanto len (res_lst)! = 20: ln = next (line_gen) if ln.startswith ('Host'): _, ip, _, reading = ln.split () read_dict [ip] = leitura res_lst.append (read_dict) if ip == 'ip.of.one.computer': read_dict = {} else: pass val = pd. DataFrame (res_lst).replace ({'N / A ': np.nan}). Values mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1) [0] [0] reply_str = 'Tente procurar no' if guess == 1: reply_str + = 'bedroom' elif guess == 2: reply_str + = 'bathroom' elif guess == 3: reply_str + = 'kitchen' elif guess == 4: reply_str + = 'living' return reply_str if _name_ == "_main_": app.run (host = '127.0.0.1', porta = '5000')

Criamos uma nova função chamada guess_locate () que pega um arquivo com as mais recentes intensidades de sinal rssi registradas. Em seguida, ele executará as amostras em nosso modelo xgboost em conserva e retornará a string de localização mais provável. Este local será retornado quando Alexa for solicitada. Como o estabelecimento de uma conexão com um beacon pode levar alguns segundos, executamos um processo separado chamando essa função em sound_alarm.py.

Recomendado: