mirror of
https://github.com/Laxilef/OTGateway.git
synced 2026-01-01 13:03:36 +05:00
Compare commits
4 Commits
c6df74f06e
...
7482eb8898
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7482eb8898 | ||
|
|
2ff84cbddf | ||
|
|
8b6e6be670 | ||
|
|
636872f72d |
@@ -6,6 +6,7 @@ const cssnano = require('cssnano');
|
|||||||
const terser = require('gulp-terser');
|
const terser = require('gulp-terser');
|
||||||
const jsonminify = require('gulp-jsonminify');
|
const jsonminify = require('gulp-jsonminify');
|
||||||
const htmlmin = require('gulp-html-minifier-terser');
|
const htmlmin = require('gulp-html-minifier-terser');
|
||||||
|
const replace = require('gulp-replace');
|
||||||
|
|
||||||
// Paths for tasks
|
// Paths for tasks
|
||||||
let paths = {
|
let paths = {
|
||||||
@@ -119,6 +120,10 @@ const staticFiles = (cb) => {
|
|||||||
|
|
||||||
const pages = () => {
|
const pages = () => {
|
||||||
return src(paths.pages.src)
|
return src(paths.pages.src)
|
||||||
|
.pipe(replace(
|
||||||
|
"{BUILD_TIME}",
|
||||||
|
Math.floor(Date.now() / 1000)
|
||||||
|
))
|
||||||
.pipe(htmlmin({
|
.pipe(htmlmin({
|
||||||
html5: true,
|
html5: true,
|
||||||
caseSensitive: true,
|
caseSensitive: true,
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"gulp-html-minifier-terser": "^7.1.0",
|
"gulp-html-minifier-terser": "^7.1.0",
|
||||||
"gulp-jsonminify": "^1.1.0",
|
"gulp-jsonminify": "^1.1.0",
|
||||||
"gulp-postcss": "^10.0.0",
|
"gulp-postcss": "^10.0.0",
|
||||||
"gulp-terser": "^2.1.0"
|
"gulp-terser": "^2.1.0",
|
||||||
|
"gulp-replace": "^1.1.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,9 +30,6 @@ lib_deps =
|
|||||||
laxilef/TinyLogger@^1.1.1
|
laxilef/TinyLogger@^1.1.1
|
||||||
build_type = ${secrets.build_type}
|
build_type = ${secrets.build_type}
|
||||||
build_flags =
|
build_flags =
|
||||||
-D PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
|
|
||||||
;-D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH
|
|
||||||
-D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK305
|
|
||||||
-mtext-section-literals
|
-mtext-section-literals
|
||||||
-D MQTT_CLIENT_STD_FUNCTION_CALLBACK=1
|
-D MQTT_CLIENT_STD_FUNCTION_CALLBACK=1
|
||||||
;-D DEBUG_ESP_CORE -D DEBUG_ESP_WIFI -D DEBUG_ESP_HTTP_SERVER -D DEBUG_ESP_PORT=Serial
|
;-D DEBUG_ESP_CORE -D DEBUG_ESP_WIFI -D DEBUG_ESP_HTTP_SERVER -D DEBUG_ESP_PORT=Serial
|
||||||
@@ -75,7 +72,11 @@ lib_ignore =
|
|||||||
extra_scripts =
|
extra_scripts =
|
||||||
post:tools/build.py
|
post:tools/build.py
|
||||||
build_type = ${env.build_type}
|
build_type = ${env.build_type}
|
||||||
build_flags = ${env.build_flags}
|
build_flags =
|
||||||
|
${env.build_flags}
|
||||||
|
-D PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
|
||||||
|
;-D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH
|
||||||
|
-D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK305
|
||||||
board_build.ldscript = eagle.flash.4m1m.ld
|
board_build.ldscript = eagle.flash.4m1m.ld
|
||||||
|
|
||||||
[esp32_defaults]
|
[esp32_defaults]
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ protected:
|
|||||||
Log.sinfoln(FPSTR(L_OT), F("Started. GPIO IN: %hhu, GPIO OUT: %hhu"), settings.opentherm.inGpio, settings.opentherm.outGpio);
|
Log.sinfoln(FPSTR(L_OT), F("Started. GPIO IN: %hhu, GPIO OUT: %hhu"), settings.opentherm.inGpio, settings.opentherm.outGpio);
|
||||||
|
|
||||||
this->instance->setAfterSendRequestCallback([this](unsigned long request, unsigned long response, OpenThermResponseStatus status, byte attempt) {
|
this->instance->setAfterSendRequestCallback([this](unsigned long request, unsigned long response, OpenThermResponseStatus status, byte attempt) {
|
||||||
Log.straceln(
|
Log.sverboseln(
|
||||||
FPSTR(L_OT),
|
FPSTR(L_OT),
|
||||||
F("ID: %4d Request: %8lx Response: %8lx Attempt: %2d Status: %s"),
|
F("ID: %4d Request: %8lx Response: %8lx Attempt: %2d Status: %s"),
|
||||||
CustomOpenTherm::getDataID(request), request, response, attempt, CustomOpenTherm::statusToString(status)
|
CustomOpenTherm::getDataID(request), request, response, attempt, CustomOpenTherm::statusToString(status)
|
||||||
@@ -158,7 +158,7 @@ protected:
|
|||||||
|| (settings.opentherm.dhwToCh2 && settings.opentherm.dhwPresent && settings.dhw.enabled);
|
|| (settings.opentherm.dhwToCh2 && settings.opentherm.dhwPresent && settings.dhw.enabled);
|
||||||
|
|
||||||
if (settings.opentherm.heatingCh1ToCh2) {
|
if (settings.opentherm.heatingCh1ToCh2) {
|
||||||
vars.master.ch2.targetTemp = vars.master.heating.targetTemp;
|
vars.master.ch2.targetTemp = vars.master.heating.setpointTemp;
|
||||||
|
|
||||||
} else if (settings.opentherm.dhwToCh2) {
|
} else if (settings.opentherm.dhwToCh2) {
|
||||||
vars.master.ch2.targetTemp = vars.master.dhw.targetTemp;
|
vars.master.ch2.targetTemp = vars.master.dhw.targetTemp;
|
||||||
@@ -474,6 +474,9 @@ protected:
|
|||||||
} else {
|
} else {
|
||||||
Log.swarningln(FPSTR(L_OT), F("Failed receive modulation level"));
|
Log.swarningln(FPSTR(L_OT), F("Failed receive modulation level"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else if (vars.slave.modulation.current > 0) {
|
||||||
|
vars.slave.modulation.current = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Modulation level sensors
|
// Modulation level sensors
|
||||||
@@ -897,14 +900,14 @@ protected:
|
|||||||
// Normal heating control
|
// Normal heating control
|
||||||
if (!settings.opentherm.nativeHeatingControl && vars.master.heating.enabled) {
|
if (!settings.opentherm.nativeHeatingControl && vars.master.heating.enabled) {
|
||||||
// Converted target heating temp
|
// Converted target heating temp
|
||||||
float convertedTemp = convertTemp(vars.master.heating.targetTemp, settings.system.unitSystem, settings.opentherm.unitSystem);
|
float convertedTemp = convertTemp(vars.master.heating.setpointTemp, settings.system.unitSystem, settings.opentherm.unitSystem);
|
||||||
|
|
||||||
if (this->needSetHeatingTemp(convertedTemp)) {
|
if (this->needSetHeatingTemp(convertedTemp)) {
|
||||||
// Set max heating temp
|
// Set max heating temp
|
||||||
if (this->setMaxHeatingTemp(convertedTemp)) {
|
if (this->setMaxHeatingTemp(convertedTemp)) {
|
||||||
Log.sinfoln(
|
Log.sinfoln(
|
||||||
FPSTR(L_OT_HEATING), F("Set max heating temp: %.2f (converted: %.2f)"),
|
FPSTR(L_OT_HEATING), F("Set max heating temp: %.2f (converted: %.2f)"),
|
||||||
vars.master.heating.targetTemp, convertedTemp
|
vars.master.heating.setpointTemp, convertedTemp
|
||||||
);
|
);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -917,7 +920,7 @@ protected:
|
|||||||
|
|
||||||
Log.sinfoln(
|
Log.sinfoln(
|
||||||
FPSTR(L_OT_HEATING), F("Set target temp: %.2f (converted: %.2f, response: %.2f)"),
|
FPSTR(L_OT_HEATING), F("Set target temp: %.2f (converted: %.2f, response: %.2f)"),
|
||||||
vars.master.heating.targetTemp, convertedTemp, vars.slave.heating.targetTemp
|
vars.master.heating.setpointTemp, convertedTemp, vars.slave.heating.targetTemp
|
||||||
);
|
);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -55,14 +55,15 @@ protected:
|
|||||||
this->turbo();
|
this->turbo();
|
||||||
this->hysteresis();
|
this->hysteresis();
|
||||||
|
|
||||||
vars.master.heating.targetTemp = constrain(
|
vars.master.heating.targetTemp = settings.heating.target;
|
||||||
this->getHeatingSetpoint(),
|
vars.master.heating.setpointTemp = constrain(
|
||||||
vars.master.heating.minTemp,
|
this->getHeatingSetpointTemp(),
|
||||||
vars.master.heating.maxTemp
|
this->getHeatingMinSetpointTemp(),
|
||||||
|
this->getHeatingMaxSetpointTemp()
|
||||||
);
|
);
|
||||||
|
|
||||||
Sensors::setValueByType(
|
Sensors::setValueByType(
|
||||||
Sensors::Type::HEATING_SETPOINT_TEMP, vars.master.heating.targetTemp,
|
Sensors::Type::HEATING_SETPOINT_TEMP, vars.master.heating.setpointTemp,
|
||||||
Sensors::ValueType::PRIMARY, true, true
|
Sensors::ValueType::PRIMARY, true, true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -104,8 +105,25 @@ protected:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline float getHeatingMinSetpointTemp() {
|
||||||
|
if (settings.opentherm.nativeHeatingControl) {
|
||||||
|
return vars.master.heating.minTemp;
|
||||||
|
|
||||||
float getHeatingSetpoint() {
|
} else {
|
||||||
|
return settings.heating.minTemp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline float getHeatingMaxSetpointTemp() {
|
||||||
|
if (settings.opentherm.nativeHeatingControl) {
|
||||||
|
return vars.master.heating.maxTemp;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return settings.heating.maxTemp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float getHeatingSetpointTemp() {
|
||||||
float newTemp = 0;
|
float newTemp = 0;
|
||||||
|
|
||||||
if (fabsf(prevHeatingTarget - settings.heating.target) > 0.0001f) {
|
if (fabsf(prevHeatingTarget - settings.heating.target) > 0.0001f) {
|
||||||
|
|||||||
@@ -255,6 +255,7 @@ struct Variables {
|
|||||||
bool blocking = false;
|
bool blocking = false;
|
||||||
bool enabled = false;
|
bool enabled = false;
|
||||||
bool indoorTempControl = false;
|
bool indoorTempControl = false;
|
||||||
|
float setpointTemp = 0.0f;
|
||||||
float targetTemp = 0.0f;
|
float targetTemp = 0.0f;
|
||||||
float currentTemp = 0.0f;
|
float currentTemp = 0.0f;
|
||||||
float returnTemp = 0.0f;
|
float returnTemp = 0.0f;
|
||||||
|
|||||||
@@ -170,6 +170,7 @@ const char S_STA[] PROGMEM = "sta";
|
|||||||
const char S_STATE[] PROGMEM = "state";
|
const char S_STATE[] PROGMEM = "state";
|
||||||
const char S_STATIC_CONFIG[] PROGMEM = "staticConfig";
|
const char S_STATIC_CONFIG[] PROGMEM = "staticConfig";
|
||||||
const char S_STATUS_LED_GPIO[] PROGMEM = "statusLedGpio";
|
const char S_STATUS_LED_GPIO[] PROGMEM = "statusLedGpio";
|
||||||
|
const char S_SETPOINT_TEMP[] PROGMEM = "setpointTemp";
|
||||||
const char S_SUBNET[] PROGMEM = "subnet";
|
const char S_SUBNET[] PROGMEM = "subnet";
|
||||||
const char S_SUMMER_WINTER_MODE[] PROGMEM = "summerWinterMode";
|
const char S_SUMMER_WINTER_MODE[] PROGMEM = "summerWinterMode";
|
||||||
const char S_SYSTEM[] PROGMEM = "system";
|
const char S_SYSTEM[] PROGMEM = "system";
|
||||||
|
|||||||
21
src/utils.h
21
src/utils.h
@@ -1351,20 +1351,24 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false
|
|||||||
|
|
||||||
// force check heating target
|
// force check heating target
|
||||||
{
|
{
|
||||||
float value = !src[FPSTR(S_HEATING)][FPSTR(S_TARGET)].isNull() ? src[FPSTR(S_HEATING)][FPSTR(S_TARGET)].as<float>() : dst.heating.target;
|
bool indoorTempControl = dst.equitherm.enabled || dst.pid.enabled || dst.opentherm.nativeHeatingControl;
|
||||||
|
float minTemp = indoorTempControl ? THERMOSTAT_INDOOR_MIN_TEMP : dst.heating.minTemp;
|
||||||
|
float maxTemp = indoorTempControl ? THERMOSTAT_INDOOR_MAX_TEMP : dst.heating.maxTemp;
|
||||||
|
|
||||||
|
float value = !src[FPSTR(S_HEATING)][FPSTR(S_TARGET)].isNull()
|
||||||
|
? src[FPSTR(S_HEATING)][FPSTR(S_TARGET)].as<float>()
|
||||||
|
: dst.heating.target;
|
||||||
bool valid = isValidTemp(
|
bool valid = isValidTemp(
|
||||||
value,
|
value,
|
||||||
dst.system.unitSystem,
|
dst.system.unitSystem,
|
||||||
vars.master.heating.minTemp,
|
minTemp,
|
||||||
vars.master.heating.maxTemp,
|
maxTemp,
|
||||||
dst.system.unitSystem
|
dst.system.unitSystem
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
value = convertTemp(
|
value = convertTemp(
|
||||||
vars.master.heating.indoorTempControl
|
indoorTempControl ? THERMOSTAT_INDOOR_DEFAULT_TEMP : DEFAULT_HEATING_TARGET_TEMP,
|
||||||
? THERMOSTAT_INDOOR_DEFAULT_TEMP
|
|
||||||
: DEFAULT_HEATING_TARGET_TEMP,
|
|
||||||
UnitSystem::METRIC,
|
UnitSystem::METRIC,
|
||||||
dst.system.unitSystem
|
dst.system.unitSystem
|
||||||
);
|
);
|
||||||
@@ -1378,7 +1382,9 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false
|
|||||||
|
|
||||||
// force check dhw target
|
// force check dhw target
|
||||||
{
|
{
|
||||||
float value = !src[FPSTR(S_DHW)][FPSTR(S_TARGET)].isNull() ? src[FPSTR(S_DHW)][FPSTR(S_TARGET)].as<float>() : dst.dhw.target;
|
float value = !src[FPSTR(S_DHW)][FPSTR(S_TARGET)].isNull()
|
||||||
|
? src[FPSTR(S_DHW)][FPSTR(S_TARGET)].as<float>()
|
||||||
|
: dst.dhw.target;
|
||||||
bool valid = isValidTemp(
|
bool valid = isValidTemp(
|
||||||
value,
|
value,
|
||||||
dst.system.unitSystem,
|
dst.system.unitSystem,
|
||||||
@@ -1735,6 +1741,7 @@ void varsToJson(const Variables& src, JsonVariant dst) {
|
|||||||
mHeating[FPSTR(S_ENABLED)] = src.master.heating.enabled;
|
mHeating[FPSTR(S_ENABLED)] = src.master.heating.enabled;
|
||||||
mHeating[FPSTR(S_BLOCKING)] = src.master.heating.blocking;
|
mHeating[FPSTR(S_BLOCKING)] = src.master.heating.blocking;
|
||||||
mHeating[FPSTR(S_INDOOR_TEMP_CONTROL)] = src.master.heating.indoorTempControl;
|
mHeating[FPSTR(S_INDOOR_TEMP_CONTROL)] = src.master.heating.indoorTempControl;
|
||||||
|
mHeating[FPSTR(S_SETPOINT_TEMP)] = roundf(src.master.heating.setpointTemp, 2);
|
||||||
mHeating[FPSTR(S_TARGET_TEMP)] = roundf(src.master.heating.targetTemp, 2);
|
mHeating[FPSTR(S_TARGET_TEMP)] = roundf(src.master.heating.targetTemp, 2);
|
||||||
mHeating[FPSTR(S_CURRENT_TEMP)] = roundf(src.master.heating.currentTemp, 2);
|
mHeating[FPSTR(S_CURRENT_TEMP)] = roundf(src.master.heating.currentTemp, 2);
|
||||||
mHeating[FPSTR(S_RETURN_TEMP)] = roundf(src.master.heating.returnTemp, 2);
|
mHeating[FPSTR(S_RETURN_TEMP)] = roundf(src.master.heating.returnTemp, 2);
|
||||||
|
|||||||
@@ -105,7 +105,8 @@
|
|||||||
"mHeatEnabled": "Heating enabled",
|
"mHeatEnabled": "Heating enabled",
|
||||||
"mHeatBlocking": "Heating blocked",
|
"mHeatBlocking": "Heating blocked",
|
||||||
"sHeatActive": "Heating active",
|
"sHeatActive": "Heating active",
|
||||||
"mHeatTargetTemp": "Heating setpoint temp",
|
"mHeatSetpointTemp": "Heating setpoint temp",
|
||||||
|
"mHeatTargetTemp": "Heating target temp",
|
||||||
"mHeatCurrTemp": "Heating current temp",
|
"mHeatCurrTemp": "Heating current temp",
|
||||||
"mHeatRetTemp": "Heating return temp",
|
"mHeatRetTemp": "Heating return temp",
|
||||||
"mHeatIndoorTemp": "Heating, indoor temp",
|
"mHeatIndoorTemp": "Heating, indoor temp",
|
||||||
@@ -113,7 +114,7 @@
|
|||||||
|
|
||||||
"mDhwEnabled": "DHW enabled",
|
"mDhwEnabled": "DHW enabled",
|
||||||
"sDhwActive": "DHW active",
|
"sDhwActive": "DHW active",
|
||||||
"mDhwTargetTemp": "DHW setpoint temp",
|
"mDhwTargetTemp": "DHW target temp",
|
||||||
"mDhwCurrTemp": "DHW current temp",
|
"mDhwCurrTemp": "DHW current temp",
|
||||||
"mDhwRetTemp": "DHW return temp"
|
"mDhwRetTemp": "DHW return temp"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,6 +105,7 @@
|
|||||||
"mHeatEnabled": "Отопление",
|
"mHeatEnabled": "Отопление",
|
||||||
"mHeatBlocking": "Блокировка отопления",
|
"mHeatBlocking": "Блокировка отопления",
|
||||||
"sHeatActive": "Активность отопления",
|
"sHeatActive": "Активность отопления",
|
||||||
|
"mHeatSetpointTemp": "Отопление, уставка",
|
||||||
"mHeatTargetTemp": "Отопление, целевая температура",
|
"mHeatTargetTemp": "Отопление, целевая температура",
|
||||||
"mHeatCurrTemp": "Отопление, текущая температура",
|
"mHeatCurrTemp": "Отопление, текущая температура",
|
||||||
"mHeatRetTemp": "Отопление, температура обратки",
|
"mHeatRetTemp": "Отопление, температура обратки",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title data-i18n>dashboard.title</title>
|
<title data-i18n>dashboard.title</title>
|
||||||
<link rel="stylesheet" href="/static/app.css" />
|
<link rel="stylesheet" href="/static/app.css?{BUILD_TIME}" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -148,6 +148,10 @@
|
|||||||
<th scope="row" data-i18n>dashboard.states.mHeatTargetTemp</th>
|
<th scope="row" data-i18n>dashboard.states.mHeatTargetTemp</th>
|
||||||
<td><b class="mHeatTargetTemp"></b> <span class="tempUnit"></span></td>
|
<td><b class="mHeatTargetTemp"></b> <span class="tempUnit"></span></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row" data-i18n>dashboard.states.mHeatSetpointTemp</th>
|
||||||
|
<td><b class="mHeatSetpointTemp"></b> <span class="tempUnit"></span></td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row" data-i18n>dashboard.states.mHeatCurrTemp</th>
|
<th scope="row" data-i18n>dashboard.states.mHeatCurrTemp</th>
|
||||||
<td><b class="mHeatCurrTemp"></b> <span class="tempUnit"></span></td>
|
<td><b class="mHeatCurrTemp"></b> <span class="tempUnit"></span></td>
|
||||||
@@ -220,7 +224,7 @@
|
|||||||
</small>
|
</small>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script src="/static/app.js"></script>
|
<script src="/static/app.js?{BUILD_TIME}"></script>
|
||||||
<script>
|
<script>
|
||||||
let modifiedTime = null;
|
let modifiedTime = null;
|
||||||
let noRegulators;
|
let noRegulators;
|
||||||
@@ -405,7 +409,7 @@
|
|||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
|
|
||||||
// Graph
|
// Graph
|
||||||
setValue('#tHeatCurrentTemp', result.master.indoorTempControl
|
setValue('#tHeatCurrentTemp', result.master.heating.indoorTempControl
|
||||||
? result.master.heating.indoorTemp
|
? result.master.heating.indoorTemp
|
||||||
: result.master.heating.currentTemp
|
: result.master.heating.currentTemp
|
||||||
);
|
);
|
||||||
@@ -458,6 +462,7 @@
|
|||||||
setState('.mHeatEnabled', result.master.heating.enabled);
|
setState('.mHeatEnabled', result.master.heating.enabled);
|
||||||
setState('.mHeatBlocking', result.master.heating.blocking);
|
setState('.mHeatBlocking', result.master.heating.blocking);
|
||||||
setState('.mHeatIndoorTempControl', result.master.heating.indoorTempControl);
|
setState('.mHeatIndoorTempControl', result.master.heating.indoorTempControl);
|
||||||
|
setValue('.mHeatSetpointTemp', result.master.heating.setpointTemp);
|
||||||
setValue('.mHeatTargetTemp', result.master.heating.targetTemp);
|
setValue('.mHeatTargetTemp', result.master.heating.targetTemp);
|
||||||
setValue('.mHeatCurrTemp', result.master.heating.currentTemp);
|
setValue('.mHeatCurrTemp', result.master.heating.currentTemp);
|
||||||
setValue('.mHeatRetTemp', result.master.heating.returnTemp);
|
setValue('.mHeatRetTemp', result.master.heating.returnTemp);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title data-i18n>index.title</title>
|
<title data-i18n>index.title</title>
|
||||||
<link rel="stylesheet" href="/static/app.css" />
|
<link rel="stylesheet" href="/static/app.css?{BUILD_TIME}" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -161,7 +161,7 @@
|
|||||||
</small>
|
</small>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script src="/static/app.js"></script>
|
<script src="/static/app.js?{BUILD_TIME}"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', async () => {
|
document.addEventListener('DOMContentLoaded', async () => {
|
||||||
const lang = new Lang(document.getElementById('lang'));
|
const lang = new Lang(document.getElementById('lang'));
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title data-i18n>network.title</title>
|
<title data-i18n>network.title</title>
|
||||||
<link rel="stylesheet" href="/static/app.css" />
|
<link rel="stylesheet" href="/static/app.css?{BUILD_TIME}" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -171,7 +171,7 @@
|
|||||||
</small>
|
</small>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script src="/static/app.js"></script>
|
<script src="/static/app.js?{BUILD_TIME}"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', async () => {
|
document.addEventListener('DOMContentLoaded', async () => {
|
||||||
const lang = new Lang(document.getElementById('lang'));
|
const lang = new Lang(document.getElementById('lang'));
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title data-i18n>sensors.title</title>
|
<title data-i18n>sensors.title</title>
|
||||||
<link rel="stylesheet" href="/static/app.css" />
|
<link rel="stylesheet" href="/static/app.css?{BUILD_TIME}" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -169,7 +169,7 @@
|
|||||||
</small>
|
</small>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script src="/static/app.js"></script>
|
<script src="/static/app.js?{BUILD_TIME}"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("DOMContentLoaded", async () => {
|
document.addEventListener("DOMContentLoaded", async () => {
|
||||||
const lang = new Lang(document.getElementById("lang"));
|
const lang = new Lang(document.getElementById("lang"));
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title data-i18n>settings.title</title>
|
<title data-i18n>settings.title</title>
|
||||||
<link rel="stylesheet" href="/static/app.css" />
|
<link rel="stylesheet" href="/static/app.css?{BUILD_TIME}" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -662,7 +662,7 @@
|
|||||||
</small>
|
</small>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script src="/static/app.js"></script>
|
<script src="/static/app.js?{BUILD_TIME}"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', async () => {
|
document.addEventListener('DOMContentLoaded', async () => {
|
||||||
const lang = new Lang(document.getElementById('lang'));
|
const lang = new Lang(document.getElementById('lang'));
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title data-i18n>upgrade.title</title>
|
<title data-i18n>upgrade.title</title>
|
||||||
<link rel="stylesheet" href="/static/app.css">
|
<link rel="stylesheet" href="/static/app.css?{BUILD_TIME}">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
</small>
|
</small>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script src="/static/app.js"></script>
|
<script src="/static/app.js?{BUILD_TIME}"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', async () => {
|
document.addEventListener('DOMContentLoaded', async () => {
|
||||||
const lang = new Lang(document.getElementById('lang'));
|
const lang = new Lang(document.getElementById('lang'));
|
||||||
|
|||||||
Reference in New Issue
Block a user