배터리 잔여 시간을 실제 방전 추세로 계산
This commit is contained in:
@@ -674,6 +674,38 @@
|
||||
if (node) node.textContent = value ?? 'N/A';
|
||||
}
|
||||
|
||||
function batteryRemainingTitle(remaining) {
|
||||
if (!remaining || typeof remaining !== 'object') {
|
||||
return '';
|
||||
}
|
||||
|
||||
const sourceMap = {
|
||||
soc_multi_window: 'SOC 다중 시간창 추세',
|
||||
capacity_power_fallback: '배터리 용량과 최근 전력 평균',
|
||||
battery_soc_missing: 'SOC 없음',
|
||||
avg_watts_missing: '전력 평균 없음',
|
||||
battery_capacity_missing: '배터리 용량 설정 없음',
|
||||
};
|
||||
const lines = [sourceMap[remaining.source] || remaining.source || '-'];
|
||||
|
||||
if (remaining.drop_per_hour !== undefined && remaining.drop_per_hour !== null) {
|
||||
lines.push(`시간당 SOC 감소: ${Number(remaining.drop_per_hour).toFixed(3)}%`);
|
||||
}
|
||||
if (remaining.confidence !== undefined && remaining.confidence !== null) {
|
||||
lines.push(`추세 신뢰도: ${(Number(remaining.confidence) * 100).toFixed(0)}%`);
|
||||
}
|
||||
if (remaining.recent_watts !== undefined && remaining.recent_watts !== null) {
|
||||
lines.push(`최근 CPU 전력: ${Number(remaining.recent_watts).toFixed(3)}W`);
|
||||
} else if (remaining.avg_watts !== undefined && remaining.avg_watts !== null) {
|
||||
lines.push(`평균 CPU 전력: ${Number(remaining.avg_watts).toFixed(3)}W`);
|
||||
}
|
||||
if (Array.isArray(remaining.windows) && remaining.windows.length > 0) {
|
||||
lines.push(`반영 구간: ${remaining.windows.map(row => `${row.minutes}분`).join(', ')}`);
|
||||
}
|
||||
|
||||
return lines.join('\n');
|
||||
}
|
||||
|
||||
function renderTop(data) {
|
||||
setText(els.updated, data.generated_at || '-');
|
||||
setText(els.temp, Number(data.system?.temp_c || 0).toFixed(1) + '°C');
|
||||
@@ -867,6 +899,9 @@
|
||||
setText(els.statusBatteryVoltage, battery.voltage === null || battery.voltage === undefined ? '-' : `${Number(battery.voltage).toFixed(3)} V`);
|
||||
setText(els.statusBatterySoc, battery.percent === null || battery.percent === undefined ? '-' : `${Number(battery.percent).toFixed(2)}%`);
|
||||
setText(els.statusBatteryRemaining, battery.remaining?.display || '-');
|
||||
if (els.statusBatteryRemaining) {
|
||||
els.statusBatteryRemaining.title = batteryRemainingTitle(battery.remaining);
|
||||
}
|
||||
if (els.statusUsers) {
|
||||
const names = String(activeUsers.names || '').trim();
|
||||
els.statusUsers.innerHTML = names
|
||||
|
||||
Reference in New Issue
Block a user