Git Product home page Git Product logo

rezaneam / googlehomenode Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 1.0 14.56 MB

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: MIT License

C++ 33.68% C 53.85% C# 12.47%
azure-iot iot-device google-home-speaker bosch-sensortec bosch-sensor sensor air-quality bluetooth-low-energy wifi

googlehomenode's Introduction

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

googlehomenode's People

Contributors

rezaneam avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

shivar90

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.