mirror of
https://github.com/Laxilef/OTGateway.git
synced 2025-12-11 02:34:29 +05:00
feat: fault state gpio setting replaced with cascade control
This commit is contained in:
@@ -94,6 +94,8 @@
|
||||
"outdoorSensorHumidity": "Outdoor sensor humidity",
|
||||
"outdoorSensorBattery": "Outdoor sensor battery",
|
||||
"indoorSensorConnected": "Indoor sensor connected",
|
||||
"cascadeControlInput": "Cascade control (input)",
|
||||
"cascadeControlOutput": "Cascade control (output)",
|
||||
"indoorSensorRssi": "Indoor sensor RSSI",
|
||||
"indoorSensorHumidity": "Indoor sensor humidity",
|
||||
"indoorSensorBattery": "Indoor sensor battery",
|
||||
@@ -163,16 +165,14 @@
|
||||
"heating": "Heating settings",
|
||||
"dhw": "DHW settings",
|
||||
"emergency": "Emergency mode settings",
|
||||
"emergency.events": "Events",
|
||||
"emergency.regulators": "Using regulators",
|
||||
"equitherm": "Equitherm settings",
|
||||
"pid": "PID settings",
|
||||
"ot": "OpenTherm settings",
|
||||
"ot.options": "Options",
|
||||
"mqtt": "MQTT settings",
|
||||
"outdorSensor": "Outdoor sensor settings",
|
||||
"indoorSensor": "Indoor sensor settings",
|
||||
"extPump": "External pump settings"
|
||||
"extPump": "External pump settings",
|
||||
"cascadeControl": "Cascade control settings"
|
||||
},
|
||||
|
||||
"enable": "Enable",
|
||||
@@ -226,6 +226,7 @@
|
||||
"treshold": "Treshold time <small>(sec)</small>",
|
||||
|
||||
"events": {
|
||||
"desc": "Events",
|
||||
"network": "On network fault",
|
||||
"mqtt": "On MQTT fault",
|
||||
"indoorSensorDisconnect": "On loss connection with indoor sensor",
|
||||
@@ -233,6 +234,7 @@
|
||||
},
|
||||
|
||||
"regulators": {
|
||||
"desc": "Using regulators",
|
||||
"equitherm": "Equitherm <small>(requires at least an external (DS18B20) or boiler <u>outdoor</u> sensor)</small>",
|
||||
"pid": "PID <small>(requires at least an external (DS18B20) <u>indoor</u> sensor)</small>"
|
||||
}
|
||||
@@ -290,6 +292,7 @@
|
||||
},
|
||||
|
||||
"options": {
|
||||
"desc": "Options",
|
||||
"dhwPresent": "DHW present",
|
||||
"summerWinterMode": "Summer/winter mode",
|
||||
"heatingCh2Enabled": "Heating CH2 always enabled",
|
||||
@@ -301,12 +304,6 @@
|
||||
"immergasFix": "Fix for Immergas boilers"
|
||||
},
|
||||
|
||||
"faultState": {
|
||||
"gpio": "Fault state GPIO",
|
||||
"note": "Can be useful to switch on another boiler <u>via relay</u>. Blank - not use.",
|
||||
"invert": "Invert fault state"
|
||||
},
|
||||
|
||||
"nativeHeating": {
|
||||
"title": "Native heating control (boiler)",
|
||||
"note": "Works <u>ONLY</u> if the boiler requires the desired room temperature and regulates the temperature of the coolant itself. Not compatible with PID and Equitherm regulators and hysteresis in firmware."
|
||||
@@ -342,6 +339,29 @@
|
||||
"postCirculationTime": "Post circulation time <small>(min)</small>",
|
||||
"antiStuckInterval": "Anti stuck interval <small>(days)</small>",
|
||||
"antiStuckTime": "Anti stuck time <small>(min)</small>"
|
||||
},
|
||||
|
||||
"cascadeControl": {
|
||||
"input": {
|
||||
"desc": "Can be used to turn on the heating only if another boiler is faulty. The other boiler controller must change the state of the GPIO input in the event of a fault.",
|
||||
"enable": "Enable input",
|
||||
"gpio": "GPIO",
|
||||
"invertState": "Invert GPIO state",
|
||||
"thresholdTime": "State change threshold time <small>(sec)</small>"
|
||||
},
|
||||
"output": {
|
||||
"desc": "Can be used to switch on another boiler <u>via relay</u>.",
|
||||
"enable": "Enable output",
|
||||
"gpio": "GPIO",
|
||||
"invertState": "Invert GPIO state",
|
||||
"thresholdTime": "State change threshold time <small>(sec)</small>",
|
||||
"events": {
|
||||
"title": "Events",
|
||||
"onFault": "If the fault state is active",
|
||||
"onLossConnection": "If the connection via Opentherm is lost",
|
||||
"onEnabledHeating": "If heating is enabled"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -94,6 +94,8 @@
|
||||
"outdoorSensorHumidity": "Влажность с наруж. датчика темп.",
|
||||
"outdoorSensorBattery": "Заряд наруж. датчика темп.",
|
||||
"indoorSensorConnected": "Датчик внутр. темп.",
|
||||
"cascadeControlInput": "Каскадное управление (вход)",
|
||||
"cascadeControlOutput": "Каскадное управление (выход)",
|
||||
"indoorSensorRssi": "RSSI датчика внутр. темп.",
|
||||
"indoorSensorHumidity": "Влажность с внутр. датчика темп.",
|
||||
"indoorSensorBattery": "Заряд внутр. датчика темп.",
|
||||
@@ -163,16 +165,14 @@
|
||||
"heating": "Настройки отопления",
|
||||
"dhw": "Настройки ГВС",
|
||||
"emergency": "Настройки аварийного режима",
|
||||
"emergency.events": "События",
|
||||
"emergency.regulators": "Используемые регуляторы",
|
||||
"equitherm": "Настройки ПЗА",
|
||||
"pid": "Настройки ПИД",
|
||||
"ot": "Настройки OpenTherm",
|
||||
"ot.options": "Опции",
|
||||
"mqtt": "Настройки MQTT",
|
||||
"outdorSensor": "Настройки наружного датчика температуры",
|
||||
"indoorSensor": "Настройки внутреннего датчика температуры",
|
||||
"extPump": "Настройки дополнительного насоса"
|
||||
"extPump": "Настройки дополнительного насоса",
|
||||
"cascadeControl": "Настройки каскадного управления"
|
||||
},
|
||||
|
||||
"enable": "Вкл",
|
||||
@@ -226,6 +226,7 @@
|
||||
"treshold": "Пороговое время включения <small>(сек)</small>",
|
||||
|
||||
"events": {
|
||||
"desc": "События",
|
||||
"network": "При отключении сети",
|
||||
"mqtt": "При отключении MQTT",
|
||||
"indoorSensorDisconnect": "При потере связи с датчиком внутренней темп.",
|
||||
@@ -233,6 +234,7 @@
|
||||
},
|
||||
|
||||
"regulators": {
|
||||
"desc": "Используемые регуляторы",
|
||||
"equitherm": "ПЗА <small>(требуется внешний (DS18B20) или подключенный к котлу датчик <u>наружной</u> температуры)</small>",
|
||||
"pid": "ПИД <small>(требуется внешний (DS18B20) датчик <u>внутренней</u> температуры)</small>"
|
||||
}
|
||||
@@ -290,6 +292,7 @@
|
||||
},
|
||||
|
||||
"options": {
|
||||
"desc": "Опции",
|
||||
"dhwPresent": "Контур ГВС",
|
||||
"summerWinterMode": "Летний/зимний режим",
|
||||
"heatingCh2Enabled": "Канал 2 отопления всегда вкл.",
|
||||
@@ -301,12 +304,6 @@
|
||||
"immergasFix": "Фикс для котлов Immergas"
|
||||
},
|
||||
|
||||
"faultState": {
|
||||
"gpio": "Fault state GPIO",
|
||||
"note": "Can be useful to switch on another boiler <u>via relay</u>. Blank - not use.",
|
||||
"invert": "Invert fault state"
|
||||
},
|
||||
|
||||
"nativeHeating": {
|
||||
"title": "Передать управление отоплением котлу",
|
||||
"note": "Работает <u>ТОЛЬКО</u> если котел требует и принимает целевую температуру в помещении и сам регулирует температуру теплоносителя на основе встроенного режима кривых. Несовместимо с ПИД, ПЗА и гистерезисом."
|
||||
@@ -342,6 +339,29 @@
|
||||
"postCirculationTime": "Время постциркуляции <small>(в минутах)</small>",
|
||||
"antiStuckInterval": "Интервал защиты от блокировки <small>(в днях)</small>",
|
||||
"antiStuckTime": "Время работы насоса <small>(в минутах)</small>"
|
||||
},
|
||||
|
||||
"cascadeControl": {
|
||||
"input": {
|
||||
"desc": "Может использоваться для включения отопления только при неисправности другого котла. Контроллер другого котла должен изменить состояние входа GPIO в случае неисправности.",
|
||||
"enable": "Включить вход",
|
||||
"gpio": "GPIO",
|
||||
"invertState": "Инвертировать состояние GPIO",
|
||||
"thresholdTime": "Пороговое время изменения состояния <small>(сек)</small>"
|
||||
},
|
||||
"output": {
|
||||
"desc": "Может использоваться для включения другого котла <u>через реле</u>.",
|
||||
"enable": "Включить выход",
|
||||
"gpio": "GPIO",
|
||||
"invertState": "Инвертировать состояние GPIO",
|
||||
"thresholdTime": "Пороговое время изменения состояния <small>(сек)</small>",
|
||||
"events": {
|
||||
"title": "События",
|
||||
"onFault": "Если состояние fault (ошибки) активно",
|
||||
"onLossConnection": "Если соединение по OpenTherm потеряно",
|
||||
"onEnabledHeating": "Если отопление включено"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -134,6 +134,14 @@
|
||||
<th scope="row" data-i18n>dashboard.state.indoorSensorConnected</th>
|
||||
<td><input type="radio" id="indoor-sensor-connected" aria-invalid="false" checked disabled /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row" data-i18n>dashboard.state.cascadeControlInput</th>
|
||||
<td><input type="radio" id="cc-input" aria-invalid="false" checked disabled /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row" data-i18n>dashboard.state.cascadeControlOutput</th>
|
||||
<td><input type="radio" id="cc-output" aria-invalid="false" checked disabled /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row" data-i18n>dashboard.state.indoorSensorRssi</th>
|
||||
<td><b id="indoor-sensor-rssi"></b> <span data-i18n>dbm</span></td>
|
||||
@@ -427,6 +435,8 @@
|
||||
setState('#ot-external-pump', result.states.externalPump);
|
||||
setState('#outdoor-sensor-connected', result.sensors.outdoor.connected);
|
||||
setState('#indoor-sensor-connected', result.sensors.indoor.connected);
|
||||
setState('#cc-input', result.cascadeControl.input);
|
||||
setState('#cc-output', result.cascadeControl.output);
|
||||
|
||||
setValue('#outdoor-sensor-rssi', result.sensors.outdoor.rssi);
|
||||
setValue('#outdoor-sensor-humidity', result.sensors.outdoor.humidity);
|
||||
|
||||
@@ -230,7 +230,7 @@
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
<legend data-i18n>settings.section.emergency.events</legend>
|
||||
<legend data-i18n>settings.emergency.events.title</legend>
|
||||
|
||||
<label for="emergency-on-network-fault">
|
||||
<input type="checkbox" id="emergency-on-network-fault" name="emergency[onNetworkFault]" value="true">
|
||||
@@ -254,7 +254,7 @@
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend data-i18n>settings.section.emergency.regulators</legend>
|
||||
<legend data-i18n>settings.emergency.regulators.title</legend>
|
||||
|
||||
<label for="emergency-use-equitherm">
|
||||
<input type="checkbox" id="emergency-use-equitherm" name="emergency[useEquitherm]" value="true">
|
||||
@@ -429,7 +429,8 @@
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
<legend data-i18n>settings.section.ot.options</legend>
|
||||
<legend data-i18n>settings.ot.options.title</legend>
|
||||
|
||||
<label for="opentherm-dhw-present">
|
||||
<input type="checkbox" id="opentherm-dhw-present" name="opentherm[dhwPresent]" value="true">
|
||||
<span data-i18n>settings.ot.options.dhwPresent</span>
|
||||
@@ -503,9 +504,7 @@
|
||||
<hr />
|
||||
|
||||
<fieldset>
|
||||
<legend>
|
||||
<span data-i18n>settings.ot.fnv.title</span>
|
||||
</legend>
|
||||
<legend data-i18n>settings.ot.fnv.title</legend>
|
||||
|
||||
<label for="opentherm-fnv-enable">
|
||||
<input type="checkbox" id="opentherm-fnv-enable" name="opentherm[filterNumValues][enable]" value="true">
|
||||
@@ -520,20 +519,6 @@
|
||||
<small data-i18n>settings.ot.fnv.factor.note</small>
|
||||
</label>
|
||||
</fieldset>
|
||||
|
||||
<hr />
|
||||
<fieldset>
|
||||
<label for="opentherm-fault-state-gpio">
|
||||
<span data-i18n>settings.ot.faultState.gpio</span>
|
||||
<input type="number" inputmode="numeric" id="opentherm-fault-state-gpio" name="opentherm[faultStateGpio]" min="0" max="254" step="1">
|
||||
<small data-i18n>settings.ot.faultState.note</small>
|
||||
</label>
|
||||
|
||||
<label for="opentherm-invert-fault-state">
|
||||
<input type="checkbox" id="opentherm-invert-fault-state" name="opentherm[invertFaultState]" value="true">
|
||||
<span data-i18n>settings.ot.faultState.invert</span>
|
||||
</label>
|
||||
</fieldset>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
@@ -753,6 +738,91 @@
|
||||
</form>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
<hr />
|
||||
|
||||
<details>
|
||||
<summary><b data-i18n>settings.section.cascadeControl</b></summary>
|
||||
<div>
|
||||
<div id="cc-settings-busy" aria-busy="true"></div>
|
||||
<form action="/api/settings" id="cc-settings" class="hidden">
|
||||
<fieldset>
|
||||
<label for="cc-input-enable">
|
||||
<input type="checkbox" id="cc-input-enable" name="cascadeControl[input][enable]" value="true">
|
||||
<span data-i18n>settings.cascadeControl.input.enable</span>
|
||||
<br>
|
||||
<small data-i18n>settings.cascadeControl.input.desc</small>
|
||||
</label>
|
||||
|
||||
<label for="cc-input-invert-state">
|
||||
<input type="checkbox" id="cc-input-invert-state" name="cascadeControl[input][invertState]" value="true">
|
||||
<span data-i18n>settings.cascadeControl.input.invertState</span>
|
||||
</label>
|
||||
</fieldset>
|
||||
|
||||
<div class="grid">
|
||||
<label for="cc-input-gpio">
|
||||
<span data-i18n>settings.cascadeControl.input.gpio</span>
|
||||
<input type="number" inputmode="numeric" id="cc-input-gpio" name="cascadeControl[input][gpio]" min="0" max="254" step="1">
|
||||
</label>
|
||||
|
||||
<label for="cc-input-tt">
|
||||
<span data-i18n>settings.cascadeControl.input.thresholdTime</span>
|
||||
<input type="number" inputmode="numeric" id="cc-input-tt" name="cascadeControl[input][thresholdTime]" min="5" max="600" step="1" required>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
|
||||
<fieldset>
|
||||
<label for="cc-output-enable">
|
||||
<input type="checkbox" id="cc-output-enable" name="cascadeControl[output][enable]" value="true">
|
||||
<span data-i18n>settings.cascadeControl.output.enable</span>
|
||||
<br>
|
||||
<small data-i18n>settings.cascadeControl.output.desc</small>
|
||||
</label>
|
||||
|
||||
<label for="cc-output-invert-state">
|
||||
<input type="checkbox" id="cc-output-invert-state" name="cascadeControl[output][invertState]" value="true">
|
||||
<span data-i18n>settings.cascadeControl.output.invertState</span>
|
||||
</label>
|
||||
</fieldset>
|
||||
|
||||
<div class="grid">
|
||||
<label for="cc-output-gpio">
|
||||
<span data-i18n>settings.cascadeControl.output.gpio</span>
|
||||
<input type="number" outputmode="numeric" id="cc-output-gpio" name="cascadeControl[output][gpio]" min="0" max="254" step="1">
|
||||
</label>
|
||||
|
||||
<label for="cc-output-tt">
|
||||
<span data-i18n>settings.cascadeControl.output.thresholdTime</span>
|
||||
<input type="number" outputmode="numeric" id="cc-output-tt" name="cascadeControl[output][thresholdTime]" min="5" max="600" step="1" required>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
<legend data-i18n>settings.cascadeControl.output.events.title</legend>
|
||||
|
||||
<label for="cc-on-fault">
|
||||
<input type="checkbox" id="cc-on-fault" name="cascadeControl[output][onFault]" value="true">
|
||||
<span data-i18n>settings.cascadeControl.output.events.onFault</span>
|
||||
</label>
|
||||
|
||||
<label for="cc-on-loss-conn">
|
||||
<input type="checkbox" id="cc-on-loss-conn" name="cascadeControl[output][onLossConnection]" value="true">
|
||||
<span data-i18n>settings.cascadeControl.output.events.onLossConnection</span>
|
||||
</label>
|
||||
|
||||
<label for="cc-on-enabled-heating">
|
||||
<input type="checkbox" id="cc-on-enabled-heating" name="cascadeControl[output][onEnabledHeating]" value="true">
|
||||
<span data-i18n>settings.cascadeControl.output.events.onEnabledHeating</span>
|
||||
</label>
|
||||
</fieldset>
|
||||
|
||||
<button type="submit" data-i18n>button.save</button>
|
||||
</form>
|
||||
</div>
|
||||
</details>
|
||||
</article>
|
||||
</main>
|
||||
|
||||
@@ -796,8 +866,6 @@
|
||||
setInputValue('#opentherm-in-gpio', data.opentherm.inGpio < 255 ? data.opentherm.inGpio : '');
|
||||
setInputValue('#opentherm-out-gpio', data.opentherm.outGpio < 255 ? data.opentherm.outGpio : '');
|
||||
setInputValue('#opentherm-rx-led-gpio', data.opentherm.rxLedGpio < 255 ? data.opentherm.rxLedGpio : '');
|
||||
setInputValue('#opentherm-fault-state-gpio', data.opentherm.faultStateGpio < 255 ? data.opentherm.faultStateGpio : '');
|
||||
setCheckboxValue('#opentherm-invert-fault-state', data.opentherm.invertFaultState);
|
||||
setInputValue('#opentherm-member-id-code', data.opentherm.memberIdCode);
|
||||
setInputValue('#opentherm-max-modulation', data.opentherm.maxModulation);
|
||||
setInputValue('#opentherm-pressure-factor', data.opentherm.pressureFactor);
|
||||
@@ -851,6 +919,21 @@
|
||||
setInputValue('#extpump-as-time', data.externalPump.antiStuckTime);
|
||||
setBusy('#extpump-settings-busy', '#extpump-settings', false);
|
||||
|
||||
// Cascade control
|
||||
setCheckboxValue('#cc-input-enable', data.cascadeControl.input.enable);
|
||||
setInputValue('#cc-input-gpio', data.cascadeControl.input.gpio < 255 ? data.cascadeControl.input.gpio : '');
|
||||
setCheckboxValue('#cc-input-invert-state', data.cascadeControl.input.invertState);
|
||||
setInputValue('#cc-input-tt', data.cascadeControl.input.thresholdTime);
|
||||
|
||||
setCheckboxValue('#cc-output-enable', data.cascadeControl.output.enable);
|
||||
setInputValue('#cc-output-gpio', data.cascadeControl.output.gpio < 255 ? data.cascadeControl.output.gpio : '');
|
||||
setCheckboxValue('#cc-output-invert-state', data.cascadeControl.output.invertState);
|
||||
setInputValue('#cc-output-tt', data.cascadeControl.output.thresholdTime);
|
||||
setCheckboxValue('#cc-on-fault', data.cascadeControl.output.onFault);
|
||||
setCheckboxValue('#cc-on-loss-conn', data.cascadeControl.output.onLossConnection);
|
||||
setCheckboxValue('#cc-on-enabled-heating', data.cascadeControl.output.onEnabledHeating);
|
||||
setBusy('#cc-settings-busy', '#cc-settings', false);
|
||||
|
||||
// Heating
|
||||
setInputValue('#heating-min-temp', data.heating.minTemp, {
|
||||
"min": data.system.unitSystem == 0 ? 0 : 32,
|
||||
@@ -934,6 +1017,7 @@
|
||||
setupForm('#outdoor-sensor-settings', fillData);
|
||||
setupForm('#indoor-sensor-settings', fillData, ['sensors.indoor.bleAddress']);
|
||||
setupForm('#extpump-settings', fillData);
|
||||
setupForm('#cc-settings', fillData);
|
||||
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
Reference in New Issue
Block a user