This commit is contained in:
Mateusz Gruszczyński
2026-08-28 09:44:39 +02:00
parent 016aac0f8d
commit d159795267
16 changed files with 782 additions and 48 deletions
+42
View File
@@ -402,6 +402,48 @@
</form>
</dialog>
<dialog id="temporaryThermostatDialog">
<form method="dialog" id="temporaryThermostatForm" class="dialog-form temporary-thermostat-form">
<input type="hidden" name="zone_id">
<div class="dialog-head"><div><span class="eyebrow" data-i18n="zones.quickThermostat">Szybki termostat</span><h2 data-i18n="zones.temporaryTitle">Włącz czasowo</h2></div><button type="button" data-close>×</button></div>
<div id="temporaryThermostatActive" class="temporary-active-summary" hidden>
<div><small data-i18n="zones.temporaryActive">Aktywny tryb czasowy</small><strong id="temporaryThermostatActiveCountdown"></strong><span id="temporaryThermostatActiveDetail"></span></div>
<button type="button" class="danger" id="temporaryThermostatStop" data-i18n="zones.temporaryStop">Zakończ teraz</button>
</div>
<label><span data-i18n="zones.temporaryTarget">Temperatura szybkiego termostatu</span><input type="number" name="target_temperature" min="8" max="30" step="0.5" required></label>
<label><span data-i18n="zones.temporaryFinishRule">Kiedy wrócić do automatyki</span><select name="finish_kind" id="temporaryFinishKind">
<option value="duration" data-i18n="zones.temporaryDuration">Po określonym czasie</option>
<option value="until" data-i18n="zones.temporaryUntil">O konkretnej dacie i godzinie</option>
<option value="temperature_reached" data-i18n="zones.temporaryReached">Po osiągnięciu warunku temperatury</option>
<option value="temperature_stable" data-i18n="zones.temporaryStable">Po utrzymaniu warunku temperatury</option>
<option value="schedule_boundary" data-i18n="zones.temporaryScheduleBoundary">Przy następnym przejściu harmonogramu</option>
</select></label>
<div id="temporaryDurationFields" class="temporary-rule-fields">
<label><span data-i18n="zones.temporaryDurationMinutes">Czas działania (min)</span><input type="number" name="duration_minutes" min="1" max="14400" value="60"></label>
<div class="temporary-presets"><button type="button" data-temporary-duration="30">30 min</button><button type="button" data-temporary-duration="60">1 h</button><button type="button" data-temporary-duration="120">2 h</button><button type="button" data-temporary-duration="240">4 h</button></div>
</div>
<div id="temporaryUntilFields" class="temporary-rule-fields" hidden>
<label><span data-i18n="zones.temporaryUntilDate">Wyłącz o</span><input type="datetime-local" name="until"></label>
</div>
<div id="temporaryTemperatureFields" class="temporary-rule-fields" hidden>
<div class="two"><label><span data-i18n="zones.temporaryCondition">Warunek</span><select name="temperature_operator">
<option value="within" data-i18n="zones.temporaryWithin">w zakresie celu ± tolerancja</option>
<option value="at_or_below" data-i18n="zones.temporaryAtOrBelow">temperatura ≤ cel</option>
<option value="at_or_above" data-i18n="zones.temporaryAtOrAbove">temperatura ≥ cel</option>
</select></label><label><span data-i18n="zones.temporaryTolerance">Tolerancja °C</span><input type="number" name="tolerance_c" min="0.1" max="3" step="0.1" value="0.3"></label></div>
<label id="temporaryHoldField"><span data-i18n="zones.temporaryHoldMinutes">Warunek musi trwać (min)</span><input type="number" name="hold_minutes" min="1" max="1440" value="60"></label>
<label><span data-i18n="zones.temporarySafetyLimit">Limit bezpieczeństwa (min, opcjonalnie)</span><input type="number" name="max_duration_minutes" min="1" max="14400" value="240"></label>
<p class="field-note" data-i18n="zones.temporaryStableHint">Jeśli temperatura wyjdzie poza warunek, licznik utrzymania zeruje się i zaczyna od nowa po ponownym wejściu w zakres.</p>
</div>
<div id="temporaryScheduleFields" class="temporary-rule-fields" hidden><p class="field-note" data-i18n="zones.temporaryScheduleHint">Szybki termostat zakończy się przy najbliższej zmianie aktywnego wpisu harmonogramu tej strefy.</p></div>
<div class="form-actions"><button type="button" class="secondary" data-close data-i18n="actions.cancel">Anuluj</button><button class="primary" type="submit" id="temporaryThermostatSubmit" data-i18n="zones.temporaryStart">Włącz czasowo</button></div>
</form>
</dialog>
<dialog id="groupDialog">
<form method="dialog" id="groupForm" class="dialog-form">
<input type="hidden" name="id">