Πίνακας περιεχομένων:

Alexa, Where Are My Keys ;: 4 Βήματα
Alexa, Where Are My Keys ;: 4 Βήματα

Βίντεο: Alexa, Where Are My Keys ;: 4 Βήματα

Βίντεο: Alexa, Where Are My Keys ;: 4 Βήματα
Βίντεο: WEDNESDAY DANCE, but it's TOO EASY, I'm 99% sure YOU CAN PLAY THIS! 2024, Δεκέμβριος
Anonim
Image
Image
Hacking Bluetooth Beacons
Hacking Bluetooth Beacons

Η Alexa είναι ιδιαίτερα κατάλληλη για εργασίες ανάκτησης πληροφοριών και παρακολούθηση στοιχείων χρησιμοποιώντας ασύρματα οικιακά δίκτυα. Είναι φυσικό να σκεφτείτε να βάλετε πολύτιμα αντικείμενα στο πλέγμα για γρήγορη ανάκτηση. Σπάμε φτηνούς φάρους χαμηλής κατανάλωσης bluetooth για το εύρος του δικτύου και τη μακροζωία της μπαταρίας και δημιουργούμε μια έξυπνη εφαρμογή, έτσι ώστε η Alexa να γνωρίζει πού αφήσαμε τα κλειδιά.

Πως να το κάνεις…

Βήμα 1: Hacking Bluetooth Beacons

Ένα σύνολο 3 φάρων μπορεί να αγοραστεί για λιγότερο από 15 $ και υποστηρίζεται με εφαρμογές Android/iOS, αλλά θα εξαιρεθούμε για την προστασία της ιδιωτικής ζωής. Εκτός αυτού, η εύρεση των κλειδιών μας δεν πρέπει να μετατραπεί σε εύρεση του τηλεφώνου μας.

Αυτό το σεμινάριο για τα έξυπνα φώτα αντίστροφης μηχανικής μας βοήθησε να ελέγξουμε τους φάρους. Ξεκινήστε ενεργοποιώντας τη σάρωση φάρου για τη διεύθυνση της συσκευής εκτελώντας:

sudo hcitool lescan

Βρείτε και αντιγράψτε τη διεύθυνση με την ετικέτα "iTag" και, στη συνέχεια, εκτελέστε:

sudo gatttool -Ι

Συνδεθείτε στη συσκευή διαδραστικά εκτελώντας:

συνδέστε AA: BB: CC: DD: EE: FF

Δοκιμάστε να εκτελέσετε "βοήθεια" για προβολή επιλογών ή "κύρια" για προβολή υπηρεσιών:

Εκτελώντας το «char-desc» ακολουθούμενο από το χειριστήριο υπηρεσίας όπως παραπάνω, βρίσκουμε UUID τα οποία αναζητούμε αναφέροντας τις χαρακτηριστικές προδιαγραφές και τις προδιαγραφές υπηρεσίας των gatt. Για περισσότερες πληροφορίες σχετικά με αυτές τις υπηρεσίες, ελέγξτε αυτό. Ελέγχοντας την κυκλοφορία με το Wireshark, διαπιστώνουμε ότι ο 0100111000000001 ενεργοποιεί τον συναγερμό και λογικά, ο 0000111000000001 τον απενεργοποιεί. Τώρα έχουμε την απλή συνάρτηση python:

εισαγωγή pexpectdef sound_alarm (BD_ADDR): child = pexpect.spawn ('gatttool -I') child.sendline ('Connect {}'. format (BD_ADDR)) child.expect ('Connection επιτυχής', timeout = 30) child.sendline ('char-write-cmd 0x000b 0100111000000001')

Στη συνέχεια, εστιάζουμε στη δημιουργία της δεξιότητας Alexa που ενεργοποιεί τον φάρο όταν ψάχνουμε τα κλειδιά.

Βήμα 2: Δημιουργία δεξιοτήτων και εφαρμογών Alexa

Δημιουργία δεξιοτήτων και εφαρμογών Alexa
Δημιουργία δεξιοτήτων και εφαρμογών Alexa
Δημιουργία δεξιοτήτων και εφαρμογών Alexa
Δημιουργία δεξιοτήτων και εφαρμογών Alexa

Δημιουργούμε μια δεξιότητα που θα συνδεθεί με έναν τοπικό διακομιστή. Στη συνέχεια, διαμορφώνουμε τον διακομιστή μας ώστε να προβεί σε οποιαδήποτε ενέργεια που θα θέλαμε, σε αυτήν την περίπτωση, να παρέχει μια προσέγγιση για το πού μπορεί να βρίσκονται τα κλειδιά και να κάνει το ηχητικό σήμα Bluetooth να ηχεί. Το Flask παρέχει μια απλή και εύχρηστη βιβλιοθήκη python για την εξυπηρέτηση μιας εφαρμογής. Χρησιμοποιώντας το flask-ask, μπορούμε να διαμορφώσουμε τον διακομιστή ώστε να επικοινωνεί με τις δεξιότητές μας Alexa που θα δημιουργήσουμε αργότερα. Εξυπηρετήστε την εφαρμογή με το Ngrok, το οποίο θα μας δώσει έναν σύνδεσμο https που θα χρειαστούμε για την ικανότητά μας Alexa. Αρχικά φτιάξαμε την εφαρμογή με την απλούστερη λειτουργικότητα: να κάνουμε το σήμα BLE beacon beep όταν ενεργοποιείται.

