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

Προσθέστε προσαρμοσμένο έλεγχο Alexa στο έργο Raspberry Pi: 5 βήματα
Προσθέστε προσαρμοσμένο έλεγχο Alexa στο έργο Raspberry Pi: 5 βήματα

Βίντεο: Προσθέστε προσαρμοσμένο έλεγχο Alexa στο έργο Raspberry Pi: 5 βήματα

Βίντεο: Προσθέστε προσαρμοσμένο έλεγχο Alexa στο έργο Raspberry Pi: 5 βήματα
Βίντεο: Home Assistant. Μάθημα 9.4 ADD-ON - Xiaomi Gateway 3, ενσωμάτωση zigbee2mqtt 2024, Ιούλιος
Anonim
Προσθέστε προσαρμοσμένο έλεγχο Alexa στο Raspberry Pi Project
Προσθέστε προσαρμοσμένο έλεγχο Alexa στο Raspberry Pi Project

Αυτό το έργο προορίζεται για οποιονδήποτε έχει έργο Raspberry Pi που χρησιμοποιεί Python και θέλει να προσθέσει φωνητικό έλεγχο μέσω των υπαρχουσών συσκευών του Amazon Echo. Δεν χρειάζεται να είστε έμπειρος προγραμματιστής, αλλά θα πρέπει να είστε άνετοι χρησιμοποιώντας τη γραμμή εντολών και προσαρμόζοντας τον υπάρχοντα κώδικα ώστε να ταιριάζει στις ανάγκες σας.

Αρχικά ξεκίνησα ένα έργο για να επιτρέψω στο Raspberry Pi μου να ελέγχεται με φωνή με την Alexa, ώστε να μπορεί να θερμάνει το νερό σε ένα βραστήρα σε μια συγκεκριμένη θερμοκρασία. Αν και η αλληλεπίδραση που ήθελα ήταν πολύ απλή (περάστε έναν αριθμό από την Alexa στο Raspberry Pi), χρειάστηκε πολλή δουλειά για να φτάσετε σε αυτήν την κατάσταση από τα υπάρχοντα σεμινάρια. Ελπίζω ότι αυτό το σεμινάριο θα κάνει αυτή τη διαδικασία όσο το δυνατόν γρηγορότερα για άλλους.

Στο παράδειγμά μου, ξεκινάω με ένα Raspberry Pi Zero W με Raspbian. Έχω ένα πρόγραμμα Python3 στο Pi μου που μπορεί να γράψει κείμενο σε μια οθόνη SPI και έχω έναν θερμόμετρο που μπορώ να διαβάσω. Για εσάς, αυτό το πρόγραμμα θα μπορούσε να είναι σχεδόν οτιδήποτε, αλλά η ιδέα είναι ότι μπορεί να έχετε κάποιες συσκευές εισόδου που θέλετε να διαβάσετε μέσω της Alexa και/ή κάποιες συσκευές εξόδου που θέλετε να ελέγξετε χρησιμοποιώντας την Alexa.

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

Εγώ: "Alexa, ζήτα από το gadget μου να ελέγξει τη θερμοκρασία στον αισθητήρα 1."

Η απάντηση της Alexa: "Ο ανιχνευτής διαβάζει 72,31 μοίρες."

ή

Εγώ: "Alexa, πες στο gadget μου να γράψει τον George Washington"

Απάντηση: Η οθόνη που συνδέεται με το Raspberry Pi μου τώρα γράφει "George Washington"

Στην επόμενη ενότητα, θα περιγράψω τι πρέπει να συμβεί στα παρασκήνια για να γίνει αυτό το έργο. Εάν θέλετε απλώς να το δουλέψετε στο έργο σας και δεν σας ενδιαφέρει πώς λειτουργεί, μη διστάσετε να το παραλείψετε (αν και μπορεί να το δυσκολέψει αν κάτι πάει στραβά).

Βήμα 1: Ιστορικό

Ιστορικό
Ιστορικό

