personal-site/content/Sensors.md
2023-04-19 18:39:45 -06:00

2.8 KiB

Title: Sensors Date: 2022-05-24 Category: Notes Summary: Graphs of various sensors around my house. Short: d

24h Graphs

These graphs are live and generated every 10 minutes, assuming the script works:

a graph

Black: power (W), green: energy (kWh)

a graph

Black: PM10 (ug/m³), red: PM2.5 (ug/m³), blue: CO₂ (ppm), green: VOC

a graph

Black: temperature (°C)

a graph

Black: temperature (°C), blue: humidity (%)

a graph

Black: temperature (°C), blue: humidity (%)

a graph

Black: temperature (°C), blue: humidity (%)

a graph

Black: temperature (°C), red: setpoint (°C), green: state (off / running)

a graph

Black: total (MJ), green: delta (MJ)

a graph

Black: total (L), green: delta (L)

a graph

Black: light (lx)

Live Dashboard

A live interactive version can be found on this dashboard.

You can find the source code on my Gitea.

Data Capture

Most of the data is captured by two cheap RTL-SDRs (software-defined radios) that are set to listen to 433 MHz and 915 MHz radio frequencies. I use the open-source project rtl_433 to automatically decode the signals and forward them to an MQTT broker, which is a messaging server that services can publish and subscribe to. Other sensors run an MQTT client directly or expose their data through other means like a web interface that I poll.

The data gets collected by a central Python script that process and stores it in an InfluxDB database for "efficient" storage. The script also runs a web server that queries the database and exposes the data over an API to the dashboard at various dates and ranges. The dashboard is written in JavaScript / React using a simple chart library.

My biggest regret was using InfluxDB. It's a stupid database and I wouldn't recommend it to anyone. The documentation is confusing and I ran into timezone issues with group by time(). It also assumes the column data type is an integer if your sensor happens to send it a whole number at first and it won't let you change that. Their docs are bad. They dropped the SQL-like InfluxQL syntax for querying with a pipeline-like syntax called Flux in version 2.0. Debian's repos seem to be staying with version 1.x though.

Just stick to Postgres / SQLite.