personal-site/content/Sensors.md

3.2 KiB

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

24h Graphs

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

a graph with a title, and axis labelled. they all look similar and continuously change, so I won't describe each one.

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.

InfluxDB Regrets

My biggest regret was using InfluxDB. It's a stupid database that I wouldn't recommend it to anyone. I ran into timezone issues with group by time(). It 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 it. Their docs are a confusing mess. 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. You can only delete data by time ranges, not values. It also logs every single thing to /var/log/syslog and there's no easy way to disable it (completely). They shut down InfluxDB cloud in Belgium and didn't warn customers before deleting all their data.

Just stick to SQLite or Postgres.