Σε αυτήν την εικόνα (πίστωση: https://developer.amazon.com/en-US/docs/alexa/alex…) μπορούμε να δούμε τη γενική αρχιτεκτονική για τα Alexa Gadgets.

Όταν λέτε κάτι στη συσκευή σας Echo, στέλνει τον ήχο στο Alexa Cloud, όπου υποβάλλεται σε επεξεργασία και όπου δημιουργείται μια απάντηση για να σας απαντήσει. Όταν ρωτάτε τι καιρό έχει, είναι μόνο αυτά τα δύο στην επικοινωνία. Τώρα υποθέστε ότι θέλετε να προσθέσετε φωνητικό έλεγχο σε ένα από τα μικρά έργα σας σε ένα Raspberry Pi. Η επεξεργασία των πάντων επί του σκάφους θα απαιτούσε σημαντικό υλικό και μια πολύ εξελιγμένη βάση κώδικα για να προχωρήσουν τα πράγματα. Μια καλύτερη λύση θα ήταν να αξιοποιήσετε το Alexa Cloud, το οποίο είναι πολύ εξελιγμένο και έχει γίνει πολύ καλό στο χειρισμό σύνθετων προτύπων ομιλίας. Τα Alexa Gadgets παρέχουν έναν καλό τρόπο για να το κάνετε αυτό.

Ένα Alexa Gadget επικοινωνεί με μια συσκευή Echo χρησιμοποιώντας bluetooth. Μόλις δημιουργηθεί αυτή η σύνδεση, τα δύο περνούν μεταξύ τους μηνύματα χρησιμοποιώντας κωδικοποίηση UTF-8. Όταν το Echo μεταφέρει κάτι στο gadget, αυτό ονομάζεται οδηγία. Η άλλη κατεύθυνση αναφέρεται ως γεγονός. Πριν περάσουμε στην ακριβή ροή όλων αυτών, θα πρέπει να εισαγάγουμε ένα άλλο βασικό στοιχείο: προσαρμοσμένες δεξιότητες Alexa.

Η Alexa επιτρέπει στους προγραμματιστές να δημιουργούν τις δικές τους προσαρμοσμένες δεξιότητες, κάτι που τους επιτρέπει να σχεδιάζουν τις δικές τους αλληλεπιδράσεις και συμπεριφορές για χρήση σε όλες τις συσκευές Echo. Για παράδειγμα, ένας προγραμματιστής θα μπορούσε να δημιουργήσει μια προσαρμοσμένη ικανότητα για να σας πει την απόσταση μεταξύ δύο αεροδρομίων στις ΗΠΑ. Ένας χρήστης θα έλεγε: "Alexa, ρώτα την προσαρμοσμένη αριθμομηχανή απόστασης μου ποια είναι η απόσταση μεταξύ LAX και JFK" και θα μπορούσε να απαντήσει με "2475 μίλια". Πώς το κάνει αυτό; Όταν ένας προγραμματιστής κάνει μια προσαρμοσμένη ικανότητα, ορίζουν αυτό που ονομάζεται "προσαρμοσμένες προθέσεις" με "δείγματα εκφράσεων" που περιέχουν "υποδοχές". Για παράδειγμα, σε αυτήν την ικανότητα μπορεί να έχω την πρόθεση "calc_dist" να υπολογίσω την απόσταση μεταξύ δύο σημείων. Ένα δείγμα έκφρασης θα ήταν "ποια είναι η απόσταση μεταξύ {slot1} και {slot2}" ή "πόσο μακριά μεταξύ {slot1} και {slot2}". Οι υποδοχές που εμφανίζονται σε αγκύλες έχουν συγκεκριμένους τύπους. Σε αυτή την περίπτωση αυτοί οι τύποι θα ήταν κωδικοί αεροδρομίου όπως LAX, JFK, BOS, ATL. Όταν ένας χρήστης ζητά την προσαρμοσμένη ικανότητα, το Alexa Cloud προσπαθεί να αντιστοιχίσει αυτό που λέει ο χρήστης σε μια προσαρμοσμένη πρόθεση χρησιμοποιώντας τα παρεχόμενα δείγματα εκφράσεων και προσπαθεί να βρει έγκυρες τιμές υποδοχής για αυτό το αίτημα. Σε αυτό το παράδειγμα, θα διαπιστώσει ότι ο χρήστης ήθελε την πρόθεση "calc_dist" και ότι η θέση 1 είναι LAX και η υποδοχή 2 είναι JFK. Σε αυτό το σημείο, το Alexa Cloud μεταφέρει το έργο στον κώδικα του προγραμματιστή. Βασικά, λέει στους προγραμματιστές τον κώδικα ποια πρόθεση έλαβε και ποιες ήταν όλες οι τιμές του κουλοχέρη, μεταξύ άλλων λεπτομερειών.

Ο προγραμματιστής αποφασίζει πού ζει ο κώδικας του, αλλά μια πολύ δημοφιλής επιλογή είναι να χρησιμοποιήσει μια συνάρτηση AWS Lambda. Εάν δεν γνωρίζετε τι είναι, είναι ουσιαστικά μια υπηρεσία που σας επιτρέπει να ανεβάζετε κώδικα που μπορεί να εκτελεστεί ανά πάσα στιγμή και στη συνέχεια να σας χρεώνει μόνο για το χρονικό διάστημα που εκτελείται ο κώδικά σας. Εάν συνεχίσουμε με το παράδειγμά μας, ο κώδικας του προγραμματιστή μπορεί να είναι μια συνάρτηση Python που λαμβάνει τους δύο κωδικούς αεροδρομίου, αναζητά τις θέσεις τους, υπολογίζει τις αποστάσεις και στη συνέχεια στέλνει μια απάντηση πίσω στο Alexa Cloud για να πει κάτι στον χρήστη. Το Alexa Cloud θα έστελνε τότε αυτές τις πληροφορίες ομιλίας πίσω στη συσκευή του χρήστη και θα έπαιρναν την απάντηση.

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

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

Πρέπει να σημειωθεί ότι οι περισσότερες δεξιότητες επιτρέπουν διάφορους τρόπους αλληλεπίδρασης μαζί τους. Για παράδειγμα, ένας χρήστης μπορεί να μεταβεί κατευθείαν σε μια πρόθεση λέγοντας "Alexa, ρωτήστε την προσαρμοσμένη αριθμομηχανή απόστασης μου ποια είναι η απόσταση μεταξύ LAX και JFK" (που ονομάζεται επίκληση με μία βολή) ή μπορεί απλά να χρησιμοποιήσει μια πρόθεση εκκίνησης: "Alexa, ανοίξτε την προσαρμοσμένη αριθμομηχανή απόστασης ». Αυτό το τελευταίο παράδειγμα θα ακολουθείται συνήθως από την Alexa που απαντά με μια προτροπή για περισσότερες πληροφορίες. Αυτό το σεμινάριο παραλείπει σκόπιμα την υποστήριξη για το τελευταίο. Πιο συγκεκριμένα, χωρίς να τροποποιήσετε τη συνάρτηση Lambda, μπορείτε μόνο να επικαλεστείτε την ικανότητα χρησιμοποιώντας μια επίκληση με μία βολή. Αυτή η επιλογή σχεδίασης επιτρέπει στο μοντέλο να είναι πιο απλό (δεν χρειάζεται να υποστηρίζει προθέσεις εκκίνησης ή ροή συνομιλίας), και διαπίστωσα ότι συνήθως θέλω να αλληλεπιδράσω με τα gadget μου χρησιμοποιώντας τις κλήσεις μιας λήψης ούτως ή άλλως, επειδή είναι συνήθως ταχύτερες.

Βήμα 2: Καταχωρίστε το Gadget στο Alexa Voice Service Developer Console

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

  1. Μεταβείτε στη διεύθυνση
  2. Εάν δεν έχετε ήδη δωρεάν λογαριασμό, δημιουργήστε έναν
  3. Κάντε κλικ στο "Προϊόντα"
  4. Συμπληρώστε τις ετικέτες και επιλέξτε "Alexa Gadget"
  5. Συμπληρώστε ό, τι θέλετε για τα υπόλοιπα πεδία
  6. Κάντε κλικ στο Τέλος

Βήμα 3: Δημιουργήστε τη λειτουργία AWS Lambda και προσαρμοσμένη δεξιότητα

Δημιουργήστε προσαρμοσμένη δεξιότητα στην κονσόλα προγραμματιστή Alexa Skills Kit

Μπορείτε να βρείτε τον κώδικα για αυτό το σεμινάριο εδώ

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

  1. Κατεβάστε το φάκελο "lambda" από το Github μου που περιέχει "lambda_function.py" και "απαιτήσεις.txt"
  2. Ανοίξτε το τερματικό και αλλάξτε τον τρέχοντα κατάλογο ώστε να βρίσκεται μέσα σε αυτόν το φάκελο.
  3. Εκτελέστε την ακόλουθη ακολουθία:

pip install -r απαιτήσεις.txt -t skill_env

cp lambda_function.py skill_env cd skill_env zip -r../../skill-code.zip

Το αρχείο σας.zip θα βρίσκεται τώρα στον κατάλογο όπου ήταν και θα ονομάζεται "folder-zode.zip" ο φάκελος lambda.

Σημείωση σχετικά με το κόστος φιλοξενίας στο AWS: Αυτό το σεμινάριο απαιτεί να έχετε λογαριασμό AWS (δωρεάν δημιουργία). Οι λειτουργίες Lambda κοστίζουν χρήματα, ωστόσο, η τρέχουσα τιμολόγησή τους στην περιοχή της Β. Βιρτζίνια είναι 0,000000208 $ ανά 100 ms με χρήση 128MB μνήμης. Για αναφορά, κάθε επίκληση των δεξιοτήτων μου χρεώνει περίπου 800ms χρήσης σε αυτό το επίπεδο. Για να συγκεντρώσετε έναν λογαριασμό $ 1,00USD, θα πρέπει να επικαλεστείτε αυτήν τη συνάρτηση περίπου 600, 000 φορές, η οποία (αν σας πάρει 5 δευτερόλεπτα ανά επίκληση) θα σας πάρει πάνω από 34 ημέρες συνεχούς κλήσης της λειτουργίας σας. Το κόστος δεν πρέπει να αποτελεί σημαντικό ζήτημα, εκτός εάν δημοσιεύσετε την ικανότητά σας και ένας τεράστιος αριθμός ανθρώπων αρχίσει να τη χρησιμοποιεί. Εάν ανησυχείτε για τη λήψη λογαριασμών στο AWS, σκεφτείτε να ρυθμίσετε συναγερμούς χρήσης που θα σας ειδοποιούν εάν η χρήση ξεπεράσει ένα καθορισμένο όριο.

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

  1. Μεταβείτε στη διεύθυνση https://aws.amazon.com/ και συνδεθείτε στην κονσόλα ή δημιουργήστε έναν δωρεάν λογαριασμό εάν δεν έχετε έναν
  2. Αναζητήστε και κάντε κλικ στο Λάμδα κάτω από τις υπηρεσίες
  3. Κάντε κλικ στην επιλογή "Δημιουργία συνάρτησης"
  4. Επιλέξτε "Συγγραφέας από την αρχή", δώστε του ένα όνομα και επιλέξτε την πιο πρόσφατη έκδοση Python 3 για χρόνο εκτέλεσης
  5. Αλλάξτε την "επεξεργασία κωδικού inline" σε "μεταφόρτωση αρχείου.zip" και επιλέξτε το αρχείο.zip που δημιουργήθηκε παραπάνω
  6. Σε ένα νέο παράθυρο, μεταβείτε στη διεύθυνση https://developer.amazon.com/alexa/console/ask και συνδεθείτε
  7. Κάντε κλικ στο "Δημιουργία δεξιοτήτων"
  8. Προσθέστε ετικέτα, επιλέξτε μοντέλο "Προσαρμοσμένο" και "Προμηθευτείτε το δικό σας" και κάντε κλικ στην επιλογή "Δημιουργία δεξιοτήτων"
  9. Κάντε κλικ στην επιλογή "Έναρξη από το ξύσιμο" και κάντε κλικ στην επιλογή "Επιλογή"
  10. Στην ενότητα "Προθέσεις", κάντε κλικ στην επιλογή "Προσθήκη"
  11. Δημιουργήστε μια προσαρμοσμένη πρόθεση που ονομάζεται "alexa_to_pi" και συμπληρώστε το "write {person}" ως δείγμα έκφρασης
  12. Δημιουργήστε μια υποδοχή πρόθεσης που ονομάζεται "άτομο" με τον τύπο "AMAZON. Person"
  13. Δημιουργήστε μια προσαρμοσμένη πρόθεση που ονομάζεται "pi_to_alexa" και συμπληρώστε "ελέγξτε τη θερμοκρασία από τον αισθητήρα {sensor_num}
  14. Δημιουργήστε μια υποδοχή πρόθεσης που ονομάζεται "sensor_num" με τον τύπο "AMAZON. NUMBER"
  15. Στην ενότητα Interfaces, ενεργοποιήστε το "Custom Interface Controller"
  16. Στο Endpoint, επιλέξτε "AWS Lambda ARN" και αντιγράψτε το "Your Skill ID"
  17. Επιστρέψτε στην Κονσόλα AWS
  18. Κάντε κλικ στην επιλογή "Προσθήκη ενεργοποίησης"
  19. Επιλέξτε "Σετ δεξιοτήτων Alexa", επιλέξτε "Ενεργοποίηση" κάτω από την επαλήθευση αναγνωριστικού δεξιοτήτων, επικολλήστε το αναγνωριστικό δεξιοτήτων που μόλις αντιγράψατε και κάντε κλικ στην προσθήκη
  20. Αντιγράψτε το Lambda ARN στην επάνω δεξιά γωνία
  21. Πλοηγηθείτε πίσω στην Κονσόλα προγραμματιστή Alexa και επικολλήστε το Lambda ARN στο πεδίο "Προεπιλεγμένη περιοχή"
  22. Στην περιοχή Επίκληση, ορίστε το Skill Invocation Name ως "το gadget μου"
  23. Κάντε κλικ στην επιλογή "Αποθήκευση μοντέλου" και στη συνέχεια "Δημιουργία μοντέλου"
  24. Κάντε κλικ στην επιλογή "Δοκιμή" στις επάνω καρτέλες και αλλάξτε τον επιλογέα από "Απενεργοποιημένο" σε "Ανάπτυξη"
  25. Σημειώστε ότι τα αρχεία καταγραφής για τη λειτουργία Lambda βρίσκονται στην υπηρεσία "CloudWatch" στο AWS.

Βήμα 4: Ρυθμίστε τον κώδικα στο Raspberry Pi σας

Για να επικοινωνήσει το Raspberry Pi με τη συσκευή Alexa, χρειάζεται κάποιο κώδικα για να διευκολύνει τη μετάδοση πληροφοριών μέσω bluetooth και τη διατήρηση αυτής της σύνδεσης, εκτός από μερικά άλλα αρχεία. Ο ευκολότερος τρόπος για να ξεκινήσετε με τα πιο ενημερωμένα αρχεία από το Amazon είναι να κλωνοποιήσετε το αποθετήριό τους Raspberry Pi Gadgets. Μεταβείτε στον κατάλογο του τρέχοντος έργου σας και εκτελέστε το

git clone

Αυτό θα φορτώσει ολόκληρο το αποθετήριο τους με όλο τον απαραίτητο κώδικα στο Pi σας. Έχει μερικά παραδείγματα έργων που αναδεικνύουν μερικές από τις δυνατότητες των Alexa Gadgets. Αν θέλετε περισσότερες πληροφορίες, δείτε το readme στη σελίδα του Github.

Εκτελέστε τη λειτουργία ρύθμισης για να ρυθμίσετε τα πάντα.

cd/home/pi/Alexa-Gadgets-Raspberry-Pi-Samples

sudo python3 laun.py --setup

Ακολουθήστε τις προτροπές και απαντήστε "y" όταν σας ρωτήσουν εάν θέλετε να διαμορφώσετε χρησιμοποιώντας τα διαπιστευτήριά σας Gadget. Θυμηθείτε το Amazon ID και το Gadget Secret από τη ρύθμιση του gadget σας στην κονσόλα προγραμματιστή, καθώς θα σας ζητηθεί εδώ. Επέλεξα τη λειτουργία μετάδοσης "bt" για το Raspberry Pi Zero W. Το BLE δεν υποστηρίζεται από όλες τις παλαιότερες συσκευές Echo, αλλά μπορείτε να αναζητήσετε τις δυνατότητες του υλικού σας. Εάν χρησιμοποιείτε το Pi σας σε λειτουργία επιφάνειας εργασίας, η Amazon συνιστά να κάνετε δεξί κλικ στο εικονίδιο bluetooth στην επάνω δεξιά γωνία και να κάνετε κλικ στην επιλογή "Κατάργηση" Bluetooth "από τον πίνακα" για να αποφύγετε προβλήματα συνδεσιμότητας.

Σημείωση: αυτό το βήμα μπορεί να διαρκέσει λίγο ανάλογα με το πόσο χρειάζεται να εγκατασταθεί.

Τώρα θα έχετε όλα τα απαραίτητα αρχεία υποστήριξης για να επιστρέψετε στο έργο σας και να αρχίσετε να προσθέτετε τις λειτουργίες που επιτρέπουν την επικοινωνία με το Echo σας.

Εάν το επιλέξετε, μπορείτε να διαγράψετε το φάκελο "παραδείγματα" στο "Alexa-Gadgets-Raspberry-Pi-Samples/src"

Μπορείτε να έχετε τον κώδικα του έργου σας όπου θέλετε, αλλά θα φτιάξω ένα φάκελο στον αρχικό κατάλογο γι 'αυτό, εναλλακτικά μπορείτε να κατεβάσετε το φάκελο με τον κωδικό από το Github μου, απλώς φροντίστε να επεξεργαστείτε τα αρχεία.ini όπως περιγράφεται παρακάτω.

cd /home /pi

mkdir my_project cd my_project touch my_gadget.py αγγίξτε my_gadget.ini

Έχω δημιουργήσει τώρα δύο αρχεία σε ένα φάκελο που ονομάζεται "my_project". Το αρχείο.ini είναι σημαντικό. Βεβαιωθείτε ότι περιέχει τα ακόλουθα και αντικαθιστά το Amazon ID και το Gadget Secret:

[Ρυθμίσεις Gadget]

amazonId = INSERT_AMAZON_ID_HERE alexaGadgetSecret = INSERT_ALEXA_GADGET_SECRET_HERE [GadgetCapability] Custom. MyGadget = 1.0

Τώρα, ας ρίξουμε μια ματιά στο αρχείο python πριν μπούμε σε λεπτομέρειες:

εισαγωγή json

από agt import AlexaGadget

κλάση MyGadget (AlexaGadget):

def _init _ (self):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (self, οδηγίες):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Received data:" + str (payload)) write_text (str (payload ['data'] ['person'] ['value '])))

def on_custom_mygadget_pitoalexa (αυτο, οδηγία):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Received data:" + str (payload)) payload = {'data': "The probe read" + str (get_temp (payload ['data'] ['sensor_num'] ['value'])) + "degree."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', payload) MyGadget (). main ()

Αρχικά θα παρατηρήσετε ότι καλεί δύο συναρτήσεις: write_text () και get_temp (). Στον κωδικό μου, ορίζω αυτές τις συναρτήσεις στο ίδιο αρχείο, αλλά εξαρτώνται από το υλικό μου, οπότε επέλεξα να τις παραλείψω. Έχω επισυνάψει αυτό το αρχείο με αυτές τις λειτουργίες που ορίζονται για την απλή εκτύπωση και επιστροφή εικονικών δεδομένων σε περίπτωση που θέλετε να εκτελέσετε αυτόν τον ακριβή κωδικό. Θα πρότεινα να δοκιμάσετε με αυτόν τον ακριβή κώδικα προτού τον τροποποιήσετε για να συνεργαστεί με το έργο σας. Έχω επισυνάψει επίσης το αρχείο.ini, αλλά φροντίστε να μπείτε και να αλλάξετε το αναγνωριστικό και το μυστικό του gadget. Η κορυφαία συνάρτηση λαμβάνει δεδομένα που διαβιβάζονται από την Alexa. Η κάτω λειτουργία λαμβάνει δεδομένα στην ίδια μορφή, αλλά η συσκευή Alexa θα περιμένει για πέντε δευτερόλεπτα για να επιστρέψει ένα συμβάν με το δικό του ωφέλιμο φορτίο. Αυτό το ωφέλιμο φορτίο είναι ιδιαίτερο στο ότι η συσκευή Alexa μιλάει τα περιεχόμενά της.

Μόλις έχετε αυτά τα αρχεία, μεταβείτε στο φάκελο "my_project" και εκτελέστε το αρχείο python.

sudo επανεκκίνηση

cd/home/pi/my_project sudo python3./my_gadget.py

Εάν αυτή είναι η πρώτη φορά που εκτελείτε το πρόγραμμα, θα πρέπει να το αντιστοιχίσετε με τη συσκευή σας Echo. Βεβαιωθείτε ότι η συσκευή σας Echo βρίσκεται κοντά στο Raspberry Pi, καθώς πρέπει να επιτρέψουμε τη σύνδεση bluetooth.

Στην εφαρμογή Alexa στην κινητή συσκευή σας, κάντε κλικ στην επιλογή "συσκευές" στην κάτω δεξιά γωνία.

Κάντε κλικ στο "Echo & Alexa" επάνω αριστερά.

Κάντε κλικ στη συσκευή σας Echo.

Στην ενότητα "WIRELESS", πατήστε "Συσκευές Bluetooth".

Πατήστε "ΖΕΥΓΕΙΤΕ ΝΕΑ ΣΥΣΚΕΥΗ" και θα δείτε το gadget σας στη λίστα.

Πατήστε στο gadget σας. Θα πρέπει να δείτε την αναφορά Pi που συνδυάστηκε με επιτυχία.

Ενώ παρακολουθείτε την έξοδο στο Pi σας, δοκιμάστε να δώσετε μια φωνητική εντολή στο Echo:

Εσείς: "Alexa, ζήτα από το gadget μου να ελέγξει τη θερμοκρασία από τον αισθητήρα ένα"

Εάν όλα λειτουργούσαν σωστά, θα πρέπει να ακούσετε:

Ηχώ: "Ο ανιχνευτής διαβάζει 120.505 μοίρες."

Εσείς: "Alexa, πες στο gadget μου να γράψει τον George Washington."

Το Pi πρέπει να εκτυπώσει:

Λήφθηκαν δεδομένα: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}}