#!/usr/bin/env pythonαπό φιάλη εισαγωγής Φιάλη από flask_ask import Ρωτήστε, δήλωση εισαγωγής pexpect app = Φιάλη (_ name_) ask = Ρωτήστε (app, '/') BD_ADDR = 'AA: BB: CC: DD: EE: FF ' #Το αναγνωριστικό bluetooth beacon σας εδώ @ask.intent (' findkeys ') def retrievr (): sound_alarm () speech_text = "Τα κλειδιά σας βρίσκονται κάπου εδώ." statement child.sendline ('char-write-cmd 0x000b 0100111000000001') εάν _name_ == "_main_": app.run (host = '127.0.0.1', port = '5000')

Χρησιμοποιήσαμε τη λειτουργία sound_alarm () που γράψαμε νωρίτερα για να κάνουμε το ηχητικό σήμα BLE. Για τη συνάρτηση που θα χρησιμοποιηθεί για την πρόθεση, προσθέτουμε το διακοσμητικό ask με την πρόθεσή μας "findkeys". Όταν κάνουμε την ικανότητα Alexa στον πίνακα ελέγχου προγραμματιστών του Amazon, θα χρησιμοποιήσουμε αυτό το όνομα για την πρόθεσή μας. Γράψτε αυτό το σενάριο σε ένα αρχείο που ονομάζεται app.py και εκτελέστε

python app.py

Αυτό θα εξυπηρετήσει την εφαρμογή σας στο https:// localhost: 5000. Εκτελέστε έναν διακομιστή ngrok και αντιγράψτε τον σύνδεσμο https που δημιουργήθηκε. Θα το χρειαστείτε όταν διαμορφώσετε την ικανότητα Alexa. Για περισσότερες λεπτομέρειες, δείτε αυτήν την ανάρτηση. Δημιουργήσαμε με επιτυχία μια απλή εφαρμογή, τώρα θα γράψουμε την ικανότητα Alexa. Μεταβείτε στον πίνακα ελέγχου προγραμματιστών Amazon και συνδεθείτε. Κάντε κλικ στην Alexa και ξεκινήστε με το κιτ Alexa Skill

Ακολουθήστε τις οδηγίες που δίνονται από το gui.

Στην καρτέλα Μοντέλο ενσωμάτωσης θα θέλετε να συμπληρώσετε το πλαίσιο Σχέδιο πρόθεσης με τα ακόλουθα:

Στο πλαίσιο Sample Utterances, θέλετε να γράψετε μερικές εντολές δειγμάτων που μπορεί να χρησιμοποιήσει ένα άτομο για να επικαλεστεί την ικανότητα. Γράψαμε αυτά:

findkeys βρίσκω τα κλειδιά μου keyfinds όπου τα κλειδιά μου findkeys έχασα τα κλειδιά μου

  • Στην καρτέλα Διαμόρφωση, βεβαιωθείτε ότι έχετε επιλέξει το τελικό σημείο της υπηρεσίας στο HTTPS. Αντιγράψτε τον σύνδεσμο https και επικολλήστε τον στο προεπιλεγμένο πλαίσιο από κάτω. Η σύνδεση λογαριασμού μπορεί να αφεθεί στο Αρ.
  • Στο Πιστοποιητικό SSL επιλέξτε τη μεσαία επιλογή, "Το τελικό σημείο ανάπτυξης μου είναι ένας υποτομέας ενός τομέα που διαθέτει ένα πιστοποιητικό μπαλαντέρ από μια αρχή πιστοποιητικού".
  • Η καρτέλα Δοκιμή θα σας επιτρέψει να δοκιμάσετε τη νέα δεξιότητα πληκτρολογώντας μία από τις εντολές σας.

Ολοκληρώστε τη συμπλήρωση των δύο τελευταίων καρτελών έως ότου όλα τα σημάδια ελέγχου είναι πράσινα. Στη συνέχεια, ξεκινήστε τις δεξιότητές σας με τη λειτουργία δοκιμής beta. Αυτό σας επιτρέπει να φιλοξενήσετε την ικανότητά σας σε οποιαδήποτε συσκευή ηχώ πριν τη δημοσίευσή της. Ακολουθήστε τις οδηγίες στο σύνδεσμο email για να εγκαταστήσετε την ικανότητα στη συσκευή σας ηχώ.

