$now, 'availability' => 'online', 'state' => [ '_sample_epoch' => $now - 3, 'meta_system_dumpsys_ok' => 'true', 'meta_hscan_dumpsys_ok' => 'false', 'system_root_ign' => 'true', 'system_root_speed' => '27', 'system_root_gear' => '5', // These persisted/default fields can disagree with the live root values // and must never drive the dashboard. 'system_individualdrivemode_vehicle_speed' => '0', 'system_individualdrivemode_gear_status' => 'P(0x0)', 'system_root_mbatterysoc' => '93', 'hev_micom_hevstatus_mdisplaysoc' => '255', 'hev_micom_hevstatus_odometer' => '2596537', 'bcm_micom_bcmstatus_mdrvopenedstate' => '0', 'datc_micom_datcstatus_mambienttempc' => '25.0', 'mode_root_current_mode_real' => 'BLUETOOTH STREAMING (0x36)', ], ], ['stale_after' => 20]); check($summary['available'] === true, 'snapshot is available'); check($summary['online'] === true, 'availability topic is respected'); check($summary['stale'] === false, 'fresh sample is not stale'); check($summary['metric_count'] === 13, 'metric count excludes sample epoch'); check($summary['services'] === ['available' => 1, 'total' => 2], 'service health is counted'); check($summary['metrics']['speed']['value'] === '27', 'speed mapping'); check($summary['metrics']['gear']['value'] === '5', 'live root gear mapping'); check($summary['metrics']['outside_temperature']['value'] === '25.0', 'climate mapping'); check($summary['metrics']['driver_door']['supported'] === true, 'zero is supported'); check($summary['metrics']['distance_to_empty']['supported'] === false, 'missing value is unsupported'); check(!array_key_exists('state', $summary), 'raw snapshot is not exposed'); $stale = NiroTelemetrySnapshot::summarize([ 'received_at' => $now - 90, 'availability' => 'offline', 'state' => ['_sample_epoch' => $now - 90], ], ['stale_after' => 20]); check($stale['online'] === false, 'offline state is exposed'); check($stale['stale'] === true, 'old sample is stale'); echo "PASS\n";