https://github.com/alvarowolfx/gcloud-lora-ttn
Integration between Google Cloud and The Things Network
https://github.com/alvarowolfx/gcloud-lora-ttn
Last synced: 4 months ago
JSON representation
Integration between Google Cloud and The Things Network
- Host: GitHub
- URL: https://github.com/alvarowolfx/gcloud-lora-ttn
- Owner: alvarowolfx
- Created: 2019-04-14T06:58:48.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-12-15T22:11:19.000Z (over 2 years ago)
- Last Synced: 2024-04-14T15:19:43.444Z (about 1 year ago)
- Language: Go
- Size: 1.75 MB
- Stars: 25
- Watchers: 5
- Forks: 6
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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](https://ttn-gcp-lora.firebaseapp.com/)
[](https://console.cloud.google.com/cloudshell/editor?shellonly=true&cloudshell_image=gcr.io/cloudrun/button&cloudshell_git_repo=https://github.com/alvarowolfx/gcloud-lora-ttn&cloudshell_working_dir=functions)
️ ⚠️️️️**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](https://wiki.dragino.com/index.php?title=Connect_to_TTN)### LoRa End Node
* Feather M0 LoRa 915mhz - [Link](https://www.adafruit.com/product/3178)
* CCS811 Air Quality Sensor - [Link](https://learn.sparkfun.com/tutorials/ccs811-air-quality-breakout-hookup-guide?_ga=2.196632293.895409039.1555180411-1431402083.1549724810)
* 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](https://cloud.google.com/sdk/install)
* 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](https://console.firebase.google.com/)
* Create a Table on BigQuery - [Link](https://console.cloud.google.com/bigquery)
* Create a Dataset with name `ttn_dataset`
* Create a table with name `raw_data` and fields `deviceId (string)`, `data(string)` and `time (Timestamp)`
## 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.
[](https://console.cloud.google.com/cloudshell/editor?shellonly=true&cloudshell_image=gcr.io/cloudrun/button&cloudshell_git_repo=https://github.com/alvarowolfx/gcloud-lora-ttn&cloudshell_working_dir=functions)
After deploying the server on Cloud Run, you can get it's url on GCP Console ([link](https://console.cloud.google.com/run)) 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