Ο κώδικας είναι διαθέσιμος στο παρακάτω GitHub repository και σε αρχείο ZIP: markosnarinian/smart-home-sqlite
Δημιούργησα ένα server (cloud backend) που επιτρέπει τον έλεγχο οικιακών συσκευών μέσω του ψηφιακού βοηθού Google Assistant και της εφαρμογής Google Home. Για να το πετύχω αυτό χρησιμοποίησα το Google Smart Home API και διάβασα τα Google Home Developer Docs που παρέχει η Google σε προγραμματιστές για να αναπτύσσουν κώδικα που αξιοποιεί τις υπηρεσίες της (βλ. κάτω μέρος σελίδας)
Η πορεία της εντολής του χρήστη
Αφού ο χρήστης συνδέσει την υπηρεσία ελέγχου έξυπνου σπιτιού 3rd party στο Google Home επιλέγοντάς τη στη σελίδα "Works with Google" και πληκτρολογήσει το όνομα χρήστη και τον κωδικό του, ο server στέλνει ως απάντηση (response) τις έξυπνες συσκευές που είναι συνδεδεμένες με τον λογαριασμό του χρήστη. Τώρα μπορεί να αλλάξει την κατάσταση μιας συσκευής ως εξής:
Ο χρήστης δίνει την εντολή πατώντας το σωστό κουμπί στην εφαρμογή Google Home (π.χ. On, Off, High, Low) ή μιλώντας στο Google Assistant (π.χ. Turn on the lights, Set the fan speed to low).
Η Google προωθεί την εντολή από τη συσκευή του χρήστη στον server που έφτιαξα.
Ο server ταυτοποιεί τον χρήστη, επεξεργάζεται το HTTP request, ώστε να κρατήσει τα σωστά attributes (On/Off, Lock/Unlock, Speed, Light Color) και τέλος, στέλνει την εντολή στην έξυπνη συσκευή μέσω του διαδικτύου.
Authorization & ασφάλεια
Χρησιμοποιείται το authorization protocol OAuth 2.0 για ασφαλή πρόσβαση. H εξουσιοδότηση (authorization) της Google να δίνει εντολές σε έξυπνες συσκευές γίνεται ως εξής:
Η εφαρμογή Google Home ανοίγει το authorization endpoint (login page) της υπηρεσία ελέγχου έξυπνου σπιτιού 3rd party που χρησιμοποιεί ο χρήστης. Πληκτρολογεί το όνομα χρήστη και τον κωδικό πρόσβασής του και πατά το κουμπί συνέχεια.
Ο server επιβεβαιώνει ότι οι παράμετροι του authorization request είναι έγκυρες και δημιουργεί ένα μοναδικό authorization code και το στέλνει στη Google ανακατευθύνοντας το web browser του χρήστη σε μια προκαθορισμένη ιστοσελίδα της.
H Google στέλνει τον authorization code στο server και αφού επιβεβαιώσει ότι είναι έγκυρος, στέλνει ως response ένα "access token" και ένα "refresh token". To "access token" είναι ένας μοναδικός κωδικός-κλειδί με μικρή διάρκεια ζωής (short-lived token) που επιτρέπει σε όποιον το κατέχει να δίνει εντολές στις έξυπνες συσκευές του χρήστη (στην προκειμένη περίπτωση, στη Google). Το "refresh token" είναι παρόμοιο άλλα έχει μεγάλη διάρκεια ζωής (long-lived token) και το αποθηκεύει η Google, ώστε να μπορεί να το χρησιμοποιήσει για να βγάλει καινούργιο "access token", όταν το προηγούμενο λήξει.
Αφού ολοκληρωθεί η διαδικασία της εξουσιοδότησης (authorization process), όλα τα αιτήματα και οι εντολές μπορούν να φτάσουν πια στον server με τη μορφή Intent.
Είδη Intent που υποστηρίζονται από τον server:
Google Home Developer Docs: Έγγραφα που παρέχει η Google σε προγραμματιστές τα οποία εξηγούν τον τρόπο λειτουργίας του Google Smart Home API, ώστε οι προγραμματιστές να μπορέσουν να αναπτύξουν κώδικα που κάνει τις έξυπνες συσκευές μιας εταιρείας συμβατές με το οικοσύστημα της Google