This project shows how to setup an advanced IoT environment for your own home. It uses hardware from M5Stack, a data stream pipeline consisting of an MQTT broker, Kafka and InfluxDB and an Angular app to visualize the data. All the applications run in docker containers and thus can easily be deployed to a single home server.
- Install USB to UART driver from silabs
- Upload the firmware
UIFlow-v1.3.5-beta
to your M5Stack core using M5Burner - Install Visual Studio Code with M5Stack extension
- Install SiLabsUSBDriverDisk
- Connect your M5Stack device to your computer via USB
- Connect all your sensors to your M5Stack core
- Switch your M5Stack core to USB mode:
startup -> press button C -> USB mode
- Startup Visual Studio Code and connect to your M5Stack
- Upload the files from the folder
./m5stack
to your device - Configure your WiFi credentials
- Configure your MQTT broker and active sensors in
iot_home.py
- Run the program
- Install docker on your system
- Clone this repository
- Use
docker-compose up
to startup all the containers (Caution: setup InfluxDB authentication first if needed.)
IoT Home UI is an Angular app used to visualize the data, it is maintained in a separate repository: https://github.com/maechler/iot-home-ui
Enter localhost
or your server's IP address in the browser, setup the connection to InfluxDB and start adding tiles.
- Copy
./influxdb/env-variables.env.dist
to./influxdb/env-variables.env
- Configure usernames and passwords
Use docker ps
to find out the container ID of InfluxDB and then use this ID to connect to the database with docker exec -it [influxdb container id] influx
.
Useful SQL Queries:
SHOW DATABASES;
USE iothome;
SHOW MEASUREMENTS;
SELECT * FROM iothome.DefaultPolicy.inside;
SELECT * FROM iothome.DefaultPolicy.inside ORDER BY DESC LIMIT 1;
InfluxDB comes with a built in web API. It requires the two parameters db
for the database and q
for the query, e.g. http://localhost:8086/query?db=iothome&q=SELECT%20*%20FROM%20iothome.DefaultPolicy.inside;
.
Following the Kafka quickstart guide you can easily connect to the Kafka topics directly:
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
bin/kafka-console-consumer.sh --bootstrap-server localhost:29092 --topic "home.*" --from-beginning`
You can use the Websocket client to connect to your HiveMQ broker directly.
We need Apache as a reverse proxy because InfluxDB does not allow to set Access-Control-Allow-Origin
headers.
A simple Java application to connect Kafka to InfluxDB: GitHub and Docker
A simple Java application to connect MQTT to Kafka: GitHub and Docker