Compare commits

...
5 Commits
Author SHA1 Message Date
proddy 2e988df817 preparing 3.9.0-dev.0 2026-08-02 12:53:04 +02:00
Proddy 483e124484 Merge pull request #3177 from proddy/core3
Core3 - pkg update and formatting
2026-08-01 17:05:51 +02:00
proddy 34db81ab4b package update 2026-08-01 17:03:31 +02:00
proddy e9a422bd27 add exit clause 2026-08-01 17:03:26 +02:00
proddy 4a8ad71b63 auto-formatting 2026-08-01 17:03:15 +02:00
23 changed files with 387 additions and 633 deletions
+30
View File
@@ -5,6 +5,36 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [3.8.3] 1 August 2026
## Added
- KM300 at address 0x4A [#3084](https://github.com/emsesp/EMS-ESP32/issues/3084)
## Fixed
- signed value for solarInfuence [#3077](https://github.com/emsesp/EMS-ESP32/issues/3077)
- set bin file upload limit to 1M again [#3086](https://github.com/emsesp/EMS-ESP32/issues/3086)
- check arithmetric operations on strings [#3127](https://github.com/emsesp/EMS-ESP32/discussions/3127)
- prevent system crash during WiFi network discovery on ESP32-S3 hardware [#3128](https://github.com/emsesp/EMS-ESP32/pull/3128)
- fix setting date/time on Junkers thermostats
- offset of hpminflowtemp [#3144](https://github.com/emsesp/EMS-ESP32/issues/3144)
- water circulation command [#3149](https://github.com/emsesp/EMS-ESP32/pull/3149)
- start scheduler after customEntities, delay scheduler loop after startup, handling of `system/restart` command [#3146](https://github.com/emsesp/EMS-ESP32/issues/3146)
- possible memory leaks fixed.
- repeated startup schedules compute value
- call `system/message` called from scheduler processes compute twice
- water module SM100/200 as dhw1/dhw2 [#3164](https://github.com/emsesp/EMS-ESP32/issues/3164)
## Changed
- call compute value direct, enlarge TCP stack [#3127](https://github.com/emsesp/EMS-ESP32/discussions/3127)
- Dewtemperature for Easycontrol calculated by ems-esp [#3135](https://github.com/emsesp/EMS-ESP32/issues/3135)
- add option for sync thermostat to ntp, allow different time zones [#3148](https://github.com/emsesp/EMS-ESP32/discussions/3148), **defaults to sync**.
- block too many GET requests [mentioned in #3104](https://github.com/emsesp/EMS-ESP32/issues/3104)
- set 10 sec timeout for http requests [#3104](https://github.com/emsesp/EMS-ESP32/issues/3104)
- language code "cs" [#3161](https://github.com/emsesp/EMS-ESP32/issues/3161)
## [3.8.2] 12 May 2026
## Added
+3 -15
View File
@@ -4,27 +4,18 @@ For more details go to [emsesp.org](https://emsesp.org/).
## [3.9.0]
This release is based on the latest Espressif/Arduino core version 3. It brings in many memory and performance optimizations. Note it does require the user to manually migrate settings from 3.8.x to 3.9.0.
## Added
- user-requested LED blink [#3063](https://github.com/emsesp/EMS-ESP32/issues/3063)
- KM300 at address 0x4A [#3084](https://github.com/emsesp/EMS-ESP32/issues/3084)
- Commands Service that can be called via MQTT or API or used in the Scheduler Service
- option to disable factory reset [#3150](https://github.com/emsesp/EMS-ESP32/issues/3150)
- TLS support with 4MB boards without PSRAM
## Fixed
- signed value for solarInfuence [#3077](https://github.com/emsesp/EMS-ESP32/issues/3077)
- TLS support with 4MB boards without PSRAM
- prevent system crash during WiFi network discovery on ESP32-S3 hardware [#3128](https://github.com/emsesp/EMS-ESP32/pull/3128)
- check arithmetric operations on strings [#3127](https://github.com/emsesp/EMS-ESP32/discussions/3127)
- fix setting date/time on Junkers thermostats
- offset of hpminflowtemp [#3144](https://github.com/emsesp/EMS-ESP32/issues/3144)
- water circulation command [#3149](https://github.com/emsesp/EMS-ESP32/pull/3149)
- start scheduler after customEntities, delay scheduler loop after startup, handling of `system/restart` command [#3146](https://github.com/emsesp/EMS-ESP32/issues/3146)
- possible memory leaks fixed
- repeated startup schedules compute value
- shunting yard show json
- water module SM100/200 as dhw1/dhw2 [#3164](https://github.com/emsesp/EMS-ESP32/issues/3164)
## Changed
@@ -32,8 +23,5 @@ For more details go to [emsesp.org](https://emsesp.org/).
- Scheduler name is now mandatory
- network fallback to AP only after start [#3090](https://github.com/emsesp/EMS-ESP32/issues/3090)
- replaced Web async-validator with custom validator and toast with native snackbar to reduce bundle size
- Dewtemperature for Easycontrol calculated by ems-esp [#3135](https://github.com/emsesp/EMS-ESP32/issues/3135)
- add option for sync thermostat to ntp, allow different time zones [#3148](https://github.com/emsesp/EMS-ESP32/discussions/3148), **defaults to sync**.
- block too many GET requests [mentioned in #3104](https://github.com/emsesp/EMS-ESP32/issues/3104)
- Gateway and Connect devices are shown in the Devices page, but disabled [3126](https://github.com/emsesp/EMS-ESP32/discussions/3126)
+1 -1
View File
@@ -249,7 +249,7 @@
"value_type": 9,
"writeable": true,
"hide": false,
"value": "{\"stable\":{\"version\":\"3.8.2\",\"date\":\"2026-05-12\"},\"dev\":{\"version\":\"3.8.3-dev.5\",\"date\":\"2026-05-28T09:55:29Z\"}}"
"value": "{\"stable\":{\"version\":\"3.8.3\",\"date\":\"2026-08-01\"},\"dev\":{\"version\":\"3.9.0-dev.0\",\"date\":\"2026-08-01T09:55:29Z\"}}"
},
{
"id": 1,
+8 -8
View File
@@ -30,32 +30,32 @@
"@mui/material": "^9.2.0",
"@table-library/react-table-library": "4.1.15",
"alova": "^3.5.3",
"etag": "^1.8.1",
"jwt-decode": "^4.0.0",
"mime-types": "^3.0.2",
"preact": "^10.29.7",
"preact": "^10.29.8",
"react": "^19.2.8",
"react-dom": "^19.2.8",
"react-icons": "^5.7.0",
"react-router": "^8.3.0",
"typesafe-i18n": "^5.27.1",
"typescript": "^6.0.3"
"typesafe-i18n": "^5.27.1"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@preact/preset-vite": "^2.10.6",
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
"@types/node": "^26.1.2",
"@types/react": "^19.2.17",
"@types/react-dom": "^19.2.3",
"@types/react": "^19.2.18",
"@types/react-dom": "^19.2.4",
"concurrently": "^10.0.4",
"eslint": "^10.8.0",
"eslint-config-prettier": "^10.1.8",
"etag": "^1.8.1",
"mime-types": "^3.0.2",
"prettier": "^3.9.6",
"rollup-plugin-visualizer": "^7.0.1",
"terser": "^5.49.0",
"typescript": "^6.0.3",
"typescript-eslint": "^8.65.0",
"vite": "^8.1.5",
"vite": "^8.2.0",
"vite-plugin-imagemin": "^0.6.1"
},
"packageManager": "pnpm@11.18.0+sha512.33d83c77da82f49fba836925c6f1b841181ec3132b670639bd012f7075f5c7cf634c5f870147c19aae7478fac01df09d8892e880454896edd23ee9b33757563c"
+272 -229
View File
File diff suppressed because it is too large Load Diff
+2 -16
View File
@@ -4,19 +4,5 @@ allowBuilds:
gifsicle: false
jpegtran-bin: false
mozjpeg: false
optipng-bin: true
pngquant-bin: true
minimumReleaseAgeExclude:
- '@types/node@25.9.2'
- '@types/react@19.2.17'
- react-router@8.0.1
overrides:
# pin browserslist to one exact version so `pnpm update` can't re-resolve it to a
# newer release it then fails to link (spurious "Failed to create bin ... ENOENT")
browserslist: 4.28.5
updateConfig:
# typesafe-i18n / typescript-eslint rely on the classic compiler API that the
# native TS 7 rewrite removes. TS 6.x still has it, so stay on 6.x by excluding
# typescript from `pnpm update --latest` (which would otherwise jump it to 7).
ignoreDependencies:
- typescript
optipng-bin: false
pngquant-bin: false
+5 -2
View File
@@ -4,15 +4,18 @@
"description": "mock api for EMS-ESP",
"author": "proddy, emsesp.org",
"license": "MIT",
"type": "module",
"scripts": {
"mock-rest": "bun --watch restServer.ts",
"format": "prettier -l -w '**/*.{ts,tsx,js,css,json,md}'"
},
"dependencies": {
"@msgpack/msgpack": "^3.1.3",
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
"formidable": "^3.5.4",
"itty-router": "^5.0.24",
"itty-router": "^5.0.24"
},
"devDependencies": {
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
"prettier": "^3.9.6"
},
"packageManager": "pnpm@11.18.0+sha512.33d83c77da82f49fba836925c6f1b841181ec3132b670639bd012f7075f5c7cf634c5f870147c19aae7478fac01df09d8892e880454896edd23ee9b33757563c"
+32 -31
View File
@@ -11,15 +11,16 @@ importers:
'@msgpack/msgpack':
specifier: ^3.1.3
version: 3.1.3
'@trivago/prettier-plugin-sort-imports':
specifier: ^6.0.2
version: 6.0.2(prettier@3.9.6)
formidable:
specifier: ^3.5.4
version: 3.5.4
itty-router:
specifier: ^5.0.24
version: 5.0.24
devDependencies:
'@trivago/prettier-plugin-sort-imports':
specifier: ^6.0.2
version: 6.0.2(prettier@3.9.6)
prettier:
specifier: ^3.9.6
version: 3.9.6
@@ -30,8 +31,8 @@ packages:
resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==}
engines: {node: '>=6.9.0'}
'@babel/generator@7.29.7':
resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==}
'@babel/generator@7.29.8':
resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==}
engines: {node: '>=6.9.0'}
'@babel/helper-globals@7.29.7':
@@ -46,8 +47,8 @@ packages:
resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.29.7':
resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
'@babel/parser@7.29.8':
resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -55,12 +56,12 @@ packages:
resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==}
engines: {node: '>=6.9.0'}
'@babel/traverse@7.29.7':
resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==}
'@babel/traverse@7.29.8':
resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==}
engines: {node: '>=6.9.0'}
'@babel/types@7.29.7':
resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
'@babel/types@7.29.8':
resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==}
engines: {node: '>=6.9.0'}
'@jridgewell/gen-mapping@0.3.13':
@@ -112,8 +113,8 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
brace-expansion@2.1.3:
resolution: {integrity: sha512-DRdx5neNsG/QXbniLFWi2YmC/68oeOOmKz6zOjVk6ZS1ZLXgLIKqVEc6hWsmkjBbgii0SwaBTcJ5XKj5gzY/4A==}
brace-expansion@2.1.4:
resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==}
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
@@ -183,10 +184,10 @@ snapshots:
js-tokens: 4.0.0
picocolors: 1.1.1
'@babel/generator@7.29.7':
'@babel/generator@7.29.8':
dependencies:
'@babel/parser': 7.29.7
'@babel/types': 7.29.7
'@babel/parser': 7.29.8
'@babel/types': 7.29.8
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
@@ -197,29 +198,29 @@ snapshots:
'@babel/helper-validator-identifier@7.29.7': {}
'@babel/parser@7.29.7':
'@babel/parser@7.29.8':
dependencies:
'@babel/types': 7.29.7
'@babel/types': 7.29.8
'@babel/template@7.29.7':
dependencies:
'@babel/code-frame': 7.29.7
'@babel/parser': 7.29.7
'@babel/types': 7.29.7
'@babel/parser': 7.29.8
'@babel/types': 7.29.8
'@babel/traverse@7.29.7':
'@babel/traverse@7.29.8':
dependencies:
'@babel/code-frame': 7.29.7
'@babel/generator': 7.29.7
'@babel/generator': 7.29.8
'@babel/helper-globals': 7.29.7
'@babel/parser': 7.29.7
'@babel/parser': 7.29.8
'@babel/template': 7.29.7
'@babel/types': 7.29.7
'@babel/types': 7.29.8
debug: 4.4.3
transitivePeerDependencies:
- supports-color
'@babel/types@7.29.7':
'@babel/types@7.29.8':
dependencies:
'@babel/helper-string-parser': 7.29.7
'@babel/helper-validator-identifier': 7.29.7
@@ -248,10 +249,10 @@ snapshots:
'@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.9.6)':
dependencies:
'@babel/generator': 7.29.7
'@babel/parser': 7.29.7
'@babel/traverse': 7.29.7
'@babel/types': 7.29.7
'@babel/generator': 7.29.8
'@babel/parser': 7.29.8
'@babel/traverse': 7.29.8
'@babel/types': 7.29.8
javascript-natural-sort: 0.7.1
lodash-es: 4.18.1
minimatch: 9.0.9
@@ -264,7 +265,7 @@ snapshots:
balanced-match@1.0.2: {}
brace-expansion@2.1.3:
brace-expansion@2.1.4:
dependencies:
balanced-match: 1.0.2
@@ -295,7 +296,7 @@ snapshots:
minimatch@9.0.9:
dependencies:
brace-expansion: 2.1.3
brace-expansion: 2.1.4
ms@2.1.3: {}
+2 -2
View File
@@ -143,7 +143,7 @@ let system_status = {
let DEV_VERSION_IS_UPGRADEABLE: boolean;
let STABLE_VERSION_IS_UPGRADEABLE: boolean;
let THIS_VERSION: string;
let LATEST_STABLE_VERSION = '3.8.2';
let LATEST_STABLE_VERSION = '3.8.3';
let LATEST_DEV_VERSION = '3.9.0-dev.1';
// scenarios for testing versioning
@@ -4187,7 +4187,7 @@ let emsesp_customentities = {
writeable: true,
hide: false,
value:
'{"stable":{"version":"3.8.2","date":"2026-05-12"},"dev":{"version":"3.8.3-dev.5","date":"2026-05-28T09:55:29Z"}}'
'{"stable":{"version":"3.8.3","date":"2026-08-01"},"dev":{"version":"3.9.0-dev.0","date":"2026-08-01T09:55:29Z"}}'
}
]
};
+3 -2
View File
@@ -12,8 +12,8 @@ corepack use pnpm@latest
pnpm update
pnpm install
pnpm format
pnpm lint
pnpm build-webUI
pnpm lint
cd ../mock-api
rm -rf node_modules
@@ -25,8 +25,9 @@ pnpm format
cd ..
npx cspell "**"
# build files that go into docs folder
# exit 0
# build files that go into docs folder
platformio run -e build_modbus -t clean
platformio run -e build_modbus
platformio run -e build_standalone -t clean
+1 -2
View File
@@ -677,7 +677,7 @@ void System::store_settings(WebSettings & settings) {
locale_ = settings.locale;
system_name_ = settings.system_name;
developer_mode_ = settings.developer_mode;
disable_reset_ = settings.disable_reset;
disable_reset_ = settings.disable_reset;
}
// Starts up core services
@@ -2876,7 +2876,6 @@ bool System::command_txpause(const char * value, const int8_t id) {
// format command - factory reset, removing all config files
bool System::command_format(const char * value, const int8_t id) {
if (EMSESP::system_.disable_reset()) {
LOG_NOTICE("Factory reset disabled");
return false;
+1 -1
View File
@@ -1 +1 @@
#define EMSESP_APP_VERSION "3.9.0-dev.19"
#define EMSESP_APP_VERSION "3.9.0-dev.0"
+4 -4
View File
@@ -417,10 +417,10 @@ std::string WebCustomEntityService::get_metrics_prometheus() {
// build the json for specific entity
void WebCustomEntityService::get_value_json(JsonObject output, CustomEntityItem const & entity) {
output["name"] = (const char *)entity.name;
output["fullname"] = (const char *)entity.name;
output["storage"] = entity.ram == 1 ? "ram" : entity.ram == 2 ? "nvs" : "ems";
output["type"] = entity.value_type == DeviceValueType::BOOL ? "boolean" : entity.value_type == DeviceValueType::STRING ? "string" : F_(number);
output["name"] = (const char *)entity.name;
output["fullname"] = (const char *)entity.name;
output["storage"] = entity.ram == 1 ? "ram" : entity.ram == 2 ? "nvs" : "ems";
output["type"] = entity.value_type == DeviceValueType::BOOL ? "boolean" : entity.value_type == DeviceValueType::STRING ? "string" : F_(number);
output["readable"] = true;
output["writeable"] = entity.writeable;
output["visible"] = true;
+11 -11
View File
@@ -64,17 +64,17 @@ void WebDataService::core_data(AsyncWebServerRequest * request) {
// list is already sorted by device type
JsonArray devices = root["devices"].to<JsonArray>();
for (const auto & emsdevice : EMSESP::emsdevices) {
JsonObject obj = devices.add<JsonObject>();
obj["id"] = emsdevice->unique_id(); // a unique id
obj["tn"] = emsdevice->device_type_2_device_name_translated(); // translated device type name
obj["t"] = emsdevice->device_type(); // device type number
obj["b"] = emsdevice->brand_to_char(); // brand (std::string → copied into doc, safe across async serialize)
obj["n"] = emsdevice->name(); // custom name
obj["d"] = emsdevice->device_id(); // deviceid
obj["p"] = emsdevice->product_id(); // productid
obj["v"] = emsdevice->version(); // version
obj["e"] = emsdevice->count_entities(); // number of entities
obj["url"] = emsdevice->device_type_name(); // non-translated, lower-case, used for API URL in customization page
JsonObject obj = devices.add<JsonObject>();
obj["id"] = emsdevice->unique_id(); // a unique id
obj["tn"] = emsdevice->device_type_2_device_name_translated(); // translated device type name
obj["t"] = emsdevice->device_type(); // device type number
obj["b"] = emsdevice->brand_to_char(); // brand (std::string → copied into doc, safe across async serialize)
obj["n"] = emsdevice->name(); // custom name
obj["d"] = emsdevice->device_id(); // deviceid
obj["p"] = emsdevice->product_id(); // productid
obj["v"] = emsdevice->version(); // version
obj["e"] = emsdevice->count_entities(); // number of entities
obj["url"] = emsdevice->device_type_name(); // non-translated, lower-case, used for API URL in customization page
}
// add any custom entities
+1 -1
View File
@@ -213,7 +213,7 @@ void WebSchedulerService::get_value_json(JsonObject output, const ScheduleItem &
} else {
output["time"] = scheduleItem.time;
}
output["cmd_name"] = scheduleItem.cmd_name;
output["cmd_name"] = scheduleItem.cmd_name;
output["readable"] = true;
output["writeable"] = true;
output["visible"] = true;
+2 -2
View File
@@ -121,8 +121,8 @@ class WebSettings {
uint8_t eth_clock_mode;
bool developer_mode; // developer mode
bool disable_reset; // disable reset
bool disable_reset; // disable reset
static void read(WebSettings & settings, JsonObject root);
static StateUpdateResult update(JsonObject root, WebSettings & settings);
+6 -6
View File
@@ -172,8 +172,8 @@ void WebStatusService::systemStatus(AsyncWebServerRequest * request) {
}
root["developer_mode"] = EMSESP::system_.developer_mode();
root["disable_reset"] = EMSESP::system_.disable_reset();
root["disable_reset"] = EMSESP::system_.disable_reset();
// Also used in SystemMonitor.tsx
root["status"] = EMSESP::system_.systemStatus(); // send the status. See System.h for status codes
if (EMSESP::system_.systemStatus() == SYSTEM_STATUS::SYSTEM_STATUS_PENDING_RESTART) {
@@ -367,13 +367,13 @@ void WebStatusService::getVersions(JsonObject root) {
#else
// standalone/test build: provide deterministic dummy data
JsonObject stable_out = root["stable"].to<JsonObject>();
stable_out["version"] = "3.8.2";
stable_out["date"] = "2026-04-25";
stable_out["upgradeable"] = FirmwareVersion("3.8.2") > current_version;
stable_out["version"] = "3.8.3";
stable_out["date"] = "2026-08-01";
stable_out["upgradeable"] = FirmwareVersion("3.8.3") > current_version;
JsonObject dev_out = root["dev"].to<JsonObject>();
dev_out["version"] = "3.9.0-dev.1";
dev_out["date"] = "2026-04-25";
dev_out["date"] = "2026-08-02";
dev_out["upgradeable"] = FirmwareVersion("3.9.0-dev.1") > current_version;
#endif
}
-103
View File
@@ -1,103 +0,0 @@
{
"Boiler Nefit Trendline HRC30 (DeviceID:0x08, ProductID:123, Version:06.01)": {
"force heating off": "off",
"heating active": "off",
"tapwater active": "off",
"selected flow temperature": 5,
"heating pump modulation": 0,
"current flow temperature": 41.4,
"return temperature": 37.7,
"system pressure": 1.3,
"actual boiler temperature": 44.2,
"gas": "off",
"gas stage 2": "off",
"flame current": 0,
"fan": "off",
"ignition": "off",
"oil preheating": "off",
"burner min power": 0,
"burner max power": 50,
"burner min period": 10,
"hysteresis on temperature": -6,
"hysteresis off temperature": 6,
"heating activated": "on",
"heating temperature": 70,
"heating pump": "off",
"boiler pump max power": 70,
"boiler pump min power": 50,
"boiler pump mode": "proportional",
"pump delay": 2,
"burner selected max power": 0,
"burner current power": 0,
"burner starts": 394602,
"total burner operating time": "480 days 4 hours 23 minutes",
"burner stage 2 operating time": "0 days 0 hours 0 minutes",
"total heat operating time": "395 days 2 hours 14 minutes",
"burner starts heating": 46245,
"total UBA operating time": "3932 days 23 hours 58 minutes",
"last error code": "2E(207) 100.75.2000 65:00 (0 min)",
"service code": "0H",
"service code number": 203,
"maintenance message": "H00",
"maintenance scheduled": "manual",
"time to next maintenance": 6000,
"next maintenance date": "01.01.2012",
"dhw turn on/off": "on",
"dhw set temperature": 62,
"dhw selected temperature": 60,
"dhw type": "flow",
"dhw comfort": "hot",
"dhw flow temperature offset": 40,
"dhw max power": 100,
"dhw circulation pump available": "off",
"dhw charging type": "3-way valve",
"dhw hysteresis on temperature": -5,
"dhw hysteresis off temperature": 0,
"dhw disinfection temperature": 70,
"dhw circulation pump mode": "off",
"dhw circulation active": "off",
"dhw current intern temperature": 33.5,
"dhw current tap water flow": 0,
"dhw storage intern temperature": 33.5,
"dhw activated": "on",
"dhw one time charging": "off",
"dhw disinfecting": "off",
"dhw charging": "off",
"dhw recharging": "off",
"dhw temperature ok": "on",
"dhw active": "off",
"dhw 3-way valve active": "on",
"dhw set pump power": 0,
"dhw starts": 348357,
"dhw active time": "85 days 2 hours 9 minutes",
"nominal Power": 30,
"total energy": 3088.69,
"energy heating": 2532.94,
"dhw energy": 555.75
},
"Thermostat RC20 (DeviceID:0x17, ProductID:77, Version:03.03)": {
"date/time": "10.12.2023 13:49",
"hc1 how hot lounge should be": 19,
"hc1 current room temp": 19.5,
"hc1 mqtt discovery current room temperature": "roomTemp",
"hc1 mode": "auto",
"hc1 manual temperature": 21.5,
"hc1 temperature when mode is off": 7,
"hc1 day temperature T2": 20,
"hc1 day temperature T3": 20,
"hc1 day temperature T4": 20,
"hc1 night temperature T1": 15,
"hc1 program switchtime": "00 mo 00:00 T1"
},
"Controller Module BC10 (DeviceID:0x09, ProductID:190, Version:01.03)": {},
"Custom Entities": {
"boiler_flowtemp": 5,
"nominalpower": 30,
"minmodulation": 23,
"maxmodulation": 115
},
"Analog Sensors": {},
"Temperature Sensors": {
"zolder": 18.3
}
}
-37
View File
@@ -1,37 +0,0 @@
{
"type": "customizations",
"Customizations": {
"ts": [],
"as": [],
"masked_entities": [
{
"product_id": 77,
"device_id": 23,
"custom_name": "",
"custom_brand": "",
"entity_ids": [
"08datetime",
"08hc1/seltemp|<30",
"08hc1/currtemp",
"08hc1/mode"
]
},
{
"product_id": 123,
"device_id": 8,
"custom_name": "",
"custom_brand": "",
"entity_ids": [
"08heatingactive",
"08burngas",
"08fanwork",
"08ignwork",
"08burnmaxpower|>23<121",
"08burnminperiod|<120",
"08lastcode",
"08servicecode"
]
}
]
}
}
-6
View File
@@ -1,6 +0,0 @@
{
"type": "entities",
"Entities": {
"entities": []
}
}
-6
View File
@@ -1,6 +0,0 @@
{
"type": "schedule",
"Schedule": {
"schedule": []
}
}
-145
View File
@@ -1,145 +0,0 @@
{
"type": "settings",
"System": {
"version": "3.8.2"
},
"Network": {
"ssid": "",
"bssid": "",
"password": "",
"hostname": "ems-esp",
"static_ip_config": false,
"bandwidth20": false,
"nosleep": true,
"enableMDNS": true,
"enableCORS": false,
"CORSOrigin": "*",
"tx_power": 0
},
"AP": {
"provision_mode": 2,
"ssid": "ems-esp",
"password": "ems-esp-neo",
"channel": 1,
"ssid_hidden": false,
"max_clients": 4,
"local_ip": "192.168.4.1",
"gateway_ip": "192.168.4.1",
"subnet_mask": "255.255.255.0"
},
"MQTT": {
"enableTLS": false,
"rootCA": "",
"enabled": true,
"host": "192.168.X.X",
"port": 1883,
"base": "ems-esp",
"username": "xxxx",
"password": "xxxx",
"client_id": "esp32-395c7bcc",
"keep_alive": 60,
"clean_session": false,
"entity_format": 1,
"publish_time_boiler": 60,
"publish_time_thermostat": 60,
"publish_time_solar": 60,
"publish_time_mixer": 60,
"publish_time_water": 60,
"publish_time_other": 60,
"publish_time_sensor": 60,
"publish_time_heartbeat": 10,
"mqtt_qos": 0,
"mqtt_retain": false,
"ha_enabled": true,
"nested_format": 1,
"discovery_prefix": "homeassistant",
"discovery_type": 0,
"ha_number_mode": 1,
"publish_single": false,
"publish_single2cmd": false,
"send_response": false
},
"NTP": {
"enabled": true,
"server": "time.google.com",
"tz_label": "Europe/Amsterdam",
"tz_format": "CET-1CEST,M3.5.0,M10.5.0/3"
},
"Security": {
"jwt_secret": "ems-esp-neo",
"users": [
{
"username": "admin",
"password": "admin",
"admin": true
},
{
"username": "guest",
"password": "guest",
"admin": false
}
]
},
"Settings": {
"version": "3.8.2",
"board_profile": "E32V2",
"platform": "ESP32",
"locale": "en",
"tx_mode": 1,
"ems_bus_id": 11,
"syslog_enabled": false,
"syslog_level": 3,
"trace_raw": false,
"syslog_mark_interval": 0,
"syslog_host": "",
"syslog_port": 514,
"boiler_heatingoff": false,
"remote_timeout": 24,
"remote_timeout_en": false,
"shower_timer": true,
"shower_alert": false,
"shower_alert_coldshot": 10,
"shower_alert_trigger": 7,
"shower_min_duration": 180,
"rx_gpio": 4,
"tx_gpio": 5,
"dallas_gpio": 14,
"dallas_parasite": false,
"led_gpio": 2,
"hide_led": true,
"led_type": 0,
"low_clock": false,
"telnet_enabled": true,
"notoken_api": false,
"readonly_mode": false,
"analog_enabled": true,
"pbutton_gpio": 34,
"solar_maxflow": 30,
"fahrenheit": false,
"bool_format": 1,
"bool_dashboard": 1,
"enum_format": 1,
"weblog_level": 6,
"weblog_buffer": 500,
"weblog_compact": true,
"phy_type": 1,
"eth_power": 15,
"eth_phy_addr": 0,
"eth_clock_mode": 1,
"modbus_enabled": false,
"modbus_port": 502,
"modbus_max_clients": 10,
"modbus_timeout": 300,
"developer_mode": true,
"disable_reset": false,
"email_enabled": false,
"email_security": 2,
"email_server": "smtp.example.net",
"email_port": 587,
"email_login": "",
"email_pass": "",
"email_sender": "ems-esp@example.net",
"email_recp": "",
"email_subject": "ems-esp notification"
}
}
+3 -3
View File
@@ -1,7 +1,7 @@
{
"type": "systembackup",
"version": "3.8.2",
"date": "2026-04-15T08:06:45",
"version": "3.9.0",
"date": "2026-08-02T08:06:45",
"systembackup": [
{
"type": "settings",
@@ -83,7 +83,7 @@
]
},
"Settings": {
"version": "3.8.2",
"version": "3.9.0",
"board_profile": "E32V2",
"platform": "ESP32",
"locale": "en",