gcloud-lora-ttn icon indicating copy to clipboard operation
gcloud-lora-ttn copied to clipboard

Integration between Google Cloud and The Things Network

The Things Network Integration with Google Cloud

Process uplink messages from TTN on Google Cloud, storing Realtime data on Firebase, historical data on BigQuery and visualize the data through a web app.

Web App URL : Access Here

Run on Google Cloud

️ ⚠️️️️THIS IS A WORK IN PROGRESS ⚠️

Architecture

LoRa End Node: Lora Node

Data arriving on The Things Network: The Things Network Dash

Realtime Data on Firebase: Data Firebase

Query Data on Bigquery: Data on Bigquery

Monitor data on a WebApp : Web App

BOM - Bill of Materials

Gateway

LoRa End Node

  • Feather M0 LoRa 915mhz - Link
  • CCS811 Air Quality Sensor - Link
  • 240mah battery

Upload firmware with PlatfomIO

I recommend installing the Visual Studio Code (VSCode) IDE and the PlatformIO plugin to get started using it. Just follow the step on the link below:

https://platformio.org/platformio-ide

To deploy to the board, just open the firmware folder and you can use the “Build” and “Upload” buttons on PlatformIO Toolbar. All libraries and dependencies will be downloaded.

TODO: Add wiring

Google Cloud Setup

  • Install gcloud CLI - Link
  • Authenticate with Google Cloud:
    • gcloud auth login
  • Create cloud project — choose your unique project name:
    • gcloud projects create YOUR_PROJECT_NAME
  • Set current project
    • gcloud config set project YOUR_PROJECT_NAME
  • Associate with a Firebase Project - Link
  • Create a Table on BigQuery - Link
    • Create a Dataset with name ttn_dataset
    • Create a table with name raw_data and fields deviceId (string), data(string) and time (Timestamp)

Bigquery Table

Deploy Backend

We have two options here, using Cloud Run and Google Cloud Functions.

Deploy Using Cloud Run

Just follow the steps and fill the GCP_PROJECT variable with your Google Cloud Platform project ID.

Run on Google Cloud

After deploying the server on Cloud Run, you can get it's url on GCP Console (link) and select the service ttn-gcp-lora that we just deployed. Them copy the URL will look like https://{project-id}-{some-random-hash-string}.a.run.app. The endpoint that handles TTN requests it /uplink, we are going to use this to setup TTN integration.

Deploy Cloud Function

This step will deploy a HTTP Cloud Function made with Golang. I made a script deploy.sh that is on the functions folder, that you can use to do that.

  • Run on the command line:
cd functions
./deploy.sh

After deploying the cloud function, you can get it's url that will look like https://{project-region}-{project-id}.cloudfunctions.net/HandleTTNUplink that handles TTN data and another one that will look like https://{project-region}-{project-id}.cloudfunctions.net/HandleDeviceHistoryQuery that returns device history to be used by the UI.

The Things Network Setup

  • Create a new application
  • Create a new integration of type HTTP
    • Use the url of the server on Cloud Run or from Cloud Function created on the previous step.

TTN Integration 1 TTN Integration 2 TTN Integration 3

Deploy Web UI on Firebase

  • Enable Firebase Hosting on the web project
    • cd web && firebase init and choose your Firebase project
  • Change file src/config.js with you Firebase Web SDK Config.
  • Deploy UI
    • npm run deploy

References

  • https://learn.adafruit.com/using-lorawan-and-the-things-network-with-circuitpython?view=all
  • https://www.thethingsnetwork.org/docs/applications/http/#uplink
  • https://cloud.google.com/bigquery/streaming-data-into-bigquery#bigquery_table_insert_rows-go