外观
CORE-20 Battery 模式门禁、20 秒采样与 Thermal 来源审计方案
调研结论
当前 pmd3.device-condition.raw 已通过独立 Diagnostics Relay 读取完整 IOPMPowerSource,不会争用 DTX。iOS 17/18 当前 USB 样本都明确返回 ExternalConnected=true;同时 InstantAmperage、PowerTelemetryData.BatteryPower 可能为 0 或负值,说明 USB 供电环境下把 abs(InstantAmperage)×Voltage/1000 直接发布为应用耗电会混合外部供电、整机负载与电池充放电状态。
固定的 pymobiledevice3 11.3.1 上游 battery monitor 保留 InstantAmperage、Voltage、Temperature、IsCharging 和 CurrentCapacity 原始值,不负责 Perfowl 产品语义;固定的 py-ios-device 2.4.26 虽提供绝对值功率示例,也没有解决 USB 外部供电门禁、目标 App 归因或 PerfDog 同窗校准。因此本批不直接点亮 Battery,也不把 PowerTelemetryData 未知单位字段提升为新指标。
Thermal 方面,两库只提供通知名称候选或设备条件诱导能力;Notification Proxy 的观察消息没有已证明的 0–3 当前状态值,iOS 17/18 IOPMPowerSource 也没有返回稳定 ThermalStatus。本批只形成来源审计,不以温度或 Energy thermal cost 猜设备热状态。
公式先行
| 指标 | 原始字段 | 转换与门禁 | scope / unit | 窗口 | 缺失、重置与取整 | 算法版本 |
|---|---|---|---|---|---|---|
| Battery Current | InstantAmperage、ExternalConnected、IsCharging | 仅当 ExternalConnected == false、IsCharging == false 且电流有限且 <=0 时取 abs(InstantAmperage) | device / milliampere candidate | 首次立即采样,之后固定 deadline 20 s | 外部供电=external-power-connected;充电=charging;状态缺失=power-state-missing;正电流=source-sign-unverified;不取整 | battery-discharge-current.candidate.v2 |
| Battery Voltage | Voltage + 同一电源状态 | 仅在上述 battery-only 门禁内接受有限正值 | device / millivolt candidate | 同一 20 s 快照 | 非正或缺失=missing;不跨快照补值;不取整 | battery-voltage.candidate.v2 |
| Battery Power | 同一快照的有效 Current、Voltage | abs(InstantAmperage) × Voltage / 1000 | device / milliwatt candidate | 同一 20 s 快照 | 任一无效则 value=null,并继承门禁原因;不插值、不累计、不取整 | battery-discharge-power.candidate.v2 |
| Battery Temperature | Temperature | 原值在 0–8000 时 /100 | device / source-native + degree-celsius | 随同 20 s Diagnostics 快照 | 越界/缺失为 missing;真实 0 保留;不插值;计算层不取整 | centi-celsius-to-celsius.candidate.v1 |
| ThermalStatus | 稳定源 ThermalStatus | 只接受 0/1/2/3 | device / enum-raw | 随来源事件 | 源缺失为 missing;通知名称、温度、Energy cost 不替代;不聚合 | thermal-status-enum.candidate.v2 |
固定 deadline 语义为:第一次读取不延迟;第 N 次目标时间为 start + N×20s,读取耗时不会累积漂移;如果一次读取超过一个窗口,跳过已经错过的 deadline,不进行追赶式连发。
最小开发范围
- Device Condition 默认采样周期从 1 s 调整为 20 s,并使用 monotonic deadline 调度。
- Battery Current / Voltage / Power 加入外部供电、充电状态、符号和正电压门禁;USB 下缺值不得显示 0。
- 保留所有原始
IOPMPowerSource字段,继续允许后续离线审计PowerTelemetryData,但不新增其 metricID。 - 实时 wire 承接三项 Battery 值与质量;Swift 数据模型先接通,但 Battery 选择器继续 Unsupported,直到 Wi-Fi 设备发现、断开 USB 后的 E4 与 PerfDog 同窗完成。
- ThermalStatus 保持 Partial/missing;新增来源审计测试,确认通知名称不被误当枚举值。
- 交付身份升级为 Collector Foundation
1.2-beta、Mac App1.0.0 (20)internal beta;Registry 仍为 53。
验收门禁
- E2:Python 系统/冻结 3.12 与 Swift 全量测试;覆盖 battery-only、USB external、charging、状态缺失、正电流、非正电压、真实 0、20 s deadline 与 wire 解码。
- E2:既有 raw Session 双重重放哈希一致,Registry 保持 53。
- E4:当前连接 iOS 17/18 至少一台执行超过 20 s 的最终打包 Collector;需观察至少 2 个 Device Condition raw,确认 USB external 门禁使三项电学值为 null 且温度仍是独立候选。
- 若当前只连接一台设备,状态写为 partial,不外推另一系统;若无设备,本批只交付 E2。
- Battery 产品状态在 Wi-Fi 设备发现、
ExternalConnected=false真机样本和 PerfDog 同窗前保持 Unsupported;ThermalStatus 在稳定当前值来源前保持 Partial。