İçindekiler:
- 1. Adım: Bluetooth İşaretlerini Hackleme
- Adım 2: Bir Alexa Becerisi ve Uygulaması Oluşturma
- 3. Adım: Becerimizi Daha Akıllı Hale Getirmek
- Adım 4: Hepsini Bir Araya Getirmek
Video: Alexa, Anahtarlarım Nerede?: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Alexa, kablosuz ev ağlarını kullanarak bilgi alma görevleri ve varlıkları izlemek için özellikle çok uygundur. Hızlı erişim için değerli eşyalarınızı ızgaraya koymayı düşünmek doğaldır. Ağ aralığı ve pil ömrü için ucuz bluetooth düşük enerjili işaretçileri hackliyoruz ve Alexa'nın anahtarları nerede bıraktığımızı bilmesi için akıllı bir uygulama oluşturuyoruz.
Nasıl yapılır…
1. Adım: Bluetooth İşaretlerini Hackleme
3 işaretçi seti 15 dolardan daha düşük bir fiyata satın alınabilir ve Android/iOS uygulamalarıyla desteklenir, ancak gizliliği devre dışı bırakacağız. Ayrıca anahtarlarımızı bulmak telefonumuzu bulmaya dönüşmemeli.
Tersine mühendislik akıllı ışıklarıyla ilgili bu adafruit öğreticisi, işaretçileri kontrol etmemize yardımcı oldu. Aşağıdakileri çalıştırarak cihaz adresi için işaret taramasını açarak başlayın:
sudo hcitool lescan
'iTag' adıyla etiketlenmiş adresi bulun ve kopyalayın, ardından şunu çalıştırın:
sudo gatttool -I
Aşağıdakileri çalıştırarak cihaza etkileşimli olarak bağlanın:
AA:BB:CC:DD:EE:FF bağlayın
Seçenekleri görüntülemek için 'yardım' veya hizmetleri görüntülemek için 'birincil' çalıştırmayı deneyin:
'char-desc' ve ardından yukarıdaki gibi servis tanıtıcısını çalıştırarak, gatt karakteristik spesifikasyonlarına ve servis spesifikasyonlarına başvurarak aradığımız UUID'leri buluruz. Bu hizmetler hakkında daha fazla bilgi için şuna göz atın. Wireshark ile trafiği incelerken, 0100111000000001'in alarmı tetiklediğini ve mantıksal olarak 0000111000000001'in kapattığını görüyoruz. Şimdi basit python işlevine sahibiz:
import pexpectdef sound_alarm(BD_ADDR): child = pexpect.spawn('gatttool -I') child.sendline('connect {}'.format(BD_ADDR)) child.expect('Bağlantı başarılı', zaman aşımı=30) child.sendline ('char-write-cmd 0x000b 0100111000000001')
Ardından, anahtarları ararken işaretçiyi tetiklemek için Alexa becerisini oluşturmaya odaklanıyoruz.
Adım 2: Bir Alexa Becerisi ve Uygulaması Oluşturma
Yerel bir sunucuya bağlanacak bir beceri yaratıyoruz. Ardından, sunucumuzu istediğimiz eylemi yapacak şekilde yapılandırırız, bu durumda, anahtarların nerede olabileceğine dair bir tahmin sağlar ve Bluetooth işaretini bip sesi çıkarır. Flask, bir uygulamaya hizmet etmek için basit ve kullanımı kolay bir python kütüphanesi sağlar. Flask-ask kullanarak, sunucuyu daha sonra oluşturacağımız Alexa becerimizle iletişim kuracak şekilde yapılandırabiliriz. Uygulamaya, Alexa becerimiz için ihtiyaç duyacağımız bir https bağlantısı verecek olan Ngrok ile hizmet verin. İlk önce uygulamayı en basit işlevsellikle oluşturduk: tetiklendiğinde BLE beacon'umuzu bip sesi çıkarmak için.
#!/usr/bin/env pythonfrom flask import flask_ask'tan flask import Ask, deyim import pexpect app=Flask(_name_) ask = Ask(app, '/') BD_ADDR = 'AA:BB:CC:DD:EE:FF ' #Bluetooth işaretçi kimliğiniz burada @ask.intent('findkeys') def retrievr(): sound_alarm() konuşma_text = "Anahtarlarınız buralarda bir yerde." dönüş ifadesi(speech_text) def sound_alarm(): çocuk = pexpect.spawn('gatttool -I') child.sendline('connect {}'.format(BD_ADDR)) child.expect('Bağlantı başarılı', zaman aşımı=60) child.sendline('char-write-cmd 0x000b 0100111000000001') if _name_ == "_main_": app.run(host='127.0.0.1', port='5000')
BLE bip sesi çıkarmak için daha önce yazdığımız sound_alarm() işlevini kullandık. Niyet için kullanılacak fonksiyon için, niyetimiz olan "findkeys" ile ask dekoratörünü ekliyoruz. Amazon geliştirici panosunda Alexa becerisini yaptığımızda, amacımız için bu adı kullanacağız. Bu betiği app.py adlı bir dosyaya yazın ve çalıştırın
piton uygulaması.py
Bu, başvurunuzu https://localhost:5000 üzerinde sunacaktır. Bir ngrok sunucusu çalıştırın ve oluşturulan https bağlantısını kopyalayın. Alexa becerisini yapılandırırken buna ihtiyacınız olacak. Daha fazla ayrıntı için bu gönderiye göz atın. Basit bir uygulamayı başarıyla kurduk, şimdi Alexa becerisini yazacağız. Amazon geliştirici panosuna gidin ve oturum açın. Alexa'ya tıklayın ve Alexa Skill kiti ile başlayın
GUI tarafından verilen talimatları izleyin.
Etkileşim Modeli sekmesi altında, Amaç Şeması kutusunu aşağıdakilerle doldurmak isteyeceksiniz:
{ "niyetler": [{ "niyet": "findkeys" }, { "niyet": "AMAZON. HelpIntent" }, { "niyet": "AMAZON. StopIntent" }, { "niyet": "AMAZON. CancelIntent" }] }
Örnek Sözler kutusunda, bir kişinin beceriyi çağırmak için kullanabileceği bazı örnek komutlar yazmak istiyorsunuz. Bunları yazdık:
bulkeys anahtarlarımı bul anahtarlarımı bulkeys anahtarlarımı kaybettim
- Yapılandırma sekmesinde, HTTPS için hizmet bitiş noktasını seçtiğinizden emin olun. https bağlantınızı kopyalayın ve altındaki Varsayılan kutuya yapıştırın. Hesap bağlama Hayır olarak bırakılabilir.
- SSL Sertifikasında ortadaki seçeneği seçin, "Geliştirme uç noktam, bir sertifika yetkilisinden joker karakter sertifikasına sahip bir etki alanının alt etki alanıdır".
- Test sekmesi, örnek komutlarınızdan birini yazarak yeni beceriyi test etmenize olanak tanır.
Tüm onay işaretleri yeşil olana kadar son iki sekmeyi doldurmayı bitirin. Ardından Beta Testi özelliği ile becerinizi başlatın. Bu, yeteneğinizi yayınlamadan önce herhangi bir yankı cihazında barındırmanıza olanak tanır. Beceriyi yankı cihazınıza yüklemek için e-posta bağlantısındaki talimatları izleyin.
3. Adım: Becerimizi Daha Akıllı Hale Getirmek
RSSI sinyal gücünü bildirmek için bluetooth işaretini sorgulamak için boşta olan bilgisayarları evin her tarafına dağıttık.
Birden fazla makineden okuma alarak, mesafe için bir proxy olarak sinyal gücünü kullanabiliriz. İşareti bulmak için evin en olası bölümünü hesaplamak için bunu nasıl kullanacağımızı bulmamız gerekiyor.
Makine öğrenimine dönüyoruz. Her 2 dakikada bir crontab işi, RSSI demetlerinin bir veri kümesini oluşturur. İşareti 'Yatak Odası', 'Banyo', 'Mutfak', 'Yaşam Alanı' gibi farklı noktalara yerleştirerek RSSI günlüklerini etiketliyoruz. Evin haritasını çıkardıktan sonra, xgboost'un XGBClassifier'ı gibi ağaç tabanlı modelleri kullanabiliriz.
Gradyan artırmanın xgboost uygulaması, zaman aşımına uğrayan okumalardaki eksik verileri birkaç saniye içinde eğitimle işleyecektir. Eğitilmiş modeli sürdürmek ve alexa geri alma uygulamamıza yüklemek için python turşu kullanın. Beceri çağrıldığında, uygulama bluetooth RSSI okumasını arar ve tahmini bir konum oluşturur, alexa 'banyoya bakmayı deneyin' önerisinde bulunarak yanıt verebilir.
Adım 4: Hepsini Bir Araya Getirmek
Anahtarların son konumunu tahmin edecek bir modele sahip olarak, Alexa tarafından döndürülen ifadeyi geliştirmek için uygulamaya ekleyebiliriz. Komut dosyasını okumak için değiştirdik:
os from flask import flask flask_ask import Ask, deyim import pexpect import pickle pandaları pd olarak import numpy koleksiyonlardan import defaultdict, Counter'dan reverse_read import reverse_readline app=Flask(_name_) ask = Ask(app, '/') @ ask.intent('findkeys') tanımlı retrievr(): os.system("/path/to/repo/sound_alarm.py &") konuşma_metni = tahmin_locate() dönüş ifadesi(speech_text) tanım tahmin_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, _, okuma = ln.split () read_dict[ip] = okuma 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) tahmin = Counter(preds) tahmin = tahmin.most_common(1)[0][0] answer_str = 'if tahminine bakmayı deneyin == 1: answer_str += 'yatak odası' elif tahmin == 2: answer_str += 'banyo' elif tahmin == 3: answer_str += 'mutfak' elif tahmin == 4: answer_str += 'oturma odası' return answer_str if _name_ == "_main_": app.run(host) ='127.0.0.1', bağlantı noktası='5000')
En son kaydedilen rssi sinyal gücüne sahip bir dosya alan tahmin_locate() adlı yeni bir işlev oluşturduk. Ardından örnekleri turşu xgboost modelimize karşı çalıştıracak ve en olası konum dizesini döndürecektir. Alexa istendiğinde bu konum döndürülecektir. Bir işaretçiyle bağlantı kurmak birkaç saniye sürebileceğinden, sound_alarm.py'de bu işlevi çağıran ayrı bir işlem yürütüyoruz.
Önerilen:
Alexa Tabanlı Ses Kontrollü Roketatar: 9 Adım (Resimli)
Alexa Tabanlı Ses Kontrollü Roketatar: Kış mevsimi yaklaşırken; ışık festivalinin kutlandığı yılın o zamanı gelir. Evet, dünya çapında kutlanan gerçek bir Hint festivali olan Diwali'den bahsediyoruz. Bu yıl, Diwali çoktan bitti ve insanları görmek
Alexa ve Raspberry Pi ile Kontrol Oturma Odası: 12 Adım
Alexa ve Raspberry Pi ile Oturma Odasını Kontrol Edin: Alexa (Amazon Echo veya Dot) ve Raspberry Pi GPIO ile oturma odanızın TV'sini, ışıklarını ve Fanı kontrol edin
Adım Adım Arduino Uno ile Akustik Kaldırma (8 adım): 8 Adım
Arduino Uno ile Akustik Kaldırma Adım Adım (8 adım): ultrasonik ses dönüştürücüler L298N erkek dc pinli Dc dişi adaptör güç kaynağı Arduino UNOBreadboardBu nasıl çalışır: İlk olarak, Arduino Uno'ya kod yüklersiniz (dijital ile donatılmış bir mikrodenetleyicidir) ve kodu dönüştürmek için analog bağlantı noktaları (C++)
Mevcut En İyi 5 Mac Uygulamasını Nerede Bulunur: 5 Adım
Mevcut En İyi 5 Mac Uygulamasını Nerede Bulabilirsiniz: Apple Mac bilgisayarınızdan en iyi şekilde yararlanmanızı sağlayacak uygulamalar
Nerede Olursanız Olun Ne Olduğunu Gizlice İzleyin.: 4 Adım
Nerede Olursanız Olun Ne Olduğunu Gizlice İzleyin.: Bu talimat, nerede olursanız olun web kameranızı kullanarak neler olup bittiğini görmek için iphone/ipod touch uygulaması "iCam"i ve bilgisayarınızı nasıl kullanacağınızı gösterecektir. Bu benim ilk talimatım, bu yüzden lütfen sert eleştiri yapmayın. Herhangi bir geri bildirim aldırmıyorum