Data generated by following IoT sensors running on ESP32 microcontroller.
- DHT-22 is a digital sensor for measuring humidity and temperature.
- GDK101 is a semiconductor gamma radiation sensor module optimized for low-level gamma detection up to 200 µSv/h.
The data pipeline consists of following components:
- InfluxDB is used as a time series database for real-time data produced by our IoT sensors and other backend applications
- Multiple Telegraf instances on every host in our network for collecting and sending metrics and events to InfluxDB.
- Eclipse Mosquitto is a MQTT broker using the publish-subscribe mode for messaging IoT data between devices, sensors and servers.
Frontend, Backlend, sensors and relational data:
- The front-end was programmed in GoLang, Javascript and CSS.
- The back-end services were programmed in GoLang.
- The IoT sensors were programmed in C++.
- PostGres is used as a relational database to store usernames, password and other webapp specific data.
For our WebApp (written in Go 1.17) we used the standard library as well as following external packages:
- Soda CLI for CRUD operations with database functionality to deal with databases in Go (e.g. to tun migrations and build/execute queries)
- SCS implements a session management pattern following the OWASP security guidelines.
- Nosurf is an HTTP package for Go that helps you prevent Cross-Site Request Forgery attacks.
- Chi is a lightweight, idiomatic and composable router for building Go HTTP services.
- Go Simple Mail is a simple and efficient package to send emails.
- Package pgconn is a low-level PostgreSQL database driver.
- Govalidator is a package of validators and sanitizers for strings, structs and collections.
- Bcrypt package implements Provos and Mazièress bcrypt adaptive hashing algorithm.
This project is hosted on a bare metal server, for which we use:
- Proxmox Virtual Environmentas our main virtualization management solution.
- pfSense firewall (a FreeBSD distribution) for unified threat management, load balancing, multi WAN, TLS encryption and more.
- Grafana is our analytics & monitoring solution for our InfluxDB data.