Files
service_netatmo/README.md
T
2026-08-30 11:01:19 +02:00

2.7 KiB

GetNetatmoData v2

A small Flask service that polls Netatmo's Weather API every ten minutes, stores the readings in RRDtool databases, and serves a responsive graph dashboard.

What it stores

The service creates outdoor.rrd, wind.rrd, bedroom.rrd, study.rrd, and living.rrd. Each has ten-minute archives for the last two weeks and six-hour archives covering a year. Day, two-week, and year PNG graphs are rendered on demand. The wind graph splits average wind into 12 colored direction bands and draws gusts as a line.

The Outdoor module does not contain a pressure sensor, so outdoor.rrd combines its temperature/humidity with pressure from the main station. A module without dashboard_data is skipped until it becomes reachable again.

Prerequisites and setup

Install the RRDtool Python binding and native library using your operating system package manager (for example apt install python3-rrdtool on Debian or Ubuntu), then set up the Python application. If your distribution does not provide the binding, pip install -r requirements.txt installs its PyPI package but may require the RRDtool development headers and a C compiler.

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
cp .env.example .env

Add the client ID and secret for the Netatmo application GetNetatmoData v2 and a refresh token to .env. Netatmo's OAuth authorization step must be used to obtain the initial refresh token with the read_station scope. Secrets are read from environment variables and are never stored in an RRD.

Export the file and run Flask:

set -a
. ./.env
set +a
.venv/bin/flask --app wsgi run --host 0.0.0.0

Open http://localhost:5000/. Keep one application worker because the polling scheduler runs inside the service process. Alternatively set START_COLLECTOR=false in web workers and invoke this from a system timer:

.venv/bin/flask --app wsgi collect-now

RRD_FOLDER configures the database directory (default ./rrd). The module variables in .env.example allow the five Netatmo display names to be changed.

HTTP API

GET /last/<rrd-name>/<data-point>
GET /graph/<rrd-name>/<period>
GET /graph/<rrd-name><period>       # compact compatibility form
GET /health

Periods are day, 2weeks, and year. Examples:

curl http://localhost:5000/last/outdoor/humidity
curl --output wind.png http://localhost:5000/graph/wind/2weeks

Data points are:

  • outdoor: min_temp, max_temp, humidity, pressure
  • wind: gust, average, angle
  • bedroom, study, living: temperature, co2, humidity

The service creates missing RRDs at startup but deliberately does not alter an existing RRD schema. If a schema is changed in code, migrate or archive the old files before restarting.