Sommario:
- Passaggio 1: hacking dei beacon Bluetooth
- Passaggio 2: creazione di un'abilità e di un'app Alexa
- Passaggio 3: rendere le nostre competenze più intelligenti
- Passaggio 4: mettere tutto insieme
Video: Alexa, dove sono le mie chiavi?: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Alexa è particolarmente adatto alle attività di recupero delle informazioni e al monitoraggio delle risorse tramite reti domestiche wireless. È naturale considerare l'inserimento di oggetti di valore sulla griglia per un rapido recupero. Abbiamo hackerato beacon bluetooth a basso consumo energetico per la portata della rete e la longevità della batteria e creiamo un'applicazione intelligente in modo che Alexa sappia dove abbiamo lasciato le chiavi.
Come farlo…
Passaggio 1: hacking dei beacon Bluetooth
È possibile acquistare un set di 3 beacon per meno di $ 15 e sono supportati con le applicazioni Android/iOS, ma verrà disattivato per la privacy. Inoltre, trovare le nostre chiavi non dovrebbe trasformarsi nel trovare il nostro telefono.
Questo tutorial di adafruit sulle luci intelligenti di reverse engineering ci ha aiutato a controllare i beacon. Inizia attivando la scansione beacon per l'indirizzo del dispositivo eseguendo:
sudo hcitool lescan
Trova e copia l'indirizzo etichettato con il nome "iTag", quindi esegui:
sudo gatttool -I
Connettiti al dispositivo in modo interattivo eseguendo:
collegare AA:BB:CC:DD:EE:FF
Prova a eseguire "help" per visualizzare le opzioni o "principale" per visualizzare i servizi:
Eseguendo 'char-desc' seguito dall'handle del servizio come sopra, troviamo gli UUID che cerchiamo facendo riferimento alle specifiche delle caratteristiche di gatt e alle specifiche del servizio. Per ulteriori informazioni su questi servizi, dai un'occhiata a questo. Ispezionando il traffico con Wireshark, scopriamo che 0100111000000001 attiva l'allarme e, logicamente, 0000111000000001 lo disattiva. Ora abbiamo la semplice funzione Python:
import peexpectdef sound_alarm(BD_ADDR): child = pexpect.spawn('gatttool -I') child.sendline('connect {}'.format(BD_ADDR)) child.expect('Connessione riuscita', timeout=30) child.sendline ('char-write-cmd 0x000b 0100011000000001')
Successivamente, ci concentriamo sulla creazione dell'abilità di Alexa per attivare il beacon quando cerchiamo le chiavi.
Passaggio 2: creazione di un'abilità e di un'app Alexa
Creiamo una skill che sarà collegata a un server locale. Quindi configuriamo il nostro server per eseguire qualsiasi azione vorremmo, in questo caso, fornire un'approssimazione di dove potrebbero trovarsi i tasti e far suonare il beacon Bluetooth. Flask fornisce una libreria Python semplice e facile da usare per servire un'applicazione. Usando flask-ask, possiamo configurare il server per comunicare con la nostra abilità Alexa che costruiremo in seguito. Bene, serviamo l'applicazione con Ngrok, che ci fornirà un collegamento https di cui avremo bisogno per la nostra abilità Alexa. Per prima cosa abbiamo creato l'applicazione con la funzionalità più semplice: fare in modo che il nostro beacon BLE emetta un segnale acustico quando viene attivato.
#!/usr/bin/env pythonfrom flask import Flask from flask_ask import Ask, statement import peexpect app=Flask(_name_) ask = Ask(app, '/') BD_ADDR = 'AA:BB:CC:DD:EE:FF ' #ID del tuo beacon bluetooth qui @ask.intent('findkeys') def retrievr(): sound_alarm() speech_text = "Le tue chiavi sono qui da qualche parte." dichiarazione di ritorno(speech_text) def sound_alarm(): child = peexpect.spawn('gatttool -I') child.sendline('connect {}'.format(BD_ADDR)) child.expect('Connessione riuscita', timeout=60) child.sendline('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run(host='127.0.0.1', port='5000')
Abbiamo usato la funzione sound_alarm() che abbiamo scritto in precedenza per far suonare il BLE. Per la funzione che verrà utilizzata per l'intento, aggiungiamo il decoratore ask con il nostro intento "findkeys". Quando creiamo l'abilità di Alexa sulla dashboard degli sviluppatori di Amazon, useremo questo nome per il nostro intento. Scrivi questo script in un file chiamato app.py ed esegui
python app.py
Questo servirà la tua applicazione su https://localhost:5000. Esegui un server ngrok e copia il collegamento https generato. Ne avrai bisogno quando configuri l'abilità di Alexa. Per maggiori dettagli, dai un'occhiata a questo post. Abbiamo impostato con successo una semplice applicazione, ora scriveremo l'abilità di Alexa. Vai alla dashboard per sviluppatori di Amazon e accedi. Fai clic su Alexa e inizia con Alexa Skill kit
Segui le istruzioni fornite dalla gui.
Nella scheda Modello di interazione dovrai compilare la casella Schema di intenti con quanto segue:
{ "intent": [{ "intent": "findkeys" }, { "intent": "AMAZON. HelpIntent" }, { "intent": "AMAZON. StopIntent" }, { "intent": "AMAZON. CancelIntent" }] }
-
Nella casella Espressioni di esempio, vuoi scrivere alcuni comandi di esempio che una persona potrebbe usare per invocare l'abilità. Abbiamo scritto questi:
trova chiavi trova le mie chiavi trova le chiavi dove le mie chiavi trova le chiavi Ho perso le chiavi
- Nella scheda Configurazione, assicurati di scegliere l'endpoint del servizio su HTTPS. Copia il tuo link https e incollalo nella casella Predefinito sottostante. Il collegamento dell'account può essere lasciato al n.
- Nel certificato SSL scegli l'opzione centrale, "Il mio endpoint di sviluppo è un sottodominio di un dominio che ha un certificato con caratteri jolly di un'autorità di certificazione".
- La scheda Test ti consentirà di testare la nuova abilità digitando uno dei tuoi comandi di esempio.
Completa la compilazione delle ultime due schede finché tutti i segni di spunta non diventano verdi. Quindi avvia la tua abilità con la funzione di beta test. Ciò ti consente di ospitare la tua abilità su qualsiasi dispositivo echo prima di pubblicarla. Segui le istruzioni sul link e-mail per installare l'abilità sul tuo dispositivo echo.
Passaggio 3: rendere le nostre competenze più intelligenti
Mettiamo i computer inattivi sparsi in tutta la casa per interrogare il beacon bluetooth per segnalare la potenza del segnale RSSI.
Prendendo letture da più macchine, possiamo utilizzare la potenza del segnale come proxy per la distanza. Dobbiamo capire come usarlo per calcolare la parte più probabile della casa per trovare il faro.
Passiamo al machine learning. Un lavoro crontab ogni 2 minuti, crea un set di dati di tuple RSSI. Posizionando il beacon in punti diversi come: 'Camera da letto', 'Bagno', 'Cucina', 'Area soggiorno' etichettiamo i registri RSSI. Una volta mappata la casa, possiamo usare modelli basati su alberi come XGBClassifier di xgboost.
L'implementazione xgboost del gradient boosting gestirà i dati mancanti dalle letture scadute, allenandosi in un paio di secondi. Usa python pickle per rendere persistente il modello addestrato e caricarlo nella nostra applicazione alexa retrievr. Quando l'abilità viene chiamata, l'applicazione cerca la lettura RSSI bluetooth e genera una posizione prevista, Alexa può rispondere suggerendo di "prova a guardare in bagno".
Passaggio 4: mettere tutto insieme
Avendo un modello per approssimare l'ultima posizione delle chiavi, possiamo aggiungerlo all'applicazione per migliorare l'affermazione restituita da Alexa. Abbiamo modificato lo script per leggere:
import osfrom flask import Flask from flask_ask import Ask, statement import pexpect import pickle import pandas as pd import numpy as np from collection import defaultdict, Counter from 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() return istruzione(speech_text) def guess_locate(): read_dict = {} line_gen = reverse_readline('YOUR_DATA_FILE.txt') res_lst = while len(res_lst) != 20: ln = next(line_gen) if ln.startswith('Host'): _, ip, _, reading = ln.split () read_dict[ip] = lettura 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 = 'Prova a cercare in ' if guess == 1: reply_str += 'camera da letto' elif guess == 2: reply_str += 'bagno' elif guess == 3: reply_str += 'cucina' elif guess == 4: reply_str += 'salotto' return reply_str if _name_ == "_main_": app.run(host ='127.0.0.1', porta='5000')
Abbiamo creato una nuova funzione chiamata guess_locate() che prende un file con gli ultimi segnali rssi registrati. Quindi eseguirà i campioni rispetto al nostro modello xgboost in salamoia e restituirà la stringa di posizione più probabile. Questa posizione verrà restituita quando viene richiesto ad Alexa. Poiché stabilire una connessione a un beacon può richiedere alcuni secondi, eseguiamo un processo separato che chiama quella funzione in sound_alarm.py.
Consigliato:
La cassaforte per chiavi di Angela: 5 passaggi
Cassaforte per chiavi di Angela: Ispirato da: https://www.instructables.com/id/Key-Safe/Una cassaforte per chiavi ben strutturata per riporre i tuoi effetti personali. Ho apportato alcune modifiche in base alla versione originale. Aggiungendo altre 3 password, "A", "B", "C" e &
Cassaforte per chiavi: 6 passaggi (con immagini)
Cassaforte per chiavi: durante i giorni feriali, raramente porto fuori la mia chiave, ma questo causa difficoltà quando mia madre è uscita di casa. Non avendo altra scelta, mia mamma deve lasciare la chiave nell'armadio accanto alla porta, che non ha alcuna garanzia che la chiave sia al sicuro o no
FlowerCare e Nymea per salvare le mie piante: 5 passaggi
FlowerCare e Nymea per salvare le mie piante: sporcarsi le mani collegando i sensori per la cura delle piante alla mia casa intelligente open source esistente. Una panoramica sullo sviluppo di plugin per nymea. La storia Come molti altri armeggiare e hacker, anch'io soffro del problema che l'hacking delle cose richiede
Separatore di chiavi: 6 passaggi
Keysorter: Attualmente sto studiando NMCT a Howest. Per il nostro ultimo semestre abbiamo dovuto fare un progetto. Così ho creato un Keysorter. Cosa fa? Abbiamo molte chiavi della macchina a casa e si somigliano tutte. Quindi ho creato un Keysorter per risolvere questo problema. Deve eseguire la scansione in un
La mia tastiera Le mie mani: 8 passaggi (con immagini)
La mia tastiera Le mie mani: ho usato il nuovissimo laser cutter Epilog che Instructables ha recentemente ottenuto per incidere al laser un'immagine delle mie mani sulla tastiera del mio laptop… in modo permanente. Ora questo sta annullando la tua garanzia in stile fai-da-te! Ho inciso al laser più laptop della maggior parte da quando ho aiutato o