Blog post: http://nilhcem.com/android-things/google-assistant-smart-home
- Create a new project on the Firebase console and note the Project ID somewhere (you'll need it soon)
- Add an Android app to this project, with the following package name:
com.nilhcem.smarthome.androidthings
- Download the
google-services.json
file and save it to theapp
directory - Create a new Firebase Realtime Database, importing the following json file
{
"fan" : {
"on" : false
},
"lights" : {
"on" : true,
"spectrumRGB" : 16510692
}
}
- Configure database rules to public (don't do that on production)
{
"rules": {
".read": true,
".write": true
}
}
- Go to Firebase's Project Settings > Service Accounts, and click on the "Generate New Private Key" button. Save the generated file in
servers/smart-home-provider-functions/serviceAccountKey.json
- Open the
servers/smart-home-provider-functions/index.js
file use your Firebase Project ID to modify thedatabaseURL
variable - Deploy the Android app to your Android Things device. At that time, modifying the database values from the Firebase console should have an effect on the Android Things device.
- Enable the Cloud Functions API and install the Google Cloud SDK (quickstart guide)
- Deploy the
ha
(home automation) function with the following command
cd servers/smart-home-provider-functions
gcloud beta functions deploy ha --stage-bucket staging.<PROJECT ID>.appspot.com --trigger-http
- This script will deploy the function to Google Cloud and give you the endpoint address. Keep the address somewhere, you'll need it (something like
https://us-central1-<PROJECT ID>.cloudfunctions.net/ha
).
Note: if you want to test the functions locally, use the Cloud Functions Emulator
functions-emulator start
cd servers/smart-home-provider-functions
npm install
functions-emulator deploy ha --trigger-http
functions-emulator stop
- A fake OAuth2 mock server is provided so you can test Actions on Google easily. Do not use this one on production.
To build and start it, run the following commands:
cd servers/fake-oauth-server-nodejs
npm install
npm start
- At that time, the server will run on
localhost:3000
. Download ngrok to expose it to the Internet
ngrok http 3000
- The fake OAuth2 server is now exposed to the url. Copy the url (similar to
https://<NGROK_ID>.ngrok.io
). You'll need it later
- Update the
servers/action.json
file and specify the Google Cloud Functions endpoint to theurl
variable - Create an Actions on Google project on the Actions Console using the Actions SDK
- When told to update the app via the
gactions
command, run the following to use ouraction.json
file
cd servers
gactions update --action_package action.json --project <PROJECT_ID>
- Set up account linking
- Grant type: Autorization code
- Client ID:
RKkWfsi0Z9
- Client secret:
eToBzeBT7OwrPQO8mZHsZtLp1qhQbe
- Authorization URL:
https://<NGROK_ID>.ngrok.io/oauth
- Token URL:
https://<NGROK_ID>.ngrok.io/token
- Save all changes and click on the Test button
- Start the Google Home app on your phone
- Go to the devices settings > Home control > Add device and select the [test] device
- Login (user:
rick
, password:oldman
) - You will now be able to see the fan and the lights devices
- You can now control those devices from the Google assistant