{"status": "warning", "checked_at": "2026-10-02T02:24:37.902810+02:00", "default_timezone": "Africa/Johannesburg", "thresholds": {"source_warn_minutes": 120, "source_critical_minutes": 360, "rollup_warn_minutes": 90, "rollup_critical_minutes": 240, "lag_warn_minutes": 90, "lag_critical_minutes": 240}, "summary": {"meter_count": 30, "ok_count": 0, "unknown_count": 0, "warning_count": 30, "critical_count": 0}, "source": {"configured": true, "status": "ok", "latest_measurement_ts": "2026-10-02T02:24:37.944162+02:00", "latest_measurement_age_minutes": 0.0, "subscription": {"status": "ok", "count": 1, "subscriptions": [{"name": "meters_reporting_sub", "enabled": true}]}}, "rollup": {"status": "ok", "meter_count": 30, "latest_bucket": "2026-10-02T02:00:00+02:00", "latest_updated_at": "2026-10-02T02:15:05.079843+02:00"}, "database": {"measurements_id": {"status": "ok", "configured": true, "column_type": "bigint", "current_max_id": 3146771902, "limit": null, "ids_remaining": null, "percent_used": null, "notes": ["Measurements id column is not a 32-bit integer."]}}, "known_gaps": {"status": "ok", "window_count": 39, "known_bucket_count": 16758, "windows": [{"start": "2026-06-11T09:00:00+02:00", "end": "2026-06-11T11:00:00+02:00", "duration_hours": 2, "applies_to_all_meters": false, "affected_meter_count": 9, "meters": ["meter-banana-trans", "meter-battery-transformer", "meter-fine-corner-trans", "meter-fv-building", "meter-fv-trans", "meter-local-trans", "meter-mr-building", "meter-peoples-market", "meter-solar-phase-2"], "bucket_span": 18, "reason": "Confirmed source gap at the start of the PVE3 outage recovery window; raw reporting recovery had no readings for these hourly buckets."}, {"start": "2026-06-11T09:00:00+02:00", "end": "2026-06-11T10:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 2, "meters": ["meter-grid-power-bulk", "meter-subtropico-fridge"], "bucket_span": 2, "reason": "Confirmed one-hour source gap at the start of the PVE3 outage recovery window; raw reporting recovery had no readings for this hourly bucket."}, {"start": "2026-06-10T13:00:00+02:00", "end": "2026-06-10T14:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Confirmed one-hour Solar Phase 2 source gap during PVE3 recovery rollup audit on 2026-06-17."}, {"start": "2026-05-17T09:00:00+02:00", "end": "2026-06-09T03:00:00+02:00", "duration_hours": 546, "applies_to_all_meters": true, "affected_meter_count": 30, "meters": [], "bucket_span": 16380, "reason": "GridBrain DB sink ran without an applied DB config; readings were not persisted until controlled restart on 2026-06-09."}, {"start": "2026-05-10T17:00:00+02:00", "end": "2026-05-11T16:00:00+02:00", "duration_hours": 23, "applies_to_all_meters": true, "affected_meter_count": 30, "meters": [], "bucket_span": 690, "reason": "PVE2 Postgres disk-full incident; missing hourly rollup window confirmed after source spool replay."}, {"start": "2026-04-08T04:00:00+02:00", "end": "2026-04-13T14:00:00+02:00", "duration_hours": 130, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 130, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-04-07T07:00:00+02:00", "end": "2026-04-07T20:00:00+02:00", "duration_hours": 13, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-battery-transformer"], "bucket_span": 13, "reason": "Historical meter-specific source gap observed before known-gap tracking."}, {"start": "2026-04-07T07:00:00+02:00", "end": "2026-04-07T09:00:00+02:00", "duration_hours": 2, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 2, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-03-12T20:00:00+02:00", "end": "2026-03-12T21:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-03-11T14:00:00+02:00", "end": "2026-03-12T06:00:00+02:00", "duration_hours": 16, "applies_to_all_meters": false, "affected_meter_count": 3, "meters": ["meter-fv-building", "meter-fv-trans", "meter-mr-building"], "bucket_span": 48, "reason": "Historical meter-specific source gap observed before known-gap tracking."}, {"start": "2026-03-10T11:00:00+02:00", "end": "2026-03-10T12:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-03-10T05:00:00+02:00", "end": "2026-03-10T06:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-03-06T07:00:00+02:00", "end": "2026-03-06T08:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-03-04T13:00:00+02:00", "end": "2026-03-04T14:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-03-02T02:00:00+02:00", "end": "2026-03-02T03:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-03-01T11:00:00+02:00", "end": "2026-03-01T12:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-02-21T00:00:00+02:00", "end": "2026-02-21T01:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-02-19T01:00:00+02:00", "end": "2026-02-19T02:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-02-18T22:00:00+02:00", "end": "2026-02-18T23:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-02-17T11:00:00+02:00", "end": "2026-02-17T12:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-02-16T00:00:00+02:00", "end": "2026-02-16T01:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-02-12T13:00:00+02:00", "end": "2026-02-17T11:00:00+02:00", "duration_hours": 118, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-battery-transformer"], "bucket_span": 118, "reason": "Historical meter-specific source gap observed before known-gap tracking."}, {"start": "2026-02-10T07:00:00+02:00", "end": "2026-02-10T08:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-02-08T07:00:00+02:00", "end": "2026-02-08T09:00:00+02:00", "duration_hours": 2, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 2, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-02-07T06:00:00+02:00", "end": "2026-02-07T07:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-28T16:00:00+02:00", "end": "2026-02-02T08:00:00+02:00", "duration_hours": 112, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 112, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-28T02:00:00+02:00", "end": "2026-01-28T03:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-27T08:00:00+02:00", "end": "2026-01-27T09:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-26T21:00:00+02:00", "end": "2026-01-26T22:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-26T14:00:00+02:00", "end": "2026-01-26T15:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-26T11:00:00+02:00", "end": "2026-01-26T12:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-24T13:00:00+02:00", "end": "2026-01-24T14:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-24T01:00:00+02:00", "end": "2026-01-24T02:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-23T13:00:00+02:00", "end": "2026-01-23T14:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-20T17:00:00+02:00", "end": "2026-01-22T14:00:00+02:00", "duration_hours": 45, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 45, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-19T16:00:00+02:00", "end": "2026-01-19T18:00:00+02:00", "duration_hours": 2, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 2, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-16T04:00:00+02:00", "end": "2026-01-16T05:00:00+02:00", "duration_hours": 1, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 1, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}, {"start": "2026-01-01T00:00:00+02:00", "end": "2026-01-16T09:00:00+02:00", "duration_hours": 369, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-fine-corner-trans"], "bucket_span": 369, "reason": "Historical meter-specific source gap observed before known-gap tracking."}, {"start": "2026-01-01T00:00:00+02:00", "end": "2026-01-15T14:00:00+02:00", "duration_hours": 350, "applies_to_all_meters": false, "affected_meter_count": 1, "meters": ["meter-solar-phase-2"], "bucket_span": 350, "reason": "Historical Solar Phase 2 source gap observed before known-gap tracking."}]}, "notes": [], "meters": [{"meter": "meter-battery-transformer", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:37.729219+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:00.067565+02:00", "rollup_updated_at": "2026-10-02T02:15:02.249299+02:00", "rollup_quality": "reset_detected", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 702, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 702 hourly bucket(s)."]}, {"meter": "meter-pumps-1-4", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.322652+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:04.158216+02:00", "rollup_updated_at": "2026-10-02T02:15:04.610988+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.5, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-ripening-rooms-38-43", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.272651+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.096250+02:00", "rollup_updated_at": "2026-10-02T02:15:04.229629+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-ripening-rooms-a-24", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.563819+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.335250+02:00", "rollup_updated_at": "2026-10-02T02:15:03.950731+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-solar-phase-2", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:37.240290+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.342050+02:00", "rollup_updated_at": "2026-10-02T02:15:01.993148+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 1238, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 1238 hourly bucket(s)."]}, {"meter": "meter-local-trans", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:36.083606+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:14:59.601110+02:00", "rollup_updated_at": "2026-10-02T02:15:02.586286+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 52, "rollup_known_gap_bucket_count": 571, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 52 hourly bucket(s).", "Known rollup gap accounts for 571 hourly bucket(s)."]}, {"meter": "meter-compressor-4", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.523850+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:04.320935+02:00", "rollup_updated_at": "2026-10-02T02:15:04.988852+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.5, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-compressor-1", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.575574+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:04.377195+02:00", "rollup_updated_at": "2026-10-02T02:15:04.703871+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.5, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-subtropico-fridge", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:37.433805+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:03.249455+02:00", "rollup_updated_at": "2026-10-02T02:15:03.757762+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 165, "rollup_known_gap_bucket_count": 570, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 165 hourly bucket(s).", "Known rollup gap accounts for 570 hourly bucket(s)."]}, {"meter": "meter-fine-corner-trans", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.723550+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:02.715099+02:00", "rollup_updated_at": "2026-10-02T02:15:03.046558+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 940, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 940 hourly bucket(s)."]}, {"meter": "meter-paradise-market-trans", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:36.013138+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:00.322209+02:00", "rollup_updated_at": "2026-10-02T02:15:03.200304+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 85, "rollup_known_gap_bucket_count": 0, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 85 hourly bucket(s)."]}, {"meter": "meter-peoples-market", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.527506+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:02.512088+02:00", "rollup_updated_at": "2026-10-02T02:15:03.598638+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 165, "rollup_known_gap_bucket_count": 571, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 165 hourly bucket(s).", "Known rollup gap accounts for 571 hourly bucket(s)."]}, {"meter": "meter-ripening-rooms-51-58", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.255759+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:04.099146+02:00", "rollup_updated_at": "2026-10-02T02:15:04.321958+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.5, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-ripening-rooms-25-31", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.401386+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.182053+02:00", "rollup_updated_at": "2026-10-02T02:15:04.044009+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-solar-phase-3", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:36.989576+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:14:59.209401+02:00", "rollup_updated_at": "2026-10-02T02:15:02.149976+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 0, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s)."]}, {"meter": "meter-mr-building", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:36.849890+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:00.843148+02:00", "rollup_updated_at": "2026-10-02T02:15:03.441155+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 20, "rollup_known_gap_bucket_count": 587, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 20 hourly bucket(s).", "Known rollup gap accounts for 587 hourly bucket(s)."]}, {"meter": "meter-condenser-3-4", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.503786+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.275116+02:00", "rollup_updated_at": "2026-10-02T02:15:04.510499+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-compressor-3", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.611488+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:04.417052+02:00", "rollup_updated_at": "2026-10-02T02:15:04.893910+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.5, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-condenser-1-2", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.384789+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:04.195339+02:00", "rollup_updated_at": "2026-10-02T02:15:04.417794+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.5, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-solar-inverter-1", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.305765+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.116167+02:00", "rollup_updated_at": "2026-10-02T02:15:01.741508+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-grid-power-bulk", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:37.730267+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:00.120598+02:00", "rollup_updated_at": "2026-10-02T02:15:02.339940+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 569, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 569 hourly bucket(s)."]}, {"meter": "meter-banana-trans", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:36.692901+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:02.271505+02:00", "rollup_updated_at": "2026-10-02T02:15:02.734056+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 571, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 571 hourly bucket(s)."]}, {"meter": "meter-compressor-5", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.543751+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:04.335053+02:00", "rollup_updated_at": "2026-10-02T02:15:05.079843+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.5, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-fv-trans", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:37.944162+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.276424+02:00", "rollup_updated_at": "2026-10-02T02:15:02.883762+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 18, "rollup_known_gap_bucket_count": 587, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 18 hourly bucket(s).", "Known rollup gap accounts for 587 hourly bucket(s)."]}, {"meter": "meter-cold-rooms-1-14", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.455497+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.258017+02:00", "rollup_updated_at": "2026-10-02T02:15:03.852178+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-ripening-rooms-32-37", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.435607+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.235012+02:00", "rollup_updated_at": "2026-10-02T02:15:04.137557+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-compressor-2", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.413504+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:04.240947+02:00", "rollup_updated_at": "2026-10-02T02:15:04.799542+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.5, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-fv-building", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:34.985724+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:14:46.609699+02:00", "rollup_updated_at": "2026-10-02T02:15:03.320877+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 17, "rollup_known_gap_bucket_count": 587, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.8, "notes": ["Historical rollup is missing 17 hourly bucket(s).", "Known rollup gap accounts for 587 hourly bucket(s)."]}, {"meter": "meter-solar-inverter-2", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.354778+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.150125+02:00", "rollup_updated_at": "2026-10-02T02:15:01.836797+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-plant-room", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-10-02T02:24:35.591484+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-10-02T02:00:00+02:00", "rollup_bucket_end": "2026-10-02T03:00:00+02:00", "rollup_last_sample_ts": "2026-10-02T02:15:01.375246+02:00", "rollup_updated_at": "2026-10-02T02:15:02.433025+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 16, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 9.6, "notes": ["Historical rollup is missing 16 hourly bucket(s).", "Known rollup gap accounts for 545 hourly bucket(s)."]}]}