This commit is contained in:
Mateusz Gruszczyński committed 2026-10-20 22:52:13 +02:00
1 parent f376f0a7b6
commit 8059e16d12
36 files changed
+1140 -193

No files matched your search

+9 -5
View File
@@ -471,7 +471,10 @@ function zoneRuntimeStatusLabel(zone, effectiveMode, device = null) {
if (zone.device_manual_override === true) return tr('zones.manualDeviceControl');
if (!zone.enabled) return tr('common.disabled');
if (zone.local_thermostat_power === false) return tr('zones.localThermostatOff');
if ((effectiveMode || 'off') === 'off') return tr('zones.waiting');
if ((effectiveMode || 'off') === 'off') {
if (zone.control_source === 'automation.flow' && zone.simple_heat && zone.control_owner === 'automation') return tr(device?.power ? 'zones.flowDayPendingOff' : 'zones.flowDayOff');
return tr('zones.waiting');
}
if (device?.enabled === false) return tr('zones.waitingDeviceDisabled');
if (device && (!device.online || Number(device.communication_failures || 0) > 0)) return tr('zones.waitingOffline');
if (zone.current_temperature == null) return tr('zones.noMeasurement');
@@ -480,7 +483,7 @@ function zoneRuntimeStatusLabel(zone, effectiveMode, device = null) {
if (zone.demand && device && !device.power) return tr('zones.waitingStart');
if (zone.demand && device?.power && ['heat', 'cool'].includes(effectiveMode) && device.mode !== effectiveMode) return tr('zones.waitingMode');
if (zone.control_owner === 'automation' && zone.control_source === 'automation.flow') {
if (zone.demand && zone.heat_coasting && device?.power) return tr('zones.flowCoasting');
if (zone.heat_coasting && device?.power) return tr('zones.flowCoasting');
return zone.demand ? tr('zones.flowHeating') : tr('zones.flowStandby');
}
return zone.demand ? tr('zones.runningDemand') : tr('zones.satisfied');
@@ -501,7 +504,8 @@ function zoneCard(zone, detailed = true) {
const displayPreset = idleWithoutTarget ? 'auto' : (zone.manual_preset || zone.active_preset || 'comfort');
const globalModeAvailable = ['heat', 'cool'].includes(app.settings?.house_mode);
const globalModeDisabled = globalModeAvailable ? '' : ` disabled aria-disabled="true" title="${esc(tr('zones.globalModeUnavailable'))}"`;
const hasManualOverride = zone.manual_preset != null || zone.manual_setpoint != null;
const flowOwned = zone.control_owner === 'automation' && zone.control_source === 'automation.flow';
const hasManualOverride = !flowOwned && (zone.manual_preset != null || zone.manual_setpoint != null);
const deviceManualOverride = zone.device_manual_override === true;
const controlGroup = groupControlForZone(zone);
const deviceUnavailable = !!device && (device.enabled === false || !device.online || Number(device.communication_failures || 0) > 0);
@@ -527,9 +531,9 @@ function zoneCard(zone, detailed = true) {
? tr('zones.temporaryOverride', { time: temporaryStatus?.countdown || '—' })
: localThermostatOverride
? tr(localThermostatPower ? 'zones.localThermostatOn' : 'zones.localThermostatOff')
: (zone.manual_override_until
: (flowOwned ? tr('zones.ownerFlow') : (zone.manual_override_until
? `${tr('zones.overrideUntil')} ${new Date(zone.manual_override_until).toLocaleTimeString(locale(), { hour: '2-digit', minute: '2-digit' })}`
: (hasManualOverride ? tr('zones.manualNoBoundary') : tr('zones.scheduleControl')));
: (hasManualOverride ? tr('zones.manualNoBoundary') : tr('zones.scheduleControl'))));
const manualTakeover = deviceManualOverride
? `<div class="manual-override-panel"><div><strong>${esc(tr('zones.manualDeviceControl'))}</strong><p>${esc(tr('zones.manualDeviceDescription'))}</p></div><button type="button" data-action="zone-resume-automation" data-resume="device" data-id="${esc(zone.id)}">${esc(tr('zones.resumeAutomation'))}</button></div>`
: localThermostatOverride && !temporarySession