Γιώργος Ουάσιγκτον"

Βήμα 5: Αναδίπλωση

Το βίντεο που εμφανίζεται εδώ είναι ένα παράδειγμα του gadget που λειτουργεί με την ανάγνωση της θερμοκρασίας (ο ίδιος ανιχνευτής στο F έναντι του C) και γράφει ονόματα σε μια απλή οθόνη.

Τώρα που ελπίζουμε ότι κάτι λειτουργεί, θα πρέπει να προσπαθήσετε να το προσαρμόσετε για να κάνετε το δικό σας έργο πιο ικανό. Θυμηθείτε ότι μπορείτε εύκολα να επεξεργαστείτε τις προθέσεις στην Alexa Developer Console και ότι όλες οι υποδοχές που χρησιμοποιείτε θα περάσουν στο Pi σας στο ωφέλιμο φορτίο. Επιπλέον, μπορείτε να ζητήσετε από την Alexa να λέει οτιδήποτε θα θέλατε απλώς επεξεργαστείτε το ωφέλιμο φορτίο που περνάτε πίσω στην εκδήλωση από τον κώδικα Raspberry Pi.

Λάβετε υπόψη ότι αυτό το σεμινάριο δεν προορίζεται να είναι η τελική λύση για όλες τις δυνατότητες που θα θέλατε με ένα Alexa Gadget. Περιορίζεται σκόπιμα να σας δώσει δύο απλές λειτουργίες για τη μετάδοση δεδομένων προς κάθε κατεύθυνση μεταξύ της Alexa και ενός Gadget. Εάν ενδιαφέρεστε να δημιουργήσετε πιο εξελιγμένα μοντέλα αλληλεπίδρασης, θα σας ενθάρρυνα να διαβάσετε όλα τα αρχεία readme στη διεύθυνση https://github.com/alexa/Alexa-Gadgets-Raspberry-P… και να δοκιμάσετε όλα τα παραδείγματα που παρέχουν Το Θα σας πρότεινα επίσης να διαβάσετε την τεκμηρίωση για το Alexa Gadgets Toolkit και το Alexa Skills Kit.

Συνιστάται: