Inhoudsopgave:
- Stap 1: Bluetooth-bakens hacken
- Stap 2: Een Alexa-vaardigheid en app maken
- Stap 3: Onze vaardigheid slimmer maken
- Stap 4: Alles samenbrengen
Video: Alexa, waar zijn mijn sleutels?: 4 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Alexa is met name geschikt voor het ophalen van informatie en het bewaken van activa met behulp van draadloze thuisnetwerken. Het is normaal om te overwegen om waardevolle spullen op het rooster te zetten om ze snel terug te kunnen vinden. We hacken goedkope bluetooth low energy beacons voor het netwerkbereik en de levensduur van de batterij en bouwen een slimme applicatie zodat Alexa weet waar we de sleutels hebben gelaten.
Hoe je dat doet…
Stap 1: Bluetooth-bakens hacken
Een set van 3 beacons kan worden gekocht voor minder dan $ 15 en wordt ondersteund met Android/iOS-applicaties, maar we kiezen voor privacy. Trouwens, het vinden van onze sleutels mag niet veranderen in het vinden van onze telefoon.
Deze adafruit-tutorial over reverse engineering van slimme lampen heeft ons geholpen de bakens te bedienen. Begin met het inschakelen van de bakenscan voor het apparaatadres door het volgende uit te voeren:
sudo hcitool lescan
Zoek en kopieer het adres met de naam 'iTag' en voer het volgende uit:
sudo gatttool -I
Maak interactief verbinding met het apparaat door het volgende uit te voeren:
sluit AA:BB:CC:DD:EE:FF
Probeer 'help' uit te voeren om opties te bekijken of 'primair' om services te bekijken:
Als we 'char-desc' uitvoeren, gevolgd door de servicehandle zoals hierboven, vinden we UUID's die we opzoeken door te verwijzen naar de gatt-karakteristieke specificaties en servicespecificaties. Bekijk dit voor meer informatie over deze services. Als we verkeer met Wireshark inspecteren, zien we dat 0100111000000001 het alarm activeert en logischerwijs schakelt 0000111000000001 het uit. Nu hebben we de eenvoudige python-functie:
import pexpectdef sound_alarm(BD_ADDR): child = pexpect.spawn('gatttool -I') child.sendline('connect {}'.format(BD_ADDR)) child.expect('Verbinding succesvol', timeout=30) child.sendline ('char-write-cmd 0x000b 0100111000000001')
Vervolgens concentreren we ons op het creëren van de Alexa-vaardigheid om het baken te activeren wanneer we op zoek zijn naar de sleutels.
Stap 2: Een Alexa-vaardigheid en app maken
We creëren een vaardigheid die wordt gekoppeld aan een lokale server. Vervolgens configureren we onze server om elke gewenste actie te ondernemen, in dit geval een benadering geven voor waar de sleutels zich kunnen bevinden en het Bluetooth-baken laten piepen. Flask biedt een eenvoudige en gemakkelijk te gebruiken python-bibliotheek om een applicatie te bedienen. Met behulp van flask-ask kunnen we de server configureren om te communiceren met onze Alexa-vaardigheid die we later zullen bouwen. Serveer de applicatie goed met Ngrok, die ons een https-link zal geven die we nodig hebben voor onze Alexa-vaardigheid. Eerst hebben we de applicatie gebouwd met de eenvoudigste functionaliteit: om ons BLE-baken te laten piepen wanneer het wordt geactiveerd.
#!/usr/bin/env pythonfrom flask import Flask from flask_ask import Ask, statement import pexpect app=Flask(_name_) ask = Ask(app, '/') BD_ADDR = 'AA:BB:CC:DD:EE:FF ' #Your bluetooth beacon id here @ask.intent('findkeys') def retrievr(): sound_alarm() speech_text = "Je sleutels zijn hier ergens." return statement(speech_text) def sound_alarm(): child = pexpect.spawn('gatttool -I') child.sendline('connect {}'.format(BD_ADDR)) child.expect('Verbinding succesvol', timeout=60) child.sendline('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run(host='127.0.0.1', port='5000')
We gebruikten de functie sound_alarm() die we eerder schreven om de BLE-piep te laten klinken. Voor de functie die zal worden gebruikt voor de intentie, voegen we de ask decorateur toe met onze intentie "findkeys". Wanneer we de Alexa-vaardigheid op het Amazon-dashboard voor ontwikkelaars maken, zullen we deze naam gebruiken voor onze bedoeling. Schrijf dit script naar een bestand met de naam app.py en voer het uit
python app.py
Hiermee wordt uw toepassing op https://localhost:5000 weergegeven. Voer een ngrok-server uit en kopieer de gegenereerde https-link. Je hebt het nodig wanneer je de Alexa-vaardigheid configureert. Bekijk dit bericht voor meer informatie. We hebben met succes een eenvoudige applicatie opgezet, nu gaan we de Alexa-vaardigheid schrijven. Navigeer naar het Amazon-dashboard voor ontwikkelaars en log in. Klik op Alexa en ga aan de slag met de Alexa Skill-kit
Volg de instructies van de gui.
Op het tabblad Interation Model vult u het vak Intent Schema in met het volgende:
{ "intents": [{ "intent": "findkeys" }, { "intent": "AMAZON. HelpIntent" }, { "intent": "AMAZON. StopIntent" }, { "intent": "AMAZON. CancelIntent" }] }
-
In het vak Voorbeelduitingen wilt u enkele voorbeeldopdrachten schrijven die een persoon zou kunnen gebruiken om de vaardigheid aan te roepen. We schreven deze:
vindsleutels vind mijn sleutelsvindsleutels waar mijn sleutels vindsleutels Ik ben mijn sleutels kwijt
- Zorg ervoor dat u op het tabblad Configuratie het service-eindpunt kiest voor HTTPS. Kopieer uw https-link en plak deze in het vak Standaard eronder. Het koppelen van accounts kan worden overgelaten aan nr.
- Kies in het SSL-certificaat de middelste optie, "Mijn ontwikkelingseindpunt is een subdomein van een domein met een wildcardcertificaat van een certificeringsinstantie".
- Op het tabblad Test kunt u de nieuwe vaardigheid testen door een van uw voorbeeldopdrachten in te typen.
Voltooi het invullen van de laatste twee tabbladen totdat alle vinkjes groen zijn. Start vervolgens je vaardigheid met de functie Beta Testing. Hierdoor kunt u uw vaardigheid op elk echo-apparaat hosten voordat u het publiceert. Volg de instructies op de e-maillink om de vaardigheid op uw echo-apparaat te installeren.
Stap 3: Onze vaardigheid slimmer maken
We zetten de inactieve computers verspreid over het huis aan het werk bij het opvragen van het bluetooth-baken om de RSSI-signaalsterkte te rapporteren.
Door metingen van meerdere machines te nemen, kunnen we de signaalsterkte gebruiken als een proxy voor afstand. We moeten uitzoeken hoe we dit kunnen gebruiken om het meest waarschijnlijke deel van het huis te berekenen om het baken te vinden.
We gaan over op machine learning. Een crontab-taak elke 2 minuten, bouwt een dataset van RSSI-tupels op. Door het baken op verschillende plekken te plaatsen, zoals: 'Slaapkamer', 'Badkamer', 'Keuken', 'Woonruimte' labelen we de RSSI-logs. Zodra we het huis in kaart hebben gebracht, kunnen we op boom gebaseerde modellen gebruiken, zoals de XGBClassifier van xgboost.
De xgboost-implementatie van gradiëntversterking zal de ontbrekende gegevens van time-outmetingen verwerken en in een paar seconden trainen. Gebruik python augurk om het getrainde model te behouden en in onze alexa retrievr-applicatie te laden. Wanneer de vaardigheid wordt aangeroepen, zoekt de applicatie de Bluetooth RSSI-lezing op en genereert een voorspelde locatie, Alexa kan antwoorden met de suggestie 'probeer in de badkamer te kijken'.
Stap 4: Alles samenbrengen
Als we een model hebben om de laatste locatie van de sleutels te benaderen, kunnen we dit aan de applicatie toevoegen om de door Alexa geretourneerde verklaring te verbeteren. We hebben het script aangepast om te lezen:
import osfrom flask import Flask from flask_ask import Ask, statement import pexpect import augurk import pandas as pd import numpy as np from collections 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 statement(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] = lezen 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 = Teller(preds) Guess = Guess.most_common(1)[0][0] reply_str = 'Probeer in de ' if guess == 1: reply_str += 'bedroom' elif guess == 2: reply_str += 'badkamer' elif guess == 3: reply_str += 'keuken' elif guess == 4: reply_str += 'woonkamer' return reply_str if _name_ == "_main_": app.run(host ='127.0.0.1', poort='5000')
We hebben een nieuwe functie gemaakt met de naam Guess_locate() die een bestand nodig heeft met de laatste geregistreerde RSS-signaalsterkten. Vervolgens worden de voorbeelden uitgevoerd tegen ons gebeitst xgboost-model en wordt de meest waarschijnlijke locatiereeks geretourneerd. Deze locatie wordt geretourneerd wanneer Alexa daarom wordt gevraagd. Aangezien het tot stand brengen van een verbinding met een baken enkele seconden kan duren, voeren we een apart proces uit om die functie aan te roepen in sound_alarm.py.
Aanbevolen:
KONIJN KONIJN WAAR BEN JE?: 3 stappen
KONIJN KONIJN WAAR BEN JE?: Ik kom uit Taiwan en ik ben 13 jaar oud, en mijn naam is Chia-Ying Wu. Onze familie heeft een konijn, hij speelt vaak verstoppertje met ons. Hij verstopt zich graag in de hoek naast de bank, maar omdat het zicht wordt geblokkeerd door de bank, kunnen we hem vaak niet vinden. S
Fred! Waar ben je?: 3 stappen
Fred! Waar ben je?: Dit project gaat over hoeveel km je van je huis bent. Fred wordt gevoed door een batterij die oplaadbaar is als een smartphone, dus je kunt hem meenemen. Dit is een heel eenvoudig te bouwen, maar het kan zijn dat je vastzit aan de codering. In dit project moet je
Maak mijn eigen grafieken voor mijn IOT-gegevens op een Raspberry PI - Ajarnpa
Maak mijn eigen grafieken voor mijn IOT-gegevens op een Raspberry PI: lees verder als u uw eigen IOT-grafieken wilt kunnen maken met 7 regels code. Ik wilde grafieken maken om gegevens in een grafisch formaat van mijn IOT-sensoren weer te geven op een webpagina. Hiervoor had ik eerder diensten van derden gebruikt (sommige pa
Waar vind je de 5 beste Mac-apps die beschikbaar zijn: 5 stappen
Waar vindt u de 5 beste beschikbare Mac-apps: de apps waarmee u het beste uit uw Apple Mac-computer kunt halen
Mijn toetsenbord Mijn handen: 8 stappen (met afbeeldingen)
Mijn toetsenbord Mijn handen: ik heb de gloednieuwe Epilog-lasersnijder gebruikt die Instructables onlangs heeft gekregen om een afbeelding van mijn handen permanent op het toetsenbord van mijn laptop te laseretsen. Dat maakt je garantie ongeldig in doe-het-zelfstijl! Ik heb meer laptops met laser geëtst dan de meeste sinds ik help o