This commit is contained in:
Mateusz Gruszczyński
2026-09-21 23:33:23 +02:00
parent 16001d1a55
commit 0148daf410
15 changed files with 59 additions and 55 deletions
+8 -9
View File
@@ -52,12 +52,7 @@ function renderHouseClimate() {
const planZones = app.controlPlan?.zones || [];
const unitsWorking = (app.devices || []).some(device => device.power === true);
const automationTriggered = planZones.some(zone => zone.desired_power === true || zone.demand === true);
const hasAutomaticControl = (app.schedules || []).some(item => item.enabled)
|| (app.automations || []).some(item => item.enabled)
|| (app.flows || []).some(item => item.enabled && !item.draft)
|| planZones.some(zone => zone.local_thermostat_power === true || !!zone.current_schedule_id || zone.desired_power === true);
const emergencyVisible = emergencyActive || unitsWorking || hasAutomaticControl;
const emergencyIdle = !emergencyActive && !unitsWorking && !automationTriggered && hasAutomaticControl;
const emergencyVisible = emergencyActive || unitsWorking || automationTriggered;
if (powerOn) { powerOn.classList.remove('active'); powerOn.removeAttribute('aria-pressed'); }
if (powerOff) { powerOff.classList.remove('active'); powerOff.removeAttribute('aria-pressed'); }
@@ -66,10 +61,10 @@ function renderHouseClimate() {
emergencyButton.dataset.value = emergencyActive ? 'false' : 'true';
emergencyButton.classList.toggle('resume', emergencyActive);
emergencyButton.classList.toggle('active', emergencyActive);
emergencyButton.classList.toggle('idle', emergencyIdle);
emergencyButton.classList.remove('idle');
emergencyButton.setAttribute('aria-pressed', String(emergencyActive));
emergencyButton.textContent = tr(emergencyActive ? 'house.emergencyResume' : 'house.emergencyStop');
emergencyButton.title = tr(emergencyActive ? 'house.emergencyResumeHint' : emergencyIdle ? 'house.emergencyStopIdleHint' : 'house.emergencyStopHint');
emergencyButton.title = tr(emergencyActive ? 'house.emergencyResumeHint' : 'house.emergencyStopHint');
}
node.innerHTML = `<div class="house-climate-head"><div><span class="eyebrow">${esc(tr('house.seasonMode'))}</span><h3>${esc(tr('house.smartThermostat'))}</h3><p>${esc(tr('house.setpointStrategy'))}</p></div><button type="button" class="outside-pill" data-action="open-outdoor-history" title="${esc(tr('house.outdoorHistoryOpen'))}" aria-label="${esc(tr('house.outdoorHistoryOpen'))}"><small>${esc(tr('house.outdoor'))}</small><strong>${esc(outdoor)}</strong></button></div>
<div class="house-mode-row">
@@ -150,7 +145,11 @@ function planEventMarkup(event) {
function automationTriggerLabel(item) {
if (item.trigger_kind === 'time') return tr('automations.triggerAt', { time: item.at_time || '—' });
if (item.trigger_kind === 'flow') return tr('flow.generated');
if (item.trigger_kind === 'flow') {
const automation = item.flow_id ? item : (app.automations || []).find(candidate => candidate.id === item.id);
const flow = automation?.flow_id ? (app.flows || []).find(candidate => candidate.id === automation.flow_id) : null;
return flow?.name ? `${tr('flow.generated')}: ${flow.name}` : tr('flow.generated');
}
const key = item.trigger_kind === 'temperature_above' ? 'automations.triggerAbove' : 'automations.triggerBelow';
return tr(key, { temperature: fmtTemp(item.threshold) });
}