Βήμα 3: Πιο έξυπνη η ικανότητά μας

Κάνοντας την ικανότητά μας πιο έξυπνη
Κάνοντας την ικανότητά μας πιο έξυπνη
Κάνοντας την ικανότητά μας πιο έξυπνη
Κάνοντας την ικανότητά μας πιο έξυπνη
Κάνοντας την ικανότητά μας πιο έξυπνη
Κάνοντας την ικανότητά μας πιο έξυπνη

Βάζουμε τους αδρανείς υπολογιστές απλωμένους σε όλο το σπίτι για να εργαστούν στην αναζήτηση του φάρου bluetooth για να αναφέρουν την ισχύ του σήματος RSSI.

Λαμβάνοντας αναγνώσεις από πολλά μηχανήματα, μπορούμε να χρησιμοποιήσουμε την ισχύ του σήματος ως διακομιστή μεσολάβησης για απόσταση. Πρέπει να καταλάβουμε πώς να το χρησιμοποιήσουμε για να υπολογίσουμε το πιο πιθανό μέρος του σπιτιού για να βρούμε τον φάρο.

Περνάμε στη μηχανική μάθηση. Μια εργασία crontab κάθε 2 λεπτά, δημιουργεί ένα σύνολο πλειάδων RSSI. Τοποθετώντας τον φάρο σε διαφορετικά σημεία όπως: 'Υπνοδωμάτιο', 'Μπάνιο', 'Κουζίνα', 'Κατοικία' επισημαίνουμε τα αρχεία καταγραφής RSSI. Μόλις χαρτογραφήσουμε το σπίτι, μπορούμε να χρησιμοποιήσουμε μοντέλα που βασίζονται σε δέντρα, όπως το XGBClassifier του xgboost.

Η εφαρμογή xgboost της αύξησης της κλίσης θα χειριστεί τα δεδομένα που λείπουν από τις αναγνώσεις χρονικού ορίου, εκπαίδευση σε μερικά δευτερόλεπτα. Χρησιμοποιήστε python pickle για να διατηρήσετε το εκπαιδευμένο μοντέλο και να φορτώσετε στην εφαρμογή alexa retrievr. Όταν καλείται η δεξιότητα, η εφαρμογή αναζητά την ανάγνωση RSSI bluetooth και δημιουργεί μια προβλεπόμενη τοποθεσία, η alexa μπορεί να απαντήσει προτείνοντας να «δοκιμάσετε να κοιτάξετε στο μπάνιο».

Βήμα 4: Το βάζουμε όλα μαζί

Έχοντας ένα μοντέλο για την προσέγγιση της τελευταίας θέσης των κλειδιών, μπορούμε να το προσθέσουμε στην εφαρμογή για να βελτιώσουμε τη δήλωση που επέστρεψε η Alexa. Τροποποιήσαμε το σενάριο για να διαβάσουμε:

εισαγωγή osfrom φιάλη εισαγωγής Φιάλη από flask_ask import Ζητήστε, δήλωση εισαγωγής pexpect εισαγωγή τουρσί pandas ως pd import numpy ως np από συλλογές 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 () statement return (speech_text) def guess_locate (): read_dict = {} line_gen = reverse_readline ('YOUR_DATA_FILE.txt') res_lst = ενώ len (res_lst)! = 20: ln = next (line_gen) if ln.startswith ('Host'): _, ip, _, read = ln.split () read_dict [ip] = ανάγνωση 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}). Τιμές mdl_ = pickle.load (open (' location_model_file.dat ',' rb ')) preds = mdl_.predict (val) guess = Counter (preds) guess = guess.most_common (1) [0] [0] answer_str = 'Δοκιμάστε να ψάξετε στο' if guess == 1: answer_str += 'κρεβατοκάμαρα' elif guess == 2: reply_str += 'μπάνιο' elif guess == 3: answer_str += 'κουζίνα' elif guess == 4: reply_str += 'σαλόνι' επιστροφή reply_str αν _name_ == "_main_": app.run (host = '127.0.0.1', θύρα = '5000')

Δημιουργήσαμε μια νέα συνάρτηση που ονομάζεται guess_locate () η οποία λαμβάνει ένα αρχείο με τις πιο πρόσφατες καταγεγραμμένες δυνάμεις σήματος rssi. Στη συνέχεια, θα εκτελέσει τα δείγματα στο δικό μας μοντέλο xgboost και θα επιστρέψει την πιο πιθανή συμβολοσειρά τοποθεσίας. Αυτή η τοποθεσία θα επιστρέψει όταν σας ζητηθεί η Alexa. Δεδομένου ότι η δημιουργία σύνδεσης σε φάρο μπορεί να διαρκέσει μερικά δευτερόλεπτα, εκτελούμε μια ξεχωριστή διαδικασία κλήσης αυτής της λειτουργίας στο sound_alarm.py.

Συνιστάται: