Innehållsförteckning:
- Steg 1: Hacka Bluetooth -beacons
- Steg 2: Skapa en Alexa Skill och App
- Steg 3: Gör vår skicklighet smartare
- Steg 4: Sätta ihop allt
Video: Alexa, Var är mina nycklar ?: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Alexa är särskilt väl lämpad för informationshämtning och övervakning av tillgångar med hjälp av trådlösa hemnätverk. Det är naturligt att överväga att sätta värdesaker på nätet för snabb hämtning. Vi hackar billiga bluetooth -lågenergibakar för nätverksintervallet och batteriets livslängd och bygger en smart applikation så att Alexa vet var vi lämnade nycklarna.
Hur man gör det…
Steg 1: Hacka Bluetooth -beacons
En uppsättning med 3 fyrar kan köpas för mindre än $ 15 och stöds med Android/iOS -applikationer, men vi väljer bort sekretess. Att hitta våra nycklar borde dessutom inte bli en telefon.
Denna adafruit -handledning om bakåtbyggda smarta lampor hjälpte oss att styra fyrarna. Börja med att slå på beacon -sökningen efter enhetsadressen genom att köra:
sudo hcitool lescan
Hitta och kopiera adressen märkt med namnet 'iTag' och kör sedan:
sudo gatttool -I
Anslut till enheten interaktivt genom att köra:
anslut AA: BB: CC: DD: EE: FF
Prova att köra "hjälp" för att visa alternativ eller "primär" för att visa tjänster:
Genom att köra 'char-desc' följt av servicehandtaget enligt ovan hittar vi UUID: er som vi letar upp genom att referera till de gattskarakteristiska specifikationerna och servicespecifikationerna. För mer information om de här tjänsterna, kolla in detta. Vid inspektion av trafik med Wireshark finner vi att 0100111000000001 utlöser larmet och logiskt nog stänger 0000111000000001 av det. Nu har vi den enkla python -funktionen:
importera pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Anslutning lyckad', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')
Därefter fokuserar vi på att skapa Alexa -färdigheten för att utlösa fyren när vi letar efter nycklarna.
Steg 2: Skapa en Alexa Skill och App
Vi skapar en skicklighet som kommer att länkas till en lokal server. Sedan konfigurerar vi vår server för att vidta alla åtgärder vi skulle vilja, i det här fallet, ge en approximation för var nycklarna kan vara placerade och få Bluetooth -varningssignalen att pipa. Flask ger ett enkelt och lättanvänt pythonbibliotek för att betjäna en applikation. Med hjälp av flask-ask kan vi konfigurera servern för att kommunicera med vår Alexa-skicklighet som vi kommer att bygga senare. Servera programmet med Ngrok, vilket ger oss en https -länk som vi behöver för vår Alexa -skicklighet. Först byggde vi applikationen med den enklaste funktionaliteten: att få vår BLE -signal att pipa när den utlöses.
#!/usr/bin/env pythonfrån flaskimport Flask from flask_ask import Ask, statement import pexpect app = Flask (_ name_) ask = Ask (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF '#Ditt bluetooth -beacon -id här @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Dina nycklar finns här någonstans." return statement (speech_text) def sound_alarm (): child = pexpect.spawn ('gatttool -I') child.sendline ('connect {}'. format (BD_ADDR)) child.expect ('Connection failed', timeout = 60) child.sendline ('char-write-cmd 0x000b 0100111000000001') om _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')
Vi använde funktionen sound_alarm () som vi skrev tidigare för att göra BLE -pipet. För funktionen som kommer att användas för avsikten lägger vi till askdekoratören med våra avsikter "findkeys". När vi gör Alexa -färdigheten på Amazon -utvecklarens instrumentpanel kommer vi att använda detta namn för vår avsikt. Skriv detta skript till en fil som heter app.py och kör
python app.py
Detta kommer att visa din ansökan på https:// localhost: 5000. Kör en ngrok -server och kopiera den genererade https -länken. Du behöver det när du konfigurerar Alexa -färdigheten. För mer information, kolla in det här inlägget. Vi har framgångsrikt konfigurerat en enkel applikation, nu skriver vi Alexa -färdigheten. Navigera till Amazon utvecklarens instrumentpanel och logga in. Klicka på Alexa och kom igång med Alexa Skill kit
Följ instruktionerna från gui.
Under fliken Interationsmodell vill du fylla i rutan Intent Schema med följande:
I rutan Provutterances vill du skriva några exempelkommandon som en person kan använda för att åkalla färdigheten. Vi skrev dessa:
findkeys find my keysfindkeys där mina nycklar hittar nycklar jag tappade mina nycklar
- På fliken Konfiguration, se till att välja tjänstens slutpunkt till HTTPS. Kopiera din https -länk och klistra in den i standardrutan nedanför. Kontolänkning kan lämnas till nr.
- I SSL-certifikatet väljer du det mellersta alternativet "Min utveckling slutpunkt är en underdomän för en domän som har ett jokertecken från en certifikatutfärdare".
- På fliken Test kan du testa den nya färdigheten genom att skriva in ett av dina provkommandon.
Slutför att fylla i de två sista flikarna tills alla bockar är gröna. Starta sedan din skicklighet med Beta Testing -funktionen. Detta låter dig vara värd för din skicklighet på vilken eko -enhet som helst innan du publicerar den. Följ instruktionerna på e -postlänken för att installera färdigheten på din eko -enhet.
Steg 3: Gör vår skicklighet smartare
Vi lägger inaktiverade datorer spridda över hela huset för att arbeta med att fråga bluetooth -fyren för att rapportera RSSI -signalstyrkan.
Med avläsningar från flera maskiner kan vi använda signalstyrkan till som en proxy för avstånd. Vi måste ta reda på hur vi använder det här för att beräkna den mest troliga delen av huset för att hitta ledstjärnan.
Vi vänder oss till maskininlärning. Ett crontab -jobb varannan minut, bygger upp en dataset med RSSI -tupler. Placera fyren på olika platser som: "Sovrum", "Badrum", "Kök", "Vardagsrum" märker vi RSSI -loggarna. När vi har kartlagt hemmet kan vi använda trädbaserade modeller som xgboosts XGBClassifier.
Xgboost -implementeringen av gradientförstärkning kommer att hantera saknade data från timeout -avläsningar, träning på några sekunder. Använd python pickle för att fortsätta den utbildade modellen och ladda in i vår alexa retrievr -applikation. När färdigheten anropas letar applikationen upp Bluetooth RSSI -läsningen och genererar en förutsagd plats, alexa kan svara och föreslår att "försöka titta i badrummet."
Steg 4: Sätta ihop allt
Med en modell för att approximera nycklarnas sista plats kan vi lägga till den i programmet för att förbättra uttalandet som returneras av Alexa. Vi har ändrat skriptet för att läsa:
importera osfrån kolv importera kolv från flask_ask import Fråga, uttalande import pexpect import pickle 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 = medan len (res_lst)! = 20: ln = nästa (line_gen) om ln.startswith ('Host'): _, ip, _, läsning = ln.split () read_dict [ip] = läser 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}). Värden mdl_ = pickle.load (öppen (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) gissning = gissa.most_sommar (1) [0] [0] reply_str = 'Prova att titta i' if guess == 1: reply_str += 'sovrum' elif gissning == 2: reply_str += 'badrum' elif gissning == 3: answer_str += 'kök' elif gissning == 4: reply_str += 'vardagsrum' return svara_str om _name_ == "_main_": app.run (värd = '127.0.0.1', port = '5000')
Vi skapade en ny funktion som heter guess_locate () som tar en fil med de senaste registrerade rssi -signalstyrkorna. Den kör sedan proverna mot vår inlagda xgboost -modell och returnerar den mest troliga platssträngen. Den här platsen returneras när Alexa uppmanas. Eftersom det kan ta några sekunder att upprätta en anslutning till en fyr, kör vi en separat process som kallar den funktionen i sound_alarm.py.
Rekommenderad:
Mina laserskurna Ray-Gun-monteringsanvisningar: 10 steg
Mina laserskurna Ray-Gun-monteringsinstruktioner: Med ursäkt för förseningen, här är mina sena instruktioner om hur du monterar laserpekaren Ray-Gun, du kan köpa Vector-ritplaner för att få den gjord … På en CNC Laser-Cutter! Https: //cults3d.com/en/3d-model/gadget/ray-gun Så här
Skapa mina egna grafer för mina IOT -data på ett hallon -PI: 3 steg
Skapa mina egna grafer för mina IOT -data på en Raspberry PI: Läs vidare om du vill kunna skapa dina egna IOT -grafer med 7 rader kod.Jag ville skapa diagram för att visa data i ett grafiskt format från mina IOT -sensorer på en webbsida. Tidigare för detta hade jag använt tjänster från tredje part (några pa
Keyminder! enheten som gör att du inte tappar dina nycklar !: 3 steg (med bilder)
Keyminder! enheten som gör att du inte tappar dina nycklar !: Den här enheten hjälper dig att inte tappa dina nycklar! Om du är som jag, när du kommer hem från jobbet tappar du omedelbart dina nycklar efter att du har låst upp din dörr och du väntar tills nästa dag innan du måste gå för att leta efter dem. Ja du kanske har
Mini USB Drive Mod: Nycklar: 9 steg
Mini USB Drive Mod: Nycklar: Detta är en mod som ger dig en söt liten USB -enhet upp till 4 gigabyte! Det här är också riktigt litet. Ha det så kul och hoppas du gillar det! EDIT: USB -enheten fungerar fortfarande och håller minnet när du är klar. Det finns ingen anledning att bryta kretsen
Gör en upplyst namnplatta av tangentbordets nycklar: 6 steg
Gör en upplyst namnplatta av tangentbordets nycklar: Den här instruktionsboken visar alla hur du gör en upplyst namnskylt av några tangenter och lite elektronik. Låt oss börja