gcloud-lora-ttn
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
️ ⚠️️️️THIS IS A WORK IN PROGRESS ⚠️
LoRa End Node:
Data arriving on The Things Network:
Realtime Data on Firebase:
Query Data on Bigquery:
Monitor data on a WebApp :
BOM - Bill of Materials
Gateway
- Dragino LP01-S - Single Channel LoRa Gateway
- Connected to The Things Network - Connect to TTN - Wiki for Dragino Project
LoRa End Node
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 fieldsdeviceId (string)
,data(string)
andtime (Timestamp)
- Create a Dataset with name
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.
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.
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