add support for barometric pressure

This commit is contained in:
2026-01-29 14:04:18 +11:00
parent 7a0081b2ed
commit 5d07c5d54b
9 changed files with 401 additions and 51 deletions

View File

@@ -41,6 +41,21 @@ SELECT create_hypertable('observations_ws90', 'ts', if_not_exists => TRUE);
CREATE INDEX IF NOT EXISTS idx_observations_ws90_site_ts ON observations_ws90(site, ts DESC);
CREATE INDEX IF NOT EXISTS idx_observations_ws90_station_ts ON observations_ws90(station_id, ts DESC);
-- Barometric pressure observations (from other MQTT sources)
CREATE TABLE IF NOT EXISTS observations_baro (
ts TIMESTAMPTZ NOT NULL,
received_at TIMESTAMPTZ NOT NULL DEFAULT now(),
site TEXT NOT NULL,
source TEXT NOT NULL,
pressure_hpa DOUBLE PRECISION,
payload_json JSONB
);
SELECT create_hypertable('observations_baro', 'ts', if_not_exists => TRUE);
CREATE INDEX IF NOT EXISTS idx_observations_baro_site_ts ON observations_baro(site, ts DESC);
CREATE INDEX IF NOT EXISTS idx_observations_baro_source_ts ON observations_baro(source, ts DESC);
-- Open-Meteo hourly baseline forecasts
CREATE TABLE IF NOT EXISTS forecast_openmeteo_hourly (
ts TIMESTAMPTZ NOT NULL,
@@ -100,6 +115,37 @@ BEGIN
END IF;
END$$;
-- Raw retention: 90 days (barometric pressure)
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM timescaledb_information.jobs j
WHERE j.proc_name = 'policy_retention'
AND j.hypertable_name = 'observations_baro'
) THEN
PERFORM add_retention_policy('observations_baro', INTERVAL '90 days');
END IF;
END$$;
-- Compression after 7 days
ALTER TABLE observations_baro SET (
timescaledb.compress,
timescaledb.compress_segmentby = 'site,source'
);
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM timescaledb_information.jobs
WHERE proc_name = 'policy_compression'
AND hypertable_name = 'observations_baro'
) THEN
PERFORM add_compression_policy('observations_baro', INTERVAL '7 days');
END IF;
END$$;
-- 1-minute continuous aggregate
CREATE MATERIALIZED VIEW IF NOT EXISTS cagg_ws90_1m
WITH (timescaledb.continuous) AS