{"service":"kapok-gateway","git_sha":"b9479a323178","deployed_at":"eec13706-f705-410f-bdeb-f7bd47b1b40e","cache_age_s":1366,"process":{"uptime_h":11.91,"rss_mb":2073.6,"peak_rss_mb":6488.5},"env":{"DATABASE_URL":true,"VRM_TOKEN":true,"VRM_EMAIL":true,"LODGIFY_API_KEY":true},"grid_and_soc":{"papaya":{"connected":true,"last_update":"a few seconds ago","stale":false,"grid":{"status":"on_grid","grid_w":568,"note":"grid draw ~568 W — battery low / near reserve, expected","grid_present":true},"soc":{"status":"moving","value":22.0,"source":"bms","note":"SOC=22.0% (src=bms), last changed 2.2h ago"}},"guava":{"connected":false,"last_update":"never","stale":true,"grid":{"status":"stale data","grid_w":null,"note":"no fresh grid-power reading","grid_present":null},"soc":{"status":"no_data","value":null,"source":null,"note":"no fresh SOC feed"}},"mango":{"connected":true,"last_update":"a few seconds ago","stale":false,"grid":{"status":"on_battery","grid_w":19,"note":"grid draw ~19 W (now)","grid_present":true},"soc":{"status":"moving","value":88.0,"source":"bms","note":"SOC=88.0% (src=bms), last changed 0.1h ago"}},"sugar_apple":{"connected":true,"last_update":"a few seconds ago","stale":false,"grid":{"status":"on_battery","grid_w":33,"note":"grid draw ~33 W (now)","grid_present":true},"soc":{"status":"moving","value":72.0,"source":"bms","note":"SOC=72.0% (src=bms), last changed 0.0h ago"}}},"fleet_outage":{"state":"grid_up","grid_present":3,"grid_absent":0,"total":3},"live":{"papaya":{"pv_w":18,"pv_by_inst":{"278":9,"277":9},"load_w":542,"batt_w":0,"soc":22.0,"soc_src":"bms","runtime":{"hours":12.6,"label":"12h+","state":"ok","output_dead":false,"on_battery":false,"basis":"hypothetical_if_grid_fails"},"ages":{"pv_w":0,"batt_w":1,"load_w":1,"soc":48},"stale":false,"feed_state":"live","feed_age_s":1,"updated_utc":"2026-09-13T12:20:12.539366+00:00","shared_live":true,"inv_state":"Sustain"},"guava":{"pv_w":null,"pv_by_inst":{},"load_w":null,"batt_w":null,"soc":null,"soc_src":null,"runtime":{"hours":null,"label":null,"state":"unknown","output_dead":false,"on_battery":true,"basis":"live_countdown"},"ages":{},"stale":true,"feed_state":"never","feed_age_s":null,"updated_utc":null,"shared_live":true,"inv_state":null},"mango":{"pv_w":1411,"pv_by_inst":{"279":1411,"278":0},"load_w":192,"batt_w":1429,"soc":88.0,"soc_src":"bms","runtime":{"hours":18.2,"label":"12h+","state":"ok","output_dead":false,"on_battery":false,"basis":"hypothetical_if_grid_fails"},"ages":{"pv_w":0,"batt_w":1,"load_w":1,"soc":1},"stale":false,"feed_state":"live","feed_age_s":0,"updated_utc":"2026-09-13T12:20:13.483457+00:00","shared_live":false,"inv_state":"Bulk"},"sugar_apple":{"pv_w":1299,"pv_by_inst":{"278":0,"279":1299},"load_w":263,"batt_w":838,"soc":72.0,"soc_src":"bms","runtime":{"hours":12.4,"label":"12h+","state":"ok","output_dead":false,"on_battery":false,"basis":"hypothetical_if_grid_fails"},"ages":{"pv_w":0,"batt_w":1,"load_w":1,"soc":2},"stale":false,"feed_state":"live","feed_age_s":0,"updated_utc":"2026-09-13T12:20:13.201712+00:00","shared_live":false,"inv_state":"Bulk"}},"weather":{"temp_f":81,"label":"Clear","emoji":"☀️","cloud_cover":7},"actuals_archive":{"thread_alive":true,"last_capture_date":"2026-09-12","yield_rows":648,"ghi_rows":323},"overload_capture":{"connected":"shared-reader","events":0,"samples_seen":436734,"last_event":null,"started_at":"2026-09-13T00:25:28.883021+00:00","host":null,"thread_alive":true,"stored_events":1012},"overload_analysis":{"n":1011,"shape_pct":{"plateau>3s":98,"short1-3s":1,"spike<1s":1},"by_unit_leg":{"guava/L1":{"n":37,"peak_w":{"p50":894,"p90":1848,"max":3574},"imbalance":{"p50":0.6,"p90":1.8,"max":10.8},"pf_p50":0.96,"load_mix":{"resistive":37}},"guava/L2":{"n":453,"peak_w":{"p50":2666,"p90":3223,"max":4235},"imbalance":{"p50":2.7,"p90":15.3,"max":117.9},"pf_p50":0.95,"load_mix":{"resistive":423,"motor":17}},"mango/L1":{"n":95,"peak_w":{"p50":1554,"p90":2568,"max":3721},"imbalance":{"p50":2.8,"p90":28.7,"max":94.9},"pf_p50":0.92,"load_mix":{"resistive":57,"motor":35}},"mango/L2":{"n":64,"peak_w":{"p50":2402,"p90":2693,"max":3356},"imbalance":{"p50":2.4,"p90":15.5,"max":21.3},"pf_p50":0.93,"load_mix":{"resistive":54,"motor":9}},"papaya/L1":{"n":61,"peak_w":{"p50":1581,"p90":2608,"max":3455},"imbalance":{"p50":1.5,"p90":2.5,"max":9.8},"pf_p50":0.97,"load_mix":{"resistive":59,"motor":2}},"papaya/L2":{"n":95,"peak_w":{"p50":1917,"p90":2822,"max":3570},"imbalance":{"p50":3.3,"p90":10.8,"max":22.1},"pf_p50":0.95,"load_mix":{"resistive":93,"motor":1}},"sugar_apple/L1":{"n":185,"peak_w":{"p50":2367,"p90":2917,"max":3569},"imbalance":{"p50":9.5,"p90":20.1,"max":98.0},"pf_p50":0.89,"load_mix":{"resistive":106,"motor":78}},"sugar_apple/L2":{"n":21,"peak_w":{"p50":1755,"p90":2593,"max":3411},"imbalance":{"p50":1.7,"p90":3.9,"max":8.5},"pf_p50":0.85,"load_mix":{"resistive":9,"motor":12}}},"peak_dc_v":{"p95":54.0,"max":58.7},"interpretation":"98% are SUSTAINED plateaus (not inrush) → software leg-balancing / higher leg limit is the primary lever, not a soft-starter; severe leg imbalance at trip on papaya/L2, sugar_apple/L1 → an autotransformer (or moving the hot-leg load) directly targets these","cached":true,"compute_s":2.1},"appliance_register":{"thread_alive":true,"detector_ok":true,"last_capture_date":"2026-09-13","snapshot_days":81,"device_rows":17968},"episode_archive":{"runs":2,"last_run":"2026-09-13T06:27:10.470125+00:00","last_written":38,"total_written":93,"last_error":null,"thread_alive":true,"banked_episodes":15331,"units":4,"span":"2026-07-05 11:19:05.833377+00:00 → 2026-09-13 05:42:25.157311+00:00"},"finding_promoter":{"runs":1,"last_run":"2026-09-13T00:25:43.073894+00:00","open_findings":1,"last_error":null,"thread_alive":true,"anomaly_held_h":{"sugar_apple":null,"papaya":895.6,"guava":null,"mango":null}},"mqtt_reader":{"connected":true,"host":"mqtt98.victronenergy.com","msgs":41582868,"started_at":"2026-09-13T00:25:29Z","last_error":null,"consumers":6,"dispatch_errors":0,"resubscribes":921,"watchdog_reconnects":307,"silent_portals":[],"thread_alive":true},"rest_fallback":{"fetches":0,"errors":0,"served":0,"last_error":null,"cached_units":[],"ttl_s":120.0},"hires_logger":{"connected":"shared-reader","buffered":33,"written":530547,"started_at":"2026-09-13T00:25:29.284464+00:00","thread_alive":true,"rows":10264348,"span_hours":168.0,"span_is":"data extent (persists across restarts), not uptime"},"detect_job":{"runs":6,"last_run":1789301254.256137,"last_error":null,"last_devices":12},"shade_archiver":{"runs":1,"last_run":1789260995.7213464,"last_error":null,"result":{"baseline_am_mid":0.486,"house1":{"guava":{"unit":"?","n_clean_days":0,"ready":false,"note":"need ≥3 clean (occupied, non-curtailed) Building-1 days to quantify shade"},"mango":{"unit":"mango","n_clean_days":0,"ready":false,"note":"need ≥3 clean (occupied, non-curtailed) Building-1 days to quantify shade"}}},"always_on":{"sugar_apple":{"floor_median_w":292,"floor_min_w":153,"floor_p10_w":174,"night_floor_w":284,"flat_cv":0.23,"legs":[{"leg":"L1","typical_floor_w":213,"lowest_floor_w":123,"on_fraction":0.848,"ever_dropped":true,"substantial":false,"verdict":"minimal (fridge/standby)"},{"leg":"L2","typical_floor_w":61,"lowest_floor_w":0,"on_fraction":0.063,"ever_dropped":true,"substantial":false,"verdict":"minimal (fridge/standby)"}],"n":3553921},"papaya":{"floor_median_w":607,"floor_min_w":387,"floor_p10_w":508,"night_floor_w":551,"flat_cv":0.53,"legs":[{"leg":"L1","typical_floor_w":213,"lowest_floor_w":161,"on_fraction":0.991,"ever_dropped":false,"substantial":false,"verdict":"minimal (fridge/standby)"},{"leg":"L2","typical_floor_w":373,"lowest_floor_w":269,"on_fraction":1.0,"ever_dropped":false,"substantial":true,"verdict":"runs 100% of the time (rarely off) — near-continuous, consistent with a heating element that mostly can't reach setpoint"}],"n":2765595},"guava":{"floor_median_w":20,"floor_min_w":15,"floor_p10_w":16,"night_floor_w":20,"flat_cv":0.89,"legs":[{"leg":"L1","typical_floor_w":1,"lowest_floor_w":0,"on_fraction":0.0,"ever_dropped":true,"substantial":false,"verdict":"minimal (fridge/standby)"},{"leg":"L2","typical_floor_w":19,"lowest_floor_w":14,"on_fraction":0.0,"ever_dropped":true,"substantial":false,"verdict":"minimal (fridge/standby)"}],"n":255851},"mango":{"floor_median_w":95,"floor_min_w":69,"floor_p10_w":79,"night_floor_w":96,"flat_cv":0.42,"legs":[{"leg":"L1","typical_floor_w":43,"lowest_floor_w":9,"on_fraction":0.093,"ever_dropped":true,"substantial":false,"verdict":"minimal (fridge/standby)"},{"leg":"L2","typical_floor_w":48,"lowest_floor_w":38,"on_fraction":0.0,"ever_dropped":true,"substantial":false,"verdict":"minimal (fridge/standby)"}],"n":4065546}}},"solar_dark_detector":{"polls":2,"last_poll":"2026-09-13T06:27:42.715205+00:00","opened":0,"resolved":0,"last_error":null,"thread_alive":true,"dark_streaks":{"sugar_apple#278":2,"mango#278":2}},"stranded_electrons":{"polls":48,"last_poll":"2026-09-13T12:14:55.005424+00:00","opened":0,"closed":0,"last_kwh":{},"last_error":null,"open_episodes":{},"thread_alive":true,"framing":"lower_bound","tomorrow":{"papaya":{"forecast_pv_kwh":21.8,"est_load_kwh":28.3,"absorb_headroom_kwh":9.1,"surplus_kwh":0.0,"note":"schedulable free energy tomorrow if >0 (assumptions: climatological load, absorb=60% of capacity)"},"guava":{"forecast_pv_kwh":0.0,"est_load_kwh":36.0,"absorb_headroom_kwh":9.2,"surplus_kwh":0.0,"note":"schedulable free energy tomorrow if >0 (assumptions: climatological load, absorb=60% of capacity)"}}},"stale_feed_detector":{"polls":143,"last_poll":"2026-09-13T12:19:14.610389+00:00","opened":0,"resolved":0,"last_error":null,"opened_degraded":6,"resolved_degraded":5,"thread_alive":true,"threshold_min":30},"alarm_ingester":{"polls":654,"last_poll":"2026-09-13T12:19:18.383923+00:00","opened":1,"resolved":0,"last_error":null,"thread_alive":true,"active_now":["papaya:vebus:LowBattery=2","papaya:vebus:L1:LowBattery=2"]},"vrm_alarm_log":{"polls":48,"ingested":1,"closed":5,"orphans_closed":0,"last_poll":"2026-09-13T12:14:40.187259+00:00","last_error":null,"thread_alive":true,"seen_closed":5,"seen_open":0},"blackout_detector":{"polls":711,"last_poll":"2026-09-13T12:20:01.796528+00:00","opened":0,"resolved":0,"escalated":0,"last_error":null,"thread_alive":true,"streaks":{}},"overload_nearmiss_detector":{"polls":355,"last_poll":"2026-09-13T12:19:54.912945+00:00","opened":0,"suppressed":33,"last_error":null,"thread_alive":true,"dc_trip_floors_v":{"sugar_apple":52.2,"papaya":52.3,"guava":51.6,"mango":52.4},"leg_trip_levels_w":{"sugar_apple:L1":2400,"sugar_apple:L2":2400,"papaya:L1":2400,"papaya:L2":2400,"guava:L1":2400,"guava:L2":2624,"mango:L1":2400,"mango:L2":2400}},"bms_module_detector":{"polls":714,"last_poll":"2026-09-13T12:20:01.542156+00:00","changes":0,"last_error":null,"thread_alive":true,"last_counts":{"sugar_apple":3,"papaya":3,"mango":3}},"can_health_monitor":{"connected":"shared-reader","host":null,"started_at":"2026-09-13T00:25:29.134929+00:00","msgs":41582915,"events":0,"last_error":null,"thread_alive":true,"bms_iface":{"mango":"can1","papaya":"can1"},"last_counts":{"sugar_apple/vecan0":{"state":"ERROR-PASSIVE","rx":135,"bus_off":0,"restarts":0},"sugar_apple/vecan1":{"state":"ERROR-ACTIVE","rx":0,"bus_off":0,"restarts":0},"mango/can0":{"state":"ERROR-PASSIVE","rx":0,"bus_off":0,"restarts":0},"mango/can1":{"state":"ERROR-ACTIVE","rx":0,"bus_off":0,"restarts":0},"papaya/can0":{"state":"ERROR-PASSIVE","rx":135,"bus_off":0,"restarts":0},"papaya/can1":{"state":"ERROR-ACTIVE","rx":0,"bus_off":0,"restarts":0}}},"ess_reconciler":{"ticks":715,"last_tick":"2026-09-13T12:20:13.520138+00:00","restored":0,"alarms":0,"last_error":null,"thread_alive":true,"started":true},"precharge_decider":{"ticks":36,"last_tick":1789301211,"shadow_events":6,"live_actuations":0,"vacancy_overrides":6,"forecast_built_for":"2026-09-12","last_error":null,"live":false,"last_decisions":{"papaya":{"decision":"would_precharge","unit":"papaya","trigger":"deficit_to_sunrise","soc_pct":46.0,"capacity_wh":15324,"reserve_floor_pct":15,"reserve_floor_wh":2299,"usable_above_reserve_wh":4750,"forecast_overnight_demand_wh":7800,"forecast_pctl":85,"forecast_source":"topoff/occupancy-split","occupancy_class":"vacant","occupancy_source":"booking+all-fallback","deficit_wh":3050,"chosen_target_pct":66,"morning_ratio":0.59,"morning_add_wh":0,"would_call":"auto_charge(papaya, 66, policy=precharge)","gated_reason":null,"vacancy_override":"unit is VACANT (booking+all-fallback) — auto pre-charge suppressed","decider_version":3,"shadow":true,"local_date":"2026-09-12"}},"thread_alive":true,"mode":"shadow","forecast_cached_date":"2026-09-12"},"runtime_floor_decider":{"ticks":286,"last_tick":1789302001,"boost_events":0,"live_actuations":0,"vacancy_overrides":0,"last_error":null,"live":false,"thread_alive":true,"mode":"shadow","below_streak":{"papaya":0,"guava":0,"mango":0,"sugar_apple":0},"day_window_ast":[6.0,18.0],"eta_default":0.9},"hybrid_draw_detector":{"samples_seen":398611,"episodes":{"hybrid":11,"surge_no_assist":1,"trip":0},"last_episode":"2026-09-13T07:46:08.862734+00:00","last_error":null,"active_episodes":[],"thread_alive":true,"queued":0},"inverter_state_tracker":{"samples_seen":330669,"transitions":1,"last_transition":"2026-09-13T06:36:14.902172+00:00","last_error":null,"labels":{"mango":"Bulk","sugar_apple":"Bulk","papaya":"Sustain"},"thread_alive":true,"queued":0},"occupancy_challenge":{"ticks":36,"last_tick":1789301242,"challenged_units":[],"last_error":null,"states":{"papaya":"occupied","guava":"unknown","mango":"occupied","sugar_apple":"occupied"},"thread_alive":true},"pv_histogram":{"builds":1,"last_build":"2026-09-13T00:28:03.315085+00:00","recent_builds":24,"last_recent":"2026-09-13T12:00:50.007423+00:00","last_error":null,"built_units":{"sugar_apple:279":{"hours":15,"built":"2026-09-13T00:26:15.820083+00:00"},"papaya:277":{"hours":15,"built":"2026-09-13T00:26:31.376217+00:00"},"shared:Building 2":{"hours":15,"built":"2026-09-13T00:27:01.451254+00:00"},"guava:278":{"hours":15,"built":"2026-09-13T00:27:17.276160+00:00"},"mango:279":{"hours":15,"built":"2026-09-13T00:27:33.268625+00:00"},"shared:Building 1":{"hours":15,"built":"2026-09-13T00:28:03.315060+00:00"}},"recent_units":{"sugar_apple:279":13,"papaya:277":13,"shared:Building 2":13,"guava:278":0,"mango:279":14,"shared:Building 1":0},"recent_built":"2026-09-13T12:00:50.007423+00:00","thread_alive":true,"recent_thread_alive":true},"solar_expectation":{"last_fit":"2026-09-13T06:29:12.922824+00:00","last_error":null,"k_arrays":{"guava:279":{"k_kwh_per_whm2":0.0019674818964339393,"n_days":57,"ready":true},"mango:279":{"k_kwh_per_whm2":0.0020082872928176795,"n_days":58,"ready":true},"sugar_apple:279":{"k_kwh_per_whm2":0.0019064124783362217,"n_days":57,"ready":true},"papaya:277":{"k_kwh_per_whm2":0.002193941286695815,"n_days":58,"ready":true},"papaya:278":{"k_kwh_per_whm2":0.0019191130543410367,"n_days":58,"ready":true},"guava:278":{"k_kwh_per_whm2":0.0017819636606101017,"n_days":56,"ready":true}},"cloud_fit":{"sensitivity":0.304,"n_days":57,"mean_abs_err":0.051,"ready":true},"solcast_score":{"guava":{"n_days":28,"mae_kwh":9.06,"bias_kwh":-3.89,"mae_pct":58.7,"recent":[{"tday":"2026-09-09","f_kwh":0.0,"a_kwh":12.4,"n_rows":24},{"tday":"2026-09-10","f_kwh":0.0,"a_kwh":12.4,"n_rows":24},{"tday":"2026-09-11","f_kwh":0.0,"a_kwh":12.3,"n_rows":24}]},"papaya":{"n_days":28,"mae_kwh":3.32,"bias_kwh":1.33,"mae_pct":18.8,"recent":[{"tday":"2026-09-09","f_kwh":22.3,"a_kwh":19.8,"n_rows":24},{"tday":"2026-09-10","f_kwh":22.1,"a_kwh":19.8,"n_rows":24},{"tday":"2026-09-11","f_kwh":20.8,"a_kwh":19.2,"n_rows":24}]}},"solcast_hourly":{"guava":{"n_hours":31,"mae_wh":441,"bias_wh":180,"mae_pct":183.7},"papaya":{"n_hours":85,"mae_wh":752,"bias_wh":265,"mae_pct":49.9}}},"soc_histogram":{"typ_builds":1,"recent_builds":24,"last_error":null,"typ_units":{"mango":24,"papaya":24,"guava":24,"sugar_apple":24},"recent_units":{"mango":8,"papaya":8,"guava":0,"sugar_apple":8},"floors":{"mango":{"pct":15.0,"enforced":true},"papaya":{"pct":15.0,"enforced":true},"guava":{"pct":15.0,"enforced":true},"sugar_apple":{"pct":15.0,"enforced":true}},"typ_built":"2026-09-13T00:27:05.159759+00:00","recent_built":"2026-09-13T11:58:05.806840+00:00","thread_alive":true,"recent_thread_alive":true},"grid_logger":{"backfilled":true,"backfill_n":0,"live_open":false,"last_check":"2026-09-13T12:19:49.094445+00:00","thread_alive":true,"min_outage_min":5,"logged_outages":20,"ongoing":0},"firmware_health":{"polls":2,"changes":0,"last_poll":"2026-09-13T06:25:33.542538+00:00","last_change":null,"divergence_flagged":false,"thread_alive":true,"snapshot":{"guava":{"ve_bus":"560","gx":"v3.79","mppt":"v3.18","auto_update":"On"},"mango":{"ve_bus":"560","gx":"v3.79","mppt":"v1.74,v3.18","auto_update":"Check"},"papaya":{"ve_bus":"560","gx":"v3.79","mppt":"v3.18","auto_update":"Check"},"sugar_apple":{"ve_bus":"560","gx":"v3.79","mppt":"v3.18","auto_update":"Check"}}},"config_health":{"polls":4,"changes":0,"last_poll":"2026-09-13T09:25:38.604900+00:00","last_change":null,"thread_alive":true,"watched":21,"snapshot_rows":83,"snapshot_units":4},"cell_spread_archive":{"polls":12,"rows_written":48,"last_poll":"2026-09-13T11:27:53.114262+00:00","last_error":null,"last_spreads":{"sugar_apple":10,"papaya":10,"guava":0,"mango":0},"thread_alive":true,"stored_rows":5429,"latest_row":"2026-09-13T11:27:53.112638+00:00"},"events":{"total":2642,"open":1081,"critical":33},"switch_inference":{"wapa_up_prior":true,"units":{"papaya":{"input":{"guess":"1 · WAPA","confidence":"high","why":"120V at input terminals"},"output":{"guess":"1 · HUPS","confidence":"high","why":"542W of building load flowing through the inverter"}},"guava":{"input":{"guess":"unknowable","confidence":null,"why":"no fresh input telemetry"},"output":{"guess":"unknowable","confidence":null,"why":"no fresh inverter telemetry"}},"mango":{"input":{"guess":"1 · WAPA","confidence":"high","why":"119V at input terminals"},"output":{"guess":"1 · HUPS","confidence":"high","why":"185W of building load flowing through the inverter"}},"sugar_apple":{"input":{"guess":"1 · WAPA","confidence":"high","why":"120V at input terminals"},"output":{"guess":"1 · HUPS","confidence":"high","why":"265W of building load flowing through the inverter"}}}},"energy_page":{"builds":{"24h":{"builds":1,"last_error":null,"took_s":53.0,"finished":1789259197.6764338},"7d":{"builds":1,"last_error":null,"took_s":198.1,"finished":1789259396.405007},"30d":{"builds":1,"last_error":null,"took_s":78.8,"finished":1789259476.2474403}},"in_flight_s":{},"cached_age_s":{"24h":42817,"7d":42618,"30d":42538}},"savings_rollup":{"usd_day":6.69,"per_unit":{"papaya":1.93},"per_category":{"other":4.76,"standing heater/baseline loads":1.93},"n_findings":9},"janitor":{"last_run":"2026-09-13T11:28:34.509742+00:00","last_deleted":{"hires_power":{"time":493,"cap":0}},"runs":6,"thread_alive":true,"row_counts":{"hires_power":10264348,"hires_rollup_1m":3163704,"overload_event":305563,"appliance_register":17968,"grid_outage":20,"system_event":2642,"appliance_episode":15331,"appliance_daily_kwh":1421,"cell_spread":5429}},"notifier":{"polls":712,"sent":0,"failed":1,"last_sent":null,"last_error":"suppressed: toll-free verification REJECTED 2026-08-04 (website requirement); re-registration pending — sends suppressed, pages still logged","configured":true,"thread_alive":true,"sending_enabled":false,"sending_disabled_reason":"toll-free verification REJECTED 2026-08-04 (website requirement); re-registration pending — sends suppressed, pages still logged"},"scheduled_topoff":{"polls":714,"fired":0,"skipped":0,"failed":0,"last_error":null,"thread_alive":true,"upcoming":[]},"solar_health":{"sugar_apple":{"controllers":[{"instance":278,"hotswap":true,"serial":"HQ2427XXQKR","status":"routed_away","pv_w":0.0,"yield_today_kwh":0.0,"yield_yesterday_kwh":0.0,"mppt_state":"Off","off_reason":"No input power (1)","error":"No error"},{"instance":279,"hotswap":false,"serial":"HQ2427X2DRP","status":"producing","pv_w":215.0,"yield_today_kwh":0.46,"yield_yesterday_kwh":8.31,"mppt_state":"MPPT active","off_reason":" (0)","error":"No error"}],"summary":"ok — 1 producing now, 0 idle (night/cloud), 1 shared-array routed to paired unit"},"papaya":{"controllers":[{"instance":277,"hotswap":false,"serial":"HQ2441M4WJN","status":"producing","pv_w":240.0,"yield_today_kwh":0.17,"yield_yesterday_kwh":10.63,"mppt_state":"MPPT active","off_reason":" (0)","error":"No error"},{"instance":278,"hotswap":true,"serial":"HQ2441PJUR7","status":"producing","pv_w":236.0,"yield_today_kwh":0.19,"yield_yesterday_kwh":8.6,"mppt_state":"MPPT active","off_reason":" (0)","error":"No error"}],"summary":"ok — 2 producing now, 0 idle (night/cloud)"},"guava":{"controllers":[{"instance":278,"hotswap":false,"serial":"HQ2507FRY7J","status":"producing","pv_w":2058.0,"yield_today_kwh":5.71,"yield_yesterday_kwh":8.85,"mppt_state":"MPPT active","off_reason":" (0)","error":"No error"},{"instance":279,"hotswap":true,"serial":"HQ2427UA6EN","status":"producing","pv_w":85.0,"yield_today_kwh":0.38,"yield_yesterday_kwh":3.43,"mppt_state":"MPPT active","off_reason":" (0)","error":"No error"}],"summary":"ok — 2 producing now, 0 idle (night/cloud)"},"mango":{"controllers":[{"instance":278,"hotswap":true,"serial":"HQ2524WM4N4","status":"routed_away","pv_w":0.0,"yield_today_kwh":0.0,"yield_yesterday_kwh":0.0,"mppt_state":"Off","off_reason":"No input power (1)","error":"No error"},{"instance":279,"hotswap":false,"serial":"HQ1844IF9PI","status":"producing","pv_w":159.0,"yield_today_kwh":0.43,"yield_yesterday_kwh":4.54,"mppt_state":"MPPT active","off_reason":" (0)","error":"No error"}],"summary":"ok — 1 producing now, 0 idle (night/cloud), 1 shared-array routed to paired unit"}},"bms_health":{"sugar_apple":{"status":"ok","summary":"ok — 3 of 3 modules online","modules_online":3,"modules_offline":0,"modules_expected":3,"soc":70.0,"soh":100.0,"cell_spread_mv":10,"temp_c":34.0,"charge_blocked":false,"alarms_active":[],"firmware":"v86.1"},"papaya":{"status":"ok","summary":"ok — 3 of 3 modules online","modules_online":3,"modules_offline":0,"modules_expected":3,"soc":23.0,"soh":100.0,"cell_spread_mv":20,"temp_c":34.0,"charge_blocked":false,"alarms_active":[],"firmware":"v86.1"},"guava":{"status":"site_offline","summary":"⚠ BMS COMMS LOST — battery service last heard 2d ago (SOC/limits now inverter-estimate; the WHOLE SITE is silent (every device, not just the battery) — the GX/Cerbo is unreachable, so this is a comms/power problem at the site, NOT a battery or CAN fault. Check the GX's network link and site power before touching the battery)","last_seen_ts":1789124241,"last_seen_age_s":176404,"site_offline":true,"site_last_seen_age_s":11177},"mango":{"status":"ok","summary":"ok — 3 of 3 modules online","modules_online":3,"modules_offline":0,"modules_expected":3,"soc":86.0,"soh":100.0,"cell_spread_mv":0,"temp_c":31.0,"charge_blocked":false,"alarms_active":[],"firmware":"v86.1"}},"overload_health":{"sugar_apple":{"status":"ok","summary":"no overloads in 14d","events_by_leg":{"L1":0,"L2":0},"window_days":14},"papaya":{"status":"ok","summary":"no overloads in 14d","events_by_leg":{"L1":0,"L2":0},"window_days":14},"guava":{"status":"ok","summary":"no overloads in 14d","events_by_leg":{"L1":0,"L2":0},"window_days":14},"mango":{"status":"ok","summary":"no overloads in 14d","events_by_leg":{"L1":0,"L2":0},"window_days":14}},"forecast_archive":{"thread_alive":true,"last_capture_date":"2026-09-12","capture_hour_ast":14,"vrm_token_set":true,"db_available":true,"rows_total":39802,"rows_by_source":{"open_meteo":17664,"vrm":22138},"run_date_range":["2026-06-23","2026-09-12"]},"grid_energy_24h":{"sugar_apple":{"kwh_24h":1.6,"cost_24h_usd":0.7,"self_sufficiency_pct":79},"papaya":{"kwh_24h":8.56,"cost_24h_usd":3.72,"self_sufficiency_pct":64},"guava":{"kwh_24h":0.0,"cost_24h_usd":0.0,"self_sufficiency_pct":null},"mango":{"kwh_24h":0.95,"cost_24h_usd":0.41,"self_sufficiency_pct":74}},"diag_timings_s":{"overload_capture":0.07,"episode_archive":0.06,"finding_promoter":0.26,"hires_logger":0.26,"janitor":0.35,"scheduled_topoff":0.3}}