{"status": "warning", "checked_at": "2026-08-03T00:04:37.543523+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": 24, "unknown_count": 0, "warning_count": 6, "critical_count": 0}, "source": {"configured": true, "status": "ok", "latest_measurement_ts": "2026-08-03T00:04:37.679133+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-08-03T00:00:00+02:00", "latest_updated_at": "2026-08-03T00:00:44.436366+02:00"}, "database": {"measurements_id": {"status": "ok", "configured": true, "column_type": "bigint", "current_max_id": 2459472807, "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": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:37.225196+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.591508+02:00", "rollup_updated_at": "2026-08-03T00:00:40.553309+02:00", "rollup_quality": "reset_detected", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 702, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 4.0, "notes": ["Known rollup gap accounts for 702 hourly bucket(s)."]}, {"meter": "meter-solar-phase-2", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:34.942547+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:38.218203+02:00", "rollup_updated_at": "2026-08-03T00:00:40.215413+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 1238, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 1238 hourly bucket(s)."]}, {"meter": "meter-cold-rooms-1-14", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.517830+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.777014+02:00", "rollup_updated_at": "2026-08-03T00:00:42.632263+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-plant-room", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.458935+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.715143+02:00", "rollup_updated_at": "2026-08-03T00:00:40.804315+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-compressor-3", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.387013+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:42.665970+02:00", "rollup_updated_at": "2026-08-03T00:00:44.153699+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-paradise-market-trans", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:37.640418+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.588475+02:00", "rollup_updated_at": "2026-08-03T00:00:41.772738+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 0, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 4.0, "notes": []}, {"meter": "meter-condenser-3-4", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.631135+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.916138+02:00", "rollup_updated_at": "2026-08-03T00:00:43.598287+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-pumps-1-4", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.498852+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.761871+02:00", "rollup_updated_at": "2026-08-03T00:00:43.745372+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-fv-trans", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:37.414862+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:38.572003+02:00", "rollup_updated_at": "2026-08-03T00:00:41.375934+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 2, "rollup_known_gap_bucket_count": 587, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 4.0, "notes": ["Historical rollup is missing 2 hourly bucket(s).", "Known rollup gap accounts for 587 hourly bucket(s)."]}, {"meter": "meter-compressor-2", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.537792+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.801972+02:00", "rollup_updated_at": "2026-08-03T00:00:44.017977+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-ripening-rooms-25-31", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.689814+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.967126+02:00", "rollup_updated_at": "2026-08-03T00:00:42.913882+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-mr-building", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:30.215516+02:00", "source_age_minutes": 0.1, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:40.614681+02:00", "rollup_updated_at": "2026-08-03T00:00:42.079555+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 4, "rollup_known_gap_bucket_count": 587, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.8, "notes": ["Historical rollup is missing 4 hourly bucket(s).", "Known rollup gap accounts for 587 hourly bucket(s)."]}, {"meter": "meter-local-trans", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.705484+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:38.849774+02:00", "rollup_updated_at": "2026-08-03T00:00:41.000232+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 36, "rollup_known_gap_bucket_count": 571, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Historical rollup is missing 36 hourly bucket(s).", "Known rollup gap accounts for 571 hourly bucket(s)."]}, {"meter": "meter-solar-inverter-2", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.671117+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:36.933897+02:00", "rollup_updated_at": "2026-08-03T00:00:40.012237+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 4.0, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-peoples-market", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:37.679133+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:41.412804+02:00", "rollup_updated_at": "2026-08-03T00:00:42.280398+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 149, "rollup_known_gap_bucket_count": 571, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Historical rollup is missing 149 hourly bucket(s).", "Known rollup gap accounts for 571 hourly bucket(s)."]}, {"meter": "meter-ripening-rooms-32-37", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.423577+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:42.702975+02:00", "rollup_updated_at": "2026-08-03T00:00:43.054197+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-compressor-4", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.650917+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.932979+02:00", "rollup_updated_at": "2026-08-03T00:00:44.295556+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-ripening-rooms-a-24", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.404038+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.666411+02:00", "rollup_updated_at": "2026-08-03T00:00:42.772750+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-compressor-5", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.576783+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.834153+02:00", "rollup_updated_at": "2026-08-03T00:00:44.436366+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-grid-power-bulk", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:37.226090+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.592943+02:00", "rollup_updated_at": "2026-08-03T00:00:40.668163+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 569, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 4.0, "notes": ["Known rollup gap accounts for 569 hourly bucket(s)."]}, {"meter": "meter-compressor-1", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.613922+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.894162+02:00", "rollup_updated_at": "2026-08-03T00:00:43.882304+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-fv-building", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:36.019415+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:38.442538+02:00", "rollup_updated_at": "2026-08-03T00:00:41.929823+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 1, "rollup_known_gap_bucket_count": 587, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 4.0, "notes": ["Historical rollup is missing 1 hourly bucket(s).", "Known rollup gap accounts for 587 hourly bucket(s)."]}, {"meter": "meter-solar-phase-3", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:37.646216+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:37.686850+02:00", "rollup_updated_at": "2026-08-03T00:00:40.415306+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 0, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 4.0, "notes": []}, {"meter": "meter-solar-inverter-1", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.443648+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:36.684143+02:00", "rollup_updated_at": "2026-08-03T00:00:39.874576+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 4.0, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-banana-trans", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:37.109680+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:40.763756+02:00", "rollup_updated_at": "2026-08-03T00:00:41.184937+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 571, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 571 hourly bucket(s)."]}, {"meter": "meter-ripening-rooms-51-58", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.479036+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.734062+02:00", "rollup_updated_at": "2026-08-03T00:00:43.328572+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-fine-corner-trans", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:37.641520+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:40.135668+02:00", "rollup_updated_at": "2026-08-03T00:00:41.576703+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 940, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 4.0, "notes": ["Known rollup gap accounts for 940 hourly bucket(s)."]}, {"meter": "meter-ripening-rooms-38-43", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.596736+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.861967+02:00", "rollup_updated_at": "2026-08-03T00:00:43.190589+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}, {"meter": "meter-subtropico-fridge", "status": "warning", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:37.335200+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.846220+02:00", "rollup_updated_at": "2026-08-03T00:00:42.491884+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 149, "rollup_known_gap_bucket_count": 570, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 4.0, "notes": ["Historical rollup is missing 149 hourly bucket(s).", "Known rollup gap accounts for 570 hourly bucket(s)."]}, {"meter": "meter-condenser-1-2", "status": "ok", "source_status": "ok", "source_latest_ts": "2026-08-03T00:04:35.557064+02:00", "source_age_minutes": 0.0, "rollup_status": "ok", "rollup_last_bucket": "2026-08-03T00:00:00+02:00", "rollup_bucket_end": "2026-08-03T01:00:00+02:00", "rollup_last_sample_ts": "2026-08-03T00:00:39.814031+02:00", "rollup_updated_at": "2026-08-03T00:00:43.464451+02:00", "rollup_quality": "partial", "rollup_gap_bucket_count": 0, "rollup_known_gap_bucket_count": 545, "rollup_age_minutes": 0.0, "lag_status": "ok", "source_to_rollup_lag_minutes": 3.9, "notes": ["Known rollup gap accounts for 545 hourly bucket(s)."]}]}