Skip to content

This project is proof of a concept for an IoT sensor at home that connects to Azure IoT Hub and communicates with Google Assistant and Google Home Speaker.

License

Notifications You must be signed in to change notification settings

rezaneam/GoogleHomeNode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Smart IoT Sensor - Lite Version of sAmbiente

This project introduces proof of concept for a Smart Home Device/Sensor/Monitoring with a different approach. In this project, Bosch & TI environment sensors (BMP280, BME280, BME680, HDC1080) were utilized to monitor the temperature, humidity, pressure, and air quality.

What is innovative in this project

  • The configuration process of the Smart IoT Sensor is straightforward and you can update it at anytime.
  • The Sensor pushes real-time readings via BluetoothLE to multiple connected devices.
  • Against many available solutions, you don't need to open a port in your router/modem/firewall. That's really cumbersome and may be secuirty issues.
  • You don't need to deal with DNS and static IP address. that's a real pain.
  • You don't need to register on expensive and complicated services (Azure IoT Hub service has a free plan).
  • You can customize the whole project with a little effort.

Components

This project includes the following components

  • ESP32 (Smart IoT Sensor):

It's the main IoT device which basically is an ESP32 module connected to an environment sensor. The module needs to connect to the Internet via WiFi and connect to Azure services. This project is written in Platform IO so it should take care of everything (external libraries) if you use Platform IO. You should be able to connect to the device and configure it via BluetoothLE and at any time, you can update the sensor configuration without any need to reset it. WiFi name, Password, Azure Connection string, Google Home, device location (for example, kitchen, living room) are configuration values needed to be set. Hopefully, UWP and Xamarin applications will help you to do it with any challenges.

  • UWP Application:

This application is just for configuring the Google Home node. It's basically a Windows 10 application and will show up in Windows store soon :) By the way, you can run on Desktop, Windows Mobile, and Windows IoT Core (Raspberry Pi).

  • Xamarin Application: (not ready yet)

This project is an extended version of UWP Application for Android and iOS platform. Not ready yet.

  • Azure:

This is an Azure Function app if you want to use your own Azure service. contact me if you can't follow me.

How set it up

  • Google Home Node

First thing first, You need to build the Google Home Node device and program it. I would recommend you first test it with a very basic ESP32 evaluation board and a BMP280/BME280 breakout board. This setup would cost you less than 5 USD. Of course, having a SSD1306 is a plus. Wire the sensor as is shown in the following figure and flash the board via Platform IO in Visual Studio Code.

You can always reconfigure the connection by changing the pin numbers in config.h.

You can also use the PCB design to make your custom compact module with more functionality and battery support. Find the attached 3.5x3.5 cm PCB design.

PCB layout

  • Azure IoT Hub

After creating the Azure account the first step is to make a new IoT Hub service in your Azure account. To do so just type in IoT Hub and create a new account (you pick F1 which is entirely free). Then Navigate to the IoT Hub service you created and make an IoT Device. Click on the IoT Device that you have just created and copy the connection string. You need to set this connection string in your Google Home node. To test if this part is working properly just send a direct method with the following payload and check the logs in your serial port.

{ "Action": "Google Home", "UserID": "YourUserID", "Language": "en", "Key": "temperature" }

So, now you are done with this part.

  • Azure Function

In the same way make an Azure Function App service in your Azure account. Pick .Net 3.1 version and Free version in the Function App. Open Azure project repository and update the IoTHubName, IoTDeviceName, and IoTSharedAccessKey values and then Publish the function in your Azure account. To test this step just copy the Function App URL and use postman to send a post message with the following body.

{ "Action": "Google Home", "UserID": "YourUserID", "Language": "en", "Key": "temperature" }

  • IFTTT

You need to make an IFTTT account (it's free) and make a scenario called. Try to create an applet in IFTTT, add Google Assistant as a trigger source. Remember to pick say a phrase with a text ingredient Type in your preferred keywords followed by $ sign and provide a response for that. Then pick Webhooks (web request) as the service. So copy and paste the Azure Function App URL from the previous step in URL field. You pick either Get or Post request and for the content type choose JSON. paste the following structure there.

{ "Action": "Google Home", "Language": "en", "UserID": "YourUserID", "Key": "TextField" }

How it is working

The following figure shows the overal concept of the project.

The Google Home Node (main ESP32 module) starts to connect to Azure IoT service (as set in the configuration) and tries to find the local Google Home speaker (namely Google Home, Google Home Mini, or any Google Home enable speaker). It also drives the OLED and the sensor. The Google Home Node is always in listening mode (at least for now) and doesn't send any information to Azure IoT Hub.

When you ask Google Assistant to give you the home temperature (or specific location/node), Google Assistant (not Google Home speaker) triggers an action in the IFTTT (which you have previously defined).

IFTTT triggers a webhook (better to an HTTP request) which actually an Azure Function with some inputs (username, keywords). The received information from Azure Function is sent to the Azure IoT and eventually received by the Google Home Node.

Google Home Node would take action if the received information matches (username, location, etc.). So Google Home Node asks the Google Home speaker (already linked) to say the temperature, humidity, ... values. I used esp8266 Google TTS to generate an audio file and esp8266 Google Home Notifier to push the message/notification to the Google Home Speaker.

Platform/IDE(s)

Supported Sensors

Dependent Libraries

Future Improvment

  • Improving the UWP Application layout and code logic
  • Deploy UWP App in the Windows Store
  • Support for Android & iOS platforms (Xamarin Forms)
  • Better desgin for multi-language support (EN, DE, FR)
  • Find a way to integrate with Google Assistant
  • Connect to HASS

About

This project is proof of a concept for an IoT sensor at home that connects to Azure IoT Hub and communicates with Google Assistant and Google Home Speaker.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published