diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 8d349fca4..b62301016 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -22,7 +22,7 @@ _Make sure your have performed every step and checked the applicable boxes befor - [ ] Searched the issue in [issues](https://github.com/emsesp/EMS-ESP32/issues) - [ ] Searched the issue in [discussions](https://github.com/emsesp/EMS-ESP32/discussions) - [ ] Searched the issue in the [docs](https://emsesp.org/Troubleshooting/) -- [ ] Searched the issue in the [chat](https://discord.gg/3J3GgnzpyT) +- [ ] Searched the issue in the [chat](https://discord.gg/GP9DPSgeJq) - [ ] Provide the System information in the area below, taken from `http:///api/system` ```json diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 62c86f614..1deb908ac 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -7,5 +7,5 @@ contact_links: url: https://github.com/emsesp/EMS-ESP32/discussions about: EMS-ESP usage Questions, Feature Requests and Projects. - name: EMS-ESP Users Chat - url: https://discord.gg/3J3GgnzpyT + url: https://discord.gg/GP9DPSgeJq about: Chat for feedback, questions and troubleshooting. diff --git a/.github/workflows/dev_release.yml b/.github/workflows/dev_release.yml index 0eb0f329c..e68ac55b4 100644 --- a/.github/workflows/dev_release.yml +++ b/.github/workflows/dev_release.yml @@ -28,7 +28,7 @@ jobs: node-version: 24 - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Enable Corepack run: corepack enable pnpm @@ -47,7 +47,7 @@ jobs: - name: Build webUI run: | - platformio run -e build_webUI + platformio run -e build-webUI - name: Build modbus run: | @@ -62,13 +62,13 @@ jobs: platformio run - name: Commit the generated files - uses: stefanzweifel/git-auto-commit-action@v5 + uses: stefanzweifel/git-auto-commit-action@v7 with: commit_message: "chore: update generated files for v${{steps.build_info.outputs.VERSION}}" - name: Create GitHub Release id: 'automatic_releases' - uses: emsesp/action-automatic-releases@v1.0.0 + uses: emsesp/action-automatic-releases@v1.0.1 with: repo_token: '${{ secrets.GITHUB_TOKEN }}' title: Development Build v${{steps.build_info.outputs.VERSION}} diff --git a/.github/workflows/github-releases-to-discord.yml b/.github/workflows/github-releases-to-discord.yml index 4c559d8f9..aca7fd49c 100644 --- a/.github/workflows/github-releases-to-discord.yml +++ b/.github/workflows/github-releases-to-discord.yml @@ -11,7 +11,7 @@ jobs: contents: read steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: GitHub Releases To Discord uses: SethCohen/github-releases-to-discord@v1.13.1 diff --git a/.github/workflows/pr_check.yml b/.github/workflows/pr_check.yml index 1b35c830b..8f668d31d 100644 --- a/.github/workflows/pr_check.yml +++ b/.github/workflows/pr_check.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Install python 3.13 uses: actions/setup-python@v6 diff --git a/.github/workflows/sonar_check.yml b/.github/workflows/sonar_check.yml index 2b3af4291..3a476fb5b 100644 --- a/.github/workflows/sonar_check.yml +++ b/.github/workflows/sonar_check.yml @@ -19,7 +19,7 @@ jobs: BUILD_WRAPPER_OUT_DIR: bw-output steps: - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 - name: Install Build Wrapper diff --git a/.github/workflows/stable_release.yml b/.github/workflows/stable_release.yml index bf834352b..6286e6ea3 100644 --- a/.github/workflows/stable_release.yml +++ b/.github/workflows/stable_release.yml @@ -26,7 +26,7 @@ jobs: node-version: 24 - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Enable Corepack run: corepack enable pnpm @@ -39,7 +39,7 @@ jobs: - name: Build webUI run: | - platformio run -e build_webUI + platformio run -e build-webUI - name: Build modbus run: | @@ -54,7 +54,7 @@ jobs: platformio run - name: Create GitHub Release - uses: emsesp/action-automatic-releases@v1.0.0 + uses: emsesp/action-automatic-releases@v1.0.1 with: repo_token: '${{ secrets.GITHUB_TOKEN }}' prerelease: false diff --git a/.github/workflows/test_release.yml b/.github/workflows/test_release.yml index 63d160048..3fb4ce3fc 100644 --- a/.github/workflows/test_release.yml +++ b/.github/workflows/test_release.yml @@ -28,7 +28,7 @@ jobs: node-version: 24 - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Enable Corepack run: corepack enable pnpm @@ -47,7 +47,7 @@ jobs: - name: Build webUI run: | - platformio run -e build_webUI + platformio run -e build-webUI - name: Build modbus run: | @@ -63,7 +63,7 @@ jobs: - name: Create GitHub Release id: 'automatic_releases' - uses: emsesp/action-automatic-releases@v1.0.0 + uses: emsesp/action-automatic-releases@v1.0.1 with: repo_token: '${{ secrets.GITHUB_TOKEN }}' title: Test Build v${{steps.build_info.outputs.VERSION}} diff --git a/CHANGELOG.md b/CHANGELOG.md index 87b03e7d1..569bcf516 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,44 @@ 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.2] 12 May 2026 + +## Added + +- comfortpoint for BC400 [#2935](https://github.com/emsesp/EMS-ESP32/issues/2935) +- customize device brand [#2784](https://github.com/emsesp/EMS-ESP32/issues/2784) +- set model for ems-esp devices temperature, analog, etc. [#2958](https://github.com/emsesp/EMS-ESP32/discussions/2958) +- prometheus metrics for temperature/analog/scheduler/custom [#2962](https://github.com/emsesp/EMS-ESP32/issues/2962) +- boiler pumpkick [#2965](https://github.com/emsesp/EMS-ESP32/discussions/2965) +- heatpump reset [#2933](https://github.com/emsesp/EMS-ESP32/issues/2933) +- 2.nd freshwater module (dhw4, dhw5) [#2991](https://github.com/emsesp/EMS-ESP32/issues/2991) +- full system backup and restore +- auto-logic to set ht3/ems+ tx-mode +- polariity for digital_in sensors [#3070](https://github.com/emsesp/EMS-ESP32/discussions/3070) + +## Fixed + +- SRC climate creation [#2936](https://github.com/emsesp/EMS-ESP32/issues/2936) and [#2960](https://github.com/emsesp/EMS-ESP32/issues/2960) +- missing translations [#3015](https://github.com/emsesp/EMS-ESP32/issues/3015) +- custom entities check fetch length +- modbus initialization [#3064](https://github.com/emsesp/EMS-ESP32/issues/3064) + +## Changed + +- weblogbuffer up to 1000 messages with PSRAM, mentioned in [#2933](https://github.com/emsesp/EMS-ESP32/issues/2933) +- validate custom entity writes, [#2931](https://github.com/emsesp/EMS-ESP32/issues/2931) +- remove wrong burnMinPower [#2918](https://github.com/emsesp/EMS-ESP32/issues/2918) +- store scheduler active state to nvs [#2946](https://github.com/emsesp/EMS-ESP32/discussions/2946) +- translated modes `heat` and `eco` for HA-climate mode-str-tpl +- support `minflowtemp` and `baseflowtemp` [#2969](https://github.com/emsesp/EMS-ESP32/discussions/2969) +- update version if it is 00.00 in first read [#2981](https://github.com/emsesp/EMS-ESP32/issues/2981) +- device class for % values [#2980](https://github.com/emsesp/EMS-ESP32/issues/2980) +- fetch telegrams: set length to fetch [#3017](https://github.com/emsesp/EMS-ESP32/issues/3017) +- move http client from stack to heap +- heap optimizations [#3021](https://github.com/emsesp/EMS-ESP32/discussions/3021) +- check and read 0x470 as summer2_typeids[0] only if received [#2686](https://github.com/emsesp/EMS-ESP32/issues/2686), [#3055](https://github.com/emsesp/EMS-ESP32/issues/3055) +- default bus-id: gateway1(0x49), tx-mode: auto + ## [3.8.1] 11 January 2026 ## Added diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index d08fbd934..20716eaa9 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -2,10 +2,12 @@ For more details go to [emsesp.org](https://emsesp.org/). -## [3.8.2] +## [3.8.3] ## Added ## Fixed ## Changed + + diff --git a/Makefile b/Makefile index c1ca05b90..1834389e1 100644 --- a/Makefile +++ b/Makefile @@ -47,24 +47,25 @@ MAKEFLAGS += -j$(JOBS) -l$(shell echo $$(($(JOBS) * 2))) #---------------------------------------------------------------------- TARGET := emsesp BUILD := build -SOURCES := src/core src/devices src/web src/test lib_standalone lib/semver lib/espMqttClient/src lib/espMqttClient/src/* lib/ArduinoJson/src lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src lib/PButton -INCLUDES := src/core src/devices src/web src/test lib_standalone lib/* lib/semver lib/espMqttClient/src lib/espMqttClient/src/Transport lib/ArduinoJson/src lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src lib/uuid-telnet/src lib/uuid-syslog/src +SOURCES := src/core src/devices src/web src/test lib_standalone lib/espMqttClient/src lib/espMqttClient/src/* lib/ArduinoJson/src lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src lib/PButton +INCLUDES := src/core src/devices src/web src/test lib_standalone lib/* lib/espMqttClient/src lib/espMqttClient/src/Transport lib/ArduinoJson/src lib/uuid-common/src lib/uuid-console/src lib/uuid-log/src lib/uuid-telnet/src lib/uuid-syslog/src LIBRARIES := CPPCHECK = cppcheck -CHECKFLAGS = -q --force --std=gnu++17 +CHECKFLAGS = -q --force --std=gnu++20 #---------------------------------------------------------------------- # Languages Standard #---------------------------------------------------------------------- -C_STANDARD := -std=c17 -CXX_STANDARD := -std=gnu++17 +C_STANDARD := -std=c20 +CXX_STANDARD := -std=gnu++20 #---------------------------------------------------------------------- # Defined Symbols #---------------------------------------------------------------------- -DEFINES += -DARDUINOJSON_ENABLE -DARDUINOJSON_ENABLE_ARDUINO_STRING -DARDUINOJSON_USE_DOUBLE=0 +DEFINES += -DARDUINOJSON_ENABLE -DARDUINOJSON_ENABLE_ARDUINO_STRING -DARDUINOJSON_USE_DOUBLE=0 DEFINES += -DEMSESP_STANDALONE -DEMSESP_TEST -DEMSESP_DEBUG -DEMC_RX_BUFFER_SIZE=1500 +DEFINES += -DNO_TLS_SUPPORT DEFINES += $(ARGS) DEFAULTS = -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32S3\" @@ -79,6 +80,10 @@ SYMBOLS := $(CURDIR)/$(BUILD)/$(TARGET).out CSOURCES := $(shell find $(SOURCES) -name "*.c" 2>/dev/null) CXXSOURCES := $(shell find $(SOURCES) -name "*.cpp" 2>/dev/null) +# Exclude files not needed for standalone build, if they exist +CSOURCES := $(filter-out src/core/ModuleLibrary.c,$(CSOURCES)) +CXXSOURCES := $(filter-out src/core/ModuleLibrary.cpp,$(CXXSOURCES)) + OBJS := $(patsubst %,$(BUILD)/%.o,$(basename $(CSOURCES)) $(basename $(CXXSOURCES))) DEPS := $(patsubst %,$(BUILD)/%.d,$(basename $(CSOURCES)) $(basename $(CXXSOURCES))) diff --git a/README.md b/README.md index 5a8e7ad51..7b2a8b41f 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Guides - + Discord @@ -32,7 +32,8 @@ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=emsesp_EMS-ESP32&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=emsesp_EMS-ESP32) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/9441142f49424ef891e8f5251866ee6b)](https://app.codacy.com/gh/emsesp/EMS-ESP32/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![downloads](https://img.shields.io/github/downloads/emsesp/EMS-ESP32/total.svg)](https://github.com/emsesp/EMS-ESP32/releases) -[![chat](https://img.shields.io/discord/816637840644505620.svg?style=flat-square&color=blueviolet)](https://discord.gg/3J3GgnzpyT) +[![chat](https://img.shields.io/discord/816637840644505620.svg?style=flat-square&color=blueviolet)](https://discord.gg/GP9DPSgeJq) +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/emsesp/EMS-ESP32) [![GitHub stars](https://img.shields.io/github/stars/emsesp/EMS-ESP32.svg?style=social&label=Star)](https://github.com/emsesp/EMS-ESP32/stargazers) [![GitHub forks](https://img.shields.io/github/forks/emsesp/EMS-ESP32.svg?style=social&label=Fork)](https://github.com/emsesp/EMS-ESP32/network) @@ -40,7 +41,8 @@ **EMS-ESP** is an open-source firmware for the Espressif ESP32 microcontroller to communicate with **EMS** (Energy Management System) compatible equipment from manufacturers such as Bosch, Buderus, Nefit, Junkers, Worcester, Sieger, elm.leblanc and iVT. -It requires a small circuit to interface with the EMS bus which can be purchased from or custom built. +It requires a small circuit to interface with the EMS bus which can be purchased from . These gateways are tested thoroughly and certified to work with EMS-ESP. + ## 📦  **Key Features** @@ -64,17 +66,17 @@ Head over to the [Installation Guide](https://emsesp.org/Installing) section of ## 📋  **Documentation** -Visit [emsesp.org](https://emsesp.org) for more details on how to install and configure EMS-ESP. There is also a collection of Frequently Asked Questions and Troubleshooting tips with example customizations from the community. +Visit [emsesp.org](https://emsesp.org) for more details on how to setup and configure EMS-ESP. You'll also find more a collection of example configuarations, Frequently Asked Questions and Troubleshooting tips. ## 💬  **Getting Support** -To chat with the community reach out on our [Discord Server](https://discord.gg/3J3GgnzpyT). +To chat with the community reach out on our [Discord Server](https://discord.gg/GP9DPSgeJq). -If you find an issue or have a request, see [how to request support](https://emsesp.org/Support/) on how to submit a bug report or feature request. +If you find an issue or have a request, see the [Getting Support](https://emsesp.org/Support/) section of the documentation. Note if you are using a non-BBQKees EMS gateway, you may need to contact the manufacturer for support. ## 🎥  **Live Demo** -For a live demo go to [demo.emsesp.org](https://demo.emsesp.org). Pick a language from the sign on page and log in with any username or password. Note not all features are operational as it's based on static data. +To see a live demo go to [demo.emsesp.org](https://demo.emsesp.org). Pick a language and use any username and password to log in. Note whast you're seeing is static example data so not all features are operational. ## 💖  **Contributors** @@ -84,7 +86,7 @@ If you like **EMS-ESP**, please give it a ✨ on GitHub, or even better fork it ## 📦  **Building** -See the [Building Guide](https://emsesp.org/Building) section of the documentation for instructions on how to build EMS-ESP. +See the [Building the firmware](https://emsesp.org/Building) guide in the documentation for instructions on how to build EMS-ESP from this source code. ## 📢  **Libraries used** diff --git a/cspell.json b/cspell.json index 880eedb9c..4d4f9520b 100644 --- a/cspell.json +++ b/cspell.json @@ -9,6 +9,7 @@ } ], "dictionaries": ["project-words"], + "caseSensitive": false, "ignorePaths": [ "node_modules", "compile_commands.json", @@ -36,6 +37,8 @@ "pnpm-*.yaml", "vite.config.ts", "lib/esp32-psram/**", - "test/test_api/test_api.h" + "test/test_api/test_api.h", + "lib_standalone/**", + "**/*.js" ] } \ No newline at end of file diff --git a/data/pre_load.json b/data/pre_load.json index 9c0ad34cc..45e8742d3 100644 --- a/data/pre_load.json +++ b/data/pre_load.json @@ -1,85 +1,209 @@ { - "type": "settings", - "Network": { - "ssid": "my_wifi_ssid", - "bssid": "", - "password": "my_wifi_password", - "hostname": "ems-esp" + "type": "systembackup", + "version": "3.8.2", + "systembackup": [ + { + "type": "settings", + "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": 1, + "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": false, + "host": "", + "port": 1883, + "base": "ems-esp", + "username": "", + "password": "", + "client_id": "esp32-b8ffc9ec", + "keep_alive": 60, + "clean_session": false, + "entity_format": 1, + "publish_time_boiler": 10, + "publish_time_thermostat": 10, + "publish_time_solar": 10, + "publish_time_mixer": 10, + "publish_time_water": 10, + "publish_time_other": 60, + "publish_time_sensor": 10, + "publish_time_heartbeat": 60, + "mqtt_qos": 0, + "mqtt_retain": false, + "ha_enabled": false, + "nested_format": 1, + "discovery_prefix": "homeassistant", + "discovery_type": 0, + "ha_number_mode": 0, + "publish_single": false, + "publish_single2cmd": false, + "send_response": false + }, + "NTP": { + "enabled": false, + "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-dev.22", + "board_profile": "E32V2_2", + "platform": "ESP32", + "locale": "en", + "tx_mode": 5, + "ems_bus_id": 73, + "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": false, + "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": 32, + "hide_led": false, + "led_type": 1, + "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": 50, + "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": false + } }, - "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" + { + "type": "schedule", + "Schedule": { + "schedule": [] + } }, - "MQTT": { - "enableTLS": false, - "rootCA": "", - "enabled": false, - "host": "127.0.0.1", - "port": 1883, - "base": "ems-esp", - "username": "username", - "password": "password", - "client_id": "ems-esp", - "entity_format": 1, - "publish_time_boiler": 10, - "publish_time_thermostat": 10, - "publish_time_solar": 10, - "publish_time_mixer": 10, - "publish_time_water": 10, - "publish_time_other": 60, - "publish_time_sensor": 10, - "publish_time_heartbeat": 60, - "mqtt_qos": 0, - "mqtt_retain": false, - "ha_enabled": false, - "nested_format": 1, - "discovery_prefix": "homeassistant", - "discovery_type": 0, - "publish_single": false, - "publish_single2cmd": false, - "send_response": false + { + "type": "customizations", + "Customizations": { + "ts": [ + { + "id": "28_1767_7B13_2502", + "name": "gateway_temperature", + "offset": 0, + "is_system": true + } + ], + "as": [ + { + "gpio": 39, + "name": "core_voltage", + "offset": 0, + "factor": 0.003771, + "uom": 23, + "type": 3, + "is_system": true + }, + { + "gpio": 36, + "name": "supply_voltage", + "offset": 0, + "factor": 0.017, + "uom": 23, + "type": 3, + "is_system": true + }, + { + "gpio": 2, + "name": "led", + "offset": 0, + "factor": 1, + "uom": 0, + "type": 6, + "is_system": true + } + ], + "masked_entities": [] + } }, - "NTP": { - "enabled": true, - "server": "time.google.com", - "tz_label": "Europe/Amsterdam", - "tz_format": "CET-1CEST,M3.5.0,M10.5.0/3" + { + "type": "entities", + "Entities": { + "entities": [] + } }, - "Security": { - "jwt_secret": "ems-esp-neo", - "users": [ + { + "type": "modules", + "Modules": { + "modules": [] + } + }, + { + "type": "nvs", + "nvs": [ { - "username": "admin", - "password": "admin", - "admin": true - }, - { - "username": "guest", - "password": "guest", - "admin": false + "type": 1, + "key": "fresh_firmware", + "value": 0 } ] - }, - "Settings": { - "board_profile": "S3", - "locale": "en", - "tx_mode": 1, - "ems_bus_id": 11, - "boiler_heatingoff": false, - "hide_led": true, - "telnet_enabled": true, - "notoken_api": false, - "analog_enabled": true, - "fahrenheit": false, - "bool_format": 1, - "bool_dashboard": 1, - "enum_format": 1 } - } \ No newline at end of file + ] +} \ No newline at end of file diff --git a/docs/Modbus-Entity-Registers.md b/docs/Modbus-Entity-Registers.md index 00540f20e..739350265 100644 --- a/docs/Modbus-Entity-Registers.md +++ b/docs/Modbus-Entity-Registers.md @@ -66,142 +66,148 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| mandefrost | manual defrost | cmd | | true | DEVICE_DATA | 84 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| mandefrost | manual defrost | cmd | | true | DEVICE_DATA | 87 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | | dhw.nrg | energy | uint24 | kWh | false | DHW | 0 | 2 | 1/100 | -| nrgheat | energy heating | uint24 | kWh | false | DEVICE_DATA | 87 | 2 | 1/100 | -| nrgcool | energy cooling | uint24 | kWh | false | DEVICE_DATA | 89 | 2 | 1/100 | -| metertotal | meter total | uint24 | kWh | false | DEVICE_DATA | 91 | 2 | 1/100 | -| metercomp | meter compressor | uint24 | kWh | false | DEVICE_DATA | 93 | 2 | 1/100 | -| metereheat | meter e-heater | uint24 | kWh | false | DEVICE_DATA | 95 | 2 | 1/100 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/100 | -| metercool | meter cooling | uint24 | kWh | false | DEVICE_DATA | 99 | 2 | 1/100 | +| nrgheat | energy heating | uint24 | kWh | false | DEVICE_DATA | 90 | 2 | 1/100 | +| nrgcool | energy cooling | uint24 | kWh | false | DEVICE_DATA | 92 | 2 | 1/100 | +| metertotal | meter total | uint24 | kWh | false | DEVICE_DATA | 94 | 2 | 1/100 | +| metercomp | meter compressor | uint24 | kWh | false | DEVICE_DATA | 96 | 2 | 1/100 | +| metereheat | meter e-heater | uint24 | kWh | false | DEVICE_DATA | 98 | 2 | 1/100 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/100 | +| metercool | meter cooling | uint24 | kWh | false | DEVICE_DATA | 102 | 2 | 1/100 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/100 | -| uptimetotal | heatpump total uptime | time | minutes | false | DEVICE_DATA | 101 | 2 | 1/60 | -| uptimecontrol | total operating time heat | time | minutes | false | DEVICE_DATA | 103 | 2 | 1/60 | -| uptimecompheating | operating time compressor heating | time | minutes | false | DEVICE_DATA | 105 | 2 | 1/60 | -| uptimecompcooling | operating time compressor cooling | time | minutes | false | DEVICE_DATA | 107 | 2 | 1/60 | +| uptimetotal | heatpump total uptime | time | minutes | false | DEVICE_DATA | 104 | 2 | 1/60 | +| uptimecontrol | total operating time heat | time | minutes | false | DEVICE_DATA | 106 | 2 | 1/60 | +| uptimecompheating | operating time compressor heating | time | minutes | false | DEVICE_DATA | 108 | 2 | 1/60 | +| uptimecompcooling | operating time compressor cooling | time | minutes | false | DEVICE_DATA | 110 | 2 | 1/60 | | dhw.uptimecomp | operating time compressor | time | minutes | false | DHW | 4 | 2 | 1/60 | -| uptimecomppool | operating time compressor pool | time | minutes | false | DEVICE_DATA | 109 | 2 | 1/60 | -| totalcompstarts | total compressor control starts | uint24 | | false | DEVICE_DATA | 111 | 2 | 1 | -| heatingstarts | heating control starts | uint24 | | false | DEVICE_DATA | 113 | 2 | 1 | -| coolingstarts | cooling control starts | uint24 | | false | DEVICE_DATA | 115 | 2 | 1 | +| uptimecomppool | operating time compressor pool | time | minutes | false | DEVICE_DATA | 112 | 2 | 1/60 | +| totalcompstarts | total compressor control starts | uint24 | | false | DEVICE_DATA | 114 | 2 | 1 | +| heatingstarts | heating control starts | uint24 | | false | DEVICE_DATA | 116 | 2 | 1 | +| coolingstarts | cooling control starts | uint24 | | false | DEVICE_DATA | 118 | 2 | 1 | | dhw.startshp | starts hp | uint24 | | false | DHW | 6 | 2 | 1 | -| poolstarts | pool control starts | uint24 | | false | DEVICE_DATA | 117 | 2 | 1 | -| nrgconstotal | total energy consumption | uint24 | kWh | false | DEVICE_DATA | 119 | 2 | 1 | -| nrgconscomptotal | total energy consumption compressor | uint24 | kWh | false | DEVICE_DATA | 121 | 2 | 1 | -| nrgconscompheating | energy consumption compressor heating | uint24 | kWh | false | DEVICE_DATA | 123 | 2 | 1 | +| poolstarts | pool control starts | uint24 | | false | DEVICE_DATA | 120 | 2 | 1 | +| nrgconstotal | total energy consumption | uint24 | kWh | false | DEVICE_DATA | 122 | 2 | 1 | +| nrgconscomptotal | total energy consumption compressor | uint24 | kWh | false | DEVICE_DATA | 124 | 2 | 1 | +| nrgconscompheating | energy consumption compressor heating | uint24 | kWh | false | DEVICE_DATA | 126 | 2 | 1 | | dhw.nrgconscomp | energy consumption compressor | uint24 | kWh | false | DHW | 8 | 2 | 1 | -| nrgconscompcooling | energy consumption compressor cooling | uint24 | kWh | false | DEVICE_DATA | 125 | 2 | 1 | -| nrgconscomppool | energy consumption compressor pool | uint24 | kWh | false | DEVICE_DATA | 127 | 2 | 1 | -| auxelecheatnrgconstotal | total aux elec. heater energy consumption | uint24 | kWh | false | DEVICE_DATA | 129 | 2 | 1 | -| auxelecheatnrgconsheating | aux elec. heater energy consumption heating | uint24 | kWh | false | DEVICE_DATA | 131 | 2 | 1 | +| nrgconscompcooling | energy consumption compressor cooling | uint24 | kWh | false | DEVICE_DATA | 128 | 2 | 1 | +| nrgconscomppool | energy consumption compressor pool | uint24 | kWh | false | DEVICE_DATA | 130 | 2 | 1 | +| auxelecheatnrgconstotal | total aux elec. heater energy consumption | uint24 | kWh | false | DEVICE_DATA | 132 | 2 | 1 | +| auxelecheatnrgconsheating | aux elec. heater energy consumption heating | uint24 | kWh | false | DEVICE_DATA | 134 | 2 | 1 | | dhw.auxelecheatnrgcons | aux elec. heater energy consumption | uint24 | kWh | false | DHW | 10 | 2 | 1 | -| auxelecheatnrgconspool | aux elec. heater energy consumption pool | uint24 | kWh | false | DEVICE_DATA | 133 | 2 | 1 | -| nrgsupptotal | total energy supplied | uint24 | kWh | false | DEVICE_DATA | 135 | 2 | 1 | -| nrgsuppheating | total energy supplied heating | uint24 | kWh | false | DEVICE_DATA | 137 | 2 | 1 | +| auxelecheatnrgconspool | aux elec. heater energy consumption pool | uint24 | kWh | false | DEVICE_DATA | 136 | 2 | 1 | +| nrgsupptotal | total energy supplied | uint24 | kWh | false | DEVICE_DATA | 138 | 2 | 1 | +| nrgsuppheating | total energy supplied heating | uint24 | kWh | false | DEVICE_DATA | 140 | 2 | 1 | | dhw.nrgsupp | total energy warm supplied | uint24 | kWh | false | DHW | 12 | 2 | 1 | -| nrgsuppcooling | total energy supplied cooling | uint24 | kWh | false | DEVICE_DATA | 139 | 2 | 1 | -| nrgsupppool | total energy supplied pool | uint24 | kWh | false | DEVICE_DATA | 141 | 2 | 1 | -| hppower | compressor power output | uint16 | kW | false | DEVICE_DATA | 143 | 1 | 1/10 | +| nrgsuppcooling | total energy supplied cooling | uint24 | kWh | false | DEVICE_DATA | 142 | 2 | 1 | +| nrgsupppool | total energy supplied pool | uint24 | kWh | false | DEVICE_DATA | 144 | 2 | 1 | +| hppower | compressor power output | uint16 | kW | false | DEVICE_DATA | 146 | 1 | 1/10 | uint8 -| hpmaxpower | compressor max power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 144 | 1 | 1 | +| hpmaxpower | compressor max power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 147 | 1 | 1 | uint8 -| pvmaxcomp | pv compressor max power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 145 | 1 | 1/10 | +| pvmaxcomp | pv compressor max power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 148 | 1 | 1/10 | uint8 -| powerreduction | power reduction | uint8 (>=30<=60) | % | true | DEVICE_DATA | 146 | 1 | 10 | +| powerreduction | power reduction | uint8 (>=30<=60) | % | true | DEVICE_DATA | 149 | 1 | 10 | uint8 -| hpsetdiffpress | set differential pressure | uint8 (>=150<=750) | mbar | true | DEVICE_DATA | 147 | 1 | 50 | -| hpcompon | hp compressor | boolean | | false | DEVICE_DATA | 148 | 1 | 1 | -| hpactivity | compressor activity | enum | | false | DEVICE_DATA | 149 | 1 | 1 | -| hpbrinepumpspd | brine pump speed | uint8 | % | false | DEVICE_DATA | 150 | 1 | 1 | -| hpswitchvalve | switch valve | boolean | | false | DEVICE_DATA | 151 | 1 | 1 | -| hpcompspd | compressor speed | uint8 | % | false | DEVICE_DATA | 152 | 1 | 1 | -| hptargetspd | compressor target speed | uint8 | % | false | DEVICE_DATA | 153 | 1 | 1 | -| hpcircspd | circulation pump speed | uint8 | % | false | DEVICE_DATA | 154 | 1 | 1 | -| recvalve | receiver valve VR0 | uint8 | % | false | DEVICE_DATA | 155 | 1 | 1 | -| expvalve | expansion valve VR1 | uint8 | % | false | DEVICE_DATA | 156 | 1 | 1 | -| hpbrinein | brine in/evaporator | int16 | C | false | DEVICE_DATA | 157 | 1 | 1/10 | -| hpbrineout | brine out/condenser | int16 | C | false | DEVICE_DATA | 158 | 1 | 1/10 | -| hptc0 | heat carrier return (TC0) | int16 | C | false | DEVICE_DATA | 159 | 1 | 1/10 | -| hptc1 | heat carrier forward (TC1) | int16 | C | false | DEVICE_DATA | 160 | 1 | 1/10 | -| hptc3 | condenser temperature (TC3) | int16 | C | false | DEVICE_DATA | 161 | 1 | 1/10 | -| hptr1 | compressor temperature (TR1) | int16 | C | false | DEVICE_DATA | 162 | 1 | 1/10 | -| hptr3 | refrigerant temperature liquid side (condenser output) (TR3) | int16 | C | false | DEVICE_DATA | 163 | 1 | 1/10 | -| hptr4 | evaporator inlet temperature (TR4) | int16 | C | false | DEVICE_DATA | 164 | 1 | 1/10 | -| hptr5 | compressor inlet temperature (TR5) | int16 | C | false | DEVICE_DATA | 165 | 1 | 1/10 | -| hptr6 | compressor outlet temperature (TR6) | int16 | C | false | DEVICE_DATA | 166 | 1 | 1/10 | -| hptr7 | refrigerant temperature gas side (condenser input) (TR7) | int16 | C | false | DEVICE_DATA | 167 | 1 | 1/10 | -| hptl2 | air inlet temperature (TL2) | int16 | C | false | DEVICE_DATA | 168 | 1 | 1/10 | -| hppl1 | low pressure side temperature (PL1) | int16 | C | false | DEVICE_DATA | 169 | 1 | 1/10 | -| hpph1 | high pressure side temperature (PH1) | int16 | C | false | DEVICE_DATA | 170 | 1 | 1/10 | -| hpta4 | drain pan temp (TA4) | int16 | C | false | DEVICE_DATA | 171 | 1 | 1/10 | -| hptw1 | reservoir temp (TW1) | int16 | C | false | DEVICE_DATA | 172 | 1 | 1/10 | +| hpsetdiffpress | set differential pressure | uint8 (>=150<=750) | mbar | true | DEVICE_DATA | 150 | 1 | 50 | +| hpcompon | hp compressor | boolean | | false | DEVICE_DATA | 151 | 1 | 1 | +| hpactivity | compressor activity | enum | | false | DEVICE_DATA | 152 | 1 | 1 | +| hpbrinepumpspd | brine pump speed | uint8 | % | false | DEVICE_DATA | 153 | 1 | 1 | +| hpswitchvalve | switch valve | boolean | | false | DEVICE_DATA | 154 | 1 | 1 | +| hpcompspd | compressor speed | uint8 | % | false | DEVICE_DATA | 155 | 1 | 1 | +| hptargetspd | compressor target speed | uint8 | % | false | DEVICE_DATA | 156 | 1 | 1 | +| hpcircspd | circulation pump speed | uint8 | % | false | DEVICE_DATA | 157 | 1 | 1 | +| recvalve | receiver valve VR0 | uint8 | % | false | DEVICE_DATA | 158 | 1 | 1 | +| expvalve | expansion valve VR1 | uint8 | % | false | DEVICE_DATA | 159 | 1 | 1 | +| hpbrinein | brine in/evaporator | int16 | C | false | DEVICE_DATA | 160 | 1 | 1/10 | +| hpbrineout | brine out/condenser | int16 | C | false | DEVICE_DATA | 161 | 1 | 1/10 | +| hptc0 | heat carrier return (TC0) | int16 | C | false | DEVICE_DATA | 162 | 1 | 1/10 | +| hptc1 | heat carrier forward (TC1) | int16 | C | false | DEVICE_DATA | 163 | 1 | 1/10 | +| hptc3 | condenser temperature (TC3) | int16 | C | false | DEVICE_DATA | 164 | 1 | 1/10 | +| hptr1 | compressor temperature (TR1) | int16 | C | false | DEVICE_DATA | 165 | 1 | 1/10 | +| hptr3 | refrigerant temperature liquid side (condenser output) (TR3) | int16 | C | false | DEVICE_DATA | 166 | 1 | 1/10 | +| hptr4 | evaporator inlet temperature (TR4) | int16 | C | false | DEVICE_DATA | 167 | 1 | 1/10 | +| hptr5 | compressor inlet temperature (TR5) | int16 | C | false | DEVICE_DATA | 168 | 1 | 1/10 | +| hptr6 | compressor outlet temperature (TR6) | int16 | C | false | DEVICE_DATA | 169 | 1 | 1/10 | +| hptr7 | refrigerant temperature gas side (condenser input) (TR7) | int16 | C | false | DEVICE_DATA | 170 | 1 | 1/10 | +| hptl2 | air inlet temperature (TL2) | int16 | C | false | DEVICE_DATA | 171 | 1 | 1/10 | +| hppl1 | low pressure side temperature (PL1) | int16 | C | false | DEVICE_DATA | 172 | 1 | 1/10 | +| hpph1 | high pressure side temperature (PH1) | int16 | C | false | DEVICE_DATA | 173 | 1 | 1/10 | +| hpta4 | drain pan temp (TA4) | int16 | C | false | DEVICE_DATA | 174 | 1 | 1/10 | +| hptw1 | reservoir temp (TW1) | int16 | C | false | DEVICE_DATA | 175 | 1 | 1/10 | uint8 -| poolsettemp | pool set temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 173 | 1 | 1/2 | -| hpin1 | input 1 state | boolean | | false | DEVICE_DATA | 174 | 1 | 1 | -| hpin1opt | input 1 options | string | | true | DEVICE_DATA | 175 | 8 | 1 | -| hpin2 | input 2 state | boolean | | false | DEVICE_DATA | 183 | 1 | 1 | -| hpin2opt | input 2 options | string | | true | DEVICE_DATA | 184 | 8 | 1 | -| hpin3 | input 3 state | boolean | | false | DEVICE_DATA | 192 | 1 | 1 | -| hpin3opt | input 3 options | string | | true | DEVICE_DATA | 193 | 8 | 1 | -| hpin4 | input 4 state | boolean | | false | DEVICE_DATA | 201 | 1 | 1 | -| hpin4opt | input 4 options | string | | true | DEVICE_DATA | 202 | 8 | 1 | -| maxheatcomp | heat limit compressor | enum | | true | DEVICE_DATA | 210 | 1 | 1 | -| maxheatheat | heat limit heating | enum | | true | DEVICE_DATA | 211 | 1 | 1 | +| poolsettemp | pool set temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 176 | 1 | 1/2 | +| hp4way | 4-way valve (VR4) | boolean | | false | DEVICE_DATA | 177 | 1 | 1 | +| hpin1 | input 1 state | boolean | | false | DEVICE_DATA | 178 | 1 | 1 | +| hpin1opt | input 1 options | string | | true | DEVICE_DATA | 179 | 8 | 1 | +| hpin2 | input 2 state | boolean | | false | DEVICE_DATA | 187 | 1 | 1 | +| hpin2opt | input 2 options | string | | true | DEVICE_DATA | 188 | 8 | 1 | +| hpin3 | input 3 state | boolean | | false | DEVICE_DATA | 196 | 1 | 1 | +| hpin3opt | input 3 options | string | | true | DEVICE_DATA | 197 | 8 | 1 | +| hpin4 | input 4 state | boolean | | false | DEVICE_DATA | 205 | 1 | 1 | +| hpin4opt | input 4 options | string | | true | DEVICE_DATA | 206 | 8 | 1 | +| maxheatcomp | heat limit compressor | enum | | true | DEVICE_DATA | 214 | 1 | 1 | +| maxheatheat | heat limit heating | enum | | true | DEVICE_DATA | 215 | 1 | 1 | | dhw.maxheat | heat limit | enum | | true | DHW | 14 | 1 | 1 | -| auxheatersource | aux heater source | enum | | true | DEVICE_DATA | 212 | 1 | 1 | -| pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 213 | 1 | 1 | -| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 214 | 1 | 1 | -| auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 215 | 1 | 1 | -| auxheaterstatus | aux heater status | enum | | false | DEVICE_DATA | 216 | 1 | 1 | -| auxheaterlevel | aux heater level | uint8 | % | false | DEVICE_DATA | 217 | 1 | 1 | +| auxheatersource | aux heater source | enum | | true | DEVICE_DATA | 216 | 1 | 1 | +| pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 217 | 1 | 1 | +| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 218 | 1 | 1 | +| auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 219 | 1 | 1 | +| auxheaterstatus | aux heater status | enum | | false | DEVICE_DATA | 220 | 1 | 1 | +| auxheaterlevel | aux heater level | uint8 | % | false | DEVICE_DATA | 221 | 1 | 1 | uint16 -| auxheaterdelay | aux heater on delay | uint16 (>=10<=1000) | K*min | true | DEVICE_DATA | 218 | 1 | 10 | +| auxheaterdelay | aux heater on delay | uint16 (>=10<=1000) | K*min | true | DEVICE_DATA | 222 | 1 | 10 | uint8 -| auxmaxlimit | aux heater max limit | uint8 (>=0<=10) | K | true | DEVICE_DATA | 219 | 1 | 1/10 | +| auxmaxlimit | aux heater max limit | uint8 (>=0<=10) | K | true | DEVICE_DATA | 223 | 1 | 1/10 | uint8 -| auxlimitstart | aux heater limit start | uint8 (>=0<=10) | K | true | DEVICE_DATA | 220 | 1 | 1/10 | -| auxheatrmode | aux heater mode | enum | | true | DEVICE_DATA | 221 | 1 | 1 | +| auxlimitstart | aux heater limit start | uint8 (>=0<=10) | K | true | DEVICE_DATA | 224 | 1 | 1/10 | +| auxheatrmode | aux heater mode | enum | | true | DEVICE_DATA | 225 | 1 | 1 | uint16 -| hphystheat | on/off hyst heat | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 222 | 1 | 5 | +| hphystheat | on/off hyst heat | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 226 | 1 | 5 | uint16 -| hphystcool | on/off hyst cool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 223 | 1 | 5 | +| hphystcool | on/off hyst cool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 227 | 1 | 5 | uint16 -| hphystpool | on/off hyst pool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 224 | 1 | 5 | -| silentmode | silent mode | enum | | true | DEVICE_DATA | 225 | 1 | 1 | +| hphystpool | on/off hyst pool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 228 | 1 | 5 | +| silentmode | silent mode | enum | | true | DEVICE_DATA | 229 | 1 | 1 | uint8 -| silentfrom | silent mode from | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 226 | 1 | 15 | +| silentfrom | silent mode from | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 230 | 1 | 15 | uint8 -| silentto | silent mode to | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 227 | 1 | 15 | +| silentto | silent mode to | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 231 | 1 | 15 | int8 -| mintempsilent | min outside temp for silent mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 228 | 1 | 1 | +| mintempsilent | min outside temp for silent mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 232 | 1 | 1 | int8 -| tempparmode | outside temp parallel mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 229 | 1 | 1 | -| auxheatmix | aux heater mixing valve | int8 | % | false | DEVICE_DATA | 230 | 1 | 1 | +| tempparmode | outside temp parallel mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 233 | 1 | 1 | +| auxheatmix | aux heater mixing valve | int8 | % | false | DEVICE_DATA | 234 | 1 | 1 | uint8 -| tempdiffheat | temp diff TC3/TC0 heat | uint8 (>=2<=10) | K | true | DEVICE_DATA | 231 | 1 | 1/10 | +| tempdiffheat | temp diff TC3/TC0 heat | uint8 (>=2<=10) | K | true | DEVICE_DATA | 235 | 1 | 1/10 | uint8 -| tempdiffcool | temp diff TC3/TC0 cool | uint8 (>=2<=10) | K | true | DEVICE_DATA | 232 | 1 | 1/10 | -| vpcooling | valve/pump cooling | boolean | | true | DEVICE_DATA | 233 | 1 | 1 | -| heatcable | heating cable | boolean | | true | DEVICE_DATA | 234 | 1 | 1 | -| vc0valve | VC0 valve | boolean | | true | DEVICE_DATA | 235 | 1 | 1 | -| primepump | primary heatpump | boolean | | true | DEVICE_DATA | 236 | 1 | 1 | +| tempdiffcool | temp diff TC3/TC0 cool | uint8 (>=2<=10) | K | true | DEVICE_DATA | 236 | 1 | 1/10 | +| vpcooling | valve/pump cooling | boolean | | true | DEVICE_DATA | 237 | 1 | 1 | +| heatcable | heating cable | boolean | | true | DEVICE_DATA | 238 | 1 | 1 | +| vc0valve | VC0 valve | boolean | | true | DEVICE_DATA | 239 | 1 | 1 | +| primepump | primary heatpump | boolean | | true | DEVICE_DATA | 240 | 1 | 1 | uint8 -| primepumpmod | primary heatpump modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 237 | 1 | 1 | -| hp3way | 3-way valve | boolean | | true | DEVICE_DATA | 238 | 1 | 1 | -| elheatstep1 | el. heater step 1 | boolean | | true | DEVICE_DATA | 239 | 1 | 1 | -| elheatstep2 | el. heater step 2 | boolean | | true | DEVICE_DATA | 240 | 1 | 1 | -| elheatstep3 | el. heater step 3 | boolean | | true | DEVICE_DATA | 241 | 1 | 1 | -| hpea0 | condensate reservoir heating (EA0) | boolean | | false | DEVICE_DATA | 242 | 1 | 1 | -| hppumpmode | primary heatpump mode | enum | | true | DEVICE_DATA | 243 | 1 | 1 | +| primepumpmod | primary heatpump modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 241 | 1 | 1 | +| hp3way | 3-way valve | boolean | | true | DEVICE_DATA | 242 | 1 | 1 | +| elheatstep1 | el. heater step 1 | boolean | | true | DEVICE_DATA | 243 | 1 | 1 | +| elheatstep2 | el. heater step 2 | boolean | | true | DEVICE_DATA | 244 | 1 | 1 | +| elheatstep3 | el. heater step 3 | boolean | | true | DEVICE_DATA | 245 | 1 | 1 | +| hpea0 | condensate reservoir heating (EA0) | boolean | | false | DEVICE_DATA | 246 | 1 | 1 | +| hppumpmode | primary heatpump mode | enum | | true | DEVICE_DATA | 247 | 1 | 1 | uint8 -| fan | fan | uint8 (>=20<=100) | % | true | DEVICE_DATA | 244 | 1 | 1 | -| fanspd | fan speed | uint8 | % | false | DEVICE_DATA | 245 | 1 | 1 | -| shutdown | shutdown | cmd | | true | DEVICE_DATA | 246 | 1 | 1 | -| hpcurrpower | compressor current power | uint16 | W | false | DEVICE_DATA | 247 | 1 | 1 | +| fan | fan | uint8 (>=20<=100) | % | true | DEVICE_DATA | 248 | 1 | 1 | +| fanspd | fan speed | uint8 | % | false | DEVICE_DATA | 249 | 1 | 1 | +| shutdown | shutdown | cmd | | true | DEVICE_DATA | 250 | 1 | 1 | +| hpcurrpower | compressor current power | uint16 | W | false | DEVICE_DATA | 251 | 1 | 1 | uint16 -| hppowerlimit | power limit | uint16 (>=0<=0) | W | true | DEVICE_DATA | 248 | 1 | 1 | +| hppowerlimit | power limit | uint16 (>=0<=0) | W | true | DEVICE_DATA | 252 | 1 | 1 | | dhw.alternatingop | alternating operation | boolean | | true | DHW | 15 | 1 | 1 | uint8 | dhw.altopprioheat | prioritise heating during dhw | uint8 (>=20<=120) | minutes | true | DHW | 16 | 1 | 1 | @@ -297,39 +303,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -368,11 +372,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -426,10 +435,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -452,39 +461,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -523,11 +530,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -581,10 +593,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -607,39 +619,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -678,11 +688,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -736,10 +751,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -762,39 +777,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -833,11 +846,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -891,10 +909,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -917,39 +935,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -988,11 +1004,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -1046,10 +1067,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -1072,39 +1093,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -1143,11 +1162,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -1201,10 +1225,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -1227,39 +1251,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -1298,11 +1320,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -1356,10 +1383,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -1382,39 +1409,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -1453,11 +1478,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -1511,10 +1541,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -1537,39 +1567,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -1608,11 +1636,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -1666,10 +1699,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -1692,39 +1725,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -1763,11 +1794,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -1821,10 +1857,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -1847,39 +1883,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -1918,11 +1952,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -1976,10 +2015,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -2002,39 +2041,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -2073,11 +2110,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -2131,10 +2173,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -2157,39 +2199,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -2228,11 +2268,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -2286,10 +2331,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -2312,39 +2357,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -2383,11 +2426,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -2441,10 +2489,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -2467,39 +2515,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -2538,11 +2584,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -2596,10 +2647,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -2622,39 +2673,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -2693,11 +2742,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -2751,10 +2805,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -2777,39 +2831,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -2848,11 +2900,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -2906,10 +2963,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -2932,39 +2989,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -3003,11 +3058,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -3061,10 +3121,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -3087,39 +3147,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -3158,11 +3216,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -3216,10 +3279,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -3242,39 +3305,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -3313,11 +3374,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -3371,10 +3437,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -3435,142 +3501,148 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| mandefrost | manual defrost | cmd | | true | DEVICE_DATA | 84 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| mandefrost | manual defrost | cmd | | true | DEVICE_DATA | 87 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | | dhw.nrg | energy | uint24 | kWh | false | DHW | 0 | 2 | 1/100 | -| nrgheat | energy heating | uint24 | kWh | false | DEVICE_DATA | 87 | 2 | 1/100 | -| nrgcool | energy cooling | uint24 | kWh | false | DEVICE_DATA | 89 | 2 | 1/100 | -| metertotal | meter total | uint24 | kWh | false | DEVICE_DATA | 91 | 2 | 1/100 | -| metercomp | meter compressor | uint24 | kWh | false | DEVICE_DATA | 93 | 2 | 1/100 | -| metereheat | meter e-heater | uint24 | kWh | false | DEVICE_DATA | 95 | 2 | 1/100 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/100 | -| metercool | meter cooling | uint24 | kWh | false | DEVICE_DATA | 99 | 2 | 1/100 | +| nrgheat | energy heating | uint24 | kWh | false | DEVICE_DATA | 90 | 2 | 1/100 | +| nrgcool | energy cooling | uint24 | kWh | false | DEVICE_DATA | 92 | 2 | 1/100 | +| metertotal | meter total | uint24 | kWh | false | DEVICE_DATA | 94 | 2 | 1/100 | +| metercomp | meter compressor | uint24 | kWh | false | DEVICE_DATA | 96 | 2 | 1/100 | +| metereheat | meter e-heater | uint24 | kWh | false | DEVICE_DATA | 98 | 2 | 1/100 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/100 | +| metercool | meter cooling | uint24 | kWh | false | DEVICE_DATA | 102 | 2 | 1/100 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/100 | -| uptimetotal | heatpump total uptime | time | minutes | false | DEVICE_DATA | 101 | 2 | 1/60 | -| uptimecontrol | total operating time heat | time | minutes | false | DEVICE_DATA | 103 | 2 | 1/60 | -| uptimecompheating | operating time compressor heating | time | minutes | false | DEVICE_DATA | 105 | 2 | 1/60 | -| uptimecompcooling | operating time compressor cooling | time | minutes | false | DEVICE_DATA | 107 | 2 | 1/60 | +| uptimetotal | heatpump total uptime | time | minutes | false | DEVICE_DATA | 104 | 2 | 1/60 | +| uptimecontrol | total operating time heat | time | minutes | false | DEVICE_DATA | 106 | 2 | 1/60 | +| uptimecompheating | operating time compressor heating | time | minutes | false | DEVICE_DATA | 108 | 2 | 1/60 | +| uptimecompcooling | operating time compressor cooling | time | minutes | false | DEVICE_DATA | 110 | 2 | 1/60 | | dhw.uptimecomp | operating time compressor | time | minutes | false | DHW | 4 | 2 | 1/60 | -| uptimecomppool | operating time compressor pool | time | minutes | false | DEVICE_DATA | 109 | 2 | 1/60 | -| totalcompstarts | total compressor control starts | uint24 | | false | DEVICE_DATA | 111 | 2 | 1 | -| heatingstarts | heating control starts | uint24 | | false | DEVICE_DATA | 113 | 2 | 1 | -| coolingstarts | cooling control starts | uint24 | | false | DEVICE_DATA | 115 | 2 | 1 | +| uptimecomppool | operating time compressor pool | time | minutes | false | DEVICE_DATA | 112 | 2 | 1/60 | +| totalcompstarts | total compressor control starts | uint24 | | false | DEVICE_DATA | 114 | 2 | 1 | +| heatingstarts | heating control starts | uint24 | | false | DEVICE_DATA | 116 | 2 | 1 | +| coolingstarts | cooling control starts | uint24 | | false | DEVICE_DATA | 118 | 2 | 1 | | dhw.startshp | starts hp | uint24 | | false | DHW | 6 | 2 | 1 | -| poolstarts | pool control starts | uint24 | | false | DEVICE_DATA | 117 | 2 | 1 | -| nrgconstotal | total energy consumption | uint24 | kWh | false | DEVICE_DATA | 119 | 2 | 1 | -| nrgconscomptotal | total energy consumption compressor | uint24 | kWh | false | DEVICE_DATA | 121 | 2 | 1 | -| nrgconscompheating | energy consumption compressor heating | uint24 | kWh | false | DEVICE_DATA | 123 | 2 | 1 | +| poolstarts | pool control starts | uint24 | | false | DEVICE_DATA | 120 | 2 | 1 | +| nrgconstotal | total energy consumption | uint24 | kWh | false | DEVICE_DATA | 122 | 2 | 1 | +| nrgconscomptotal | total energy consumption compressor | uint24 | kWh | false | DEVICE_DATA | 124 | 2 | 1 | +| nrgconscompheating | energy consumption compressor heating | uint24 | kWh | false | DEVICE_DATA | 126 | 2 | 1 | | dhw.nrgconscomp | energy consumption compressor | uint24 | kWh | false | DHW | 8 | 2 | 1 | -| nrgconscompcooling | energy consumption compressor cooling | uint24 | kWh | false | DEVICE_DATA | 125 | 2 | 1 | -| nrgconscomppool | energy consumption compressor pool | uint24 | kWh | false | DEVICE_DATA | 127 | 2 | 1 | -| auxelecheatnrgconstotal | total aux elec. heater energy consumption | uint24 | kWh | false | DEVICE_DATA | 129 | 2 | 1 | -| auxelecheatnrgconsheating | aux elec. heater energy consumption heating | uint24 | kWh | false | DEVICE_DATA | 131 | 2 | 1 | +| nrgconscompcooling | energy consumption compressor cooling | uint24 | kWh | false | DEVICE_DATA | 128 | 2 | 1 | +| nrgconscomppool | energy consumption compressor pool | uint24 | kWh | false | DEVICE_DATA | 130 | 2 | 1 | +| auxelecheatnrgconstotal | total aux elec. heater energy consumption | uint24 | kWh | false | DEVICE_DATA | 132 | 2 | 1 | +| auxelecheatnrgconsheating | aux elec. heater energy consumption heating | uint24 | kWh | false | DEVICE_DATA | 134 | 2 | 1 | | dhw.auxelecheatnrgcons | aux elec. heater energy consumption | uint24 | kWh | false | DHW | 10 | 2 | 1 | -| auxelecheatnrgconspool | aux elec. heater energy consumption pool | uint24 | kWh | false | DEVICE_DATA | 133 | 2 | 1 | -| nrgsupptotal | total energy supplied | uint24 | kWh | false | DEVICE_DATA | 135 | 2 | 1 | -| nrgsuppheating | total energy supplied heating | uint24 | kWh | false | DEVICE_DATA | 137 | 2 | 1 | +| auxelecheatnrgconspool | aux elec. heater energy consumption pool | uint24 | kWh | false | DEVICE_DATA | 136 | 2 | 1 | +| nrgsupptotal | total energy supplied | uint24 | kWh | false | DEVICE_DATA | 138 | 2 | 1 | +| nrgsuppheating | total energy supplied heating | uint24 | kWh | false | DEVICE_DATA | 140 | 2 | 1 | | dhw.nrgsupp | total energy warm supplied | uint24 | kWh | false | DHW | 12 | 2 | 1 | -| nrgsuppcooling | total energy supplied cooling | uint24 | kWh | false | DEVICE_DATA | 139 | 2 | 1 | -| nrgsupppool | total energy supplied pool | uint24 | kWh | false | DEVICE_DATA | 141 | 2 | 1 | -| hppower | compressor power output | uint16 | kW | false | DEVICE_DATA | 143 | 1 | 1/10 | +| nrgsuppcooling | total energy supplied cooling | uint24 | kWh | false | DEVICE_DATA | 142 | 2 | 1 | +| nrgsupppool | total energy supplied pool | uint24 | kWh | false | DEVICE_DATA | 144 | 2 | 1 | +| hppower | compressor power output | uint16 | kW | false | DEVICE_DATA | 146 | 1 | 1/10 | uint8 -| hpmaxpower | compressor max power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 144 | 1 | 1 | +| hpmaxpower | compressor max power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 147 | 1 | 1 | uint8 -| pvmaxcomp | pv compressor max power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 145 | 1 | 1/10 | +| pvmaxcomp | pv compressor max power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 148 | 1 | 1/10 | uint8 -| powerreduction | power reduction | uint8 (>=30<=60) | % | true | DEVICE_DATA | 146 | 1 | 10 | +| powerreduction | power reduction | uint8 (>=30<=60) | % | true | DEVICE_DATA | 149 | 1 | 10 | uint8 -| hpsetdiffpress | set differential pressure | uint8 (>=150<=750) | mbar | true | DEVICE_DATA | 147 | 1 | 50 | -| hpcompon | hp compressor | boolean | | false | DEVICE_DATA | 148 | 1 | 1 | -| hpactivity | compressor activity | enum | | false | DEVICE_DATA | 149 | 1 | 1 | -| hpbrinepumpspd | brine pump speed | uint8 | % | false | DEVICE_DATA | 150 | 1 | 1 | -| hpswitchvalve | switch valve | boolean | | false | DEVICE_DATA | 151 | 1 | 1 | -| hpcompspd | compressor speed | uint8 | % | false | DEVICE_DATA | 152 | 1 | 1 | -| hptargetspd | compressor target speed | uint8 | % | false | DEVICE_DATA | 153 | 1 | 1 | -| hpcircspd | circulation pump speed | uint8 | % | false | DEVICE_DATA | 154 | 1 | 1 | -| recvalve | receiver valve VR0 | uint8 | % | false | DEVICE_DATA | 155 | 1 | 1 | -| expvalve | expansion valve VR1 | uint8 | % | false | DEVICE_DATA | 156 | 1 | 1 | -| hpbrinein | brine in/evaporator | int16 | C | false | DEVICE_DATA | 157 | 1 | 1/10 | -| hpbrineout | brine out/condenser | int16 | C | false | DEVICE_DATA | 158 | 1 | 1/10 | -| hptc0 | heat carrier return (TC0) | int16 | C | false | DEVICE_DATA | 159 | 1 | 1/10 | -| hptc1 | heat carrier forward (TC1) | int16 | C | false | DEVICE_DATA | 160 | 1 | 1/10 | -| hptc3 | condenser temperature (TC3) | int16 | C | false | DEVICE_DATA | 161 | 1 | 1/10 | -| hptr1 | compressor temperature (TR1) | int16 | C | false | DEVICE_DATA | 162 | 1 | 1/10 | -| hptr3 | refrigerant temperature liquid side (condenser output) (TR3) | int16 | C | false | DEVICE_DATA | 163 | 1 | 1/10 | -| hptr4 | evaporator inlet temperature (TR4) | int16 | C | false | DEVICE_DATA | 164 | 1 | 1/10 | -| hptr5 | compressor inlet temperature (TR5) | int16 | C | false | DEVICE_DATA | 165 | 1 | 1/10 | -| hptr6 | compressor outlet temperature (TR6) | int16 | C | false | DEVICE_DATA | 166 | 1 | 1/10 | -| hptr7 | refrigerant temperature gas side (condenser input) (TR7) | int16 | C | false | DEVICE_DATA | 167 | 1 | 1/10 | -| hptl2 | air inlet temperature (TL2) | int16 | C | false | DEVICE_DATA | 168 | 1 | 1/10 | -| hppl1 | low pressure side temperature (PL1) | int16 | C | false | DEVICE_DATA | 169 | 1 | 1/10 | -| hpph1 | high pressure side temperature (PH1) | int16 | C | false | DEVICE_DATA | 170 | 1 | 1/10 | -| hpta4 | drain pan temp (TA4) | int16 | C | false | DEVICE_DATA | 171 | 1 | 1/10 | -| hptw1 | reservoir temp (TW1) | int16 | C | false | DEVICE_DATA | 172 | 1 | 1/10 | +| hpsetdiffpress | set differential pressure | uint8 (>=150<=750) | mbar | true | DEVICE_DATA | 150 | 1 | 50 | +| hpcompon | hp compressor | boolean | | false | DEVICE_DATA | 151 | 1 | 1 | +| hpactivity | compressor activity | enum | | false | DEVICE_DATA | 152 | 1 | 1 | +| hpbrinepumpspd | brine pump speed | uint8 | % | false | DEVICE_DATA | 153 | 1 | 1 | +| hpswitchvalve | switch valve | boolean | | false | DEVICE_DATA | 154 | 1 | 1 | +| hpcompspd | compressor speed | uint8 | % | false | DEVICE_DATA | 155 | 1 | 1 | +| hptargetspd | compressor target speed | uint8 | % | false | DEVICE_DATA | 156 | 1 | 1 | +| hpcircspd | circulation pump speed | uint8 | % | false | DEVICE_DATA | 157 | 1 | 1 | +| recvalve | receiver valve VR0 | uint8 | % | false | DEVICE_DATA | 158 | 1 | 1 | +| expvalve | expansion valve VR1 | uint8 | % | false | DEVICE_DATA | 159 | 1 | 1 | +| hpbrinein | brine in/evaporator | int16 | C | false | DEVICE_DATA | 160 | 1 | 1/10 | +| hpbrineout | brine out/condenser | int16 | C | false | DEVICE_DATA | 161 | 1 | 1/10 | +| hptc0 | heat carrier return (TC0) | int16 | C | false | DEVICE_DATA | 162 | 1 | 1/10 | +| hptc1 | heat carrier forward (TC1) | int16 | C | false | DEVICE_DATA | 163 | 1 | 1/10 | +| hptc3 | condenser temperature (TC3) | int16 | C | false | DEVICE_DATA | 164 | 1 | 1/10 | +| hptr1 | compressor temperature (TR1) | int16 | C | false | DEVICE_DATA | 165 | 1 | 1/10 | +| hptr3 | refrigerant temperature liquid side (condenser output) (TR3) | int16 | C | false | DEVICE_DATA | 166 | 1 | 1/10 | +| hptr4 | evaporator inlet temperature (TR4) | int16 | C | false | DEVICE_DATA | 167 | 1 | 1/10 | +| hptr5 | compressor inlet temperature (TR5) | int16 | C | false | DEVICE_DATA | 168 | 1 | 1/10 | +| hptr6 | compressor outlet temperature (TR6) | int16 | C | false | DEVICE_DATA | 169 | 1 | 1/10 | +| hptr7 | refrigerant temperature gas side (condenser input) (TR7) | int16 | C | false | DEVICE_DATA | 170 | 1 | 1/10 | +| hptl2 | air inlet temperature (TL2) | int16 | C | false | DEVICE_DATA | 171 | 1 | 1/10 | +| hppl1 | low pressure side temperature (PL1) | int16 | C | false | DEVICE_DATA | 172 | 1 | 1/10 | +| hpph1 | high pressure side temperature (PH1) | int16 | C | false | DEVICE_DATA | 173 | 1 | 1/10 | +| hpta4 | drain pan temp (TA4) | int16 | C | false | DEVICE_DATA | 174 | 1 | 1/10 | +| hptw1 | reservoir temp (TW1) | int16 | C | false | DEVICE_DATA | 175 | 1 | 1/10 | uint8 -| poolsettemp | pool set temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 173 | 1 | 1/2 | -| hpin1 | input 1 state | boolean | | false | DEVICE_DATA | 174 | 1 | 1 | -| hpin1opt | input 1 options | string | | true | DEVICE_DATA | 175 | 8 | 1 | -| hpin2 | input 2 state | boolean | | false | DEVICE_DATA | 183 | 1 | 1 | -| hpin2opt | input 2 options | string | | true | DEVICE_DATA | 184 | 8 | 1 | -| hpin3 | input 3 state | boolean | | false | DEVICE_DATA | 192 | 1 | 1 | -| hpin3opt | input 3 options | string | | true | DEVICE_DATA | 193 | 8 | 1 | -| hpin4 | input 4 state | boolean | | false | DEVICE_DATA | 201 | 1 | 1 | -| hpin4opt | input 4 options | string | | true | DEVICE_DATA | 202 | 8 | 1 | -| maxheatcomp | heat limit compressor | enum | | true | DEVICE_DATA | 210 | 1 | 1 | -| maxheatheat | heat limit heating | enum | | true | DEVICE_DATA | 211 | 1 | 1 | +| poolsettemp | pool set temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 176 | 1 | 1/2 | +| hp4way | 4-way valve (VR4) | boolean | | false | DEVICE_DATA | 177 | 1 | 1 | +| hpin1 | input 1 state | boolean | | false | DEVICE_DATA | 178 | 1 | 1 | +| hpin1opt | input 1 options | string | | true | DEVICE_DATA | 179 | 8 | 1 | +| hpin2 | input 2 state | boolean | | false | DEVICE_DATA | 187 | 1 | 1 | +| hpin2opt | input 2 options | string | | true | DEVICE_DATA | 188 | 8 | 1 | +| hpin3 | input 3 state | boolean | | false | DEVICE_DATA | 196 | 1 | 1 | +| hpin3opt | input 3 options | string | | true | DEVICE_DATA | 197 | 8 | 1 | +| hpin4 | input 4 state | boolean | | false | DEVICE_DATA | 205 | 1 | 1 | +| hpin4opt | input 4 options | string | | true | DEVICE_DATA | 206 | 8 | 1 | +| maxheatcomp | heat limit compressor | enum | | true | DEVICE_DATA | 214 | 1 | 1 | +| maxheatheat | heat limit heating | enum | | true | DEVICE_DATA | 215 | 1 | 1 | | dhw.maxheat | heat limit | enum | | true | DHW | 14 | 1 | 1 | -| auxheatersource | aux heater source | enum | | true | DEVICE_DATA | 212 | 1 | 1 | -| pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 213 | 1 | 1 | -| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 214 | 1 | 1 | -| auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 215 | 1 | 1 | -| auxheaterstatus | aux heater status | enum | | false | DEVICE_DATA | 216 | 1 | 1 | -| auxheaterlevel | aux heater level | uint8 | % | false | DEVICE_DATA | 217 | 1 | 1 | +| auxheatersource | aux heater source | enum | | true | DEVICE_DATA | 216 | 1 | 1 | +| pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 217 | 1 | 1 | +| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 218 | 1 | 1 | +| auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 219 | 1 | 1 | +| auxheaterstatus | aux heater status | enum | | false | DEVICE_DATA | 220 | 1 | 1 | +| auxheaterlevel | aux heater level | uint8 | % | false | DEVICE_DATA | 221 | 1 | 1 | uint16 -| auxheaterdelay | aux heater on delay | uint16 (>=10<=1000) | K*min | true | DEVICE_DATA | 218 | 1 | 10 | +| auxheaterdelay | aux heater on delay | uint16 (>=10<=1000) | K*min | true | DEVICE_DATA | 222 | 1 | 10 | uint8 -| auxmaxlimit | aux heater max limit | uint8 (>=0<=10) | K | true | DEVICE_DATA | 219 | 1 | 1/10 | +| auxmaxlimit | aux heater max limit | uint8 (>=0<=10) | K | true | DEVICE_DATA | 223 | 1 | 1/10 | uint8 -| auxlimitstart | aux heater limit start | uint8 (>=0<=10) | K | true | DEVICE_DATA | 220 | 1 | 1/10 | -| auxheatrmode | aux heater mode | enum | | true | DEVICE_DATA | 221 | 1 | 1 | +| auxlimitstart | aux heater limit start | uint8 (>=0<=10) | K | true | DEVICE_DATA | 224 | 1 | 1/10 | +| auxheatrmode | aux heater mode | enum | | true | DEVICE_DATA | 225 | 1 | 1 | uint16 -| hphystheat | on/off hyst heat | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 222 | 1 | 5 | +| hphystheat | on/off hyst heat | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 226 | 1 | 5 | uint16 -| hphystcool | on/off hyst cool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 223 | 1 | 5 | +| hphystcool | on/off hyst cool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 227 | 1 | 5 | uint16 -| hphystpool | on/off hyst pool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 224 | 1 | 5 | -| silentmode | silent mode | enum | | true | DEVICE_DATA | 225 | 1 | 1 | +| hphystpool | on/off hyst pool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 228 | 1 | 5 | +| silentmode | silent mode | enum | | true | DEVICE_DATA | 229 | 1 | 1 | uint8 -| silentfrom | silent mode from | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 226 | 1 | 15 | +| silentfrom | silent mode from | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 230 | 1 | 15 | uint8 -| silentto | silent mode to | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 227 | 1 | 15 | +| silentto | silent mode to | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 231 | 1 | 15 | int8 -| mintempsilent | min outside temp for silent mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 228 | 1 | 1 | +| mintempsilent | min outside temp for silent mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 232 | 1 | 1 | int8 -| tempparmode | outside temp parallel mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 229 | 1 | 1 | -| auxheatmix | aux heater mixing valve | int8 | % | false | DEVICE_DATA | 230 | 1 | 1 | +| tempparmode | outside temp parallel mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 233 | 1 | 1 | +| auxheatmix | aux heater mixing valve | int8 | % | false | DEVICE_DATA | 234 | 1 | 1 | uint8 -| tempdiffheat | temp diff TC3/TC0 heat | uint8 (>=2<=10) | K | true | DEVICE_DATA | 231 | 1 | 1/10 | +| tempdiffheat | temp diff TC3/TC0 heat | uint8 (>=2<=10) | K | true | DEVICE_DATA | 235 | 1 | 1/10 | uint8 -| tempdiffcool | temp diff TC3/TC0 cool | uint8 (>=2<=10) | K | true | DEVICE_DATA | 232 | 1 | 1/10 | -| vpcooling | valve/pump cooling | boolean | | true | DEVICE_DATA | 233 | 1 | 1 | -| heatcable | heating cable | boolean | | true | DEVICE_DATA | 234 | 1 | 1 | -| vc0valve | VC0 valve | boolean | | true | DEVICE_DATA | 235 | 1 | 1 | -| primepump | primary heatpump | boolean | | true | DEVICE_DATA | 236 | 1 | 1 | +| tempdiffcool | temp diff TC3/TC0 cool | uint8 (>=2<=10) | K | true | DEVICE_DATA | 236 | 1 | 1/10 | +| vpcooling | valve/pump cooling | boolean | | true | DEVICE_DATA | 237 | 1 | 1 | +| heatcable | heating cable | boolean | | true | DEVICE_DATA | 238 | 1 | 1 | +| vc0valve | VC0 valve | boolean | | true | DEVICE_DATA | 239 | 1 | 1 | +| primepump | primary heatpump | boolean | | true | DEVICE_DATA | 240 | 1 | 1 | uint8 -| primepumpmod | primary heatpump modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 237 | 1 | 1 | -| hp3way | 3-way valve | boolean | | true | DEVICE_DATA | 238 | 1 | 1 | -| elheatstep1 | el. heater step 1 | boolean | | true | DEVICE_DATA | 239 | 1 | 1 | -| elheatstep2 | el. heater step 2 | boolean | | true | DEVICE_DATA | 240 | 1 | 1 | -| elheatstep3 | el. heater step 3 | boolean | | true | DEVICE_DATA | 241 | 1 | 1 | -| hpea0 | condensate reservoir heating (EA0) | boolean | | false | DEVICE_DATA | 242 | 1 | 1 | -| hppumpmode | primary heatpump mode | enum | | true | DEVICE_DATA | 243 | 1 | 1 | +| primepumpmod | primary heatpump modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 241 | 1 | 1 | +| hp3way | 3-way valve | boolean | | true | DEVICE_DATA | 242 | 1 | 1 | +| elheatstep1 | el. heater step 1 | boolean | | true | DEVICE_DATA | 243 | 1 | 1 | +| elheatstep2 | el. heater step 2 | boolean | | true | DEVICE_DATA | 244 | 1 | 1 | +| elheatstep3 | el. heater step 3 | boolean | | true | DEVICE_DATA | 245 | 1 | 1 | +| hpea0 | condensate reservoir heating (EA0) | boolean | | false | DEVICE_DATA | 246 | 1 | 1 | +| hppumpmode | primary heatpump mode | enum | | true | DEVICE_DATA | 247 | 1 | 1 | uint8 -| fan | fan | uint8 (>=20<=100) | % | true | DEVICE_DATA | 244 | 1 | 1 | -| fanspd | fan speed | uint8 | % | false | DEVICE_DATA | 245 | 1 | 1 | -| shutdown | shutdown | cmd | | true | DEVICE_DATA | 246 | 1 | 1 | -| hpcurrpower | compressor current power | uint16 | W | false | DEVICE_DATA | 247 | 1 | 1 | +| fan | fan | uint8 (>=20<=100) | % | true | DEVICE_DATA | 248 | 1 | 1 | +| fanspd | fan speed | uint8 | % | false | DEVICE_DATA | 249 | 1 | 1 | +| shutdown | shutdown | cmd | | true | DEVICE_DATA | 250 | 1 | 1 | +| hpcurrpower | compressor current power | uint16 | W | false | DEVICE_DATA | 251 | 1 | 1 | uint16 -| hppowerlimit | power limit | uint16 (>=0<=0) | W | true | DEVICE_DATA | 248 | 1 | 1 | +| hppowerlimit | power limit | uint16 (>=0<=0) | W | true | DEVICE_DATA | 252 | 1 | 1 | | dhw.alternatingop | alternating operation | boolean | | true | DHW | 15 | 1 | 1 | uint8 | dhw.altopprioheat | prioritise heating during dhw | uint8 (>=20<=120) | minutes | true | DHW | 16 | 1 | 1 | @@ -3704,142 +3776,148 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| mandefrost | manual defrost | cmd | | true | DEVICE_DATA | 84 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| mandefrost | manual defrost | cmd | | true | DEVICE_DATA | 87 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | | dhw.nrg | energy | uint24 | kWh | false | DHW | 0 | 2 | 1/100 | -| nrgheat | energy heating | uint24 | kWh | false | DEVICE_DATA | 87 | 2 | 1/100 | -| nrgcool | energy cooling | uint24 | kWh | false | DEVICE_DATA | 89 | 2 | 1/100 | -| metertotal | meter total | uint24 | kWh | false | DEVICE_DATA | 91 | 2 | 1/100 | -| metercomp | meter compressor | uint24 | kWh | false | DEVICE_DATA | 93 | 2 | 1/100 | -| metereheat | meter e-heater | uint24 | kWh | false | DEVICE_DATA | 95 | 2 | 1/100 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/100 | -| metercool | meter cooling | uint24 | kWh | false | DEVICE_DATA | 99 | 2 | 1/100 | +| nrgheat | energy heating | uint24 | kWh | false | DEVICE_DATA | 90 | 2 | 1/100 | +| nrgcool | energy cooling | uint24 | kWh | false | DEVICE_DATA | 92 | 2 | 1/100 | +| metertotal | meter total | uint24 | kWh | false | DEVICE_DATA | 94 | 2 | 1/100 | +| metercomp | meter compressor | uint24 | kWh | false | DEVICE_DATA | 96 | 2 | 1/100 | +| metereheat | meter e-heater | uint24 | kWh | false | DEVICE_DATA | 98 | 2 | 1/100 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/100 | +| metercool | meter cooling | uint24 | kWh | false | DEVICE_DATA | 102 | 2 | 1/100 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/100 | -| uptimetotal | heatpump total uptime | time | minutes | false | DEVICE_DATA | 101 | 2 | 1/60 | -| uptimecontrol | total operating time heat | time | minutes | false | DEVICE_DATA | 103 | 2 | 1/60 | -| uptimecompheating | operating time compressor heating | time | minutes | false | DEVICE_DATA | 105 | 2 | 1/60 | -| uptimecompcooling | operating time compressor cooling | time | minutes | false | DEVICE_DATA | 107 | 2 | 1/60 | +| uptimetotal | heatpump total uptime | time | minutes | false | DEVICE_DATA | 104 | 2 | 1/60 | +| uptimecontrol | total operating time heat | time | minutes | false | DEVICE_DATA | 106 | 2 | 1/60 | +| uptimecompheating | operating time compressor heating | time | minutes | false | DEVICE_DATA | 108 | 2 | 1/60 | +| uptimecompcooling | operating time compressor cooling | time | minutes | false | DEVICE_DATA | 110 | 2 | 1/60 | | dhw.uptimecomp | operating time compressor | time | minutes | false | DHW | 4 | 2 | 1/60 | -| uptimecomppool | operating time compressor pool | time | minutes | false | DEVICE_DATA | 109 | 2 | 1/60 | -| totalcompstarts | total compressor control starts | uint24 | | false | DEVICE_DATA | 111 | 2 | 1 | -| heatingstarts | heating control starts | uint24 | | false | DEVICE_DATA | 113 | 2 | 1 | -| coolingstarts | cooling control starts | uint24 | | false | DEVICE_DATA | 115 | 2 | 1 | +| uptimecomppool | operating time compressor pool | time | minutes | false | DEVICE_DATA | 112 | 2 | 1/60 | +| totalcompstarts | total compressor control starts | uint24 | | false | DEVICE_DATA | 114 | 2 | 1 | +| heatingstarts | heating control starts | uint24 | | false | DEVICE_DATA | 116 | 2 | 1 | +| coolingstarts | cooling control starts | uint24 | | false | DEVICE_DATA | 118 | 2 | 1 | | dhw.startshp | starts hp | uint24 | | false | DHW | 6 | 2 | 1 | -| poolstarts | pool control starts | uint24 | | false | DEVICE_DATA | 117 | 2 | 1 | -| nrgconstotal | total energy consumption | uint24 | kWh | false | DEVICE_DATA | 119 | 2 | 1 | -| nrgconscomptotal | total energy consumption compressor | uint24 | kWh | false | DEVICE_DATA | 121 | 2 | 1 | -| nrgconscompheating | energy consumption compressor heating | uint24 | kWh | false | DEVICE_DATA | 123 | 2 | 1 | +| poolstarts | pool control starts | uint24 | | false | DEVICE_DATA | 120 | 2 | 1 | +| nrgconstotal | total energy consumption | uint24 | kWh | false | DEVICE_DATA | 122 | 2 | 1 | +| nrgconscomptotal | total energy consumption compressor | uint24 | kWh | false | DEVICE_DATA | 124 | 2 | 1 | +| nrgconscompheating | energy consumption compressor heating | uint24 | kWh | false | DEVICE_DATA | 126 | 2 | 1 | | dhw.nrgconscomp | energy consumption compressor | uint24 | kWh | false | DHW | 8 | 2 | 1 | -| nrgconscompcooling | energy consumption compressor cooling | uint24 | kWh | false | DEVICE_DATA | 125 | 2 | 1 | -| nrgconscomppool | energy consumption compressor pool | uint24 | kWh | false | DEVICE_DATA | 127 | 2 | 1 | -| auxelecheatnrgconstotal | total aux elec. heater energy consumption | uint24 | kWh | false | DEVICE_DATA | 129 | 2 | 1 | -| auxelecheatnrgconsheating | aux elec. heater energy consumption heating | uint24 | kWh | false | DEVICE_DATA | 131 | 2 | 1 | +| nrgconscompcooling | energy consumption compressor cooling | uint24 | kWh | false | DEVICE_DATA | 128 | 2 | 1 | +| nrgconscomppool | energy consumption compressor pool | uint24 | kWh | false | DEVICE_DATA | 130 | 2 | 1 | +| auxelecheatnrgconstotal | total aux elec. heater energy consumption | uint24 | kWh | false | DEVICE_DATA | 132 | 2 | 1 | +| auxelecheatnrgconsheating | aux elec. heater energy consumption heating | uint24 | kWh | false | DEVICE_DATA | 134 | 2 | 1 | | dhw.auxelecheatnrgcons | aux elec. heater energy consumption | uint24 | kWh | false | DHW | 10 | 2 | 1 | -| auxelecheatnrgconspool | aux elec. heater energy consumption pool | uint24 | kWh | false | DEVICE_DATA | 133 | 2 | 1 | -| nrgsupptotal | total energy supplied | uint24 | kWh | false | DEVICE_DATA | 135 | 2 | 1 | -| nrgsuppheating | total energy supplied heating | uint24 | kWh | false | DEVICE_DATA | 137 | 2 | 1 | +| auxelecheatnrgconspool | aux elec. heater energy consumption pool | uint24 | kWh | false | DEVICE_DATA | 136 | 2 | 1 | +| nrgsupptotal | total energy supplied | uint24 | kWh | false | DEVICE_DATA | 138 | 2 | 1 | +| nrgsuppheating | total energy supplied heating | uint24 | kWh | false | DEVICE_DATA | 140 | 2 | 1 | | dhw.nrgsupp | total energy warm supplied | uint24 | kWh | false | DHW | 12 | 2 | 1 | -| nrgsuppcooling | total energy supplied cooling | uint24 | kWh | false | DEVICE_DATA | 139 | 2 | 1 | -| nrgsupppool | total energy supplied pool | uint24 | kWh | false | DEVICE_DATA | 141 | 2 | 1 | -| hppower | compressor power output | uint16 | kW | false | DEVICE_DATA | 143 | 1 | 1/10 | +| nrgsuppcooling | total energy supplied cooling | uint24 | kWh | false | DEVICE_DATA | 142 | 2 | 1 | +| nrgsupppool | total energy supplied pool | uint24 | kWh | false | DEVICE_DATA | 144 | 2 | 1 | +| hppower | compressor power output | uint16 | kW | false | DEVICE_DATA | 146 | 1 | 1/10 | uint8 -| hpmaxpower | compressor max power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 144 | 1 | 1 | +| hpmaxpower | compressor max power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 147 | 1 | 1 | uint8 -| pvmaxcomp | pv compressor max power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 145 | 1 | 1/10 | +| pvmaxcomp | pv compressor max power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 148 | 1 | 1/10 | uint8 -| powerreduction | power reduction | uint8 (>=30<=60) | % | true | DEVICE_DATA | 146 | 1 | 10 | +| powerreduction | power reduction | uint8 (>=30<=60) | % | true | DEVICE_DATA | 149 | 1 | 10 | uint8 -| hpsetdiffpress | set differential pressure | uint8 (>=150<=750) | mbar | true | DEVICE_DATA | 147 | 1 | 50 | -| hpcompon | hp compressor | boolean | | false | DEVICE_DATA | 148 | 1 | 1 | -| hpactivity | compressor activity | enum | | false | DEVICE_DATA | 149 | 1 | 1 | -| hpbrinepumpspd | brine pump speed | uint8 | % | false | DEVICE_DATA | 150 | 1 | 1 | -| hpswitchvalve | switch valve | boolean | | false | DEVICE_DATA | 151 | 1 | 1 | -| hpcompspd | compressor speed | uint8 | % | false | DEVICE_DATA | 152 | 1 | 1 | -| hptargetspd | compressor target speed | uint8 | % | false | DEVICE_DATA | 153 | 1 | 1 | -| hpcircspd | circulation pump speed | uint8 | % | false | DEVICE_DATA | 154 | 1 | 1 | -| recvalve | receiver valve VR0 | uint8 | % | false | DEVICE_DATA | 155 | 1 | 1 | -| expvalve | expansion valve VR1 | uint8 | % | false | DEVICE_DATA | 156 | 1 | 1 | -| hpbrinein | brine in/evaporator | int16 | C | false | DEVICE_DATA | 157 | 1 | 1/10 | -| hpbrineout | brine out/condenser | int16 | C | false | DEVICE_DATA | 158 | 1 | 1/10 | -| hptc0 | heat carrier return (TC0) | int16 | C | false | DEVICE_DATA | 159 | 1 | 1/10 | -| hptc1 | heat carrier forward (TC1) | int16 | C | false | DEVICE_DATA | 160 | 1 | 1/10 | -| hptc3 | condenser temperature (TC3) | int16 | C | false | DEVICE_DATA | 161 | 1 | 1/10 | -| hptr1 | compressor temperature (TR1) | int16 | C | false | DEVICE_DATA | 162 | 1 | 1/10 | -| hptr3 | refrigerant temperature liquid side (condenser output) (TR3) | int16 | C | false | DEVICE_DATA | 163 | 1 | 1/10 | -| hptr4 | evaporator inlet temperature (TR4) | int16 | C | false | DEVICE_DATA | 164 | 1 | 1/10 | -| hptr5 | compressor inlet temperature (TR5) | int16 | C | false | DEVICE_DATA | 165 | 1 | 1/10 | -| hptr6 | compressor outlet temperature (TR6) | int16 | C | false | DEVICE_DATA | 166 | 1 | 1/10 | -| hptr7 | refrigerant temperature gas side (condenser input) (TR7) | int16 | C | false | DEVICE_DATA | 167 | 1 | 1/10 | -| hptl2 | air inlet temperature (TL2) | int16 | C | false | DEVICE_DATA | 168 | 1 | 1/10 | -| hppl1 | low pressure side temperature (PL1) | int16 | C | false | DEVICE_DATA | 169 | 1 | 1/10 | -| hpph1 | high pressure side temperature (PH1) | int16 | C | false | DEVICE_DATA | 170 | 1 | 1/10 | -| hpta4 | drain pan temp (TA4) | int16 | C | false | DEVICE_DATA | 171 | 1 | 1/10 | -| hptw1 | reservoir temp (TW1) | int16 | C | false | DEVICE_DATA | 172 | 1 | 1/10 | +| hpsetdiffpress | set differential pressure | uint8 (>=150<=750) | mbar | true | DEVICE_DATA | 150 | 1 | 50 | +| hpcompon | hp compressor | boolean | | false | DEVICE_DATA | 151 | 1 | 1 | +| hpactivity | compressor activity | enum | | false | DEVICE_DATA | 152 | 1 | 1 | +| hpbrinepumpspd | brine pump speed | uint8 | % | false | DEVICE_DATA | 153 | 1 | 1 | +| hpswitchvalve | switch valve | boolean | | false | DEVICE_DATA | 154 | 1 | 1 | +| hpcompspd | compressor speed | uint8 | % | false | DEVICE_DATA | 155 | 1 | 1 | +| hptargetspd | compressor target speed | uint8 | % | false | DEVICE_DATA | 156 | 1 | 1 | +| hpcircspd | circulation pump speed | uint8 | % | false | DEVICE_DATA | 157 | 1 | 1 | +| recvalve | receiver valve VR0 | uint8 | % | false | DEVICE_DATA | 158 | 1 | 1 | +| expvalve | expansion valve VR1 | uint8 | % | false | DEVICE_DATA | 159 | 1 | 1 | +| hpbrinein | brine in/evaporator | int16 | C | false | DEVICE_DATA | 160 | 1 | 1/10 | +| hpbrineout | brine out/condenser | int16 | C | false | DEVICE_DATA | 161 | 1 | 1/10 | +| hptc0 | heat carrier return (TC0) | int16 | C | false | DEVICE_DATA | 162 | 1 | 1/10 | +| hptc1 | heat carrier forward (TC1) | int16 | C | false | DEVICE_DATA | 163 | 1 | 1/10 | +| hptc3 | condenser temperature (TC3) | int16 | C | false | DEVICE_DATA | 164 | 1 | 1/10 | +| hptr1 | compressor temperature (TR1) | int16 | C | false | DEVICE_DATA | 165 | 1 | 1/10 | +| hptr3 | refrigerant temperature liquid side (condenser output) (TR3) | int16 | C | false | DEVICE_DATA | 166 | 1 | 1/10 | +| hptr4 | evaporator inlet temperature (TR4) | int16 | C | false | DEVICE_DATA | 167 | 1 | 1/10 | +| hptr5 | compressor inlet temperature (TR5) | int16 | C | false | DEVICE_DATA | 168 | 1 | 1/10 | +| hptr6 | compressor outlet temperature (TR6) | int16 | C | false | DEVICE_DATA | 169 | 1 | 1/10 | +| hptr7 | refrigerant temperature gas side (condenser input) (TR7) | int16 | C | false | DEVICE_DATA | 170 | 1 | 1/10 | +| hptl2 | air inlet temperature (TL2) | int16 | C | false | DEVICE_DATA | 171 | 1 | 1/10 | +| hppl1 | low pressure side temperature (PL1) | int16 | C | false | DEVICE_DATA | 172 | 1 | 1/10 | +| hpph1 | high pressure side temperature (PH1) | int16 | C | false | DEVICE_DATA | 173 | 1 | 1/10 | +| hpta4 | drain pan temp (TA4) | int16 | C | false | DEVICE_DATA | 174 | 1 | 1/10 | +| hptw1 | reservoir temp (TW1) | int16 | C | false | DEVICE_DATA | 175 | 1 | 1/10 | uint8 -| poolsettemp | pool set temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 173 | 1 | 1/2 | -| hpin1 | input 1 state | boolean | | false | DEVICE_DATA | 174 | 1 | 1 | -| hpin1opt | input 1 options | string | | true | DEVICE_DATA | 175 | 8 | 1 | -| hpin2 | input 2 state | boolean | | false | DEVICE_DATA | 183 | 1 | 1 | -| hpin2opt | input 2 options | string | | true | DEVICE_DATA | 184 | 8 | 1 | -| hpin3 | input 3 state | boolean | | false | DEVICE_DATA | 192 | 1 | 1 | -| hpin3opt | input 3 options | string | | true | DEVICE_DATA | 193 | 8 | 1 | -| hpin4 | input 4 state | boolean | | false | DEVICE_DATA | 201 | 1 | 1 | -| hpin4opt | input 4 options | string | | true | DEVICE_DATA | 202 | 8 | 1 | -| maxheatcomp | heat limit compressor | enum | | true | DEVICE_DATA | 210 | 1 | 1 | -| maxheatheat | heat limit heating | enum | | true | DEVICE_DATA | 211 | 1 | 1 | +| poolsettemp | pool set temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 176 | 1 | 1/2 | +| hp4way | 4-way valve (VR4) | boolean | | false | DEVICE_DATA | 177 | 1 | 1 | +| hpin1 | input 1 state | boolean | | false | DEVICE_DATA | 178 | 1 | 1 | +| hpin1opt | input 1 options | string | | true | DEVICE_DATA | 179 | 8 | 1 | +| hpin2 | input 2 state | boolean | | false | DEVICE_DATA | 187 | 1 | 1 | +| hpin2opt | input 2 options | string | | true | DEVICE_DATA | 188 | 8 | 1 | +| hpin3 | input 3 state | boolean | | false | DEVICE_DATA | 196 | 1 | 1 | +| hpin3opt | input 3 options | string | | true | DEVICE_DATA | 197 | 8 | 1 | +| hpin4 | input 4 state | boolean | | false | DEVICE_DATA | 205 | 1 | 1 | +| hpin4opt | input 4 options | string | | true | DEVICE_DATA | 206 | 8 | 1 | +| maxheatcomp | heat limit compressor | enum | | true | DEVICE_DATA | 214 | 1 | 1 | +| maxheatheat | heat limit heating | enum | | true | DEVICE_DATA | 215 | 1 | 1 | | dhw.maxheat | heat limit | enum | | true | DHW | 14 | 1 | 1 | -| auxheatersource | aux heater source | enum | | true | DEVICE_DATA | 212 | 1 | 1 | -| pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 213 | 1 | 1 | -| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 214 | 1 | 1 | -| auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 215 | 1 | 1 | -| auxheaterstatus | aux heater status | enum | | false | DEVICE_DATA | 216 | 1 | 1 | -| auxheaterlevel | aux heater level | uint8 | % | false | DEVICE_DATA | 217 | 1 | 1 | +| auxheatersource | aux heater source | enum | | true | DEVICE_DATA | 216 | 1 | 1 | +| pvcooling | cooling only with PV | boolean | | true | DEVICE_DATA | 217 | 1 | 1 | +| auxheateronly | aux heater only | boolean | | true | DEVICE_DATA | 218 | 1 | 1 | +| auxheateroff | disable aux heater | boolean | | true | DEVICE_DATA | 219 | 1 | 1 | +| auxheaterstatus | aux heater status | enum | | false | DEVICE_DATA | 220 | 1 | 1 | +| auxheaterlevel | aux heater level | uint8 | % | false | DEVICE_DATA | 221 | 1 | 1 | uint16 -| auxheaterdelay | aux heater on delay | uint16 (>=10<=1000) | K*min | true | DEVICE_DATA | 218 | 1 | 10 | +| auxheaterdelay | aux heater on delay | uint16 (>=10<=1000) | K*min | true | DEVICE_DATA | 222 | 1 | 10 | uint8 -| auxmaxlimit | aux heater max limit | uint8 (>=0<=10) | K | true | DEVICE_DATA | 219 | 1 | 1/10 | +| auxmaxlimit | aux heater max limit | uint8 (>=0<=10) | K | true | DEVICE_DATA | 223 | 1 | 1/10 | uint8 -| auxlimitstart | aux heater limit start | uint8 (>=0<=10) | K | true | DEVICE_DATA | 220 | 1 | 1/10 | -| auxheatrmode | aux heater mode | enum | | true | DEVICE_DATA | 221 | 1 | 1 | +| auxlimitstart | aux heater limit start | uint8 (>=0<=10) | K | true | DEVICE_DATA | 224 | 1 | 1/10 | +| auxheatrmode | aux heater mode | enum | | true | DEVICE_DATA | 225 | 1 | 1 | uint16 -| hphystheat | on/off hyst heat | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 222 | 1 | 5 | +| hphystheat | on/off hyst heat | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 226 | 1 | 5 | uint16 -| hphystcool | on/off hyst cool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 223 | 1 | 5 | +| hphystcool | on/off hyst cool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 227 | 1 | 5 | uint16 -| hphystpool | on/off hyst pool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 224 | 1 | 5 | -| silentmode | silent mode | enum | | true | DEVICE_DATA | 225 | 1 | 1 | +| hphystpool | on/off hyst pool | uint16 (>=50<=1500) | K*min | true | DEVICE_DATA | 228 | 1 | 5 | +| silentmode | silent mode | enum | | true | DEVICE_DATA | 229 | 1 | 1 | uint8 -| silentfrom | silent mode from | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 226 | 1 | 15 | +| silentfrom | silent mode from | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 230 | 1 | 15 | uint8 -| silentto | silent mode to | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 227 | 1 | 15 | +| silentto | silent mode to | uint8 (>=0<=0) | minutes | true | DEVICE_DATA | 231 | 1 | 15 | int8 -| mintempsilent | min outside temp for silent mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 228 | 1 | 1 | +| mintempsilent | min outside temp for silent mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 232 | 1 | 1 | int8 -| tempparmode | outside temp parallel mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 229 | 1 | 1 | -| auxheatmix | aux heater mixing valve | int8 | % | false | DEVICE_DATA | 230 | 1 | 1 | +| tempparmode | outside temp parallel mode | int8 (>=0<=0) | C | true | DEVICE_DATA | 233 | 1 | 1 | +| auxheatmix | aux heater mixing valve | int8 | % | false | DEVICE_DATA | 234 | 1 | 1 | uint8 -| tempdiffheat | temp diff TC3/TC0 heat | uint8 (>=2<=10) | K | true | DEVICE_DATA | 231 | 1 | 1/10 | +| tempdiffheat | temp diff TC3/TC0 heat | uint8 (>=2<=10) | K | true | DEVICE_DATA | 235 | 1 | 1/10 | uint8 -| tempdiffcool | temp diff TC3/TC0 cool | uint8 (>=2<=10) | K | true | DEVICE_DATA | 232 | 1 | 1/10 | -| vpcooling | valve/pump cooling | boolean | | true | DEVICE_DATA | 233 | 1 | 1 | -| heatcable | heating cable | boolean | | true | DEVICE_DATA | 234 | 1 | 1 | -| vc0valve | VC0 valve | boolean | | true | DEVICE_DATA | 235 | 1 | 1 | -| primepump | primary heatpump | boolean | | true | DEVICE_DATA | 236 | 1 | 1 | +| tempdiffcool | temp diff TC3/TC0 cool | uint8 (>=2<=10) | K | true | DEVICE_DATA | 236 | 1 | 1/10 | +| vpcooling | valve/pump cooling | boolean | | true | DEVICE_DATA | 237 | 1 | 1 | +| heatcable | heating cable | boolean | | true | DEVICE_DATA | 238 | 1 | 1 | +| vc0valve | VC0 valve | boolean | | true | DEVICE_DATA | 239 | 1 | 1 | +| primepump | primary heatpump | boolean | | true | DEVICE_DATA | 240 | 1 | 1 | uint8 -| primepumpmod | primary heatpump modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 237 | 1 | 1 | -| hp3way | 3-way valve | boolean | | true | DEVICE_DATA | 238 | 1 | 1 | -| elheatstep1 | el. heater step 1 | boolean | | true | DEVICE_DATA | 239 | 1 | 1 | -| elheatstep2 | el. heater step 2 | boolean | | true | DEVICE_DATA | 240 | 1 | 1 | -| elheatstep3 | el. heater step 3 | boolean | | true | DEVICE_DATA | 241 | 1 | 1 | -| hpea0 | condensate reservoir heating (EA0) | boolean | | false | DEVICE_DATA | 242 | 1 | 1 | -| hppumpmode | primary heatpump mode | enum | | true | DEVICE_DATA | 243 | 1 | 1 | +| primepumpmod | primary heatpump modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 241 | 1 | 1 | +| hp3way | 3-way valve | boolean | | true | DEVICE_DATA | 242 | 1 | 1 | +| elheatstep1 | el. heater step 1 | boolean | | true | DEVICE_DATA | 243 | 1 | 1 | +| elheatstep2 | el. heater step 2 | boolean | | true | DEVICE_DATA | 244 | 1 | 1 | +| elheatstep3 | el. heater step 3 | boolean | | true | DEVICE_DATA | 245 | 1 | 1 | +| hpea0 | condensate reservoir heating (EA0) | boolean | | false | DEVICE_DATA | 246 | 1 | 1 | +| hppumpmode | primary heatpump mode | enum | | true | DEVICE_DATA | 247 | 1 | 1 | uint8 -| fan | fan | uint8 (>=20<=100) | % | true | DEVICE_DATA | 244 | 1 | 1 | -| fanspd | fan speed | uint8 | % | false | DEVICE_DATA | 245 | 1 | 1 | -| shutdown | shutdown | cmd | | true | DEVICE_DATA | 246 | 1 | 1 | -| hpcurrpower | compressor current power | uint16 | W | false | DEVICE_DATA | 247 | 1 | 1 | +| fan | fan | uint8 (>=20<=100) | % | true | DEVICE_DATA | 248 | 1 | 1 | +| fanspd | fan speed | uint8 | % | false | DEVICE_DATA | 249 | 1 | 1 | +| shutdown | shutdown | cmd | | true | DEVICE_DATA | 250 | 1 | 1 | +| hpcurrpower | compressor current power | uint16 | W | false | DEVICE_DATA | 251 | 1 | 1 | uint16 -| hppowerlimit | power limit | uint16 (>=0<=0) | W | true | DEVICE_DATA | 248 | 1 | 1 | +| hppowerlimit | power limit | uint16 (>=0<=0) | W | true | DEVICE_DATA | 252 | 1 | 1 | | dhw.alternatingop | alternating operation | boolean | | true | DHW | 15 | 1 | 1 | uint8 | dhw.altopprioheat | prioritise heating during dhw | uint8 (>=20<=120) | minutes | true | DHW | 16 | 1 | 1 | @@ -3935,39 +4013,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -4006,11 +4082,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -4064,10 +4145,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -4090,39 +4171,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -4161,11 +4240,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -4219,10 +4303,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -4245,39 +4329,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -4316,11 +4398,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -4374,10 +4461,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -4400,39 +4487,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -4471,11 +4556,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -4529,10 +4619,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -4555,39 +4645,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -4626,11 +4714,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -4684,10 +4777,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -4710,39 +4803,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -4781,11 +4872,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -4839,10 +4935,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -4850,14 +4946,14 @@ uint24 | shortname | fullname | type | uom | writeable | tag type | register offset | register count | scale factor | |-|-|-|-|-|-|-|-|-| -| netflowtemp | heat network flow temp | uint16 | C | false | DEVICE_DATA | 276 | 1 | 1/10 | -| heatvalve | heating valve | uint8 | % | false | DEVICE_DATA | 277 | 1 | 1 | +| netflowtemp | heat network flow temp | uint16 | C | false | DEVICE_DATA | 279 | 1 | 1/10 | +| heatvalve | heating valve | uint8 | % | false | DEVICE_DATA | 280 | 1 | 1 | | dhw.dhwvalve | valve | uint8 | % | false | DHW | 75 | 1 | 1 | uint8 -| keepwarmtemp | keep warm temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 278 | 1 | 1 | +| keepwarmtemp | keep warm temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 281 | 1 | 1 | uint8 -| setreturntemp | set temp return | uint8 (>=0<=0) | C | true | DEVICE_DATA | 279 | 1 | 1 | -| heating | heating | boolean | | false | DEVICE_DATA | 280 | 1 | 1 | +| setreturntemp | set temp return | uint8 (>=0<=0) | C | true | DEVICE_DATA | 282 | 1 | 1 | +| heating | heating | boolean | | false | DEVICE_DATA | 283 | 1 | 1 | | reset | reset | cmd | | true | DEVICE_DATA | 0 | 1 | 1 | | chimneysweeper | chimney sweeper | cmd | | true | DEVICE_DATA | 1 | 1 | 1 | | heatingoff | force heating off | boolean | | true | DEVICE_DATA | 2 | 1 | 1 | @@ -4911,11 +5007,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -4988,39 +5089,37 @@ uint8 | syspress | system pressure | uint8 | bar | false | DEVICE_DATA | 11 | 1 | 1/10 | | boiltemp | actual boiler temperature | uint16 | C | false | DEVICE_DATA | 12 | 1 | 1/10 | | headertemp | low loss header | uint16 | C | false | DEVICE_DATA | 13 | 1 | 1/10 | -| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 249 | 1 | 1/10 | -| burngas | gas | boolean | | false | DEVICE_DATA | 250 | 1 | 1 | -| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 251 | 1 | 1 | -| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 252 | 1 | 1/10 | -| fanwork | fan | boolean | | false | DEVICE_DATA | 253 | 1 | 1 | -| ignwork | ignition | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | -| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| exhausttemp | exhaust temperature | uint16 | C | false | DEVICE_DATA | 253 | 1 | 1/10 | +| burngas | gas | boolean | | false | DEVICE_DATA | 254 | 1 | 1 | +| burngas2 | gas stage 2 | boolean | | false | DEVICE_DATA | 255 | 1 | 1 | +| flamecurr | flame current | uint16 | µA | false | DEVICE_DATA | 256 | 1 | 1/10 | +| fanwork | fan | boolean | | false | DEVICE_DATA | 257 | 1 | 1 | +| ignwork | ignition | boolean | | false | DEVICE_DATA | 258 | 1 | 1 | +| oilpreheat | oil preheating | boolean | | false | DEVICE_DATA | 259 | 1 | 1 | uint8 -| burnminpower | burner min power | uint8 (>=0<=0) | % | true | DEVICE_DATA | 256 | 1 | 1 | +| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 260 | 1 | 1 | uint8 -| burnmaxpower | burner max power | uint8 (>=0<=254) | % | true | DEVICE_DATA | 257 | 1 | 1 | -uint8 -| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 258 | 1 | 1 | -| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 259 | 1 | 1 | -| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 260 | 1 | 1/10 | +| burnminperiod | burner min period | uint8 (>=0<=120) | minutes | true | DEVICE_DATA | 261 | 1 | 1 | +| absburnpow | burner current power (absolute) | uint8 | % | false | DEVICE_DATA | 262 | 1 | 1 | +| heatblock | heating block | uint16 | C | false | DEVICE_DATA | 263 | 1 | 1/10 | int8 -| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 261 | 1 | 1 | +| boilhyston | hysteresis on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 264 | 1 | 1 | int8 -| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 262 | 1 | 1 | +| boilhystoff | hysteresis off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 265 | 1 | 1 | int8 -| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 263 | 1 | 1 | +| boil2hyston | hysteresis stage 2 on temperature | int8 (>=-20<=0) | C | true | DEVICE_DATA | 266 | 1 | 1 | int8 -| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 264 | 1 | 1 | -| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 265 | 1 | 1 | +| boil2hystoff | hysteresis stage 2 off temperature | int8 (>=0<=20) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveon | heatingcurve on | boolean | | true | DEVICE_DATA | 268 | 1 | 1 | uint8 -| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 266 | 1 | 1 | +| curvebase | heatingcurve base | uint8 (>=20<=90) | C | true | DEVICE_DATA | 269 | 1 | 1 | uint8 -| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 267 | 1 | 1 | +| curveend | heatingcurve end | uint8 (>=20<=90) | C | true | DEVICE_DATA | 270 | 1 | 1 | uint8 -| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 268 | 1 | 1 | -| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 269 | 1 | 1 | +| summertemp | summer temperature | uint8 (>=0<=45) | C | true | DEVICE_DATA | 271 | 1 | 1 | +| nofrostmode | nofrost mode | boolean | | true | DEVICE_DATA | 272 | 1 | 1 | uint8 -| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 270 | 1 | 1 | +| nofrosttemp | nofrost temperature | uint8 (>=0<=10) | C | true | DEVICE_DATA | 273 | 1 | 1 | | heatingactivated | heating activated | boolean | | true | DEVICE_DATA | 14 | 1 | 1 | uint8 | heatingtemp | heating temperature | uint8 (>=0<=90) | C | true | DEVICE_DATA | 15 | 1 | 1 | @@ -5059,11 +5158,16 @@ uint8 | pc1flow | Flow PC1 | int16 | l/h | false | DEVICE_DATA | 81 | 1 | 1 | | pc1on | PC1 | boolean | | false | DEVICE_DATA | 82 | 1 | 1 | | pc1rate | PC1 rate | uint8 | % | false | DEVICE_DATA | 83 | 1 | 1 | -| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 97 | 2 | 1/10 | +uint8 +| pumpkickhour | pump kick hour | uint8 (>=0<=23) | hours | true | DEVICE_DATA | 84 | 1 | 1 | +| pumpkickday | pump kick day | enum | | true | DEVICE_DATA | 85 | 1 | 1 | +uint16 +| pumpkickdelay | pump kick delay | uint16 (>=0<=32767) | minutes | true | DEVICE_DATA | 86 | 1 | 1 | +| meterheat | meter heating | uint24 | kWh | false | DEVICE_DATA | 100 | 2 | 1/10 | | dhw.meter | meter | uint24 | kWh | false | DHW | 2 | 2 | 1/10 | -| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 271 | 2 | 1/10 | +| gasmeterheat | gas meter heating | uint24 | kWh | false | DEVICE_DATA | 274 | 2 | 1/10 | | dhw.gasmeter | gas meter | uint24 | kWh | false | DHW | 71 | 2 | 1/10 | -| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 273 | 2 | 1/10 | +| nrgheat2 | energy heating 2 | uint24 | kWh | false | DEVICE_DATA | 276 | 2 | 1/10 | | dhw.nrg2 | energy 2 | uint24 | kWh | false | DHW | 73 | 2 | 1/10 | | dhw.tapactivated | turn on/off | boolean | | true | DHW | 28 | 1 | 1 | | dhw.settemp | set temperature | uint8 | C | false | DHW | 29 | 1 | 1 | @@ -5117,10 +5221,10 @@ uint8 | dhw.starts | starts | uint24 | | false | DHW | 67 | 2 | 1 | | dhw.workm | active time | time | minutes | false | DHW | 69 | 2 | 1 | uint8 -| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 275 | 1 | 1 | -| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 85 | 2 | 1/100 | +| nompower | nominal Power | uint8 (>=0<=0) | kW | true | DEVICE_DATA | 278 | 1 | 1 | +| nrgtotal | total energy | uint24 | kWh | false | DEVICE_DATA | 88 | 2 | 1/100 | uint24 -| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 87 | 2 | 1/100 | +| nrgheat | energy heating | uint24 (>=0<=10000000) | kWh | true | DEVICE_DATA | 90 | 2 | 1/100 | uint24 | dhw.nrg | energy | uint24 (>=0<=10000000) | kWh | true | DHW | 0 | 2 | 1/100 | @@ -5203,78 +5307,84 @@ uint8 int8 | hc1.offsettemp | offset temperature | int8 (>=0<=0) | C | true | HC | 10 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | +| hc1.baseflowtemp | base flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.roominfluence | room influence | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | | true | HC | 14 | 1 | 1/10 | -| hc1.curroominfl | current room influence | int16 | C | false | HC | 15 | 1 | 1/10 | -| hc1.nofrostmode | nofrost mode | enum | | true | HC | 16 | 1 | 1 | +| hc1.roominfluence | room influence | uint8 (>=0<=0) | C | true | HC | 14 | 1 | 1 | +uint8 +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | | true | HC | 15 | 1 | 1/10 | +| hc1.curroominfl | current room influence | int16 | C | false | HC | 16 | 1 | 1/10 | +| hc1.nofrostmode | nofrost mode | enum | | true | HC | 17 | 1 | 1 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.summersetmode | set summer mode | enum | | true | HC | 20 | 1 | 1 | -| hc1.hpoperatingmode | heatpump operating mode | enum | | true | HC | 21 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | -| hc1.hpoperatingstate | heatpump operating state | enum | | false | HC | 23 | 1 | 1 | -| hc1.vacationmode | vacation mode | boolean | | false | HC | 24 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.summersetmode | set summer mode | enum | | true | HC | 21 | 1 | 1 | +| hc1.hpoperatingmode | heatpump operating mode | enum | | true | HC | 22 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | +| hc1.hpoperatingstate | heatpump operating state | enum | | false | HC | 24 | 1 | 1 | +| hc1.vacationmode | vacation mode | boolean | | false | HC | 25 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | int8 -| hc1.tempautotemp | temporary set temperature automode | int8 (>=-1<=30) | C | true | HC | 27 | 1 | 1/2 | +| hc1.tempautotemp | temporary set temperature automode | int8 (>=-1<=30) | C | true | HC | 28 | 1 | 1/2 | int8 -| hc1.cooltemp | cooling temperature | int8 (>=-1<=30) | C | true | HC | 28 | 1 | 1/2 | +| hc1.cooltemp | cooling temperature | int8 (>=-1<=30) | C | true | HC | 29 | 1 | 1/2 | uint8 -| hc1.fastheatup | fast heatup | uint8 (>=0<=0) | % | true | HC | 29 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.reducemode | reduce mode | enum | | true | HC | 31 | 1 | 1 | +| hc1.fastheatup | fast heatup | uint8 (>=0<=0) | % | true | HC | 30 | 1 | 1 | +uint8 +| hc1.comfoffset | comfort point offset | uint8 (>=0<=10) | C | true | HC | 31 | 1 | 1 | int8 -| hc1.noreducetemp | no reduce below temperature | int8 (>=0<=0) | C | true | HC | 32 | 1 | 1 | +| hc1.comftemp | comfort point temperature | int8 (>=-5<=15) | C | true | HC | 32 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.reducemode | reduce mode | enum | | true | HC | 34 | 1 | 1 | int8 -| hc1.reducetemp | off/reduce switch temperature | int8 (>=0<=0) | C | true | HC | 33 | 1 | 1 | -| hc1.dhwprio | dhw priority | boolean | | true | HC | 34 | 1 | 1 | -| hc1.hpcooling | hp cooling | boolean | | true | HC | 35 | 1 | 1 | -| hc1.coolingon | cooling on | boolean | | false | HC | 36 | 1 | 1 | -| hc1.hpmode | HP Mode | enum | | true | HC | 37 | 1 | 1 | -uint8 -| hc1.dewoffset | dew point offset | uint8 (>=2<=10) | K | true | HC | 38 | 1 | 1 | -uint8 -| hc1.roomtempdiff | room temp difference | uint8 (>=0<=0) | K | true | HC | 39 | 1 | 1 | -uint8 -| hc1.hpminflowtemp | HP min. flow temp. | uint8 (>=0<=0) | C | true | HC | 40 | 1 | 1 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.remotehum | room humidity from remote | cmd | % | true | HC | 43 | 1 | 1 | -uint8 -| hc1.heatondelay | heat-on delay | uint8 (>=1<=48) | hours | true | HC | 44 | 1 | 1 | -uint8 -| hc1.heatoffdelay | heat-off delay | uint8 (>=1<=48) | hours | true | HC | 45 | 1 | 1 | -uint8 -| hc1.instantstart | instant start | uint8 (>=1<=10) | K | true | HC | 46 | 1 | 1 | -| hc1.boost | boost mode | boolean | | true | HC | 47 | 1 | 1 | -uint8 -| hc1.boosttime | boost time | uint8 (>=0<=0) | hours | true | HC | 48 | 1 | 1 | -uint8 -| hc1.coolstart | cooling starttemp | uint8 (>=20<=35) | C | true | HC | 49 | 1 | 1 | -uint8 -| hc1.coolondelay | cooling on delay | uint8 (>=1<=48) | hours | true | HC | 50 | 1 | 1 | -uint8 -| hc1.cooloffdelay | cooling off delay | uint8 (>=1<=48) | hours | true | HC | 51 | 1 | 1 | -| hc1.switchprogmode | switch program mode | enum | | true | HC | 52 | 1 | 1 | +| hc1.noreducetemp | no reduce below temperature | int8 (>=0<=0) | C | true | HC | 35 | 1 | 1 | int8 -| hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 53 | 1 | 1/2 | +| hc1.reducetemp | off/reduce switch temperature | int8 (>=0<=0) | C | true | HC | 36 | 1 | 1 | +| hc1.dhwprio | dhw priority | boolean | | true | HC | 37 | 1 | 1 | +| hc1.hpcooling | hp cooling | boolean | | true | HC | 38 | 1 | 1 | +| hc1.coolingon | cooling on | boolean | | false | HC | 39 | 1 | 1 | +| hc1.hpmode | HP Mode | enum | | true | HC | 40 | 1 | 1 | uint8 -| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 54 | 1 | 1 | -| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 55 | 1 | 1/10 | -| hc1.heatingpid | heating PID | enum | | true | HC | 56 | 1 | 1 | -| hc1.pumpopt | pump optimization | boolean | | true | HC | 57 | 1 | 1 | +| hc1.dewoffset | dew point offset | uint8 (>=2<=10) | K | true | HC | 41 | 1 | 1 | uint8 -| hc1.inttimefloor | integral time floor | uint8 (>=160<=320) | minutes | true | HC | 58 | 1 | 10 | +| hc1.roomtempdiff | room temp difference | uint8 (>=0<=0) | K | true | HC | 42 | 1 | 1 | uint8 -| hc1.inttime | integral time | uint8 (>=3<=80) | minutes | true | HC | 59 | 1 | 1 | +| hc1.hpminflowtemp | HP min. flow temp. | uint8 (>=0<=0) | C | true | HC | 43 | 1 | 1 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.remotehum | room humidity from remote | cmd | % | true | HC | 46 | 1 | 1 | +uint8 +| hc1.heatondelay | heat-on delay | uint8 (>=1<=48) | hours | true | HC | 47 | 1 | 1 | +uint8 +| hc1.heatoffdelay | heat-off delay | uint8 (>=1<=48) | hours | true | HC | 48 | 1 | 1 | +uint8 +| hc1.instantstart | instant start | uint8 (>=1<=10) | K | true | HC | 49 | 1 | 1 | +| hc1.boost | boost mode | boolean | | true | HC | 50 | 1 | 1 | +uint8 +| hc1.boosttime | boost time | uint8 (>=0<=0) | hours | true | HC | 51 | 1 | 1 | +uint8 +| hc1.coolstart | cooling starttemp | uint8 (>=20<=35) | C | true | HC | 52 | 1 | 1 | +uint8 +| hc1.coolondelay | cooling on delay | uint8 (>=1<=48) | hours | true | HC | 53 | 1 | 1 | +uint8 +| hc1.cooloffdelay | cooling off delay | uint8 (>=1<=48) | hours | true | HC | 54 | 1 | 1 | +| hc1.switchprogmode | switch program mode | enum | | true | HC | 55 | 1 | 1 | +int8 +| hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 56 | 1 | 1/2 | +uint8 +| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 57 | 1 | 1 | +| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 58 | 1 | 1/10 | +| hc1.heatingpid | heating PID | enum | | true | HC | 59 | 1 | 1 | +| hc1.pumpopt | pump optimization | boolean | | true | HC | 60 | 1 | 1 | +uint8 +| hc1.inttimefloor | integral time floor | uint8 (>=160<=320) | minutes | true | HC | 61 | 1 | 10 | +uint8 +| hc1.inttime | integral time | uint8 (>=3<=80) | minutes | true | HC | 62 | 1 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | dhw.modetype | mode type | enum | | false | DHW | 1 | 1 | 1 | uint8 @@ -5305,8 +5415,8 @@ int16 | hc1.currtemp | current room temperature | int16 | C | false | HC | 1 | 1 | 1/10 | | hc1.haclimate | mqtt discovery current room temperature | enum | | false | HC | 2 | 1 | 1 | | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | ### RC10 @@ -5324,20 +5434,20 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 61 | 1 | 1/2 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 64 | 1 | 1/2 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=0) | C | true | HC | 27 | 1 | 1/2 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | +| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=0) | C | true | HC | 28 | 1 | 1/2 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=10<=30) | C | true | HC | 8 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | ### RC30 @@ -5366,56 +5476,56 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=10<=30) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=10<=30) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=10<=30) | C | true | HC | 61 | 1 | 1/2 | +| hc1.nighttemp | night temperature | uint8 (>=10<=30) | C | true | HC | 64 | 1 | 1/2 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | int8 | hc1.offsettemp | offset temperature | int8 (>=-5<=5) | C | true | HC | 10 | 1 | 1/2 | uint8 -| hc1.holidaytemp | holiday temperature | uint8 (>=5<=30) | C | true | HC | 62 | 1 | 1/2 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.holidaytemp | holiday temperature | uint8 (>=5<=30) | C | true | HC | 65 | 1 | 1/2 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | -| hc1.holidaymode | holiday mode | boolean | | false | HC | 63 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | +| hc1.holidaymode | holiday mode | boolean | | false | HC | 66 | 1 | 1 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=-20<=10) | C | true | HC | 17 | 1 | 1 | -| hc1.nofrostmode | nofrost mode | enum | | true | HC | 16 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=-20<=10) | C | true | HC | 18 | 1 | 1 | +| hc1.nofrostmode | nofrost mode | enum | | true | HC | 17 | 1 | 1 | uint8 -| hc1.roominfluence | room influence | uint8 (>=0<=10) | C | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | uint8 (>=0<=10) | C | true | HC | 14 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.flowtempoffset | flow temperature offset for mixer | uint8 (>=0<=20) | C | true | HC | 64 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.reducemode | reduce mode | enum | | true | HC | 31 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.holidays | holiday dates | string | | true | HC | 65 | 13 | 1 | -| hc1.vacations | vacation dates | string | | true | HC | 78 | 13 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.flowtempoffset | flow temperature offset for mixer | uint8 (>=0<=20) | C | true | HC | 67 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.reducemode | reduce mode | enum | | true | HC | 34 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.holidays | holiday dates | string | | true | HC | 68 | 13 | 1 | +| hc1.vacations | vacation dates | string | | true | HC | 81 | 13 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | uint8 -| hc1.pause | pause time | uint8 (>=0<=99) | hours | true | HC | 91 | 1 | 1 | +| hc1.pause | pause time | uint8 (>=0<=99) | hours | true | HC | 94 | 1 | 1 | uint8 -| hc1.party | party time | uint8 (>=0<=99) | hours | true | HC | 92 | 1 | 1 | +| hc1.party | party time | uint8 (>=0<=99) | hours | true | HC | 95 | 1 | 1 | uint8 -| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=30) | C | true | HC | 27 | 1 | 1/2 | +| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=30) | C | true | HC | 28 | 1 | 1/2 | int8 -| hc1.noreducetemp | no reduce below temperature | int8 (>=-31<=10) | C | true | HC | 32 | 1 | 1 | +| hc1.noreducetemp | no reduce below temperature | int8 (>=-31<=10) | C | true | HC | 35 | 1 | 1 | int8 -| hc1.reducetemp | off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 33 | 1 | 1 | +| hc1.reducetemp | off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 36 | 1 | 1 | int8 -| hc1.vacreducetemp | vacations off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 93 | 1 | 1 | -| hc1.vacreducemode | vacations reduce mode | enum | | true | HC | 94 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.dhwprio | dhw priority | boolean | | true | HC | 34 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.switchtime1 | own1 program switchtime | string | | true | HC | 95 | 8 | 1 | -| hc1.switchtime2 | own2 program switchtime | string | | true | HC | 103 | 8 | 1 | +| hc1.vacreducetemp | vacations off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 96 | 1 | 1 | +| hc1.vacreducemode | vacations reduce mode | enum | | true | HC | 97 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.dhwprio | dhw priority | boolean | | true | HC | 37 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.switchtime1 | own1 program switchtime | string | | true | HC | 98 | 8 | 1 | +| hc1.switchtime2 | own2 program switchtime | string | | true | HC | 106 | 8 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | dhw.circmode | circulation pump mode | enum | | true | DHW | 4 | 1 | 1 | | dhw.progmode | program | enum | | true | DHW | 13 | 1 | 1 | @@ -5447,16 +5557,16 @@ int16 uint8 | hc1.manualtemp | manual temperature | uint8 (>=0<=0) | C | true | HC | 6 | 1 | 1/2 | uint8 -| hc1.offtemp | temperature when mode is off | uint8 (>=0<=0) | C | true | HC | 111 | 1 | 1/2 | +| hc1.offtemp | temperature when mode is off | uint8 (>=0<=0) | C | true | HC | 114 | 1 | 1/2 | uint8 -| hc1.daytemp2 | day temperature T2 | uint8 (>=0<=0) | C | true | HC | 112 | 1 | 1/2 | +| hc1.daytemp2 | day temperature T2 | uint8 (>=0<=0) | C | true | HC | 115 | 1 | 1/2 | uint8 -| hc1.daytemp3 | day temperature T3 | uint8 (>=0<=0) | C | true | HC | 113 | 1 | 1/2 | +| hc1.daytemp3 | day temperature T3 | uint8 (>=0<=0) | C | true | HC | 116 | 1 | 1/2 | uint8 -| hc1.daytemp4 | day temperature T4 | uint8 (>=0<=0) | C | true | HC | 114 | 1 | 1/2 | +| hc1.daytemp4 | day temperature T4 | uint8 (>=0<=0) | C | true | HC | 117 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature T1 | uint8 (>=0<=0) | C | true | HC | 61 | 1 | 1/2 | -| hc1.switchtime | program switchtime | string | | true | HC | 115 | 8 | 1 | +| hc1.nighttemp | night temperature T1 | uint8 (>=0<=0) | C | true | HC | 64 | 1 | 1/2 | +| hc1.switchtime | program switchtime | string | | true | HC | 118 | 8 | 1 | ### Moduline 400 @@ -5485,34 +5595,34 @@ int16 | hc1.haclimate | mqtt discovery current room temperature | enum | | false | HC | 2 | 1 | 1 | | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | uint8 -| hc1.pause | pause time | uint8 (>=0<=0) | hours | true | HC | 91 | 1 | 1 | +| hc1.pause | pause time | uint8 (>=0<=0) | hours | true | HC | 94 | 1 | 1 | uint8 -| hc1.party | party time | uint8 (>=0<=0) | hours | true | HC | 92 | 1 | 1 | -| hc1.vacations1 | vacation dates 1 | string | | true | HC | 123 | 11 | 1 | -| hc1.vacations2 | vacation dates 2 | string | | true | HC | 134 | 11 | 1 | -| hc1.vacations3 | vacation dates 3 | string | | true | HC | 145 | 11 | 1 | -| hc1.vacations4 | vacation dates 4 | string | | true | HC | 156 | 11 | 1 | -| hc1.vacations5 | vacation dates 5 | string | | true | HC | 167 | 11 | 1 | -| hc1.vacations6 | vacation dates 6 | string | | true | HC | 178 | 11 | 1 | -| hc1.vacations7 | vacation dates 7 | string | | true | HC | 189 | 11 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.switchtime1 | own1 program switchtime | string | | true | HC | 95 | 8 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.party | party time | uint8 (>=0<=0) | hours | true | HC | 95 | 1 | 1 | +| hc1.vacations1 | vacation dates 1 | string | | true | HC | 126 | 11 | 1 | +| hc1.vacations2 | vacation dates 2 | string | | true | HC | 137 | 11 | 1 | +| hc1.vacations3 | vacation dates 3 | string | | true | HC | 148 | 11 | 1 | +| hc1.vacations4 | vacation dates 4 | string | | true | HC | 159 | 11 | 1 | +| hc1.vacations5 | vacation dates 5 | string | | true | HC | 170 | 11 | 1 | +| hc1.vacations6 | vacation dates 6 | string | | true | HC | 181 | 11 | 1 | +| hc1.vacations7 | vacation dates 7 | string | | true | HC | 192 | 11 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.switchtime1 | own1 program switchtime | string | | true | HC | 98 | 8 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | uint8 -| hc1.holidaytemp | holiday temperature | uint8 (>=0<=0) | C | true | HC | 62 | 1 | 1/2 | +| hc1.holidaytemp | holiday temperature | uint8 (>=0<=0) | C | true | HC | 65 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature T1 | uint8 (>=0<=0) | C | true | HC | 61 | 1 | 1/2 | +| hc1.nighttemp | night temperature T1 | uint8 (>=0<=0) | C | true | HC | 64 | 1 | 1/2 | uint8 -| hc1.daytemp2 | day temperature T2 | uint8 (>=0<=0) | C | true | HC | 112 | 1 | 1/2 | +| hc1.daytemp2 | day temperature T2 | uint8 (>=0<=0) | C | true | HC | 115 | 1 | 1/2 | uint8 -| hc1.daytemp3 | day temperature T3 | uint8 (>=0<=0) | C | true | HC | 113 | 1 | 1/2 | +| hc1.daytemp3 | day temperature T3 | uint8 (>=0<=0) | C | true | HC | 116 | 1 | 1/2 | uint8 -| hc1.daytemp4 | day temperature T4 | uint8 (>=0<=0) | C | true | HC | 114 | 1 | 1/2 | +| hc1.daytemp4 | day temperature T4 | uint8 (>=0<=0) | C | true | HC | 117 | 1 | 1/2 | uint8 | hc1.manualtemp | manual temperature | uint8 (>=0<=0) | C | true | HC | 6 | 1 | 1/2 | uint8 -| hc1.offtemp | temperature when mode is off | uint8 (>=0<=0) | C | true | HC | 111 | 1 | 1/2 | +| hc1.offtemp | temperature when mode is off | uint8 (>=0<=0) | C | true | HC | 114 | 1 | 1/2 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | dhw.whenmodeoff | when thermostat mode off | boolean | | true | DHW | 60 | 1 | 1 | | dhw.disinfecting | disinfecting | boolean | | true | DHW | 8 | 1 | 1 | @@ -5536,12 +5646,12 @@ int16 | hc1.haclimate | mqtt discovery current room temperature | enum | | false | HC | 2 | 1 | 1 | | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 61 | 1 | 1/2 | +| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 64 | 1 | 1/2 | uint8 -| hc1.reducehours | duration for nighttemp | uint8 (>=0<=0) | hours | true | HC | 200 | 1 | 1 | -| hc1.reduceminutes | remaining time for nightmode | uint16 | minutes | false | HC | 201 | 1 | 1 | +| hc1.reducehours | duration for nighttemp | uint8 (>=0<=0) | hours | true | HC | 203 | 1 | 1 | +| hc1.reduceminutes | remaining time for nightmode | uint16 | minutes | false | HC | 204 | 1 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | errorcode | error code | string | | false | DEVICE_DATA | 0 | 8 | 1 | | lastcode | last error code | string | | false | DEVICE_DATA | 8 | 25 | 1 | @@ -5555,20 +5665,20 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 61 | 1 | 1/2 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 64 | 1 | 1/2 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=0) | C | true | HC | 27 | 1 | 1/2 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | +| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=0) | C | true | HC | 28 | 1 | 1/2 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=10<=30) | C | true | HC | 8 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | ### Moduline 200 @@ -5586,12 +5696,12 @@ int16 | hc1.haclimate | mqtt discovery current room temperature | enum | | false | HC | 2 | 1 | 1 | | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 61 | 1 | 1/2 | +| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 64 | 1 | 1/2 | uint8 -| hc1.reducehours | duration for nighttemp | uint8 (>=0<=0) | hours | true | HC | 200 | 1 | 1 | -| hc1.reduceminutes | remaining time for nightmode | uint16 | minutes | false | HC | 201 | 1 | 1 | +| hc1.reducehours | duration for nighttemp | uint8 (>=0<=0) | hours | true | HC | 203 | 1 | 1 | +| hc1.reduceminutes | remaining time for nightmode | uint16 | minutes | false | HC | 204 | 1 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | ### RC35 @@ -5617,56 +5727,56 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=10<=30) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=10<=30) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=10<=30) | C | true | HC | 61 | 1 | 1/2 | +| hc1.nighttemp | night temperature | uint8 (>=10<=30) | C | true | HC | 64 | 1 | 1/2 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | int8 | hc1.offsettemp | offset temperature | int8 (>=-5<=5) | C | true | HC | 10 | 1 | 1/2 | uint8 -| hc1.holidaytemp | holiday temperature | uint8 (>=5<=30) | C | true | HC | 62 | 1 | 1/2 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.holidaytemp | holiday temperature | uint8 (>=5<=30) | C | true | HC | 65 | 1 | 1/2 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | -| hc1.holidaymode | holiday mode | boolean | | false | HC | 63 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | +| hc1.holidaymode | holiday mode | boolean | | false | HC | 66 | 1 | 1 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=-20<=10) | C | true | HC | 17 | 1 | 1 | -| hc1.nofrostmode | nofrost mode | enum | | true | HC | 16 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=-20<=10) | C | true | HC | 18 | 1 | 1 | +| hc1.nofrostmode | nofrost mode | enum | | true | HC | 17 | 1 | 1 | uint8 -| hc1.roominfluence | room influence | uint8 (>=0<=10) | C | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | uint8 (>=0<=10) | C | true | HC | 14 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.flowtempoffset | flow temperature offset for mixer | uint8 (>=0<=20) | C | true | HC | 64 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.reducemode | reduce mode | enum | | true | HC | 31 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.holidays | holiday dates | string | | true | HC | 65 | 13 | 1 | -| hc1.vacations | vacation dates | string | | true | HC | 78 | 13 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.flowtempoffset | flow temperature offset for mixer | uint8 (>=0<=20) | C | true | HC | 67 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.reducemode | reduce mode | enum | | true | HC | 34 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.holidays | holiday dates | string | | true | HC | 68 | 13 | 1 | +| hc1.vacations | vacation dates | string | | true | HC | 81 | 13 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | uint8 -| hc1.pause | pause time | uint8 (>=0<=99) | hours | true | HC | 91 | 1 | 1 | +| hc1.pause | pause time | uint8 (>=0<=99) | hours | true | HC | 94 | 1 | 1 | uint8 -| hc1.party | party time | uint8 (>=0<=99) | hours | true | HC | 92 | 1 | 1 | +| hc1.party | party time | uint8 (>=0<=99) | hours | true | HC | 95 | 1 | 1 | uint8 -| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=30) | C | true | HC | 27 | 1 | 1/2 | +| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=30) | C | true | HC | 28 | 1 | 1/2 | int8 -| hc1.noreducetemp | no reduce below temperature | int8 (>=-31<=10) | C | true | HC | 32 | 1 | 1 | +| hc1.noreducetemp | no reduce below temperature | int8 (>=-31<=10) | C | true | HC | 35 | 1 | 1 | int8 -| hc1.reducetemp | off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 33 | 1 | 1 | +| hc1.reducetemp | off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 36 | 1 | 1 | int8 -| hc1.vacreducetemp | vacations off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 93 | 1 | 1 | -| hc1.vacreducemode | vacations reduce mode | enum | | true | HC | 94 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.dhwprio | dhw priority | boolean | | true | HC | 34 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.switchtime1 | own1 program switchtime | string | | true | HC | 95 | 8 | 1 | -| hc1.switchtime2 | own2 program switchtime | string | | true | HC | 103 | 8 | 1 | +| hc1.vacreducetemp | vacations off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 96 | 1 | 1 | +| hc1.vacreducemode | vacations reduce mode | enum | | true | HC | 97 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.dhwprio | dhw priority | boolean | | true | HC | 37 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.switchtime1 | own1 program switchtime | string | | true | HC | 98 | 8 | 1 | +| hc1.switchtime2 | own2 program switchtime | string | | true | HC | 106 | 8 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | dhw.circmode | circulation pump mode | enum | | true | DHW | 4 | 1 | 1 | | dhw.progmode | program | enum | | true | DHW | 13 | 1 | 1 | @@ -5698,16 +5808,16 @@ int16 uint8 | hc1.manualtemp | manual temperature | uint8 (>=0<=0) | C | true | HC | 6 | 1 | 1/2 | uint8 -| hc1.offtemp | temperature when mode is off | uint8 (>=0<=0) | C | true | HC | 111 | 1 | 1/2 | +| hc1.offtemp | temperature when mode is off | uint8 (>=0<=0) | C | true | HC | 114 | 1 | 1/2 | uint8 -| hc1.daytemp2 | day temperature T2 | uint8 (>=0<=0) | C | true | HC | 112 | 1 | 1/2 | +| hc1.daytemp2 | day temperature T2 | uint8 (>=0<=0) | C | true | HC | 115 | 1 | 1/2 | uint8 -| hc1.daytemp3 | day temperature T3 | uint8 (>=0<=0) | C | true | HC | 113 | 1 | 1/2 | +| hc1.daytemp3 | day temperature T3 | uint8 (>=0<=0) | C | true | HC | 116 | 1 | 1/2 | uint8 -| hc1.daytemp4 | day temperature T4 | uint8 (>=0<=0) | C | true | HC | 114 | 1 | 1/2 | +| hc1.daytemp4 | day temperature T4 | uint8 (>=0<=0) | C | true | HC | 117 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature T1 | uint8 (>=0<=0) | C | true | HC | 61 | 1 | 1/2 | -| hc1.switchtime | program switchtime | string | | true | HC | 115 | 8 | 1 | +| hc1.nighttemp | night temperature T1 | uint8 (>=0<=0) | C | true | HC | 64 | 1 | 1/2 | +| hc1.switchtime | program switchtime | string | | true | HC | 118 | 8 | 1 | ### RFM20 Remote @@ -5737,20 +5847,20 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 61 | 1 | 1/2 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 64 | 1 | 1/2 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=0) | C | true | HC | 27 | 1 | 1/2 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | +| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=0) | C | true | HC | 28 | 1 | 1/2 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | ### RC200, CW100, CR120, CR50 @@ -5808,76 +5918,82 @@ uint8 int8 | hc1.offsettemp | offset temperature | int8 (>=0<=0) | C | true | HC | 10 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | +| hc1.baseflowtemp | base flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.roominfluence | room influence | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | | true | HC | 14 | 1 | 1/10 | -| hc1.curroominfl | current room influence | int16 | C | false | HC | 15 | 1 | 1/10 | -| hc1.nofrostmode | nofrost mode | enum | | true | HC | 16 | 1 | 1 | +| hc1.roominfluence | room influence | uint8 (>=0<=0) | C | true | HC | 14 | 1 | 1 | +uint8 +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | | true | HC | 15 | 1 | 1/10 | +| hc1.curroominfl | current room influence | int16 | C | false | HC | 16 | 1 | 1/10 | +| hc1.nofrostmode | nofrost mode | enum | | true | HC | 17 | 1 | 1 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.summersetmode | set summer mode | enum | | true | HC | 20 | 1 | 1 | -| hc1.hpoperatingmode | heatpump operating mode | enum | | true | HC | 21 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | -| hc1.hpoperatingstate | heatpump operating state | enum | | false | HC | 23 | 1 | 1 | -| hc1.vacationmode | vacation mode | boolean | | false | HC | 24 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.summersetmode | set summer mode | enum | | true | HC | 21 | 1 | 1 | +| hc1.hpoperatingmode | heatpump operating mode | enum | | true | HC | 22 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | +| hc1.hpoperatingstate | heatpump operating state | enum | | false | HC | 24 | 1 | 1 | +| hc1.vacationmode | vacation mode | boolean | | false | HC | 25 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | int8 -| hc1.tempautotemp | temporary set temperature automode | int8 (>=-1<=30) | C | true | HC | 27 | 1 | 1/2 | +| hc1.tempautotemp | temporary set temperature automode | int8 (>=-1<=30) | C | true | HC | 28 | 1 | 1/2 | int8 -| hc1.cooltemp | cooling temperature | int8 (>=-1<=30) | C | true | HC | 28 | 1 | 1/2 | +| hc1.cooltemp | cooling temperature | int8 (>=-1<=30) | C | true | HC | 29 | 1 | 1/2 | uint8 -| hc1.fastheatup | fast heatup | uint8 (>=0<=0) | % | true | HC | 29 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.reducemode | reduce mode | enum | | true | HC | 31 | 1 | 1 | +| hc1.fastheatup | fast heatup | uint8 (>=0<=0) | % | true | HC | 30 | 1 | 1 | +uint8 +| hc1.comfoffset | comfort point offset | uint8 (>=0<=10) | C | true | HC | 31 | 1 | 1 | int8 -| hc1.noreducetemp | no reduce below temperature | int8 (>=0<=0) | C | true | HC | 32 | 1 | 1 | +| hc1.comftemp | comfort point temperature | int8 (>=-5<=15) | C | true | HC | 32 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.reducemode | reduce mode | enum | | true | HC | 34 | 1 | 1 | int8 -| hc1.reducetemp | off/reduce switch temperature | int8 (>=0<=0) | C | true | HC | 33 | 1 | 1 | -| hc1.dhwprio | dhw priority | boolean | | true | HC | 34 | 1 | 1 | -| hc1.hpcooling | hp cooling | boolean | | true | HC | 35 | 1 | 1 | -| hc1.coolingon | cooling on | boolean | | false | HC | 36 | 1 | 1 | -| hc1.hpmode | HP Mode | enum | | true | HC | 37 | 1 | 1 | -uint8 -| hc1.dewoffset | dew point offset | uint8 (>=2<=10) | K | true | HC | 38 | 1 | 1 | -uint8 -| hc1.roomtempdiff | room temp difference | uint8 (>=0<=0) | K | true | HC | 39 | 1 | 1 | -uint8 -| hc1.hpminflowtemp | HP min. flow temp. | uint8 (>=0<=0) | C | true | HC | 40 | 1 | 1 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -uint8 -| hc1.heatondelay | heat-on delay | uint8 (>=1<=48) | hours | true | HC | 44 | 1 | 1 | -uint8 -| hc1.heatoffdelay | heat-off delay | uint8 (>=1<=48) | hours | true | HC | 45 | 1 | 1 | -uint8 -| hc1.instantstart | instant start | uint8 (>=1<=10) | K | true | HC | 46 | 1 | 1 | -| hc1.boost | boost mode | boolean | | true | HC | 47 | 1 | 1 | -uint8 -| hc1.boosttime | boost time | uint8 (>=0<=0) | hours | true | HC | 48 | 1 | 1 | -uint8 -| hc1.coolstart | cooling starttemp | uint8 (>=20<=35) | C | true | HC | 49 | 1 | 1 | -uint8 -| hc1.coolondelay | cooling on delay | uint8 (>=1<=48) | hours | true | HC | 50 | 1 | 1 | -uint8 -| hc1.cooloffdelay | cooling off delay | uint8 (>=1<=48) | hours | true | HC | 51 | 1 | 1 | -| hc1.switchprogmode | switch program mode | enum | | true | HC | 52 | 1 | 1 | +| hc1.noreducetemp | no reduce below temperature | int8 (>=0<=0) | C | true | HC | 35 | 1 | 1 | int8 -| hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 53 | 1 | 1/2 | +| hc1.reducetemp | off/reduce switch temperature | int8 (>=0<=0) | C | true | HC | 36 | 1 | 1 | +| hc1.dhwprio | dhw priority | boolean | | true | HC | 37 | 1 | 1 | +| hc1.hpcooling | hp cooling | boolean | | true | HC | 38 | 1 | 1 | +| hc1.coolingon | cooling on | boolean | | false | HC | 39 | 1 | 1 | +| hc1.hpmode | HP Mode | enum | | true | HC | 40 | 1 | 1 | uint8 -| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 54 | 1 | 1 | -| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 55 | 1 | 1/10 | -| hc1.heatingpid | heating PID | enum | | true | HC | 56 | 1 | 1 | -| hc1.pumpopt | pump optimization | boolean | | true | HC | 57 | 1 | 1 | +| hc1.dewoffset | dew point offset | uint8 (>=2<=10) | K | true | HC | 41 | 1 | 1 | uint8 -| hc1.inttimefloor | integral time floor | uint8 (>=160<=320) | minutes | true | HC | 58 | 1 | 10 | +| hc1.roomtempdiff | room temp difference | uint8 (>=0<=0) | K | true | HC | 42 | 1 | 1 | uint8 -| hc1.inttime | integral time | uint8 (>=3<=80) | minutes | true | HC | 59 | 1 | 1 | +| hc1.hpminflowtemp | HP min. flow temp. | uint8 (>=0<=0) | C | true | HC | 43 | 1 | 1 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +uint8 +| hc1.heatondelay | heat-on delay | uint8 (>=1<=48) | hours | true | HC | 47 | 1 | 1 | +uint8 +| hc1.heatoffdelay | heat-off delay | uint8 (>=1<=48) | hours | true | HC | 48 | 1 | 1 | +uint8 +| hc1.instantstart | instant start | uint8 (>=1<=10) | K | true | HC | 49 | 1 | 1 | +| hc1.boost | boost mode | boolean | | true | HC | 50 | 1 | 1 | +uint8 +| hc1.boosttime | boost time | uint8 (>=0<=0) | hours | true | HC | 51 | 1 | 1 | +uint8 +| hc1.coolstart | cooling starttemp | uint8 (>=20<=35) | C | true | HC | 52 | 1 | 1 | +uint8 +| hc1.coolondelay | cooling on delay | uint8 (>=1<=48) | hours | true | HC | 53 | 1 | 1 | +uint8 +| hc1.cooloffdelay | cooling off delay | uint8 (>=1<=48) | hours | true | HC | 54 | 1 | 1 | +| hc1.switchprogmode | switch program mode | enum | | true | HC | 55 | 1 | 1 | +int8 +| hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 56 | 1 | 1/2 | +uint8 +| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 57 | 1 | 1 | +| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 58 | 1 | 1/10 | +| hc1.heatingpid | heating PID | enum | | true | HC | 59 | 1 | 1 | +| hc1.pumpopt | pump optimization | boolean | | true | HC | 60 | 1 | 1 | +uint8 +| hc1.inttimefloor | integral time floor | uint8 (>=160<=320) | minutes | true | HC | 61 | 1 | 10 | +uint8 +| hc1.inttime | integral time | uint8 (>=3<=80) | minutes | true | HC | 62 | 1 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | dhw.modetype | mode type | enum | | false | DHW | 1 | 1 | 1 | uint8 @@ -5952,78 +6068,84 @@ uint8 int8 | hc1.offsettemp | offset temperature | int8 (>=0<=0) | C | true | HC | 10 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | +| hc1.baseflowtemp | base flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.roominfluence | room influence | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | | true | HC | 14 | 1 | 1/10 | -| hc1.curroominfl | current room influence | int16 | C | false | HC | 15 | 1 | 1/10 | -| hc1.nofrostmode | nofrost mode | enum | | true | HC | 16 | 1 | 1 | +| hc1.roominfluence | room influence | uint8 (>=0<=0) | C | true | HC | 14 | 1 | 1 | +uint8 +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | | true | HC | 15 | 1 | 1/10 | +| hc1.curroominfl | current room influence | int16 | C | false | HC | 16 | 1 | 1/10 | +| hc1.nofrostmode | nofrost mode | enum | | true | HC | 17 | 1 | 1 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.summersetmode | set summer mode | enum | | true | HC | 20 | 1 | 1 | -| hc1.hpoperatingmode | heatpump operating mode | enum | | true | HC | 21 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | -| hc1.hpoperatingstate | heatpump operating state | enum | | false | HC | 23 | 1 | 1 | -| hc1.vacationmode | vacation mode | boolean | | false | HC | 24 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.summersetmode | set summer mode | enum | | true | HC | 21 | 1 | 1 | +| hc1.hpoperatingmode | heatpump operating mode | enum | | true | HC | 22 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | +| hc1.hpoperatingstate | heatpump operating state | enum | | false | HC | 24 | 1 | 1 | +| hc1.vacationmode | vacation mode | boolean | | false | HC | 25 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | int8 -| hc1.tempautotemp | temporary set temperature automode | int8 (>=-1<=30) | C | true | HC | 27 | 1 | 1/2 | +| hc1.tempautotemp | temporary set temperature automode | int8 (>=-1<=30) | C | true | HC | 28 | 1 | 1/2 | int8 -| hc1.cooltemp | cooling temperature | int8 (>=-1<=30) | C | true | HC | 28 | 1 | 1/2 | +| hc1.cooltemp | cooling temperature | int8 (>=-1<=30) | C | true | HC | 29 | 1 | 1/2 | uint8 -| hc1.fastheatup | fast heatup | uint8 (>=0<=0) | % | true | HC | 29 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.reducemode | reduce mode | enum | | true | HC | 31 | 1 | 1 | +| hc1.fastheatup | fast heatup | uint8 (>=0<=0) | % | true | HC | 30 | 1 | 1 | +uint8 +| hc1.comfoffset | comfort point offset | uint8 (>=0<=10) | C | true | HC | 31 | 1 | 1 | int8 -| hc1.noreducetemp | no reduce below temperature | int8 (>=0<=0) | C | true | HC | 32 | 1 | 1 | +| hc1.comftemp | comfort point temperature | int8 (>=-5<=15) | C | true | HC | 32 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.reducemode | reduce mode | enum | | true | HC | 34 | 1 | 1 | int8 -| hc1.reducetemp | off/reduce switch temperature | int8 (>=0<=0) | C | true | HC | 33 | 1 | 1 | -| hc1.dhwprio | dhw priority | boolean | | true | HC | 34 | 1 | 1 | -| hc1.hpcooling | hp cooling | boolean | | true | HC | 35 | 1 | 1 | -| hc1.coolingon | cooling on | boolean | | false | HC | 36 | 1 | 1 | -| hc1.hpmode | HP Mode | enum | | true | HC | 37 | 1 | 1 | -uint8 -| hc1.dewoffset | dew point offset | uint8 (>=2<=10) | K | true | HC | 38 | 1 | 1 | -uint8 -| hc1.roomtempdiff | room temp difference | uint8 (>=0<=0) | K | true | HC | 39 | 1 | 1 | -uint8 -| hc1.hpminflowtemp | HP min. flow temp. | uint8 (>=0<=0) | C | true | HC | 40 | 1 | 1 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.remotehum | room humidity from remote | cmd | % | true | HC | 43 | 1 | 1 | -uint8 -| hc1.heatondelay | heat-on delay | uint8 (>=1<=48) | hours | true | HC | 44 | 1 | 1 | -uint8 -| hc1.heatoffdelay | heat-off delay | uint8 (>=1<=48) | hours | true | HC | 45 | 1 | 1 | -uint8 -| hc1.instantstart | instant start | uint8 (>=1<=10) | K | true | HC | 46 | 1 | 1 | -| hc1.boost | boost mode | boolean | | true | HC | 47 | 1 | 1 | -uint8 -| hc1.boosttime | boost time | uint8 (>=0<=0) | hours | true | HC | 48 | 1 | 1 | -uint8 -| hc1.coolstart | cooling starttemp | uint8 (>=20<=35) | C | true | HC | 49 | 1 | 1 | -uint8 -| hc1.coolondelay | cooling on delay | uint8 (>=1<=48) | hours | true | HC | 50 | 1 | 1 | -uint8 -| hc1.cooloffdelay | cooling off delay | uint8 (>=1<=48) | hours | true | HC | 51 | 1 | 1 | -| hc1.switchprogmode | switch program mode | enum | | true | HC | 52 | 1 | 1 | +| hc1.noreducetemp | no reduce below temperature | int8 (>=0<=0) | C | true | HC | 35 | 1 | 1 | int8 -| hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 53 | 1 | 1/2 | +| hc1.reducetemp | off/reduce switch temperature | int8 (>=0<=0) | C | true | HC | 36 | 1 | 1 | +| hc1.dhwprio | dhw priority | boolean | | true | HC | 37 | 1 | 1 | +| hc1.hpcooling | hp cooling | boolean | | true | HC | 38 | 1 | 1 | +| hc1.coolingon | cooling on | boolean | | false | HC | 39 | 1 | 1 | +| hc1.hpmode | HP Mode | enum | | true | HC | 40 | 1 | 1 | uint8 -| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 54 | 1 | 1 | -| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 55 | 1 | 1/10 | -| hc1.heatingpid | heating PID | enum | | true | HC | 56 | 1 | 1 | -| hc1.pumpopt | pump optimization | boolean | | true | HC | 57 | 1 | 1 | +| hc1.dewoffset | dew point offset | uint8 (>=2<=10) | K | true | HC | 41 | 1 | 1 | uint8 -| hc1.inttimefloor | integral time floor | uint8 (>=160<=320) | minutes | true | HC | 58 | 1 | 10 | +| hc1.roomtempdiff | room temp difference | uint8 (>=0<=0) | K | true | HC | 42 | 1 | 1 | uint8 -| hc1.inttime | integral time | uint8 (>=3<=80) | minutes | true | HC | 59 | 1 | 1 | +| hc1.hpminflowtemp | HP min. flow temp. | uint8 (>=0<=0) | C | true | HC | 43 | 1 | 1 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.remotehum | room humidity from remote | cmd | % | true | HC | 46 | 1 | 1 | +uint8 +| hc1.heatondelay | heat-on delay | uint8 (>=1<=48) | hours | true | HC | 47 | 1 | 1 | +uint8 +| hc1.heatoffdelay | heat-off delay | uint8 (>=1<=48) | hours | true | HC | 48 | 1 | 1 | +uint8 +| hc1.instantstart | instant start | uint8 (>=1<=10) | K | true | HC | 49 | 1 | 1 | +| hc1.boost | boost mode | boolean | | true | HC | 50 | 1 | 1 | +uint8 +| hc1.boosttime | boost time | uint8 (>=0<=0) | hours | true | HC | 51 | 1 | 1 | +uint8 +| hc1.coolstart | cooling starttemp | uint8 (>=20<=35) | C | true | HC | 52 | 1 | 1 | +uint8 +| hc1.coolondelay | cooling on delay | uint8 (>=1<=48) | hours | true | HC | 53 | 1 | 1 | +uint8 +| hc1.cooloffdelay | cooling off delay | uint8 (>=1<=48) | hours | true | HC | 54 | 1 | 1 | +| hc1.switchprogmode | switch program mode | enum | | true | HC | 55 | 1 | 1 | +int8 +| hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 56 | 1 | 1/2 | +uint8 +| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 57 | 1 | 1 | +| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 58 | 1 | 1/10 | +| hc1.heatingpid | heating PID | enum | | true | HC | 59 | 1 | 1 | +| hc1.pumpopt | pump optimization | boolean | | true | HC | 60 | 1 | 1 | +uint8 +| hc1.inttimefloor | integral time floor | uint8 (>=160<=320) | minutes | true | HC | 61 | 1 | 10 | +uint8 +| hc1.inttime | integral time | uint8 (>=3<=80) | minutes | true | HC | 62 | 1 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | dhw.modetype | mode type | enum | | false | DHW | 1 | 1 | 1 | uint8 @@ -6054,8 +6176,8 @@ int16 | hc1.currtemp | current room temperature | int16 | C | false | HC | 1 | 1 | 1/10 | | hc1.haclimate | mqtt discovery current room temperature | enum | | false | HC | 2 | 1 | 1 | | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | ### Rego 2000/3000 @@ -6113,78 +6235,84 @@ uint8 int8 | hc1.offsettemp | offset temperature | int8 (>=0<=0) | C | true | HC | 10 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | +| hc1.baseflowtemp | base flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.roominfluence | room influence | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | | true | HC | 14 | 1 | 1/10 | -| hc1.curroominfl | current room influence | int16 | C | false | HC | 15 | 1 | 1/10 | -| hc1.nofrostmode | nofrost mode | enum | | true | HC | 16 | 1 | 1 | +| hc1.roominfluence | room influence | uint8 (>=0<=0) | C | true | HC | 14 | 1 | 1 | +uint8 +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | | true | HC | 15 | 1 | 1/10 | +| hc1.curroominfl | current room influence | int16 | C | false | HC | 16 | 1 | 1/10 | +| hc1.nofrostmode | nofrost mode | enum | | true | HC | 17 | 1 | 1 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.summersetmode | set summer mode | enum | | true | HC | 20 | 1 | 1 | -| hc1.hpoperatingmode | heatpump operating mode | enum | | true | HC | 21 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | -| hc1.hpoperatingstate | heatpump operating state | enum | | false | HC | 23 | 1 | 1 | -| hc1.vacationmode | vacation mode | boolean | | false | HC | 24 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.summersetmode | set summer mode | enum | | true | HC | 21 | 1 | 1 | +| hc1.hpoperatingmode | heatpump operating mode | enum | | true | HC | 22 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | +| hc1.hpoperatingstate | heatpump operating state | enum | | false | HC | 24 | 1 | 1 | +| hc1.vacationmode | vacation mode | boolean | | false | HC | 25 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | int8 -| hc1.tempautotemp | temporary set temperature automode | int8 (>=-1<=30) | C | true | HC | 27 | 1 | 1/2 | +| hc1.tempautotemp | temporary set temperature automode | int8 (>=-1<=30) | C | true | HC | 28 | 1 | 1/2 | int8 -| hc1.cooltemp | cooling temperature | int8 (>=-1<=30) | C | true | HC | 28 | 1 | 1/2 | +| hc1.cooltemp | cooling temperature | int8 (>=-1<=30) | C | true | HC | 29 | 1 | 1/2 | uint8 -| hc1.fastheatup | fast heatup | uint8 (>=0<=0) | % | true | HC | 29 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.reducemode | reduce mode | enum | | true | HC | 31 | 1 | 1 | +| hc1.fastheatup | fast heatup | uint8 (>=0<=0) | % | true | HC | 30 | 1 | 1 | +uint8 +| hc1.comfoffset | comfort point offset | uint8 (>=0<=10) | C | true | HC | 31 | 1 | 1 | int8 -| hc1.noreducetemp | no reduce below temperature | int8 (>=0<=0) | C | true | HC | 32 | 1 | 1 | +| hc1.comftemp | comfort point temperature | int8 (>=-5<=15) | C | true | HC | 32 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.reducemode | reduce mode | enum | | true | HC | 34 | 1 | 1 | int8 -| hc1.reducetemp | off/reduce switch temperature | int8 (>=0<=0) | C | true | HC | 33 | 1 | 1 | -| hc1.dhwprio | dhw priority | boolean | | true | HC | 34 | 1 | 1 | -| hc1.hpcooling | hp cooling | boolean | | true | HC | 35 | 1 | 1 | -| hc1.coolingon | cooling on | boolean | | false | HC | 36 | 1 | 1 | -| hc1.hpmode | HP Mode | enum | | true | HC | 37 | 1 | 1 | -uint8 -| hc1.dewoffset | dew point offset | uint8 (>=2<=10) | K | true | HC | 38 | 1 | 1 | -uint8 -| hc1.roomtempdiff | room temp difference | uint8 (>=0<=0) | K | true | HC | 39 | 1 | 1 | -uint8 -| hc1.hpminflowtemp | HP min. flow temp. | uint8 (>=0<=0) | C | true | HC | 40 | 1 | 1 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.remotehum | room humidity from remote | cmd | % | true | HC | 43 | 1 | 1 | -uint8 -| hc1.heatondelay | heat-on delay | uint8 (>=1<=48) | hours | true | HC | 44 | 1 | 1 | -uint8 -| hc1.heatoffdelay | heat-off delay | uint8 (>=1<=48) | hours | true | HC | 45 | 1 | 1 | -uint8 -| hc1.instantstart | instant start | uint8 (>=1<=10) | K | true | HC | 46 | 1 | 1 | -| hc1.boost | boost mode | boolean | | true | HC | 47 | 1 | 1 | -uint8 -| hc1.boosttime | boost time | uint8 (>=0<=0) | hours | true | HC | 48 | 1 | 1 | -uint8 -| hc1.coolstart | cooling starttemp | uint8 (>=20<=35) | C | true | HC | 49 | 1 | 1 | -uint8 -| hc1.coolondelay | cooling on delay | uint8 (>=1<=48) | hours | true | HC | 50 | 1 | 1 | -uint8 -| hc1.cooloffdelay | cooling off delay | uint8 (>=1<=48) | hours | true | HC | 51 | 1 | 1 | -| hc1.switchprogmode | switch program mode | enum | | true | HC | 52 | 1 | 1 | +| hc1.noreducetemp | no reduce below temperature | int8 (>=0<=0) | C | true | HC | 35 | 1 | 1 | int8 -| hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 53 | 1 | 1/2 | +| hc1.reducetemp | off/reduce switch temperature | int8 (>=0<=0) | C | true | HC | 36 | 1 | 1 | +| hc1.dhwprio | dhw priority | boolean | | true | HC | 37 | 1 | 1 | +| hc1.hpcooling | hp cooling | boolean | | true | HC | 38 | 1 | 1 | +| hc1.coolingon | cooling on | boolean | | false | HC | 39 | 1 | 1 | +| hc1.hpmode | HP Mode | enum | | true | HC | 40 | 1 | 1 | uint8 -| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 54 | 1 | 1 | -| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 55 | 1 | 1/10 | -| hc1.heatingpid | heating PID | enum | | true | HC | 56 | 1 | 1 | -| hc1.pumpopt | pump optimization | boolean | | true | HC | 57 | 1 | 1 | +| hc1.dewoffset | dew point offset | uint8 (>=2<=10) | K | true | HC | 41 | 1 | 1 | uint8 -| hc1.inttimefloor | integral time floor | uint8 (>=160<=320) | minutes | true | HC | 58 | 1 | 10 | +| hc1.roomtempdiff | room temp difference | uint8 (>=0<=0) | K | true | HC | 42 | 1 | 1 | uint8 -| hc1.inttime | integral time | uint8 (>=3<=80) | minutes | true | HC | 59 | 1 | 1 | +| hc1.hpminflowtemp | HP min. flow temp. | uint8 (>=0<=0) | C | true | HC | 43 | 1 | 1 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.remotehum | room humidity from remote | cmd | % | true | HC | 46 | 1 | 1 | +uint8 +| hc1.heatondelay | heat-on delay | uint8 (>=1<=48) | hours | true | HC | 47 | 1 | 1 | +uint8 +| hc1.heatoffdelay | heat-off delay | uint8 (>=1<=48) | hours | true | HC | 48 | 1 | 1 | +uint8 +| hc1.instantstart | instant start | uint8 (>=1<=10) | K | true | HC | 49 | 1 | 1 | +| hc1.boost | boost mode | boolean | | true | HC | 50 | 1 | 1 | +uint8 +| hc1.boosttime | boost time | uint8 (>=0<=0) | hours | true | HC | 51 | 1 | 1 | +uint8 +| hc1.coolstart | cooling starttemp | uint8 (>=20<=35) | C | true | HC | 52 | 1 | 1 | +uint8 +| hc1.coolondelay | cooling on delay | uint8 (>=1<=48) | hours | true | HC | 53 | 1 | 1 | +uint8 +| hc1.cooloffdelay | cooling off delay | uint8 (>=1<=48) | hours | true | HC | 54 | 1 | 1 | +| hc1.switchprogmode | switch program mode | enum | | true | HC | 55 | 1 | 1 | +int8 +| hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 56 | 1 | 1/2 | +uint8 +| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 57 | 1 | 1 | +| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 58 | 1 | 1/10 | +| hc1.heatingpid | heating PID | enum | | true | HC | 59 | 1 | 1 | +| hc1.pumpopt | pump optimization | boolean | | true | HC | 60 | 1 | 1 | +uint8 +| hc1.inttimefloor | integral time floor | uint8 (>=160<=320) | minutes | true | HC | 61 | 1 | 10 | +uint8 +| hc1.inttime | integral time | uint8 (>=3<=80) | minutes | true | HC | 62 | 1 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | dhw.modetype | mode type | enum | | false | DHW | 1 | 1 | 1 | uint8 @@ -6216,7 +6344,7 @@ uint8 | hc1.haclimate | mqtt discovery current room temperature | enum | | false | HC | 2 | 1 | 1 | | hc1.mode | operating mode | enum | | false | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | ### CRF200S @@ -6230,7 +6358,7 @@ uint8 | hc1.haclimate | mqtt discovery current room temperature | enum | | false | HC | 2 | 1 | 1 | | hc1.mode | operating mode | enum | | false | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | ### Comfort+2RF @@ -6244,7 +6372,7 @@ uint8 | hc1.haclimate | mqtt discovery current room temperature | enum | | false | HC | 2 | 1 | 1 | | hc1.mode | operating mode | enum | | false | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | ### Rego 3000, UI800, Logamatic BC400 @@ -6301,78 +6429,84 @@ uint8 int8 | hc1.offsettemp | offset temperature | int8 (>=0<=0) | C | true | HC | 10 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | +| hc1.baseflowtemp | base flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.roominfluence | room influence | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | | true | HC | 14 | 1 | 1/10 | -| hc1.curroominfl | current room influence | int16 | C | false | HC | 15 | 1 | 1/10 | -| hc1.nofrostmode | nofrost mode | enum | | true | HC | 16 | 1 | 1 | +| hc1.roominfluence | room influence | uint8 (>=0<=0) | C | true | HC | 14 | 1 | 1 | +uint8 +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | | true | HC | 15 | 1 | 1/10 | +| hc1.curroominfl | current room influence | int16 | C | false | HC | 16 | 1 | 1/10 | +| hc1.nofrostmode | nofrost mode | enum | | true | HC | 17 | 1 | 1 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.summersetmode | set summer mode | enum | | true | HC | 20 | 1 | 1 | -| hc1.hpoperatingmode | heatpump operating mode | enum | | true | HC | 21 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | -| hc1.hpoperatingstate | heatpump operating state | enum | | false | HC | 23 | 1 | 1 | -| hc1.vacationmode | vacation mode | boolean | | false | HC | 24 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.summersetmode | set summer mode | enum | | true | HC | 21 | 1 | 1 | +| hc1.hpoperatingmode | heatpump operating mode | enum | | true | HC | 22 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | +| hc1.hpoperatingstate | heatpump operating state | enum | | false | HC | 24 | 1 | 1 | +| hc1.vacationmode | vacation mode | boolean | | false | HC | 25 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | int8 -| hc1.tempautotemp | temporary set temperature automode | int8 (>=-1<=30) | C | true | HC | 27 | 1 | 1/2 | +| hc1.tempautotemp | temporary set temperature automode | int8 (>=-1<=30) | C | true | HC | 28 | 1 | 1/2 | int8 -| hc1.cooltemp | cooling temperature | int8 (>=-1<=30) | C | true | HC | 28 | 1 | 1/2 | +| hc1.cooltemp | cooling temperature | int8 (>=-1<=30) | C | true | HC | 29 | 1 | 1/2 | uint8 -| hc1.fastheatup | fast heatup | uint8 (>=0<=0) | % | true | HC | 29 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.reducemode | reduce mode | enum | | true | HC | 31 | 1 | 1 | +| hc1.fastheatup | fast heatup | uint8 (>=0<=0) | % | true | HC | 30 | 1 | 1 | +uint8 +| hc1.comfoffset | comfort point offset | uint8 (>=0<=10) | C | true | HC | 31 | 1 | 1 | int8 -| hc1.noreducetemp | no reduce below temperature | int8 (>=0<=0) | C | true | HC | 32 | 1 | 1 | +| hc1.comftemp | comfort point temperature | int8 (>=-5<=15) | C | true | HC | 32 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.reducemode | reduce mode | enum | | true | HC | 34 | 1 | 1 | int8 -| hc1.reducetemp | off/reduce switch temperature | int8 (>=0<=0) | C | true | HC | 33 | 1 | 1 | -| hc1.dhwprio | dhw priority | boolean | | true | HC | 34 | 1 | 1 | -| hc1.hpcooling | hp cooling | boolean | | true | HC | 35 | 1 | 1 | -| hc1.coolingon | cooling on | boolean | | false | HC | 36 | 1 | 1 | -| hc1.hpmode | HP Mode | enum | | true | HC | 37 | 1 | 1 | -uint8 -| hc1.dewoffset | dew point offset | uint8 (>=2<=10) | K | true | HC | 38 | 1 | 1 | -uint8 -| hc1.roomtempdiff | room temp difference | uint8 (>=0<=0) | K | true | HC | 39 | 1 | 1 | -uint8 -| hc1.hpminflowtemp | HP min. flow temp. | uint8 (>=0<=0) | C | true | HC | 40 | 1 | 1 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.remotehum | room humidity from remote | cmd | % | true | HC | 43 | 1 | 1 | -uint8 -| hc1.heatondelay | heat-on delay | uint8 (>=1<=48) | hours | true | HC | 44 | 1 | 1 | -uint8 -| hc1.heatoffdelay | heat-off delay | uint8 (>=1<=48) | hours | true | HC | 45 | 1 | 1 | -uint8 -| hc1.instantstart | instant start | uint8 (>=1<=10) | K | true | HC | 46 | 1 | 1 | -| hc1.boost | boost mode | boolean | | true | HC | 47 | 1 | 1 | -uint8 -| hc1.boosttime | boost time | uint8 (>=0<=0) | hours | true | HC | 48 | 1 | 1 | -uint8 -| hc1.coolstart | cooling starttemp | uint8 (>=20<=35) | C | true | HC | 49 | 1 | 1 | -uint8 -| hc1.coolondelay | cooling on delay | uint8 (>=1<=48) | hours | true | HC | 50 | 1 | 1 | -uint8 -| hc1.cooloffdelay | cooling off delay | uint8 (>=1<=48) | hours | true | HC | 51 | 1 | 1 | -| hc1.switchprogmode | switch program mode | enum | | true | HC | 52 | 1 | 1 | +| hc1.noreducetemp | no reduce below temperature | int8 (>=0<=0) | C | true | HC | 35 | 1 | 1 | int8 -| hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 53 | 1 | 1/2 | +| hc1.reducetemp | off/reduce switch temperature | int8 (>=0<=0) | C | true | HC | 36 | 1 | 1 | +| hc1.dhwprio | dhw priority | boolean | | true | HC | 37 | 1 | 1 | +| hc1.hpcooling | hp cooling | boolean | | true | HC | 38 | 1 | 1 | +| hc1.coolingon | cooling on | boolean | | false | HC | 39 | 1 | 1 | +| hc1.hpmode | HP Mode | enum | | true | HC | 40 | 1 | 1 | uint8 -| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 54 | 1 | 1 | -| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 55 | 1 | 1/10 | -| hc1.heatingpid | heating PID | enum | | true | HC | 56 | 1 | 1 | -| hc1.pumpopt | pump optimization | boolean | | true | HC | 57 | 1 | 1 | +| hc1.dewoffset | dew point offset | uint8 (>=2<=10) | K | true | HC | 41 | 1 | 1 | uint8 -| hc1.inttimefloor | integral time floor | uint8 (>=160<=320) | minutes | true | HC | 58 | 1 | 10 | +| hc1.roomtempdiff | room temp difference | uint8 (>=0<=0) | K | true | HC | 42 | 1 | 1 | uint8 -| hc1.inttime | integral time | uint8 (>=3<=80) | minutes | true | HC | 59 | 1 | 1 | +| hc1.hpminflowtemp | HP min. flow temp. | uint8 (>=0<=0) | C | true | HC | 43 | 1 | 1 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.remotehum | room humidity from remote | cmd | % | true | HC | 46 | 1 | 1 | +uint8 +| hc1.heatondelay | heat-on delay | uint8 (>=1<=48) | hours | true | HC | 47 | 1 | 1 | +uint8 +| hc1.heatoffdelay | heat-off delay | uint8 (>=1<=48) | hours | true | HC | 48 | 1 | 1 | +uint8 +| hc1.instantstart | instant start | uint8 (>=1<=10) | K | true | HC | 49 | 1 | 1 | +| hc1.boost | boost mode | boolean | | true | HC | 50 | 1 | 1 | +uint8 +| hc1.boosttime | boost time | uint8 (>=0<=0) | hours | true | HC | 51 | 1 | 1 | +uint8 +| hc1.coolstart | cooling starttemp | uint8 (>=20<=35) | C | true | HC | 52 | 1 | 1 | +uint8 +| hc1.coolondelay | cooling on delay | uint8 (>=1<=48) | hours | true | HC | 53 | 1 | 1 | +uint8 +| hc1.cooloffdelay | cooling off delay | uint8 (>=1<=48) | hours | true | HC | 54 | 1 | 1 | +| hc1.switchprogmode | switch program mode | enum | | true | HC | 55 | 1 | 1 | +int8 +| hc1.redthreshold | reduction threshold | int8 (>=12<=22) | C | true | HC | 56 | 1 | 1/2 | +uint8 +| hc1.solarinfl | solar influence | uint8 (>=-5<=4294967295) | C | true | HC | 57 | 1 | 1 | +| hc1.currsolarinfl | current solar influence | uint8 | C | false | HC | 58 | 1 | 1/10 | +| hc1.heatingpid | heating PID | enum | | true | HC | 59 | 1 | 1 | +| hc1.pumpopt | pump optimization | boolean | | true | HC | 60 | 1 | 1 | +uint8 +| hc1.inttimefloor | integral time floor | uint8 (>=160<=320) | minutes | true | HC | 61 | 1 | 10 | +uint8 +| hc1.inttime | integral time | uint8 (>=3<=80) | minutes | true | HC | 62 | 1 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | dhw.modetype | mode type | enum | | false | DHW | 1 | 1 | 1 | uint8 @@ -6408,20 +6542,20 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 61 | 1 | 1/2 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 64 | 1 | 1/2 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=0) | C | true | HC | 27 | 1 | 1/2 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | +| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=0) | C | true | HC | 28 | 1 | 1/2 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=10<=30) | C | true | HC | 8 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | | errorcode | error code | string | | false | DEVICE_DATA | 0 | 8 | 1 | | lastcode | last error code | string | | false | DEVICE_DATA | 8 | 25 | 1 | | datetime | date/time | string | | false | DEVICE_DATA | 33 | 13 | 1 | @@ -6434,20 +6568,20 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=0<=0) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 61 | 1 | 1/2 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.nighttemp | night temperature | uint8 (>=0<=0) | C | true | HC | 64 | 1 | 1/2 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=0<=0) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=0) | C | true | HC | 27 | 1 | 1/2 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | +| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=0) | C | true | HC | 28 | 1 | 1/2 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=10<=30) | C | true | HC | 8 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | ### ES73 @@ -6476,56 +6610,56 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=10<=30) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=10<=30) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=10<=30) | C | true | HC | 61 | 1 | 1/2 | +| hc1.nighttemp | night temperature | uint8 (>=10<=30) | C | true | HC | 64 | 1 | 1/2 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | int8 | hc1.offsettemp | offset temperature | int8 (>=-5<=5) | C | true | HC | 10 | 1 | 1/2 | uint8 -| hc1.holidaytemp | holiday temperature | uint8 (>=5<=30) | C | true | HC | 62 | 1 | 1/2 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.holidaytemp | holiday temperature | uint8 (>=5<=30) | C | true | HC | 65 | 1 | 1/2 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | -| hc1.holidaymode | holiday mode | boolean | | false | HC | 63 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | +| hc1.holidaymode | holiday mode | boolean | | false | HC | 66 | 1 | 1 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=-20<=10) | C | true | HC | 17 | 1 | 1 | -| hc1.nofrostmode | nofrost mode | enum | | true | HC | 16 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=-20<=10) | C | true | HC | 18 | 1 | 1 | +| hc1.nofrostmode | nofrost mode | enum | | true | HC | 17 | 1 | 1 | uint8 -| hc1.roominfluence | room influence | uint8 (>=0<=10) | C | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | uint8 (>=0<=10) | C | true | HC | 14 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.flowtempoffset | flow temperature offset for mixer | uint8 (>=0<=20) | C | true | HC | 64 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.reducemode | reduce mode | enum | | true | HC | 31 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.holidays | holiday dates | string | | true | HC | 65 | 13 | 1 | -| hc1.vacations | vacation dates | string | | true | HC | 78 | 13 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.flowtempoffset | flow temperature offset for mixer | uint8 (>=0<=20) | C | true | HC | 67 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.reducemode | reduce mode | enum | | true | HC | 34 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.holidays | holiday dates | string | | true | HC | 68 | 13 | 1 | +| hc1.vacations | vacation dates | string | | true | HC | 81 | 13 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | uint8 -| hc1.pause | pause time | uint8 (>=0<=99) | hours | true | HC | 91 | 1 | 1 | +| hc1.pause | pause time | uint8 (>=0<=99) | hours | true | HC | 94 | 1 | 1 | uint8 -| hc1.party | party time | uint8 (>=0<=99) | hours | true | HC | 92 | 1 | 1 | +| hc1.party | party time | uint8 (>=0<=99) | hours | true | HC | 95 | 1 | 1 | uint8 -| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=30) | C | true | HC | 27 | 1 | 1/2 | +| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=30) | C | true | HC | 28 | 1 | 1/2 | int8 -| hc1.noreducetemp | no reduce below temperature | int8 (>=-31<=10) | C | true | HC | 32 | 1 | 1 | +| hc1.noreducetemp | no reduce below temperature | int8 (>=-31<=10) | C | true | HC | 35 | 1 | 1 | int8 -| hc1.reducetemp | off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 33 | 1 | 1 | +| hc1.reducetemp | off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 36 | 1 | 1 | int8 -| hc1.vacreducetemp | vacations off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 93 | 1 | 1 | -| hc1.vacreducemode | vacations reduce mode | enum | | true | HC | 94 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.dhwprio | dhw priority | boolean | | true | HC | 34 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.switchtime1 | own1 program switchtime | string | | true | HC | 95 | 8 | 1 | -| hc1.switchtime2 | own2 program switchtime | string | | true | HC | 103 | 8 | 1 | +| hc1.vacreducetemp | vacations off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 96 | 1 | 1 | +| hc1.vacreducemode | vacations reduce mode | enum | | true | HC | 97 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.dhwprio | dhw priority | boolean | | true | HC | 37 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.switchtime1 | own1 program switchtime | string | | true | HC | 98 | 8 | 1 | +| hc1.switchtime2 | own2 program switchtime | string | | true | HC | 106 | 8 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | dhw.circmode | circulation pump mode | enum | | true | DHW | 4 | 1 | 1 | | dhw.progmode | program | enum | | true | DHW | 13 | 1 | 1 | @@ -6565,56 +6699,56 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.daytemp | day temperature | uint8 (>=10<=30) | C | true | HC | 60 | 1 | 1/2 | +| hc1.daytemp | day temperature | uint8 (>=10<=30) | C | true | HC | 63 | 1 | 1/2 | uint8 -| hc1.nighttemp | night temperature | uint8 (>=10<=30) | C | true | HC | 61 | 1 | 1/2 | +| hc1.nighttemp | night temperature | uint8 (>=10<=30) | C | true | HC | 64 | 1 | 1/2 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | int8 | hc1.offsettemp | offset temperature | int8 (>=-5<=5) | C | true | HC | 10 | 1 | 1/2 | uint8 -| hc1.holidaytemp | holiday temperature | uint8 (>=5<=30) | C | true | HC | 62 | 1 | 1/2 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.holidaytemp | holiday temperature | uint8 (>=5<=30) | C | true | HC | 65 | 1 | 1/2 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1 | -| hc1.summermode | summer mode | enum | | false | HC | 22 | 1 | 1 | -| hc1.holidaymode | holiday mode | boolean | | false | HC | 63 | 1 | 1 | +| hc1.summermode | summer mode | enum | | false | HC | 23 | 1 | 1 | +| hc1.holidaymode | holiday mode | boolean | | false | HC | 66 | 1 | 1 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=-20<=10) | C | true | HC | 17 | 1 | 1 | -| hc1.nofrostmode | nofrost mode | enum | | true | HC | 16 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=-20<=10) | C | true | HC | 18 | 1 | 1 | +| hc1.nofrostmode | nofrost mode | enum | | true | HC | 17 | 1 | 1 | uint8 -| hc1.roominfluence | room influence | uint8 (>=0<=10) | C | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | uint8 (>=0<=10) | C | true | HC | 14 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 -| hc1.flowtempoffset | flow temperature offset for mixer | uint8 (>=0<=20) | C | true | HC | 64 | 1 | 1 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.reducemode | reduce mode | enum | | true | HC | 31 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.holidays | holiday dates | string | | true | HC | 65 | 13 | 1 | -| hc1.vacations | vacation dates | string | | true | HC | 78 | 13 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | +| hc1.flowtempoffset | flow temperature offset for mixer | uint8 (>=0<=20) | C | true | HC | 67 | 1 | 1 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.reducemode | reduce mode | enum | | true | HC | 34 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.holidays | holiday dates | string | | true | HC | 68 | 13 | 1 | +| hc1.vacations | vacation dates | string | | true | HC | 81 | 13 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | uint8 -| hc1.pause | pause time | uint8 (>=0<=99) | hours | true | HC | 91 | 1 | 1 | +| hc1.pause | pause time | uint8 (>=0<=99) | hours | true | HC | 94 | 1 | 1 | uint8 -| hc1.party | party time | uint8 (>=0<=99) | hours | true | HC | 92 | 1 | 1 | +| hc1.party | party time | uint8 (>=0<=99) | hours | true | HC | 95 | 1 | 1 | uint8 -| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=30) | C | true | HC | 27 | 1 | 1/2 | +| hc1.tempautotemp | temporary set temperature automode | uint8 (>=0<=30) | C | true | HC | 28 | 1 | 1/2 | int8 -| hc1.noreducetemp | no reduce below temperature | int8 (>=-31<=10) | C | true | HC | 32 | 1 | 1 | +| hc1.noreducetemp | no reduce below temperature | int8 (>=-31<=10) | C | true | HC | 35 | 1 | 1 | int8 -| hc1.reducetemp | off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 33 | 1 | 1 | +| hc1.reducetemp | off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 36 | 1 | 1 | int8 -| hc1.vacreducetemp | vacations off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 93 | 1 | 1 | -| hc1.vacreducemode | vacations reduce mode | enum | | true | HC | 94 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.dhwprio | dhw priority | boolean | | true | HC | 34 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.switchtime1 | own1 program switchtime | string | | true | HC | 95 | 8 | 1 | -| hc1.switchtime2 | own2 program switchtime | string | | true | HC | 103 | 8 | 1 | +| hc1.vacreducetemp | vacations off/reduce switch temperature | int8 (>=-20<=10) | C | true | HC | 96 | 1 | 1 | +| hc1.vacreducemode | vacations reduce mode | enum | | true | HC | 97 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.dhwprio | dhw priority | boolean | | true | HC | 37 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.switchtime1 | own1 program switchtime | string | | true | HC | 98 | 8 | 1 | +| hc1.switchtime2 | own2 program switchtime | string | | true | HC | 106 | 8 | 1 | | dhw.mode | operating mode | enum | | true | DHW | 0 | 1 | 1 | | dhw.circmode | circulation pump mode | enum | | true | DHW | 4 | 1 | 1 | | dhw.progmode | program | enum | | true | DHW | 13 | 1 | 1 | @@ -6640,6 +6774,10 @@ uint8 | datetime | date/time | string | | true | DEVICE_DATA | 33 | 13 | 1 | | display | display | enum | | true | DEVICE_DATA | 65 | 1 | 1 | | language | language | enum | | true | DEVICE_DATA | 66 | 1 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -6660,32 +6798,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### FW200 @@ -6697,6 +6835,10 @@ uint8 | datetime | date/time | string | | true | DEVICE_DATA | 33 | 13 | 1 | | display | display | enum | | true | DEVICE_DATA | 65 | 1 | 1 | | language | language | enum | | true | DEVICE_DATA | 66 | 1 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -6717,32 +6859,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### FR100 @@ -6752,6 +6894,10 @@ uint8 | errorcode | error code | string | | false | DEVICE_DATA | 0 | 8 | 1 | | lastcode | last error code | string | | false | DEVICE_DATA | 8 | 25 | 1 | | datetime | date/time | string | | false | DEVICE_DATA | 33 | 13 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -6772,32 +6918,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### FR110 @@ -6807,6 +6953,10 @@ uint8 | errorcode | error code | string | | false | DEVICE_DATA | 0 | 8 | 1 | | lastcode | last error code | string | | false | DEVICE_DATA | 8 | 25 | 1 | | datetime | date/time | string | | false | DEVICE_DATA | 33 | 13 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -6827,32 +6977,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### FB10 @@ -6864,6 +7014,10 @@ uint8 | datetime | date/time | string | | true | DEVICE_DATA | 33 | 13 | 1 | | display | display | enum | | true | DEVICE_DATA | 65 | 1 | 1 | | language | language | enum | | true | DEVICE_DATA | 66 | 1 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -6884,32 +7038,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### FB100 @@ -6921,6 +7075,10 @@ uint8 | datetime | date/time | string | | true | DEVICE_DATA | 33 | 13 | 1 | | display | display | enum | | true | DEVICE_DATA | 65 | 1 | 1 | | language | language | enum | | true | DEVICE_DATA | 66 | 1 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -6941,32 +7099,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### FR10 @@ -6976,6 +7134,10 @@ uint8 | errorcode | error code | string | | false | DEVICE_DATA | 0 | 8 | 1 | | lastcode | last error code | string | | false | DEVICE_DATA | 8 | 25 | 1 | | datetime | date/time | string | | false | DEVICE_DATA | 33 | 13 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -6996,32 +7158,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### FW500 @@ -7033,6 +7195,10 @@ uint8 | datetime | date/time | string | | true | DEVICE_DATA | 33 | 13 | 1 | | display | display | enum | | true | DEVICE_DATA | 65 | 1 | 1 | | language | language | enum | | true | DEVICE_DATA | 66 | 1 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -7053,32 +7219,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### FR50 @@ -7088,6 +7254,10 @@ uint8 | errorcode | error code | string | | false | DEVICE_DATA | 0 | 8 | 1 | | lastcode | last error code | string | | false | DEVICE_DATA | 8 | 25 | 1 | | datetime | date/time | string | | false | DEVICE_DATA | 33 | 13 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -7108,32 +7278,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### FR120 @@ -7143,6 +7313,10 @@ uint8 | errorcode | error code | string | | false | DEVICE_DATA | 0 | 8 | 1 | | lastcode | last error code | string | | false | DEVICE_DATA | 8 | 25 | 1 | | datetime | date/time | string | | false | DEVICE_DATA | 33 | 13 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -7163,32 +7337,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### FW120 @@ -7200,6 +7374,10 @@ uint8 | datetime | date/time | string | | true | DEVICE_DATA | 33 | 13 | 1 | | display | display | enum | | true | DEVICE_DATA | 65 | 1 | 1 | | language | language | enum | | true | DEVICE_DATA | 66 | 1 | 1 | +uint8 +| building | building type | uint8 (>=0<=0) | % | true | DEVICE_DATA | 50 | 1 | 10 | +int8 +| minexttemp | minimal external temperature | int8 (>=0<=0) | C | true | DEVICE_DATA | 51 | 1 | 1 | | hybridstrategy | hybrid control strategy | enum | | true | DEVICE_DATA | 54 | 1 | 1 | int8 | switchovertemp | outside switchover temperature | int8 (>=-20<=20) | C | true | DEVICE_DATA | 55 | 1 | 1 | @@ -7220,32 +7398,32 @@ int16 | hc1.mode | operating mode | enum | | true | HC | 3 | 1 | 1 | | hc1.modetype | mode type | enum | | false | HC | 4 | 1 | 1 | uint8 -| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 202 | 1 | 1/2 | +| hc1.heattemp | heat temperature | uint8 (>=0<=0) | C | true | HC | 205 | 1 | 1/2 | uint8 | hc1.ecotemp | eco temperature | uint8 (>=0<=0) | C | true | HC | 5 | 1 | 1/2 | int8 -| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 17 | 1 | 1/2 | -| hc1.control | control device | enum | | true | HC | 41 | 1 | 1 | -| hc1.program | program | enum | | true | HC | 26 | 1 | 1 | -| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 42 | 1 | 1/10 | -| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 18 | 1 | 1 | +| hc1.nofrosttemp | nofrost temperature | int8 (>=0<=0) | C | true | HC | 18 | 1 | 1/2 | +| hc1.control | control device | enum | | true | HC | 44 | 1 | 1 | +| hc1.program | program | enum | | true | HC | 27 | 1 | 1 | +| hc1.remotetemp | room temperature from remote | cmd | C | true | HC | 45 | 1 | 1/10 | +| hc1.targetflowtemp | target flow temperature | uint8 | C | false | HC | 19 | 1 | 1 | uint8 | hc1.summertemp | summer temperature | uint8 (>=9<=25) | C | true | HC | 8 | 1 | 1/2 | -| hc1.roomsensor | room sensor | enum | | true | HC | 203 | 1 | 1 | -| hc1.holidaymode | holiday mode | enum | | true | HC | 63 | 1 | 1 | -| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 30 | 1 | 1 | -| hc1.heatup | heatup | enum | | true | HC | 204 | 1 | 1 | +| hc1.roomsensor | room sensor | enum | | true | HC | 206 | 1 | 1 | +| hc1.holidaymode | holiday mode | enum | | true | HC | 66 | 1 | 1 | +| hc1.switchonoptimization | switch-on optimization | boolean | | true | HC | 33 | 1 | 1 | +| hc1.heatup | heatup | enum | | true | HC | 207 | 1 | 1 | uint8 -| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 11 | 1 | 1 | +| hc1.minflowtemp | min flow temperature | uint8 (>=5<=70) | C | true | HC | 12 | 1 | 1 | uint8 -| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 12 | 1 | 1 | +| hc1.maxflowtemp | max flow temperature | uint8 (>=30<=90) | C | true | HC | 13 | 1 | 1 | uint8 | hc1.designtemp | design temperature | uint8 (>=30<=90) | C | true | HC | 9 | 1 | 1 | -| hc1.roominfluence | room influence | enum | | true | HC | 13 | 1 | 1 | +| hc1.roominfluence | room influence | enum | | true | HC | 14 | 1 | 1 | uint8 -| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 14 | 1 | 10 | -| hc1.heatingtype | heating type | enum | | true | HC | 19 | 1 | 1 | -| hc1.controlmode | control mode | enum | | true | HC | 25 | 1 | 1 | +| hc1.roominflfactor | room influence factor | uint8 (>=0<=0) | % | true | HC | 15 | 1 | 10 | +| hc1.heatingtype | heating type | enum | | true | HC | 20 | 1 | 1 | +| hc1.controlmode | control mode | enum | | true | HC | 26 | 1 | 1 | | dhw.charge | charge | boolean | | true | DHW | 6 | 1 | 1 | ### RT800, RC220 @@ -7476,7 +7654,7 @@ uint8 | cylmaxtemp | maximum cylinder temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 5 | 1 | 1 | | collectorshutdown | collector shutdown | boolean | | false | DEVICE_DATA | 6 | 1 | 1 | | cylheated | cyl heated | boolean | | false | DEVICE_DATA | 7 | 1 | 1 | -| cylmiddletemp | cylinder middle temperature (TS3) | int16 | C | false | DEVICE_DATA | 17 | 1 | 1/10 | +| cylmiddletemp | cylinder middle temperature (TS14) | int16 | C | false | DEVICE_DATA | 17 | 1 | 1/10 | | retheatassist | return temperature heat assistance (TS4) | int16 | C | false | DEVICE_DATA | 18 | 1 | 1/10 | | heatassistvalve | heat assistance valve (M1) | boolean | | false | DEVICE_DATA | 19 | 1 | 1 | | energylasthour | energy last hour | uint24 | Wh | false | DEVICE_DATA | 13 | 2 | 1/10 | @@ -7493,7 +7671,7 @@ uint8 | cylmaxtemp | maximum cylinder temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 5 | 1 | 1 | | collectorshutdown | collector shutdown | boolean | | false | DEVICE_DATA | 6 | 1 | 1 | | cylheated | cyl heated | boolean | | false | DEVICE_DATA | 7 | 1 | 1 | -| cylmiddletemp | cylinder middle temperature (TS3) | int16 | C | false | DEVICE_DATA | 17 | 1 | 1/10 | +| cylmiddletemp | cylinder middle temperature (TS14) | int16 | C | false | DEVICE_DATA | 17 | 1 | 1/10 | | retheatassist | return temperature heat assistance (TS4) | int16 | C | false | DEVICE_DATA | 18 | 1 | 1/10 | | heatassistvalve | heat assistance valve (M1) | boolean | | false | DEVICE_DATA | 19 | 1 | 1 | | energylasthour | energy last hour | uint24 | Wh | false | DEVICE_DATA | 13 | 2 | 1/10 | @@ -7518,67 +7696,68 @@ uint8 uint8 | turnoffdiff | pump turn off difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 11 | 1 | 1/10 | | collector2temp | collector 2 temperature (TS7) | int16 | C | false | DEVICE_DATA | 20 | 1 | 1/10 | -| cylmiddletemp | cylinder middle temperature (TS3) | int16 | C | false | DEVICE_DATA | 17 | 1 | 1/10 | +| cylmiddletemp | cylinder middle temperature (TS14) | int16 | C | false | DEVICE_DATA | 17 | 1 | 1/10 | +| ts3 | cylinder middle temperature (TS3) | int16 | C | false | DEVICE_DATA | 21 | 1 | 1/10 | | retheatassist | return temperature heat assistance (TS4) | int16 | C | false | DEVICE_DATA | 18 | 1 | 1/10 | -| ts8 | (TS8) | int16 | C | false | DEVICE_DATA | 21 | 1 | 1/10 | -| ts16 | (TS16) | int16 | C | false | DEVICE_DATA | 22 | 1 | 1/10 | +| ts8 | (TS8) | int16 | C | false | DEVICE_DATA | 22 | 1 | 1/10 | +| ts16 | (TS16) | int16 | C | false | DEVICE_DATA | 23 | 1 | 1/10 | | heatassistvalve | heat assistance valve (M1) | boolean | | false | DEVICE_DATA | 19 | 1 | 1 | -| heatassistpower | heat assistance valve power (M1) | uint8 | % | false | DEVICE_DATA | 23 | 1 | 1 | -| solarpump2 | pump 2 (PS4) | boolean | | false | DEVICE_DATA | 24 | 1 | 1 | -| solarpump2mod | pump 2 modulation (PS4) | uint8 | % | false | DEVICE_DATA | 25 | 1 | 1 | -| cyl2bottomtemp | second cylinder bottom temperature (TS5) | int16 | C | false | DEVICE_DATA | 26 | 1 | 1/10 | -| cyl3bottomtemp | third cylinder bottom temperature (TS11) | int16 | C | false | DEVICE_DATA | 27 | 1 | 1/10 | -| cyltoptemp | cylinder top temperature (TS10) | int16 | C | false | DEVICE_DATA | 28 | 1 | 1/10 | -| heatexchangertemp | heat exchanger temperature (TS6) | int16 | C | false | DEVICE_DATA | 29 | 1 | 1/10 | -| cylpumpmod | cylinder pump modulation (PS5) | uint8 | % | false | DEVICE_DATA | 30 | 1 | 1 | -| valvestatus | valve status | boolean | | false | DEVICE_DATA | 31 | 1 | 1 | -| vs1status | valve status VS1 | boolean | | false | DEVICE_DATA | 32 | 1 | 1 | -| vs3status | valve status VS3 | boolean | | false | DEVICE_DATA | 33 | 1 | 1 | -| transferpump | transfer pump | boolean | | false | DEVICE_DATA | 34 | 1 | 1 | -| transferpumpmod | transfer pump modulation | uint8 | % | false | DEVICE_DATA | 35 | 1 | 1 | +| heatassistpower | heat assistance valve power (M1) | uint8 | % | false | DEVICE_DATA | 24 | 1 | 1 | +| solarpump2 | pump 2 (PS4) | boolean | | false | DEVICE_DATA | 25 | 1 | 1 | +| solarpump2mod | pump 2 modulation (PS4) | uint8 | % | false | DEVICE_DATA | 26 | 1 | 1 | +| cyl2bottomtemp | second cylinder bottom temperature (TS5) | int16 | C | false | DEVICE_DATA | 27 | 1 | 1/10 | +| cyl3bottomtemp | third cylinder bottom temperature (TS11) | int16 | C | false | DEVICE_DATA | 28 | 1 | 1/10 | +| cyltoptemp | cylinder top temperature (TS10) | int16 | C | false | DEVICE_DATA | 29 | 1 | 1/10 | +| heatexchangertemp | heat exchanger temperature (TS6) | int16 | C | false | DEVICE_DATA | 30 | 1 | 1/10 | +| cylpumpmod | cylinder pump modulation (PS5) | uint8 | % | false | DEVICE_DATA | 31 | 1 | 1 | +| valvestatus | valve status | boolean | | false | DEVICE_DATA | 32 | 1 | 1 | +| vs1status | valve status VS1 | boolean | | false | DEVICE_DATA | 33 | 1 | 1 | +| vs3status | valve status VS3 | boolean | | false | DEVICE_DATA | 34 | 1 | 1 | +| transferpump | transfer pump | boolean | | false | DEVICE_DATA | 35 | 1 | 1 | +| transferpumpmod | transfer pump modulation | uint8 | % | false | DEVICE_DATA | 36 | 1 | 1 | uint8 -| collectormaxtemp | maximum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 36 | 1 | 1 | +| collectormaxtemp | maximum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 37 | 1 | 1 | uint8 -| collectormintemp | minimum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 37 | 1 | 1 | +| collectormintemp | minimum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 38 | 1 | 1 | | energylasthour | energy last hour | uint24 | Wh | false | DEVICE_DATA | 13 | 2 | 1/10 | -| energytoday | total energy today | uint24 | Wh | false | DEVICE_DATA | 38 | 2 | 1 | -| energytotal | total energy | uint24 | kWh | false | DEVICE_DATA | 40 | 2 | 1/10 | -| pump2worktime | pump 2 working time | time | minutes | false | DEVICE_DATA | 42 | 2 | 1 | -| m1worktime | differential control working time | time | minutes | false | DEVICE_DATA | 44 | 2 | 1 | -| heattransfersystem | heattransfer system | boolean | | true | DEVICE_DATA | 46 | 1 | 1 | -| externalcyl | external cylinder | boolean | | true | DEVICE_DATA | 47 | 1 | 1 | -| thermaldisinfect | thermal disinfection | boolean | | true | DEVICE_DATA | 48 | 1 | 1 | -| heatmetering | heatmetering | boolean | | true | DEVICE_DATA | 49 | 1 | 1 | -| activated | activated | boolean | | true | DEVICE_DATA | 50 | 1 | 1 | -| solarpumpmode | solar pump mode | enum | | true | DEVICE_DATA | 51 | 1 | 1 | -| solarpumpkick | solar pump kick | boolean | | true | DEVICE_DATA | 52 | 1 | 1 | -| plainwatermode | plain water mode | boolean | | true | DEVICE_DATA | 53 | 1 | 1 | -| doublematchflow | doublematchflow | boolean | | true | DEVICE_DATA | 54 | 1 | 1 | +| energytoday | total energy today | uint24 | Wh | false | DEVICE_DATA | 39 | 2 | 1 | +| energytotal | total energy | uint24 | kWh | false | DEVICE_DATA | 41 | 2 | 1/10 | +| pump2worktime | pump 2 working time | time | minutes | false | DEVICE_DATA | 43 | 2 | 1 | +| m1worktime | differential control working time | time | minutes | false | DEVICE_DATA | 45 | 2 | 1 | +| heattransfersystem | heattransfer system | boolean | | true | DEVICE_DATA | 47 | 1 | 1 | +| externalcyl | external cylinder | boolean | | true | DEVICE_DATA | 48 | 1 | 1 | +| thermaldisinfect | thermal disinfection | boolean | | true | DEVICE_DATA | 49 | 1 | 1 | +| heatmetering | heatmetering | boolean | | true | DEVICE_DATA | 50 | 1 | 1 | +| activated | activated | boolean | | true | DEVICE_DATA | 51 | 1 | 1 | +| solarpumpmode | solar pump mode | enum | | true | DEVICE_DATA | 52 | 1 | 1 | +| solarpumpkick | solar pump kick | boolean | | true | DEVICE_DATA | 53 | 1 | 1 | +| plainwatermode | plain water mode | boolean | | true | DEVICE_DATA | 54 | 1 | 1 | +| doublematchflow | doublematchflow | boolean | | true | DEVICE_DATA | 55 | 1 | 1 | uint8 -| pump2minmod | minimum pump 2 modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 55 | 1 | 1 | +| pump2minmod | minimum pump 2 modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 56 | 1 | 1 | uint8 -| turnondiff2 | pump 2 turn on difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 56 | 1 | 1/10 | +| turnondiff2 | pump 2 turn on difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 57 | 1 | 1/10 | uint8 -| turnoffdiff2 | pump 2 turn off difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 57 | 1 | 1/10 | -| pump2kick | pump kick 2 | boolean | | true | DEVICE_DATA | 58 | 1 | 1 | +| turnoffdiff2 | pump 2 turn off difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 58 | 1 | 1/10 | +| pump2kick | pump kick 2 | boolean | | true | DEVICE_DATA | 59 | 1 | 1 | uint8 -| climatezone | climate zone | uint8 (>=0<=0) | | true | DEVICE_DATA | 59 | 1 | 1 | +| climatezone | climate zone | uint8 (>=0<=0) | | true | DEVICE_DATA | 60 | 1 | 1 | uint16 -| collector1area | collector 1 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 60 | 1 | 1/10 | -| collector1type | collector 1 type | enum | | true | DEVICE_DATA | 61 | 1 | 1 | +| collector1area | collector 1 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 61 | 1 | 1/10 | +| collector1type | collector 1 type | enum | | true | DEVICE_DATA | 62 | 1 | 1 | uint16 -| collector2area | collector 2 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 62 | 1 | 1/10 | -| collector2type | collector 2 type | enum | | true | DEVICE_DATA | 63 | 1 | 1 | -| cylpriority | cylinder priority | enum | | true | DEVICE_DATA | 64 | 1 | 1 | -| heatcntflowtemp | heat counter flow temperature | uint16 | C | false | DEVICE_DATA | 65 | 1 | 1/10 | -| heatcntrettemp | heat counter return temperature | uint16 | C | false | DEVICE_DATA | 66 | 1 | 1/10 | -| heatcnt | heat counter impulses | uint8 | | false | DEVICE_DATA | 67 | 1 | 1 | -| swapflowtemp | swap flow temperature (TS14) | uint16 | C | false | DEVICE_DATA | 68 | 1 | 1/10 | -| swaprettemp | swap return temperature (TS15) | uint16 | C | false | DEVICE_DATA | 69 | 1 | 1/10 | +| collector2area | collector 2 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 63 | 1 | 1/10 | +| collector2type | collector 2 type | enum | | true | DEVICE_DATA | 64 | 1 | 1 | +| cylpriority | cylinder priority | enum | | true | DEVICE_DATA | 65 | 1 | 1 | +| heatcntflowtemp | heat counter flow temperature | uint16 | C | false | DEVICE_DATA | 66 | 1 | 1/10 | +| heatcntrettemp | heat counter return temperature | uint16 | C | false | DEVICE_DATA | 67 | 1 | 1/10 | +| heatcnt | heat counter impulses | uint8 | | false | DEVICE_DATA | 68 | 1 | 1 | +| swapflowtemp | swap flow temperature (TS14) | uint16 | C | false | DEVICE_DATA | 69 | 1 | 1/10 | +| swaprettemp | swap return temperature (TS15) | uint16 | C | false | DEVICE_DATA | 70 | 1 | 1/10 | int8 -| heatassiston | heat assistance on | int8 (>=0<=0) | K | true | DEVICE_DATA | 70 | 1 | 1/10 | +| heatassiston | heat assistance on | int8 (>=0<=0) | K | true | DEVICE_DATA | 71 | 1 | 1/10 | int8 -| heatassistoff | heat assistance off | int8 (>=0<=0) | K | true | DEVICE_DATA | 71 | 1 | 1/10 | +| heatassistoff | heat assistance off | int8 (>=0<=0) | K | true | DEVICE_DATA | 72 | 1 | 1/10 | ### SM100, MS100 @@ -7600,67 +7779,68 @@ uint8 uint8 | turnoffdiff | pump turn off difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 11 | 1 | 1/10 | | collector2temp | collector 2 temperature (TS7) | int16 | C | false | DEVICE_DATA | 20 | 1 | 1/10 | -| cylmiddletemp | cylinder middle temperature (TS3) | int16 | C | false | DEVICE_DATA | 17 | 1 | 1/10 | +| cylmiddletemp | cylinder middle temperature (TS14) | int16 | C | false | DEVICE_DATA | 17 | 1 | 1/10 | +| ts3 | cylinder middle temperature (TS3) | int16 | C | false | DEVICE_DATA | 21 | 1 | 1/10 | | retheatassist | return temperature heat assistance (TS4) | int16 | C | false | DEVICE_DATA | 18 | 1 | 1/10 | -| ts8 | (TS8) | int16 | C | false | DEVICE_DATA | 21 | 1 | 1/10 | -| ts16 | (TS16) | int16 | C | false | DEVICE_DATA | 22 | 1 | 1/10 | +| ts8 | (TS8) | int16 | C | false | DEVICE_DATA | 22 | 1 | 1/10 | +| ts16 | (TS16) | int16 | C | false | DEVICE_DATA | 23 | 1 | 1/10 | | heatassistvalve | heat assistance valve (M1) | boolean | | false | DEVICE_DATA | 19 | 1 | 1 | -| heatassistpower | heat assistance valve power (M1) | uint8 | % | false | DEVICE_DATA | 23 | 1 | 1 | -| solarpump2 | pump 2 (PS4) | boolean | | false | DEVICE_DATA | 24 | 1 | 1 | -| solarpump2mod | pump 2 modulation (PS4) | uint8 | % | false | DEVICE_DATA | 25 | 1 | 1 | -| cyl2bottomtemp | second cylinder bottom temperature (TS5) | int16 | C | false | DEVICE_DATA | 26 | 1 | 1/10 | -| cyl3bottomtemp | third cylinder bottom temperature (TS11) | int16 | C | false | DEVICE_DATA | 27 | 1 | 1/10 | -| cyltoptemp | cylinder top temperature (TS10) | int16 | C | false | DEVICE_DATA | 28 | 1 | 1/10 | -| heatexchangertemp | heat exchanger temperature (TS6) | int16 | C | false | DEVICE_DATA | 29 | 1 | 1/10 | -| cylpumpmod | cylinder pump modulation (PS5) | uint8 | % | false | DEVICE_DATA | 30 | 1 | 1 | -| valvestatus | valve status | boolean | | false | DEVICE_DATA | 31 | 1 | 1 | -| vs1status | valve status VS1 | boolean | | false | DEVICE_DATA | 32 | 1 | 1 | -| vs3status | valve status VS3 | boolean | | false | DEVICE_DATA | 33 | 1 | 1 | -| transferpump | transfer pump | boolean | | false | DEVICE_DATA | 34 | 1 | 1 | -| transferpumpmod | transfer pump modulation | uint8 | % | false | DEVICE_DATA | 35 | 1 | 1 | +| heatassistpower | heat assistance valve power (M1) | uint8 | % | false | DEVICE_DATA | 24 | 1 | 1 | +| solarpump2 | pump 2 (PS4) | boolean | | false | DEVICE_DATA | 25 | 1 | 1 | +| solarpump2mod | pump 2 modulation (PS4) | uint8 | % | false | DEVICE_DATA | 26 | 1 | 1 | +| cyl2bottomtemp | second cylinder bottom temperature (TS5) | int16 | C | false | DEVICE_DATA | 27 | 1 | 1/10 | +| cyl3bottomtemp | third cylinder bottom temperature (TS11) | int16 | C | false | DEVICE_DATA | 28 | 1 | 1/10 | +| cyltoptemp | cylinder top temperature (TS10) | int16 | C | false | DEVICE_DATA | 29 | 1 | 1/10 | +| heatexchangertemp | heat exchanger temperature (TS6) | int16 | C | false | DEVICE_DATA | 30 | 1 | 1/10 | +| cylpumpmod | cylinder pump modulation (PS5) | uint8 | % | false | DEVICE_DATA | 31 | 1 | 1 | +| valvestatus | valve status | boolean | | false | DEVICE_DATA | 32 | 1 | 1 | +| vs1status | valve status VS1 | boolean | | false | DEVICE_DATA | 33 | 1 | 1 | +| vs3status | valve status VS3 | boolean | | false | DEVICE_DATA | 34 | 1 | 1 | +| transferpump | transfer pump | boolean | | false | DEVICE_DATA | 35 | 1 | 1 | +| transferpumpmod | transfer pump modulation | uint8 | % | false | DEVICE_DATA | 36 | 1 | 1 | uint8 -| collectormaxtemp | maximum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 36 | 1 | 1 | +| collectormaxtemp | maximum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 37 | 1 | 1 | uint8 -| collectormintemp | minimum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 37 | 1 | 1 | +| collectormintemp | minimum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 38 | 1 | 1 | | energylasthour | energy last hour | uint24 | Wh | false | DEVICE_DATA | 13 | 2 | 1/10 | -| energytoday | total energy today | uint24 | Wh | false | DEVICE_DATA | 38 | 2 | 1 | -| energytotal | total energy | uint24 | kWh | false | DEVICE_DATA | 40 | 2 | 1/10 | -| pump2worktime | pump 2 working time | time | minutes | false | DEVICE_DATA | 42 | 2 | 1 | -| m1worktime | differential control working time | time | minutes | false | DEVICE_DATA | 44 | 2 | 1 | -| heattransfersystem | heattransfer system | boolean | | true | DEVICE_DATA | 46 | 1 | 1 | -| externalcyl | external cylinder | boolean | | true | DEVICE_DATA | 47 | 1 | 1 | -| thermaldisinfect | thermal disinfection | boolean | | true | DEVICE_DATA | 48 | 1 | 1 | -| heatmetering | heatmetering | boolean | | true | DEVICE_DATA | 49 | 1 | 1 | -| activated | activated | boolean | | true | DEVICE_DATA | 50 | 1 | 1 | -| solarpumpmode | solar pump mode | enum | | true | DEVICE_DATA | 51 | 1 | 1 | -| solarpumpkick | solar pump kick | boolean | | true | DEVICE_DATA | 52 | 1 | 1 | -| plainwatermode | plain water mode | boolean | | true | DEVICE_DATA | 53 | 1 | 1 | -| doublematchflow | doublematchflow | boolean | | true | DEVICE_DATA | 54 | 1 | 1 | +| energytoday | total energy today | uint24 | Wh | false | DEVICE_DATA | 39 | 2 | 1 | +| energytotal | total energy | uint24 | kWh | false | DEVICE_DATA | 41 | 2 | 1/10 | +| pump2worktime | pump 2 working time | time | minutes | false | DEVICE_DATA | 43 | 2 | 1 | +| m1worktime | differential control working time | time | minutes | false | DEVICE_DATA | 45 | 2 | 1 | +| heattransfersystem | heattransfer system | boolean | | true | DEVICE_DATA | 47 | 1 | 1 | +| externalcyl | external cylinder | boolean | | true | DEVICE_DATA | 48 | 1 | 1 | +| thermaldisinfect | thermal disinfection | boolean | | true | DEVICE_DATA | 49 | 1 | 1 | +| heatmetering | heatmetering | boolean | | true | DEVICE_DATA | 50 | 1 | 1 | +| activated | activated | boolean | | true | DEVICE_DATA | 51 | 1 | 1 | +| solarpumpmode | solar pump mode | enum | | true | DEVICE_DATA | 52 | 1 | 1 | +| solarpumpkick | solar pump kick | boolean | | true | DEVICE_DATA | 53 | 1 | 1 | +| plainwatermode | plain water mode | boolean | | true | DEVICE_DATA | 54 | 1 | 1 | +| doublematchflow | doublematchflow | boolean | | true | DEVICE_DATA | 55 | 1 | 1 | uint8 -| pump2minmod | minimum pump 2 modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 55 | 1 | 1 | +| pump2minmod | minimum pump 2 modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 56 | 1 | 1 | uint8 -| turnondiff2 | pump 2 turn on difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 56 | 1 | 1/10 | +| turnondiff2 | pump 2 turn on difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 57 | 1 | 1/10 | uint8 -| turnoffdiff2 | pump 2 turn off difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 57 | 1 | 1/10 | -| pump2kick | pump kick 2 | boolean | | true | DEVICE_DATA | 58 | 1 | 1 | +| turnoffdiff2 | pump 2 turn off difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 58 | 1 | 1/10 | +| pump2kick | pump kick 2 | boolean | | true | DEVICE_DATA | 59 | 1 | 1 | uint8 -| climatezone | climate zone | uint8 (>=0<=0) | | true | DEVICE_DATA | 59 | 1 | 1 | +| climatezone | climate zone | uint8 (>=0<=0) | | true | DEVICE_DATA | 60 | 1 | 1 | uint16 -| collector1area | collector 1 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 60 | 1 | 1/10 | -| collector1type | collector 1 type | enum | | true | DEVICE_DATA | 61 | 1 | 1 | +| collector1area | collector 1 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 61 | 1 | 1/10 | +| collector1type | collector 1 type | enum | | true | DEVICE_DATA | 62 | 1 | 1 | uint16 -| collector2area | collector 2 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 62 | 1 | 1/10 | -| collector2type | collector 2 type | enum | | true | DEVICE_DATA | 63 | 1 | 1 | -| cylpriority | cylinder priority | enum | | true | DEVICE_DATA | 64 | 1 | 1 | -| heatcntflowtemp | heat counter flow temperature | uint16 | C | false | DEVICE_DATA | 65 | 1 | 1/10 | -| heatcntrettemp | heat counter return temperature | uint16 | C | false | DEVICE_DATA | 66 | 1 | 1/10 | -| heatcnt | heat counter impulses | uint8 | | false | DEVICE_DATA | 67 | 1 | 1 | -| swapflowtemp | swap flow temperature (TS14) | uint16 | C | false | DEVICE_DATA | 68 | 1 | 1/10 | -| swaprettemp | swap return temperature (TS15) | uint16 | C | false | DEVICE_DATA | 69 | 1 | 1/10 | +| collector2area | collector 2 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 63 | 1 | 1/10 | +| collector2type | collector 2 type | enum | | true | DEVICE_DATA | 64 | 1 | 1 | +| cylpriority | cylinder priority | enum | | true | DEVICE_DATA | 65 | 1 | 1 | +| heatcntflowtemp | heat counter flow temperature | uint16 | C | false | DEVICE_DATA | 66 | 1 | 1/10 | +| heatcntrettemp | heat counter return temperature | uint16 | C | false | DEVICE_DATA | 67 | 1 | 1/10 | +| heatcnt | heat counter impulses | uint8 | | false | DEVICE_DATA | 68 | 1 | 1 | +| swapflowtemp | swap flow temperature (TS14) | uint16 | C | false | DEVICE_DATA | 69 | 1 | 1/10 | +| swaprettemp | swap return temperature (TS15) | uint16 | C | false | DEVICE_DATA | 70 | 1 | 1/10 | int8 -| heatassiston | heat assistance on | int8 (>=0<=0) | K | true | DEVICE_DATA | 70 | 1 | 1/10 | +| heatassiston | heat assistance on | int8 (>=0<=0) | K | true | DEVICE_DATA | 71 | 1 | 1/10 | int8 -| heatassistoff | heat assistance off | int8 (>=0<=0) | K | true | DEVICE_DATA | 71 | 1 | 1/10 | +| heatassistoff | heat assistance off | int8 (>=0<=0) | K | true | DEVICE_DATA | 72 | 1 | 1/10 | ### SM200, MS200 @@ -7682,67 +7862,68 @@ uint8 uint8 | turnoffdiff | pump turn off difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 11 | 1 | 1/10 | | collector2temp | collector 2 temperature (TS7) | int16 | C | false | DEVICE_DATA | 20 | 1 | 1/10 | -| cylmiddletemp | cylinder middle temperature (TS3) | int16 | C | false | DEVICE_DATA | 17 | 1 | 1/10 | +| cylmiddletemp | cylinder middle temperature (TS14) | int16 | C | false | DEVICE_DATA | 17 | 1 | 1/10 | +| ts3 | cylinder middle temperature (TS3) | int16 | C | false | DEVICE_DATA | 21 | 1 | 1/10 | | retheatassist | return temperature heat assistance (TS4) | int16 | C | false | DEVICE_DATA | 18 | 1 | 1/10 | -| ts8 | (TS8) | int16 | C | false | DEVICE_DATA | 21 | 1 | 1/10 | -| ts16 | (TS16) | int16 | C | false | DEVICE_DATA | 22 | 1 | 1/10 | +| ts8 | (TS8) | int16 | C | false | DEVICE_DATA | 22 | 1 | 1/10 | +| ts16 | (TS16) | int16 | C | false | DEVICE_DATA | 23 | 1 | 1/10 | | heatassistvalve | heat assistance valve (M1) | boolean | | false | DEVICE_DATA | 19 | 1 | 1 | -| heatassistpower | heat assistance valve power (M1) | uint8 | % | false | DEVICE_DATA | 23 | 1 | 1 | -| solarpump2 | pump 2 (PS4) | boolean | | false | DEVICE_DATA | 24 | 1 | 1 | -| solarpump2mod | pump 2 modulation (PS4) | uint8 | % | false | DEVICE_DATA | 25 | 1 | 1 | -| cyl2bottomtemp | second cylinder bottom temperature (TS5) | int16 | C | false | DEVICE_DATA | 26 | 1 | 1/10 | -| cyl3bottomtemp | third cylinder bottom temperature (TS11) | int16 | C | false | DEVICE_DATA | 27 | 1 | 1/10 | -| cyltoptemp | cylinder top temperature (TS10) | int16 | C | false | DEVICE_DATA | 28 | 1 | 1/10 | -| heatexchangertemp | heat exchanger temperature (TS6) | int16 | C | false | DEVICE_DATA | 29 | 1 | 1/10 | -| cylpumpmod | cylinder pump modulation (PS5) | uint8 | % | false | DEVICE_DATA | 30 | 1 | 1 | -| valvestatus | valve status | boolean | | false | DEVICE_DATA | 31 | 1 | 1 | -| vs1status | valve status VS1 | boolean | | false | DEVICE_DATA | 32 | 1 | 1 | -| vs3status | valve status VS3 | boolean | | false | DEVICE_DATA | 33 | 1 | 1 | -| transferpump | transfer pump | boolean | | false | DEVICE_DATA | 34 | 1 | 1 | -| transferpumpmod | transfer pump modulation | uint8 | % | false | DEVICE_DATA | 35 | 1 | 1 | +| heatassistpower | heat assistance valve power (M1) | uint8 | % | false | DEVICE_DATA | 24 | 1 | 1 | +| solarpump2 | pump 2 (PS4) | boolean | | false | DEVICE_DATA | 25 | 1 | 1 | +| solarpump2mod | pump 2 modulation (PS4) | uint8 | % | false | DEVICE_DATA | 26 | 1 | 1 | +| cyl2bottomtemp | second cylinder bottom temperature (TS5) | int16 | C | false | DEVICE_DATA | 27 | 1 | 1/10 | +| cyl3bottomtemp | third cylinder bottom temperature (TS11) | int16 | C | false | DEVICE_DATA | 28 | 1 | 1/10 | +| cyltoptemp | cylinder top temperature (TS10) | int16 | C | false | DEVICE_DATA | 29 | 1 | 1/10 | +| heatexchangertemp | heat exchanger temperature (TS6) | int16 | C | false | DEVICE_DATA | 30 | 1 | 1/10 | +| cylpumpmod | cylinder pump modulation (PS5) | uint8 | % | false | DEVICE_DATA | 31 | 1 | 1 | +| valvestatus | valve status | boolean | | false | DEVICE_DATA | 32 | 1 | 1 | +| vs1status | valve status VS1 | boolean | | false | DEVICE_DATA | 33 | 1 | 1 | +| vs3status | valve status VS3 | boolean | | false | DEVICE_DATA | 34 | 1 | 1 | +| transferpump | transfer pump | boolean | | false | DEVICE_DATA | 35 | 1 | 1 | +| transferpumpmod | transfer pump modulation | uint8 | % | false | DEVICE_DATA | 36 | 1 | 1 | uint8 -| collectormaxtemp | maximum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 36 | 1 | 1 | +| collectormaxtemp | maximum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 37 | 1 | 1 | uint8 -| collectormintemp | minimum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 37 | 1 | 1 | +| collectormintemp | minimum collector temperature | uint8 (>=0<=0) | C | true | DEVICE_DATA | 38 | 1 | 1 | | energylasthour | energy last hour | uint24 | Wh | false | DEVICE_DATA | 13 | 2 | 1/10 | -| energytoday | total energy today | uint24 | Wh | false | DEVICE_DATA | 38 | 2 | 1 | -| energytotal | total energy | uint24 | kWh | false | DEVICE_DATA | 40 | 2 | 1/10 | -| pump2worktime | pump 2 working time | time | minutes | false | DEVICE_DATA | 42 | 2 | 1 | -| m1worktime | differential control working time | time | minutes | false | DEVICE_DATA | 44 | 2 | 1 | -| heattransfersystem | heattransfer system | boolean | | true | DEVICE_DATA | 46 | 1 | 1 | -| externalcyl | external cylinder | boolean | | true | DEVICE_DATA | 47 | 1 | 1 | -| thermaldisinfect | thermal disinfection | boolean | | true | DEVICE_DATA | 48 | 1 | 1 | -| heatmetering | heatmetering | boolean | | true | DEVICE_DATA | 49 | 1 | 1 | -| activated | activated | boolean | | true | DEVICE_DATA | 50 | 1 | 1 | -| solarpumpmode | solar pump mode | enum | | true | DEVICE_DATA | 51 | 1 | 1 | -| solarpumpkick | solar pump kick | boolean | | true | DEVICE_DATA | 52 | 1 | 1 | -| plainwatermode | plain water mode | boolean | | true | DEVICE_DATA | 53 | 1 | 1 | -| doublematchflow | doublematchflow | boolean | | true | DEVICE_DATA | 54 | 1 | 1 | +| energytoday | total energy today | uint24 | Wh | false | DEVICE_DATA | 39 | 2 | 1 | +| energytotal | total energy | uint24 | kWh | false | DEVICE_DATA | 41 | 2 | 1/10 | +| pump2worktime | pump 2 working time | time | minutes | false | DEVICE_DATA | 43 | 2 | 1 | +| m1worktime | differential control working time | time | minutes | false | DEVICE_DATA | 45 | 2 | 1 | +| heattransfersystem | heattransfer system | boolean | | true | DEVICE_DATA | 47 | 1 | 1 | +| externalcyl | external cylinder | boolean | | true | DEVICE_DATA | 48 | 1 | 1 | +| thermaldisinfect | thermal disinfection | boolean | | true | DEVICE_DATA | 49 | 1 | 1 | +| heatmetering | heatmetering | boolean | | true | DEVICE_DATA | 50 | 1 | 1 | +| activated | activated | boolean | | true | DEVICE_DATA | 51 | 1 | 1 | +| solarpumpmode | solar pump mode | enum | | true | DEVICE_DATA | 52 | 1 | 1 | +| solarpumpkick | solar pump kick | boolean | | true | DEVICE_DATA | 53 | 1 | 1 | +| plainwatermode | plain water mode | boolean | | true | DEVICE_DATA | 54 | 1 | 1 | +| doublematchflow | doublematchflow | boolean | | true | DEVICE_DATA | 55 | 1 | 1 | uint8 -| pump2minmod | minimum pump 2 modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 55 | 1 | 1 | +| pump2minmod | minimum pump 2 modulation | uint8 (>=0<=0) | % | true | DEVICE_DATA | 56 | 1 | 1 | uint8 -| turnondiff2 | pump 2 turn on difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 56 | 1 | 1/10 | +| turnondiff2 | pump 2 turn on difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 57 | 1 | 1/10 | uint8 -| turnoffdiff2 | pump 2 turn off difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 57 | 1 | 1/10 | -| pump2kick | pump kick 2 | boolean | | true | DEVICE_DATA | 58 | 1 | 1 | +| turnoffdiff2 | pump 2 turn off difference | uint8 (>=0<=0) | C | true | DEVICE_DATA | 58 | 1 | 1/10 | +| pump2kick | pump kick 2 | boolean | | true | DEVICE_DATA | 59 | 1 | 1 | uint8 -| climatezone | climate zone | uint8 (>=0<=0) | | true | DEVICE_DATA | 59 | 1 | 1 | +| climatezone | climate zone | uint8 (>=0<=0) | | true | DEVICE_DATA | 60 | 1 | 1 | uint16 -| collector1area | collector 1 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 60 | 1 | 1/10 | -| collector1type | collector 1 type | enum | | true | DEVICE_DATA | 61 | 1 | 1 | +| collector1area | collector 1 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 61 | 1 | 1/10 | +| collector1type | collector 1 type | enum | | true | DEVICE_DATA | 62 | 1 | 1 | uint16 -| collector2area | collector 2 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 62 | 1 | 1/10 | -| collector2type | collector 2 type | enum | | true | DEVICE_DATA | 63 | 1 | 1 | -| cylpriority | cylinder priority | enum | | true | DEVICE_DATA | 64 | 1 | 1 | -| heatcntflowtemp | heat counter flow temperature | uint16 | C | false | DEVICE_DATA | 65 | 1 | 1/10 | -| heatcntrettemp | heat counter return temperature | uint16 | C | false | DEVICE_DATA | 66 | 1 | 1/10 | -| heatcnt | heat counter impulses | uint8 | | false | DEVICE_DATA | 67 | 1 | 1 | -| swapflowtemp | swap flow temperature (TS14) | uint16 | C | false | DEVICE_DATA | 68 | 1 | 1/10 | -| swaprettemp | swap return temperature (TS15) | uint16 | C | false | DEVICE_DATA | 69 | 1 | 1/10 | +| collector2area | collector 2 area | uint16 (>=0<=0) | m² | true | DEVICE_DATA | 63 | 1 | 1/10 | +| collector2type | collector 2 type | enum | | true | DEVICE_DATA | 64 | 1 | 1 | +| cylpriority | cylinder priority | enum | | true | DEVICE_DATA | 65 | 1 | 1 | +| heatcntflowtemp | heat counter flow temperature | uint16 | C | false | DEVICE_DATA | 66 | 1 | 1/10 | +| heatcntrettemp | heat counter return temperature | uint16 | C | false | DEVICE_DATA | 67 | 1 | 1/10 | +| heatcnt | heat counter impulses | uint8 | | false | DEVICE_DATA | 68 | 1 | 1 | +| swapflowtemp | swap flow temperature (TS14) | uint16 | C | false | DEVICE_DATA | 69 | 1 | 1/10 | +| swaprettemp | swap return temperature (TS15) | uint16 | C | false | DEVICE_DATA | 70 | 1 | 1/10 | int8 -| heatassiston | heat assistance on | int8 (>=0<=0) | K | true | DEVICE_DATA | 70 | 1 | 1/10 | +| heatassiston | heat assistance on | int8 (>=0<=0) | K | true | DEVICE_DATA | 71 | 1 | 1/10 | int8 -| heatassistoff | heat assistance off | int8 (>=0<=0) | K | true | DEVICE_DATA | 71 | 1 | 1/10 | +| heatassistoff | heat assistance off | int8 (>=0<=0) | K | true | DEVICE_DATA | 72 | 1 | 1/10 | ## Devices of type \_heatpump diff --git a/docs/dump_entities.csv b/docs/dump_entities.csv index 6711ca04c..0bd4e604b 100644 --- a/docs/dump_entities.csv +++ b/docs/dump_entities.csv @@ -1,5 +1,5 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/max),uom,writeable,discovery entityid v3.4,discovery entityid,modbus unit identifier,modbus block,modbus scale factor,modbus offset,modbus count -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -43,122 +43,126 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,mandefrost,manual defrost,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_manual_defrost,sensor.boiler_mandefrost,5,0,1,84,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,mandefrost,manual defrost,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_manual_defrost,sensor.boiler_mandefrost,5,0,1,87,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.nrg,energy,uint24,kWh,false,sensor.boiler_dhw_energy,sensor.boiler_dhw_nrg,5,9,1/100,0,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgheat,energy heating,uint24,kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,87,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgcool,energy cooling,uint24,kWh,false,sensor.boiler_energy_cooling,sensor.boiler_nrgcool,5,0,1/100,89,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,metertotal,meter total,uint24,kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,91,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,metercomp,meter compressor,uint24,kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,93,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,metereheat,meter e-heater,uint24,kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,95,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,97,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,metercool,meter cooling,uint24,kWh,false,sensor.boiler_meter_cooling,sensor.boiler_metercool,5,0,1/100,99,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgheat,energy heating,uint24,kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,90,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgcool,energy cooling,uint24,kWh,false,sensor.boiler_energy_cooling,sensor.boiler_nrgcool,5,0,1/100,92,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,metertotal,meter total,uint24,kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,94,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,metercomp,meter compressor,uint24,kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,96,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,metereheat,meter e-heater,uint24,kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,98,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,100,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,metercool,meter cooling,uint24,kWh,false,sensor.boiler_meter_cooling,sensor.boiler_metercool,5,0,1/100,102,2 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/100,2,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,uptimetotal,heatpump total uptime,time,minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,101,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,uptimecontrol,total operating time heat,time,minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,103,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,uptimecompheating,operating time compressor heating,time,minutes,false,sensor.boiler_operating_time_compressor_heating,sensor.boiler_uptimecompheating,5,0,1/60,105,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,uptimecompcooling,operating time compressor cooling,time,minutes,false,sensor.boiler_operating_time_compressor_cooling,sensor.boiler_uptimecompcooling,5,0,1/60,107,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,uptimetotal,heatpump total uptime,time,minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,104,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,uptimecontrol,total operating time heat,time,minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,106,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,uptimecompheating,operating time compressor heating,time,minutes,false,sensor.boiler_operating_time_compressor_heating,sensor.boiler_uptimecompheating,5,0,1/60,108,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,uptimecompcooling,operating time compressor cooling,time,minutes,false,sensor.boiler_operating_time_compressor_cooling,sensor.boiler_uptimecompcooling,5,0,1/60,110,2 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.uptimecomp,operating time compressor,time,minutes,false,sensor.boiler_dhw_operating_time_compressor,sensor.boiler_dhw_uptimecomp,5,9,1/60,4,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,uptimecomppool,operating time compressor pool,time,minutes,false,sensor.boiler_operating_time_compressor_pool,sensor.boiler_uptimecomppool,5,0,1/60,109,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,totalcompstarts,total compressor control starts,uint24, ,false,sensor.boiler_total_compressor_control_starts,sensor.boiler_totalcompstarts,5,0,1,111,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,heatingstarts,heating control starts,uint24, ,false,sensor.boiler_heating_control_starts,sensor.boiler_heatingstarts,5,0,1,113,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,coolingstarts,cooling control starts,uint24, ,false,sensor.boiler_cooling_control_starts,sensor.boiler_coolingstarts,5,0,1,115,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,uptimecomppool,operating time compressor pool,time,minutes,false,sensor.boiler_operating_time_compressor_pool,sensor.boiler_uptimecomppool,5,0,1/60,112,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,totalcompstarts,total compressor control starts,uint24, ,false,sensor.boiler_total_compressor_control_starts,sensor.boiler_totalcompstarts,5,0,1,114,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,heatingstarts,heating control starts,uint24, ,false,sensor.boiler_heating_control_starts,sensor.boiler_heatingstarts,5,0,1,116,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,coolingstarts,cooling control starts,uint24, ,false,sensor.boiler_cooling_control_starts,sensor.boiler_coolingstarts,5,0,1,118,2 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.startshp,starts hp,uint24, ,false,sensor.boiler_dhw_starts_hp,sensor.boiler_dhw_startshp,5,9,1,6,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,poolstarts,pool control starts,uint24, ,false,sensor.boiler_pool_control_starts,sensor.boiler_poolstarts,5,0,1,117,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgconstotal,total energy consumption,uint24,kWh,false,sensor.boiler_total_energy_consumption,sensor.boiler_nrgconstotal,5,0,1,119,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgconscomptotal,total energy consumption compressor,uint24,kWh,false,sensor.boiler_total_energy_consumption_compressor,sensor.boiler_nrgconscomptotal,5,0,1,121,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgconscompheating,energy consumption compressor heating,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_heating,sensor.boiler_nrgconscompheating,5,0,1,123,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,poolstarts,pool control starts,uint24, ,false,sensor.boiler_pool_control_starts,sensor.boiler_poolstarts,5,0,1,120,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgconstotal,total energy consumption,uint24,kWh,false,sensor.boiler_total_energy_consumption,sensor.boiler_nrgconstotal,5,0,1,122,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgconscomptotal,total energy consumption compressor,uint24,kWh,false,sensor.boiler_total_energy_consumption_compressor,sensor.boiler_nrgconscomptotal,5,0,1,124,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgconscompheating,energy consumption compressor heating,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_heating,sensor.boiler_nrgconscompheating,5,0,1,126,2 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.nrgconscomp,energy consumption compressor,uint24,kWh,false,sensor.boiler_dhw_energy_consumption_compressor,sensor.boiler_dhw_nrgconscomp,5,9,1,8,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgconscompcooling,energy consumption compressor cooling,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_cooling,sensor.boiler_nrgconscompcooling,5,0,1,125,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgconscomppool,energy consumption compressor pool,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_pool,sensor.boiler_nrgconscomppool,5,0,1,127,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxelecheatnrgconstotal,total aux elec. heater energy consumption,uint24,kWh,false,sensor.boiler_total_aux_elec._heater_energy_consumption,sensor.boiler_auxelecheatnrgconstotal,5,0,1,129,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxelecheatnrgconsheating,aux elec. heater energy consumption heating,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_heating,sensor.boiler_auxelecheatnrgconsheating,5,0,1,131,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgconscompcooling,energy consumption compressor cooling,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_cooling,sensor.boiler_nrgconscompcooling,5,0,1,128,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgconscomppool,energy consumption compressor pool,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_pool,sensor.boiler_nrgconscomppool,5,0,1,130,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxelecheatnrgconstotal,total aux elec. heater energy consumption,uint24,kWh,false,sensor.boiler_total_aux_elec._heater_energy_consumption,sensor.boiler_auxelecheatnrgconstotal,5,0,1,132,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxelecheatnrgconsheating,aux elec. heater energy consumption heating,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_heating,sensor.boiler_auxelecheatnrgconsheating,5,0,1,134,2 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.auxelecheatnrgcons,aux elec. heater energy consumption,uint24,kWh,false,sensor.boiler_dhw_aux_elec._heater_energy_consumption,sensor.boiler_dhw_auxelecheatnrgcons,5,9,1,10,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxelecheatnrgconspool,aux elec. heater energy consumption pool,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_pool,sensor.boiler_auxelecheatnrgconspool,5,0,1,133,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgsupptotal,total energy supplied,uint24,kWh,false,sensor.boiler_total_energy_supplied,sensor.boiler_nrgsupptotal,5,0,1,135,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgsuppheating,total energy supplied heating,uint24,kWh,false,sensor.boiler_total_energy_supplied_heating,sensor.boiler_nrgsuppheating,5,0,1,137,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxelecheatnrgconspool,aux elec. heater energy consumption pool,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_pool,sensor.boiler_auxelecheatnrgconspool,5,0,1,136,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgsupptotal,total energy supplied,uint24,kWh,false,sensor.boiler_total_energy_supplied,sensor.boiler_nrgsupptotal,5,0,1,138,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgsuppheating,total energy supplied heating,uint24,kWh,false,sensor.boiler_total_energy_supplied_heating,sensor.boiler_nrgsuppheating,5,0,1,140,2 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.nrgsupp,total energy warm supplied,uint24,kWh,false,sensor.boiler_dhw_total_energy_warm_supplied,sensor.boiler_dhw_nrgsupp,5,9,1,12,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgsuppcooling,total energy supplied cooling,uint24,kWh,false,sensor.boiler_total_energy_supplied_cooling,sensor.boiler_nrgsuppcooling,5,0,1,139,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgsupppool,total energy supplied pool,uint24,kWh,false,sensor.boiler_total_energy_supplied_pool,sensor.boiler_nrgsupppool,5,0,1,141,2 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hppower,compressor power output,uint16,kW,false,sensor.boiler_compressor_power_output,sensor.boiler_hppower,5,0,1/10,143,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpmaxpower,compressor max power,uint8 (>=0<=0),%,true,number.boiler_compressor_max_power,number.boiler_hpmaxpower,5,0,1,144,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,pvmaxcomp,pv compressor max power,uint8 (>=0<=0),kW,true,number.boiler_pv_compressor_max_power,number.boiler_pvmaxcomp,5,0,1/10,145,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,powerreduction,power reduction,uint8 (>=30<=60),%,true,number.boiler_power_reduction,number.boiler_powerreduction,5,0,10,146,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpsetdiffpress,set differential pressure,uint8 (>=150<=750),mbar,true,number.boiler_set_differential_pressure,number.boiler_hpsetdiffpress,5,0,50,147,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpcompon,hp compressor,boolean, ,false,binary_sensor.boiler_hp_compressor,binary_sensor.boiler_hpcompon,5,0,1,148,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpactivity,compressor activity,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_compressor_activity,sensor.boiler_hpactivity,5,0,1,149,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpbrinepumpspd,brine pump speed,uint8,%,false,sensor.boiler_brine_pump_speed,sensor.boiler_hpbrinepumpspd,5,0,1,150,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpswitchvalve,switch valve,boolean, ,false,binary_sensor.boiler_switch_valve,binary_sensor.boiler_hpswitchvalve,5,0,1,151,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpcompspd,compressor speed,uint8,%,false,sensor.boiler_compressor_speed,sensor.boiler_hpcompspd,5,0,1,152,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptargetspd,compressor target speed,uint8,%,false,sensor.boiler_compressor_target_speed,sensor.boiler_hptargetspd,5,0,1,153,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpcircspd,circulation pump speed,uint8,%,false,sensor.boiler_circulation_pump_speed,sensor.boiler_hpcircspd,5,0,1,154,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,recvalve,receiver valve VR0,uint8,%,false,sensor.boiler_receiver_valve_VR0,sensor.boiler_recvalve,5,0,1,155,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,expvalve,expansion valve VR1,uint8,%,false,sensor.boiler_expansion_valve_VR1,sensor.boiler_expvalve,5,0,1,156,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpbrinein,brine in/evaporator,int16,C,false,sensor.boiler_brine_in/evaporator,sensor.boiler_hpbrinein,5,0,1/10,157,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpbrineout,brine out/condenser,int16,C,false,sensor.boiler_brine_out/condenser,sensor.boiler_hpbrineout,5,0,1/10,158,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptc0,heat carrier return (TC0),int16,C,false,sensor.boiler_heat_carrier_return_(TC0),sensor.boiler_hptc0,5,0,1/10,159,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptc1,heat carrier forward (TC1),int16,C,false,sensor.boiler_heat_carrier_forward_(TC1),sensor.boiler_hptc1,5,0,1/10,160,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptc3,condenser temperature (TC3),int16,C,false,sensor.boiler_condenser_temperature_(TC3),sensor.boiler_hptc3,5,0,1/10,161,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr1,compressor temperature (TR1),int16,C,false,sensor.boiler_compressor_temperature_(TR1),sensor.boiler_hptr1,5,0,1/10,162,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr3,refrigerant temperature liquid side (condenser output) (TR3),int16,C,false,sensor.boiler_refrigerant_temperature_liquid_side_(condenser_output)_(TR3),sensor.boiler_hptr3,5,0,1/10,163,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr4,evaporator inlet temperature (TR4),int16,C,false,sensor.boiler_evaporator_inlet_temperature_(TR4),sensor.boiler_hptr4,5,0,1/10,164,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr5,compressor inlet temperature (TR5),int16,C,false,sensor.boiler_compressor_inlet_temperature_(TR5),sensor.boiler_hptr5,5,0,1/10,165,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr6,compressor outlet temperature (TR6),int16,C,false,sensor.boiler_compressor_outlet_temperature_(TR6),sensor.boiler_hptr6,5,0,1/10,166,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr7,refrigerant temperature gas side (condenser input) (TR7),int16,C,false,sensor.boiler_refrigerant_temperature_gas_side_(condenser_input)_(TR7),sensor.boiler_hptr7,5,0,1/10,167,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptl2,air inlet temperature (TL2),int16,C,false,sensor.boiler_air_inlet_temperature_(TL2),sensor.boiler_hptl2,5,0,1/10,168,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hppl1,low pressure side temperature (PL1),int16,C,false,sensor.boiler_low_pressure_side_temperature_(PL1),sensor.boiler_hppl1,5,0,1/10,169,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpph1,high pressure side temperature (PH1),int16,C,false,sensor.boiler_high_pressure_side_temperature_(PH1),sensor.boiler_hpph1,5,0,1/10,170,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpta4,drain pan temp (TA4),int16,C,false,sensor.boiler_drain_pan_temp_(TA4),sensor.boiler_hpta4,5,0,1/10,171,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptw1,reservoir temp (TW1),int16,C,false,sensor.boiler_reservoir_temp_(TW1),sensor.boiler_hptw1,5,0,1/10,172,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,poolsettemp,pool set temperature,uint8 (>=0<=0),C,true,number.boiler_pool_set_temperature,number.boiler_poolsettemp,5,0,1/2,173,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin1,input 1 state,boolean, ,false,binary_sensor.boiler_input_1_state,binary_sensor.boiler_hpin1,5,0,1,174,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin1opt,input 1 options,string (>=0<=0), ,true,sensor.boiler_input_1_options,sensor.boiler_hpin1opt,5,0,1,175,8 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin2,input 2 state,boolean, ,false,binary_sensor.boiler_input_2_state,binary_sensor.boiler_hpin2,5,0,1,183,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin2opt,input 2 options,string (>=0<=0), ,true,sensor.boiler_input_2_options,sensor.boiler_hpin2opt,5,0,1,184,8 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin3,input 3 state,boolean, ,false,binary_sensor.boiler_input_3_state,binary_sensor.boiler_hpin3,5,0,1,192,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin3opt,input 3 options,string (>=0<=0), ,true,sensor.boiler_input_3_options,sensor.boiler_hpin3opt,5,0,1,193,8 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin4,input 4 state,boolean, ,false,binary_sensor.boiler_input_4_state,binary_sensor.boiler_hpin4,5,0,1,201,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin4opt,input 4 options,string (>=0<=0), ,true,sensor.boiler_input_4_options,sensor.boiler_hpin4opt,5,0,1,202,8 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,maxheatcomp,heat limit compressor,enum [0 kW\|3 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,210,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,maxheatheat,heat limit heating,enum [3 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,211,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgsuppcooling,total energy supplied cooling,uint24,kWh,false,sensor.boiler_total_energy_supplied_cooling,sensor.boiler_nrgsuppcooling,5,0,1,142,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,nrgsupppool,total energy supplied pool,uint24,kWh,false,sensor.boiler_total_energy_supplied_pool,sensor.boiler_nrgsupppool,5,0,1,144,2 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hppower,compressor power output,uint16,kW,false,sensor.boiler_compressor_power_output,sensor.boiler_hppower,5,0,1/10,146,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpmaxpower,compressor max power,uint8 (>=0<=0),%,true,number.boiler_compressor_max_power,number.boiler_hpmaxpower,5,0,1,147,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,pvmaxcomp,pv compressor max power,uint8 (>=0<=0),kW,true,number.boiler_pv_compressor_max_power,number.boiler_pvmaxcomp,5,0,1/10,148,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,powerreduction,power reduction,uint8 (>=30<=60),%,true,number.boiler_power_reduction,number.boiler_powerreduction,5,0,10,149,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpsetdiffpress,set differential pressure,uint8 (>=150<=750),mbar,true,number.boiler_set_differential_pressure,number.boiler_hpsetdiffpress,5,0,50,150,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpcompon,hp compressor,boolean, ,false,binary_sensor.boiler_hp_compressor,binary_sensor.boiler_hpcompon,5,0,1,151,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpactivity,compressor activity,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_compressor_activity,sensor.boiler_hpactivity,5,0,1,152,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpbrinepumpspd,brine pump speed,uint8,%,false,sensor.boiler_brine_pump_speed,sensor.boiler_hpbrinepumpspd,5,0,1,153,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpswitchvalve,switch valve,boolean, ,false,binary_sensor.boiler_switch_valve,binary_sensor.boiler_hpswitchvalve,5,0,1,154,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpcompspd,compressor speed,uint8,%,false,sensor.boiler_compressor_speed,sensor.boiler_hpcompspd,5,0,1,155,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptargetspd,compressor target speed,uint8,%,false,sensor.boiler_compressor_target_speed,sensor.boiler_hptargetspd,5,0,1,156,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpcircspd,circulation pump speed,uint8,%,false,sensor.boiler_circulation_pump_speed,sensor.boiler_hpcircspd,5,0,1,157,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,recvalve,receiver valve VR0,uint8,%,false,sensor.boiler_receiver_valve_VR0,sensor.boiler_recvalve,5,0,1,158,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,expvalve,expansion valve VR1,uint8,%,false,sensor.boiler_expansion_valve_VR1,sensor.boiler_expvalve,5,0,1,159,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpbrinein,brine in/evaporator,int16,C,false,sensor.boiler_brine_in/evaporator,sensor.boiler_hpbrinein,5,0,1/10,160,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpbrineout,brine out/condenser,int16,C,false,sensor.boiler_brine_out/condenser,sensor.boiler_hpbrineout,5,0,1/10,161,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptc0,heat carrier return (TC0),int16,C,false,sensor.boiler_heat_carrier_return_(TC0),sensor.boiler_hptc0,5,0,1/10,162,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptc1,heat carrier forward (TC1),int16,C,false,sensor.boiler_heat_carrier_forward_(TC1),sensor.boiler_hptc1,5,0,1/10,163,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptc3,condenser temperature (TC3),int16,C,false,sensor.boiler_condenser_temperature_(TC3),sensor.boiler_hptc3,5,0,1/10,164,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr1,compressor temperature (TR1),int16,C,false,sensor.boiler_compressor_temperature_(TR1),sensor.boiler_hptr1,5,0,1/10,165,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr3,refrigerant temperature liquid side (condenser output) (TR3),int16,C,false,sensor.boiler_refrigerant_temperature_liquid_side_(condenser_output)_(TR3),sensor.boiler_hptr3,5,0,1/10,166,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr4,evaporator inlet temperature (TR4),int16,C,false,sensor.boiler_evaporator_inlet_temperature_(TR4),sensor.boiler_hptr4,5,0,1/10,167,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr5,compressor inlet temperature (TR5),int16,C,false,sensor.boiler_compressor_inlet_temperature_(TR5),sensor.boiler_hptr5,5,0,1/10,168,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr6,compressor outlet temperature (TR6),int16,C,false,sensor.boiler_compressor_outlet_temperature_(TR6),sensor.boiler_hptr6,5,0,1/10,169,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptr7,refrigerant temperature gas side (condenser input) (TR7),int16,C,false,sensor.boiler_refrigerant_temperature_gas_side_(condenser_input)_(TR7),sensor.boiler_hptr7,5,0,1/10,170,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptl2,air inlet temperature (TL2),int16,C,false,sensor.boiler_air_inlet_temperature_(TL2),sensor.boiler_hptl2,5,0,1/10,171,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hppl1,low pressure side temperature (PL1),int16,C,false,sensor.boiler_low_pressure_side_temperature_(PL1),sensor.boiler_hppl1,5,0,1/10,172,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpph1,high pressure side temperature (PH1),int16,C,false,sensor.boiler_high_pressure_side_temperature_(PH1),sensor.boiler_hpph1,5,0,1/10,173,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpta4,drain pan temp (TA4),int16,C,false,sensor.boiler_drain_pan_temp_(TA4),sensor.boiler_hpta4,5,0,1/10,174,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hptw1,reservoir temp (TW1),int16,C,false,sensor.boiler_reservoir_temp_(TW1),sensor.boiler_hptw1,5,0,1/10,175,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,poolsettemp,pool set temperature,uint8 (>=0<=0),C,true,number.boiler_pool_set_temperature,number.boiler_poolsettemp,5,0,1/2,176,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hp4way,4-way valve (VR4),boolean, ,false,binary_sensor.boiler_4-way_valve_(VR4),binary_sensor.boiler_hp4way,5,0,1,177,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin1,input 1 state,boolean, ,false,binary_sensor.boiler_input_1_state,binary_sensor.boiler_hpin1,5,0,1,178,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin1opt,input 1 options,string (>=0<=0), ,true,sensor.boiler_input_1_options,sensor.boiler_hpin1opt,5,0,1,179,8 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin2,input 2 state,boolean, ,false,binary_sensor.boiler_input_2_state,binary_sensor.boiler_hpin2,5,0,1,187,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin2opt,input 2 options,string (>=0<=0), ,true,sensor.boiler_input_2_options,sensor.boiler_hpin2opt,5,0,1,188,8 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin3,input 3 state,boolean, ,false,binary_sensor.boiler_input_3_state,binary_sensor.boiler_hpin3,5,0,1,196,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin3opt,input 3 options,string (>=0<=0), ,true,sensor.boiler_input_3_options,sensor.boiler_hpin3opt,5,0,1,197,8 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin4,input 4 state,boolean, ,false,binary_sensor.boiler_input_4_state,binary_sensor.boiler_hpin4,5,0,1,205,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpin4opt,input 4 options,string (>=0<=0), ,true,sensor.boiler_input_4_options,sensor.boiler_hpin4opt,5,0,1,206,8 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,maxheatcomp,heat limit compressor,enum [0 kW\|3 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,214,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,maxheatheat,heat limit heating,enum [3 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,215,1 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.maxheat,heat limit,enum [3 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_dhw_heat_limit,select.boiler_dhw_maxheat,5,9,1,14,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheatersource,aux heater source,enum [not installed\|electric heater\|exclusive\|parallel\|hybrid] (>=0<=0), ,true,select.boiler_aux_heater_source,select.boiler_auxheatersource,5,0,1,212,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,pvcooling,cooling only with PV,boolean (>=0<=0), ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,213,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheateronly,aux heater only,boolean (>=0<=0), ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,214,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheateroff,disable aux heater,boolean (>=0<=0), ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,215,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheaterstatus,aux heater status,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_aux_heater_status,sensor.boiler_auxheaterstatus,5,0,1,216,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheaterlevel,aux heater level,uint8,%,false,sensor.boiler_aux_heater_level,sensor.boiler_auxheaterlevel,5,0,1,217,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheaterdelay,aux heater on delay,uint16 (>=10<=1000),K*min,true,number.boiler_aux_heater_on_delay,number.boiler_auxheaterdelay,5,0,10,218,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxmaxlimit,aux heater max limit,uint8 (>=0<=10),K,true,number.boiler_aux_heater_max_limit,number.boiler_auxmaxlimit,5,0,1/10,219,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxlimitstart,aux heater limit start,uint8 (>=0<=10),K,true,number.boiler_aux_heater_limit_start,number.boiler_auxlimitstart,5,0,1/10,220,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheatrmode,aux heater mode,enum [eco\|comfort] (>=0<=0), ,true,select.boiler_aux_heater_mode,select.boiler_auxheatrmode,5,0,1,221,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hphystheat,on/off hyst heat,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_heat,number.boiler_hphystheat,5,0,5,222,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hphystcool,on/off hyst cool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_cool,number.boiler_hphystcool,5,0,5,223,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hphystpool,on/off hyst pool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_pool,number.boiler_hphystpool,5,0,5,224,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,silentmode,silent mode,enum [off\|auto\|on] (>=0<=0), ,true,select.boiler_silent_mode,select.boiler_silentmode,5,0,1,225,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,silentfrom,silent mode from,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_from,number.boiler_silentfrom,5,0,15,226,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,silentto,silent mode to,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_to,number.boiler_silentto,5,0,15,227,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,mintempsilent,min outside temp for silent mode,int8 (>=0<=0),C,true,number.boiler_min_outside_temp_for_silent_mode,number.boiler_mintempsilent,5,0,1,228,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,tempparmode,outside temp parallel mode,int8 (>=0<=0),C,true,number.boiler_outside_temp_parallel_mode,number.boiler_tempparmode,5,0,1,229,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheatmix,aux heater mixing valve,int8,%,false,sensor.boiler_aux_heater_mixing_valve,sensor.boiler_auxheatmix,5,0,1,230,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,tempdiffheat,temp diff TC3/TC0 heat,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_heat,number.boiler_tempdiffheat,5,0,1/10,231,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,tempdiffcool,temp diff TC3/TC0 cool,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_cool,number.boiler_tempdiffcool,5,0,1/10,232,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,vpcooling,valve/pump cooling,boolean (>=0<=0), ,true,switch.boiler_valve/pump_cooling,switch.boiler_vpcooling,5,0,1,233,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,heatcable,heating cable,boolean (>=0<=0), ,true,switch.boiler_heating_cable,switch.boiler_heatcable,5,0,1,234,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,vc0valve,VC0 valve,boolean (>=0<=0), ,true,switch.boiler_VC0_valve,switch.boiler_vc0valve,5,0,1,235,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,primepump,primary heatpump,boolean (>=0<=0), ,true,switch.boiler_primary_heatpump,switch.boiler_primepump,5,0,1,236,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,primepumpmod,primary heatpump modulation,uint8 (>=0<=0),%,true,number.boiler_primary_heatpump_modulation,number.boiler_primepumpmod,5,0,1,237,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hp3way,3-way valve,boolean (>=0<=0), ,true,switch.boiler_3-way_valve,switch.boiler_hp3way,5,0,1,238,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,elheatstep1,el. heater step 1,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_1,switch.boiler_elheatstep1,5,0,1,239,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,elheatstep2,el. heater step 2,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_2,switch.boiler_elheatstep2,5,0,1,240,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,elheatstep3,el. heater step 3,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_3,switch.boiler_elheatstep3,5,0,1,241,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpea0,condensate reservoir heating (EA0),boolean, ,false,binary_sensor.boiler_condensate_reservoir_heating_(EA0),binary_sensor.boiler_hpea0,5,0,1,242,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hppumpmode,primary heatpump mode,enum [auto\|continuous] (>=0<=0), ,true,select.boiler_primary_heatpump_mode,select.boiler_hppumpmode,5,0,1,243,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,fan,fan,uint8 (>=20<=100),%,true,number.boiler_fan,number.boiler_fan,5,0,1,244,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,fanspd,fan speed,uint8,%,false,sensor.boiler_fan_speed,sensor.boiler_fanspd,5,0,1,245,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,shutdown,shutdown,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_shutdown,sensor.boiler_shutdown,5,0,1,246,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpcurrpower,compressor current power,uint16,W,false,sensor.boiler_compressor_current_power,sensor.boiler_hpcurrpower,5,0,1,247,1 -"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hppowerlimit,power limit,uint16 (>=0<=0),W,true,number.boiler_power_limit,number.boiler_hppowerlimit,5,0,1,248,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheatersource,aux heater source,enum [not installed\|electric heater\|exclusive\|parallel\|hybrid] (>=0<=0), ,true,select.boiler_aux_heater_source,select.boiler_auxheatersource,5,0,1,216,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,pvcooling,cooling only with PV,boolean (>=0<=0), ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,217,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheateronly,aux heater only,boolean (>=0<=0), ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,218,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheateroff,disable aux heater,boolean (>=0<=0), ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,219,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheaterstatus,aux heater status,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_aux_heater_status,sensor.boiler_auxheaterstatus,5,0,1,220,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheaterlevel,aux heater level,uint8,%,false,sensor.boiler_aux_heater_level,sensor.boiler_auxheaterlevel,5,0,1,221,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheaterdelay,aux heater on delay,uint16 (>=10<=1000),K*min,true,number.boiler_aux_heater_on_delay,number.boiler_auxheaterdelay,5,0,10,222,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxmaxlimit,aux heater max limit,uint8 (>=0<=10),K,true,number.boiler_aux_heater_max_limit,number.boiler_auxmaxlimit,5,0,1/10,223,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxlimitstart,aux heater limit start,uint8 (>=0<=10),K,true,number.boiler_aux_heater_limit_start,number.boiler_auxlimitstart,5,0,1/10,224,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheatrmode,aux heater mode,enum [eco\|comfort] (>=0<=0), ,true,select.boiler_aux_heater_mode,select.boiler_auxheatrmode,5,0,1,225,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hphystheat,on/off hyst heat,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_heat,number.boiler_hphystheat,5,0,5,226,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hphystcool,on/off hyst cool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_cool,number.boiler_hphystcool,5,0,5,227,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hphystpool,on/off hyst pool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_pool,number.boiler_hphystpool,5,0,5,228,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,silentmode,silent mode,enum [off\|auto\|on] (>=0<=0), ,true,select.boiler_silent_mode,select.boiler_silentmode,5,0,1,229,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,silentfrom,silent mode from,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_from,number.boiler_silentfrom,5,0,15,230,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,silentto,silent mode to,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_to,number.boiler_silentto,5,0,15,231,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,mintempsilent,min outside temp for silent mode,int8 (>=0<=0),C,true,number.boiler_min_outside_temp_for_silent_mode,number.boiler_mintempsilent,5,0,1,232,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,tempparmode,outside temp parallel mode,int8 (>=0<=0),C,true,number.boiler_outside_temp_parallel_mode,number.boiler_tempparmode,5,0,1,233,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,auxheatmix,aux heater mixing valve,int8,%,false,sensor.boiler_aux_heater_mixing_valve,sensor.boiler_auxheatmix,5,0,1,234,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,tempdiffheat,temp diff TC3/TC0 heat,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_heat,number.boiler_tempdiffheat,5,0,1/10,235,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,tempdiffcool,temp diff TC3/TC0 cool,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_cool,number.boiler_tempdiffcool,5,0,1/10,236,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,vpcooling,valve/pump cooling,boolean (>=0<=0), ,true,switch.boiler_valve/pump_cooling,switch.boiler_vpcooling,5,0,1,237,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,heatcable,heating cable,boolean (>=0<=0), ,true,switch.boiler_heating_cable,switch.boiler_heatcable,5,0,1,238,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,vc0valve,VC0 valve,boolean (>=0<=0), ,true,switch.boiler_VC0_valve,switch.boiler_vc0valve,5,0,1,239,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,primepump,primary heatpump,boolean (>=0<=0), ,true,switch.boiler_primary_heatpump,switch.boiler_primepump,5,0,1,240,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,primepumpmod,primary heatpump modulation,uint8 (>=0<=0),%,true,number.boiler_primary_heatpump_modulation,number.boiler_primepumpmod,5,0,1,241,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hp3way,3-way valve,boolean (>=0<=0), ,true,switch.boiler_3-way_valve,switch.boiler_hp3way,5,0,1,242,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,elheatstep1,el. heater step 1,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_1,switch.boiler_elheatstep1,5,0,1,243,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,elheatstep2,el. heater step 2,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_2,switch.boiler_elheatstep2,5,0,1,244,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,elheatstep3,el. heater step 3,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_3,switch.boiler_elheatstep3,5,0,1,245,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpea0,condensate reservoir heating (EA0),boolean, ,false,binary_sensor.boiler_condensate_reservoir_heating_(EA0),binary_sensor.boiler_hpea0,5,0,1,246,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hppumpmode,primary heatpump mode,enum [auto\|continuous] (>=0<=0), ,true,select.boiler_primary_heatpump_mode,select.boiler_hppumpmode,5,0,1,247,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,fan,fan,uint8 (>=20<=100),%,true,number.boiler_fan,number.boiler_fan,5,0,1,248,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,fanspd,fan speed,uint8,%,false,sensor.boiler_fan_speed,sensor.boiler_fanspd,5,0,1,249,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,shutdown,shutdown,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_shutdown,sensor.boiler_shutdown,5,0,1,250,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hpcurrpower,compressor current power,uint16,W,false,sensor.boiler_compressor_current_power,sensor.boiler_hpcurrpower,5,0,1,251,1 +"CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,hppowerlimit,power limit,uint16 (>=0<=0),W,true,number.boiler_power_limit,number.boiler_hppowerlimit,5,0,1,252,1 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.alternatingop,alternating operation,boolean (>=0<=0), ,true,switch.boiler_dhw_alternating_operation,switch.boiler_dhw_alternatingop,5,9,1,15,1 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.altopprioheat,prioritise heating during dhw,uint8 (>=20<=120),minutes,true,number.boiler_dhw_prioritise_heating_during_dhw,number.boiler_dhw_altopprioheat,5,9,1,16,1 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.altopprio,prioritise dhw during heating,uint8 (>=30<=120),minutes,true,number.boiler_dhw_prioritise_dhw_during_heating,number.boiler_dhw_altopprio,5,9,1,17,1 @@ -213,7 +217,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "CS5800i, CS6800i, WLW176i, WLW186i",boiler,8,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Greenstar 2000",boiler,11,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Greenstar 2000",boiler,11,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Greenstar 2000",boiler,11,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Greenstar 2000",boiler,11,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Greenstar 2000",boiler,11,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -227,28 +231,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Greenstar 2000",boiler,11,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Greenstar 2000",boiler,11,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Greenstar 2000",boiler,11,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Greenstar 2000",boiler,11,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Greenstar 2000",boiler,11,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Greenstar 2000",boiler,11,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Greenstar 2000",boiler,11,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Greenstar 2000",boiler,11,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Greenstar 2000",boiler,11,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Greenstar 2000",boiler,11,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Greenstar 2000",boiler,11,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Greenstar 2000",boiler,11,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Greenstar 2000",boiler,11,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Greenstar 2000",boiler,11,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Greenstar 2000",boiler,11,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Greenstar 2000",boiler,11,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Greenstar 2000",boiler,11,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Greenstar 2000",boiler,11,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Greenstar 2000",boiler,11,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Greenstar 2000",boiler,11,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Greenstar 2000",boiler,11,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Greenstar 2000",boiler,11,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Greenstar 2000",boiler,11,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Greenstar 2000",boiler,11,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Greenstar 2000",boiler,11,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Greenstar 2000",boiler,11,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Greenstar 2000",boiler,11,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Greenstar 2000",boiler,11,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Greenstar 2000",boiler,11,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Greenstar 2000",boiler,11,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Greenstar 2000",boiler,11,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Greenstar 2000",boiler,11,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Greenstar 2000",boiler,11,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Greenstar 2000",boiler,11,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Greenstar 2000",boiler,11,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Greenstar 2000",boiler,11,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Greenstar 2000",boiler,11,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Greenstar 2000",boiler,11,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Greenstar 2000",boiler,11,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Greenstar 2000",boiler,11,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Greenstar 2000",boiler,11,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Greenstar 2000",boiler,11,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Greenstar 2000",boiler,11,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Greenstar 2000",boiler,11,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Greenstar 2000",boiler,11,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Greenstar 2000",boiler,11,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Greenstar 2000",boiler,11,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Greenstar 2000",boiler,11,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Greenstar 2000",boiler,11,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -279,11 +282,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Greenstar 2000",boiler,11,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Greenstar 2000",boiler,11,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Greenstar 2000",boiler,11,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Greenstar 2000",boiler,11,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Greenstar 2000",boiler,11,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Greenstar 2000",boiler,11,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Greenstar 2000",boiler,11,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Greenstar 2000",boiler,11,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Greenstar 2000",boiler,11,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Greenstar 2000",boiler,11,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Greenstar 2000",boiler,11,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Greenstar 2000",boiler,11,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Greenstar 2000",boiler,11,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Greenstar 2000",boiler,11,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Greenstar 2000",boiler,11,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Greenstar 2000",boiler,11,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Greenstar 2000",boiler,11,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -326,11 +332,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Greenstar 2000",boiler,11,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Greenstar 2000",boiler,11,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Greenstar 2000",boiler,11,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Greenstar 2000",boiler,11,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Greenstar 2000",boiler,11,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Greenstar 2000",boiler,11,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Greenstar 2000",boiler,11,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Greenstar 2000",boiler,11,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Greenstar 2000",boiler,11,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Greenstar 2000",boiler,11,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"C1200W",boiler,12,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"C1200W",boiler,12,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "C1200W",boiler,12,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "C1200W",boiler,12,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "C1200W",boiler,12,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -344,28 +350,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "C1200W",boiler,12,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "C1200W",boiler,12,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "C1200W",boiler,12,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"C1200W",boiler,12,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"C1200W",boiler,12,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"C1200W",boiler,12,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"C1200W",boiler,12,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"C1200W",boiler,12,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"C1200W",boiler,12,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"C1200W",boiler,12,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"C1200W",boiler,12,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"C1200W",boiler,12,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"C1200W",boiler,12,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"C1200W",boiler,12,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"C1200W",boiler,12,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"C1200W",boiler,12,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"C1200W",boiler,12,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"C1200W",boiler,12,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"C1200W",boiler,12,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"C1200W",boiler,12,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"C1200W",boiler,12,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"C1200W",boiler,12,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"C1200W",boiler,12,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"C1200W",boiler,12,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"C1200W",boiler,12,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"C1200W",boiler,12,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"C1200W",boiler,12,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"C1200W",boiler,12,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"C1200W",boiler,12,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"C1200W",boiler,12,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"C1200W",boiler,12,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"C1200W",boiler,12,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"C1200W",boiler,12,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"C1200W",boiler,12,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"C1200W",boiler,12,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"C1200W",boiler,12,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"C1200W",boiler,12,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"C1200W",boiler,12,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"C1200W",boiler,12,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"C1200W",boiler,12,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"C1200W",boiler,12,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"C1200W",boiler,12,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"C1200W",boiler,12,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"C1200W",boiler,12,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"C1200W",boiler,12,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"C1200W",boiler,12,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "C1200W",boiler,12,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "C1200W",boiler,12,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "C1200W",boiler,12,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -396,11 +401,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "C1200W",boiler,12,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "C1200W",boiler,12,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "C1200W",boiler,12,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"C1200W",boiler,12,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"C1200W",boiler,12,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"C1200W",boiler,12,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"C1200W",boiler,12,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"C1200W",boiler,12,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "C1200W",boiler,12,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"C1200W",boiler,12,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"C1200W",boiler,12,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "C1200W",boiler,12,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"C1200W",boiler,12,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"C1200W",boiler,12,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "C1200W",boiler,12,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "C1200W",boiler,12,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "C1200W",boiler,12,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -443,11 +451,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "C1200W",boiler,12,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "C1200W",boiler,12,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "C1200W",boiler,12,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"C1200W",boiler,12,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"C1200W",boiler,12,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"C1200W",boiler,12,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"C1200W",boiler,12,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"C1200W",boiler,12,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"C1200W",boiler,12,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "C1200W",boiler,12,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"CS5800iG",boiler,16,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"CS5800iG",boiler,16,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "CS5800iG",boiler,16,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "CS5800iG",boiler,16,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "CS5800iG",boiler,16,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -461,28 +469,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "CS5800iG",boiler,16,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "CS5800iG",boiler,16,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "CS5800iG",boiler,16,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"CS5800iG",boiler,16,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"CS5800iG",boiler,16,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"CS5800iG",boiler,16,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"CS5800iG",boiler,16,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"CS5800iG",boiler,16,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"CS5800iG",boiler,16,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"CS5800iG",boiler,16,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"CS5800iG",boiler,16,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"CS5800iG",boiler,16,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"CS5800iG",boiler,16,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"CS5800iG",boiler,16,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"CS5800iG",boiler,16,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"CS5800iG",boiler,16,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"CS5800iG",boiler,16,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"CS5800iG",boiler,16,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"CS5800iG",boiler,16,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"CS5800iG",boiler,16,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"CS5800iG",boiler,16,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"CS5800iG",boiler,16,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"CS5800iG",boiler,16,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"CS5800iG",boiler,16,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"CS5800iG",boiler,16,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"CS5800iG",boiler,16,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"CS5800iG",boiler,16,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"CS5800iG",boiler,16,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"CS5800iG",boiler,16,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"CS5800iG",boiler,16,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"CS5800iG",boiler,16,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"CS5800iG",boiler,16,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"CS5800iG",boiler,16,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"CS5800iG",boiler,16,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"CS5800iG",boiler,16,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"CS5800iG",boiler,16,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"CS5800iG",boiler,16,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"CS5800iG",boiler,16,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"CS5800iG",boiler,16,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"CS5800iG",boiler,16,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"CS5800iG",boiler,16,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"CS5800iG",boiler,16,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"CS5800iG",boiler,16,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"CS5800iG",boiler,16,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"CS5800iG",boiler,16,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"CS5800iG",boiler,16,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "CS5800iG",boiler,16,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "CS5800iG",boiler,16,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "CS5800iG",boiler,16,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -513,11 +520,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "CS5800iG",boiler,16,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "CS5800iG",boiler,16,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "CS5800iG",boiler,16,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"CS5800iG",boiler,16,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"CS5800iG",boiler,16,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"CS5800iG",boiler,16,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"CS5800iG",boiler,16,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"CS5800iG",boiler,16,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "CS5800iG",boiler,16,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"CS5800iG",boiler,16,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"CS5800iG",boiler,16,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "CS5800iG",boiler,16,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"CS5800iG",boiler,16,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"CS5800iG",boiler,16,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "CS5800iG",boiler,16,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "CS5800iG",boiler,16,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "CS5800iG",boiler,16,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -560,11 +570,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "CS5800iG",boiler,16,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "CS5800iG",boiler,16,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "CS5800iG",boiler,16,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"CS5800iG",boiler,16,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"CS5800iG",boiler,16,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"CS5800iG",boiler,16,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"CS5800iG",boiler,16,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"CS5800iG",boiler,16,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"CS5800iG",boiler,16,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "CS5800iG",boiler,16,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"BK13/BK15, Smartline, GB1*2",boiler,64,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "BK13/BK15, Smartline, GB1*2",boiler,64,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "BK13/BK15, Smartline, GB1*2",boiler,64,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "BK13/BK15, Smartline, GB1*2",boiler,64,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -578,28 +588,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "BK13/BK15, Smartline, GB1*2",boiler,64,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "BK13/BK15, Smartline, GB1*2",boiler,64,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "BK13/BK15, Smartline, GB1*2",boiler,64,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "BK13/BK15, Smartline, GB1*2",boiler,64,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "BK13/BK15, Smartline, GB1*2",boiler,64,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "BK13/BK15, Smartline, GB1*2",boiler,64,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -630,11 +639,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "BK13/BK15, Smartline, GB1*2",boiler,64,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "BK13/BK15, Smartline, GB1*2",boiler,64,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "BK13/BK15, Smartline, GB1*2",boiler,64,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"BK13/BK15, Smartline, GB1*2",boiler,64,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "BK13/BK15, Smartline, GB1*2",boiler,64,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"BK13/BK15, Smartline, GB1*2",boiler,64,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"BK13/BK15, Smartline, GB1*2",boiler,64,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "BK13/BK15, Smartline, GB1*2",boiler,64,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"BK13/BK15, Smartline, GB1*2",boiler,64,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"BK13/BK15, Smartline, GB1*2",boiler,64,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "BK13/BK15, Smartline, GB1*2",boiler,64,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "BK13/BK15, Smartline, GB1*2",boiler,64,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "BK13/BK15, Smartline, GB1*2",boiler,64,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -677,11 +689,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "BK13/BK15, Smartline, GB1*2",boiler,64,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "BK13/BK15, Smartline, GB1*2",boiler,64,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "BK13/BK15, Smartline, GB1*2",boiler,64,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"BK13/BK15, Smartline, GB1*2",boiler,64,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"BK13/BK15, Smartline, GB1*2",boiler,64,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"BK13/BK15, Smartline, GB1*2",boiler,64,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"BK13/BK15, Smartline, GB1*2",boiler,64,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"BK13/BK15, Smartline, GB1*2",boiler,64,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"BK13/BK15, Smartline, GB1*2",boiler,64,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "BK13/BK15, Smartline, GB1*2",boiler,64,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Logano GB1*5, Logamatic MC10",boiler,72,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Logano GB1*5, Logamatic MC10",boiler,72,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Logano GB1*5, Logamatic MC10",boiler,72,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Logano GB1*5, Logamatic MC10",boiler,72,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Logano GB1*5, Logamatic MC10",boiler,72,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -695,28 +707,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logano GB1*5, Logamatic MC10",boiler,72,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Logano GB1*5, Logamatic MC10",boiler,72,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Logano GB1*5, Logamatic MC10",boiler,72,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Logano GB1*5, Logamatic MC10",boiler,72,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Logano GB1*5, Logamatic MC10",boiler,72,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Logano GB1*5, Logamatic MC10",boiler,72,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Logano GB1*5, Logamatic MC10",boiler,72,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Logano GB1*5, Logamatic MC10",boiler,72,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Logano GB1*5, Logamatic MC10",boiler,72,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Logano GB1*5, Logamatic MC10",boiler,72,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Logano GB1*5, Logamatic MC10",boiler,72,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Logano GB1*5, Logamatic MC10",boiler,72,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Logano GB1*5, Logamatic MC10",boiler,72,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Logano GB1*5, Logamatic MC10",boiler,72,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Logano GB1*5, Logamatic MC10",boiler,72,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Logano GB1*5, Logamatic MC10",boiler,72,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Logano GB1*5, Logamatic MC10",boiler,72,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Logano GB1*5, Logamatic MC10",boiler,72,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Logano GB1*5, Logamatic MC10",boiler,72,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Logano GB1*5, Logamatic MC10",boiler,72,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Logano GB1*5, Logamatic MC10",boiler,72,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Logano GB1*5, Logamatic MC10",boiler,72,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Logano GB1*5, Logamatic MC10",boiler,72,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Logano GB1*5, Logamatic MC10",boiler,72,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Logano GB1*5, Logamatic MC10",boiler,72,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Logano GB1*5, Logamatic MC10",boiler,72,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Logano GB1*5, Logamatic MC10",boiler,72,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Logano GB1*5, Logamatic MC10",boiler,72,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Logano GB1*5, Logamatic MC10",boiler,72,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Logano GB1*5, Logamatic MC10",boiler,72,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Logano GB1*5, Logamatic MC10",boiler,72,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Logano GB1*5, Logamatic MC10",boiler,72,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Logano GB1*5, Logamatic MC10",boiler,72,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Logano GB1*5, Logamatic MC10",boiler,72,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Logano GB1*5, Logamatic MC10",boiler,72,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Logano GB1*5, Logamatic MC10",boiler,72,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Logano GB1*5, Logamatic MC10",boiler,72,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Logano GB1*5, Logamatic MC10",boiler,72,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Logano GB1*5, Logamatic MC10",boiler,72,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Logano GB1*5, Logamatic MC10",boiler,72,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Logano GB1*5, Logamatic MC10",boiler,72,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Logano GB1*5, Logamatic MC10",boiler,72,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Logano GB1*5, Logamatic MC10",boiler,72,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Logano GB1*5, Logamatic MC10",boiler,72,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Logano GB1*5, Logamatic MC10",boiler,72,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Logano GB1*5, Logamatic MC10",boiler,72,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Logano GB1*5, Logamatic MC10",boiler,72,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Logano GB1*5, Logamatic MC10",boiler,72,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Logano GB1*5, Logamatic MC10",boiler,72,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -747,11 +758,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logano GB1*5, Logamatic MC10",boiler,72,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Logano GB1*5, Logamatic MC10",boiler,72,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Logano GB1*5, Logamatic MC10",boiler,72,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Logano GB1*5, Logamatic MC10",boiler,72,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Logano GB1*5, Logamatic MC10",boiler,72,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Logano GB1*5, Logamatic MC10",boiler,72,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Logano GB1*5, Logamatic MC10",boiler,72,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Logano GB1*5, Logamatic MC10",boiler,72,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Logano GB1*5, Logamatic MC10",boiler,72,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Logano GB1*5, Logamatic MC10",boiler,72,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Logano GB1*5, Logamatic MC10",boiler,72,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Logano GB1*5, Logamatic MC10",boiler,72,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Logano GB1*5, Logamatic MC10",boiler,72,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Logano GB1*5, Logamatic MC10",boiler,72,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Logano GB1*5, Logamatic MC10",boiler,72,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Logano GB1*5, Logamatic MC10",boiler,72,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Logano GB1*5, Logamatic MC10",boiler,72,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -794,11 +808,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logano GB1*5, Logamatic MC10",boiler,72,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Logano GB1*5, Logamatic MC10",boiler,72,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Logano GB1*5, Logamatic MC10",boiler,72,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Logano GB1*5, Logamatic MC10",boiler,72,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Logano GB1*5, Logamatic MC10",boiler,72,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Logano GB1*5, Logamatic MC10",boiler,72,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Logano GB1*5, Logamatic MC10",boiler,72,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Logano GB1*5, Logamatic MC10",boiler,72,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Logano GB1*5, Logamatic MC10",boiler,72,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Logano GB1*5, Logamatic MC10",boiler,72,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Cascade CM10",boiler,81,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Cascade CM10",boiler,81,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Cascade CM10",boiler,81,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Cascade CM10",boiler,81,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Cascade CM10",boiler,81,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -812,28 +826,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cascade CM10",boiler,81,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Cascade CM10",boiler,81,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Cascade CM10",boiler,81,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Cascade CM10",boiler,81,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Cascade CM10",boiler,81,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Cascade CM10",boiler,81,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Cascade CM10",boiler,81,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Cascade CM10",boiler,81,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Cascade CM10",boiler,81,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Cascade CM10",boiler,81,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Cascade CM10",boiler,81,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Cascade CM10",boiler,81,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Cascade CM10",boiler,81,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Cascade CM10",boiler,81,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Cascade CM10",boiler,81,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Cascade CM10",boiler,81,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Cascade CM10",boiler,81,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Cascade CM10",boiler,81,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Cascade CM10",boiler,81,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Cascade CM10",boiler,81,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Cascade CM10",boiler,81,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Cascade CM10",boiler,81,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Cascade CM10",boiler,81,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Cascade CM10",boiler,81,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Cascade CM10",boiler,81,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Cascade CM10",boiler,81,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Cascade CM10",boiler,81,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Cascade CM10",boiler,81,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Cascade CM10",boiler,81,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Cascade CM10",boiler,81,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Cascade CM10",boiler,81,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Cascade CM10",boiler,81,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Cascade CM10",boiler,81,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Cascade CM10",boiler,81,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Cascade CM10",boiler,81,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Cascade CM10",boiler,81,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Cascade CM10",boiler,81,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Cascade CM10",boiler,81,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Cascade CM10",boiler,81,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Cascade CM10",boiler,81,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Cascade CM10",boiler,81,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Cascade CM10",boiler,81,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Cascade CM10",boiler,81,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Cascade CM10",boiler,81,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Cascade CM10",boiler,81,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Cascade CM10",boiler,81,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Cascade CM10",boiler,81,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Cascade CM10",boiler,81,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Cascade CM10",boiler,81,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -864,11 +877,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cascade CM10",boiler,81,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Cascade CM10",boiler,81,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Cascade CM10",boiler,81,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Cascade CM10",boiler,81,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Cascade CM10",boiler,81,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Cascade CM10",boiler,81,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Cascade CM10",boiler,81,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Cascade CM10",boiler,81,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Cascade CM10",boiler,81,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Cascade CM10",boiler,81,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Cascade CM10",boiler,81,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Cascade CM10",boiler,81,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Cascade CM10",boiler,81,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Cascade CM10",boiler,81,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Cascade CM10",boiler,81,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Cascade CM10",boiler,81,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Cascade CM10",boiler,81,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -911,11 +927,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cascade CM10",boiler,81,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Cascade CM10",boiler,81,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Cascade CM10",boiler,81,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Cascade CM10",boiler,81,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Cascade CM10",boiler,81,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Cascade CM10",boiler,81,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Cascade CM10",boiler,81,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Cascade CM10",boiler,81,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Cascade CM10",boiler,81,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Cascade CM10",boiler,81,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Logamax Plus GB022",boiler,84,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Logamax Plus GB022",boiler,84,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Logamax Plus GB022",boiler,84,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Logamax Plus GB022",boiler,84,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Logamax Plus GB022",boiler,84,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -929,28 +945,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax Plus GB022",boiler,84,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Logamax Plus GB022",boiler,84,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Logamax Plus GB022",boiler,84,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Logamax Plus GB022",boiler,84,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Logamax Plus GB022",boiler,84,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Logamax Plus GB022",boiler,84,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Logamax Plus GB022",boiler,84,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Logamax Plus GB022",boiler,84,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Logamax Plus GB022",boiler,84,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Logamax Plus GB022",boiler,84,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Logamax Plus GB022",boiler,84,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Logamax Plus GB022",boiler,84,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Logamax Plus GB022",boiler,84,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Logamax Plus GB022",boiler,84,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Logamax Plus GB022",boiler,84,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Logamax Plus GB022",boiler,84,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Logamax Plus GB022",boiler,84,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Logamax Plus GB022",boiler,84,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Logamax Plus GB022",boiler,84,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Logamax Plus GB022",boiler,84,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Logamax Plus GB022",boiler,84,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Logamax Plus GB022",boiler,84,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Logamax Plus GB022",boiler,84,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Logamax Plus GB022",boiler,84,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Logamax Plus GB022",boiler,84,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Logamax Plus GB022",boiler,84,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Logamax Plus GB022",boiler,84,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Logamax Plus GB022",boiler,84,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Logamax Plus GB022",boiler,84,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Logamax Plus GB022",boiler,84,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Logamax Plus GB022",boiler,84,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Logamax Plus GB022",boiler,84,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Logamax Plus GB022",boiler,84,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Logamax Plus GB022",boiler,84,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Logamax Plus GB022",boiler,84,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Logamax Plus GB022",boiler,84,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Logamax Plus GB022",boiler,84,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Logamax Plus GB022",boiler,84,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Logamax Plus GB022",boiler,84,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Logamax Plus GB022",boiler,84,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Logamax Plus GB022",boiler,84,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Logamax Plus GB022",boiler,84,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Logamax Plus GB022",boiler,84,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Logamax Plus GB022",boiler,84,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Logamax Plus GB022",boiler,84,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Logamax Plus GB022",boiler,84,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Logamax Plus GB022",boiler,84,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Logamax Plus GB022",boiler,84,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Logamax Plus GB022",boiler,84,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -981,11 +996,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax Plus GB022",boiler,84,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Logamax Plus GB022",boiler,84,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Logamax Plus GB022",boiler,84,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Logamax Plus GB022",boiler,84,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Logamax Plus GB022",boiler,84,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Logamax Plus GB022",boiler,84,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Logamax Plus GB022",boiler,84,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Logamax Plus GB022",boiler,84,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Logamax Plus GB022",boiler,84,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Logamax Plus GB022",boiler,84,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Logamax Plus GB022",boiler,84,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Logamax Plus GB022",boiler,84,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Logamax Plus GB022",boiler,84,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Logamax Plus GB022",boiler,84,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Logamax Plus GB022",boiler,84,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Logamax Plus GB022",boiler,84,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Logamax Plus GB022",boiler,84,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -1028,11 +1046,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax Plus GB022",boiler,84,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Logamax Plus GB022",boiler,84,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Logamax Plus GB022",boiler,84,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Logamax Plus GB022",boiler,84,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Logamax Plus GB022",boiler,84,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Logamax Plus GB022",boiler,84,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Logamax Plus GB022",boiler,84,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Logamax Plus GB022",boiler,84,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Logamax Plus GB022",boiler,84,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Logamax Plus GB022",boiler,84,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -1046,28 +1064,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -1098,11 +1115,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -1145,11 +1165,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Condens, Logamax/Logomatic, Cerapur Top, Greenstar, Generic HT3",boiler,95,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Topline, GB162",boiler,115,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Topline, GB162",boiler,115,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Topline, GB162",boiler,115,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Topline, GB162",boiler,115,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Topline, GB162",boiler,115,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -1163,28 +1183,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Topline, GB162",boiler,115,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Topline, GB162",boiler,115,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Topline, GB162",boiler,115,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Topline, GB162",boiler,115,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Topline, GB162",boiler,115,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Topline, GB162",boiler,115,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Topline, GB162",boiler,115,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Topline, GB162",boiler,115,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Topline, GB162",boiler,115,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Topline, GB162",boiler,115,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Topline, GB162",boiler,115,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Topline, GB162",boiler,115,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Topline, GB162",boiler,115,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Topline, GB162",boiler,115,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Topline, GB162",boiler,115,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Topline, GB162",boiler,115,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Topline, GB162",boiler,115,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Topline, GB162",boiler,115,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Topline, GB162",boiler,115,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Topline, GB162",boiler,115,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Topline, GB162",boiler,115,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Topline, GB162",boiler,115,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Topline, GB162",boiler,115,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Topline, GB162",boiler,115,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Topline, GB162",boiler,115,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Topline, GB162",boiler,115,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Topline, GB162",boiler,115,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Topline, GB162",boiler,115,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Topline, GB162",boiler,115,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Topline, GB162",boiler,115,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Topline, GB162",boiler,115,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Topline, GB162",boiler,115,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Topline, GB162",boiler,115,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Topline, GB162",boiler,115,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Topline, GB162",boiler,115,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Topline, GB162",boiler,115,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Topline, GB162",boiler,115,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Topline, GB162",boiler,115,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Topline, GB162",boiler,115,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Topline, GB162",boiler,115,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Topline, GB162",boiler,115,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Topline, GB162",boiler,115,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Topline, GB162",boiler,115,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Topline, GB162",boiler,115,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Topline, GB162",boiler,115,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Topline, GB162",boiler,115,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Topline, GB162",boiler,115,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Topline, GB162",boiler,115,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Topline, GB162",boiler,115,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -1215,11 +1234,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Topline, GB162",boiler,115,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Topline, GB162",boiler,115,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Topline, GB162",boiler,115,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Topline, GB162",boiler,115,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Topline, GB162",boiler,115,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Topline, GB162",boiler,115,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Topline, GB162",boiler,115,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Topline, GB162",boiler,115,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Topline, GB162",boiler,115,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Topline, GB162",boiler,115,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Topline, GB162",boiler,115,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Topline, GB162",boiler,115,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Topline, GB162",boiler,115,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Topline, GB162",boiler,115,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Topline, GB162",boiler,115,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Topline, GB162",boiler,115,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Topline, GB162",boiler,115,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -1262,11 +1284,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Topline, GB162",boiler,115,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Topline, GB162",boiler,115,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Topline, GB162",boiler,115,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Topline, GB162",boiler,115,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Topline, GB162",boiler,115,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Topline, GB162",boiler,115,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Topline, GB162",boiler,115,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Topline, GB162",boiler,115,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Topline, GB162",boiler,115,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Topline, GB162",boiler,115,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Cascade MCM10",boiler,121,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Cascade MCM10",boiler,121,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Cascade MCM10",boiler,121,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Cascade MCM10",boiler,121,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Cascade MCM10",boiler,121,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -1280,28 +1302,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cascade MCM10",boiler,121,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Cascade MCM10",boiler,121,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Cascade MCM10",boiler,121,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Cascade MCM10",boiler,121,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Cascade MCM10",boiler,121,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Cascade MCM10",boiler,121,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Cascade MCM10",boiler,121,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Cascade MCM10",boiler,121,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Cascade MCM10",boiler,121,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Cascade MCM10",boiler,121,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Cascade MCM10",boiler,121,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Cascade MCM10",boiler,121,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Cascade MCM10",boiler,121,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Cascade MCM10",boiler,121,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Cascade MCM10",boiler,121,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Cascade MCM10",boiler,121,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Cascade MCM10",boiler,121,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Cascade MCM10",boiler,121,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Cascade MCM10",boiler,121,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Cascade MCM10",boiler,121,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Cascade MCM10",boiler,121,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Cascade MCM10",boiler,121,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Cascade MCM10",boiler,121,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Cascade MCM10",boiler,121,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Cascade MCM10",boiler,121,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Cascade MCM10",boiler,121,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Cascade MCM10",boiler,121,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Cascade MCM10",boiler,121,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Cascade MCM10",boiler,121,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Cascade MCM10",boiler,121,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Cascade MCM10",boiler,121,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Cascade MCM10",boiler,121,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Cascade MCM10",boiler,121,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Cascade MCM10",boiler,121,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Cascade MCM10",boiler,121,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Cascade MCM10",boiler,121,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Cascade MCM10",boiler,121,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Cascade MCM10",boiler,121,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Cascade MCM10",boiler,121,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Cascade MCM10",boiler,121,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Cascade MCM10",boiler,121,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Cascade MCM10",boiler,121,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Cascade MCM10",boiler,121,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Cascade MCM10",boiler,121,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Cascade MCM10",boiler,121,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Cascade MCM10",boiler,121,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Cascade MCM10",boiler,121,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Cascade MCM10",boiler,121,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Cascade MCM10",boiler,121,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -1332,11 +1353,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cascade MCM10",boiler,121,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Cascade MCM10",boiler,121,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Cascade MCM10",boiler,121,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Cascade MCM10",boiler,121,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Cascade MCM10",boiler,121,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Cascade MCM10",boiler,121,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Cascade MCM10",boiler,121,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Cascade MCM10",boiler,121,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Cascade MCM10",boiler,121,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Cascade MCM10",boiler,121,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Cascade MCM10",boiler,121,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Cascade MCM10",boiler,121,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Cascade MCM10",boiler,121,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Cascade MCM10",boiler,121,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Cascade MCM10",boiler,121,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Cascade MCM10",boiler,121,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Cascade MCM10",boiler,121,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -1379,11 +1403,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cascade MCM10",boiler,121,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Cascade MCM10",boiler,121,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Cascade MCM10",boiler,121,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Cascade MCM10",boiler,121,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Cascade MCM10",boiler,121,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Cascade MCM10",boiler,121,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Cascade MCM10",boiler,121,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Cascade MCM10",boiler,121,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Cascade MCM10",boiler,121,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Cascade MCM10",boiler,121,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Proline",boiler,122,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Proline",boiler,122,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Proline",boiler,122,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Proline",boiler,122,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Proline",boiler,122,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -1397,28 +1421,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Proline",boiler,122,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Proline",boiler,122,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Proline",boiler,122,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Proline",boiler,122,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Proline",boiler,122,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Proline",boiler,122,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Proline",boiler,122,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Proline",boiler,122,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Proline",boiler,122,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Proline",boiler,122,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Proline",boiler,122,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Proline",boiler,122,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Proline",boiler,122,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Proline",boiler,122,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Proline",boiler,122,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Proline",boiler,122,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Proline",boiler,122,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Proline",boiler,122,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Proline",boiler,122,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Proline",boiler,122,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Proline",boiler,122,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Proline",boiler,122,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Proline",boiler,122,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Proline",boiler,122,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Proline",boiler,122,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Proline",boiler,122,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Proline",boiler,122,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Proline",boiler,122,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Proline",boiler,122,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Proline",boiler,122,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Proline",boiler,122,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Proline",boiler,122,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Proline",boiler,122,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Proline",boiler,122,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Proline",boiler,122,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Proline",boiler,122,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Proline",boiler,122,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Proline",boiler,122,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Proline",boiler,122,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Proline",boiler,122,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Proline",boiler,122,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Proline",boiler,122,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Proline",boiler,122,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Proline",boiler,122,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Proline",boiler,122,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Proline",boiler,122,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Proline",boiler,122,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Proline",boiler,122,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Proline",boiler,122,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -1449,11 +1472,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Proline",boiler,122,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Proline",boiler,122,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Proline",boiler,122,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Proline",boiler,122,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Proline",boiler,122,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Proline",boiler,122,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Proline",boiler,122,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Proline",boiler,122,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Proline",boiler,122,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Proline",boiler,122,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Proline",boiler,122,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Proline",boiler,122,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Proline",boiler,122,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Proline",boiler,122,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Proline",boiler,122,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Proline",boiler,122,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Proline",boiler,122,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -1496,11 +1522,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Proline",boiler,122,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Proline",boiler,122,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Proline",boiler,122,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Proline",boiler,122,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Proline",boiler,122,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Proline",boiler,122,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Proline",boiler,122,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Proline",boiler,122,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Proline",boiler,122,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Proline",boiler,122,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -1514,28 +1540,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -1566,11 +1591,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -1613,11 +1641,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "GB*72, Trendline, Cerapur, Greenstar Si",boiler,123,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"GB212",boiler,131,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"GB212",boiler,131,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "GB212",boiler,131,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "GB212",boiler,131,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "GB212",boiler,131,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -1631,28 +1659,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "GB212",boiler,131,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "GB212",boiler,131,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "GB212",boiler,131,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"GB212",boiler,131,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"GB212",boiler,131,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"GB212",boiler,131,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"GB212",boiler,131,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"GB212",boiler,131,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"GB212",boiler,131,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"GB212",boiler,131,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"GB212",boiler,131,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"GB212",boiler,131,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"GB212",boiler,131,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"GB212",boiler,131,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"GB212",boiler,131,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"GB212",boiler,131,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"GB212",boiler,131,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"GB212",boiler,131,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"GB212",boiler,131,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"GB212",boiler,131,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"GB212",boiler,131,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"GB212",boiler,131,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"GB212",boiler,131,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"GB212",boiler,131,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"GB212",boiler,131,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"GB212",boiler,131,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"GB212",boiler,131,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"GB212",boiler,131,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"GB212",boiler,131,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"GB212",boiler,131,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"GB212",boiler,131,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"GB212",boiler,131,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"GB212",boiler,131,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"GB212",boiler,131,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"GB212",boiler,131,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"GB212",boiler,131,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"GB212",boiler,131,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"GB212",boiler,131,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"GB212",boiler,131,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"GB212",boiler,131,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"GB212",boiler,131,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"GB212",boiler,131,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"GB212",boiler,131,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"GB212",boiler,131,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"GB212",boiler,131,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"GB212",boiler,131,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "GB212",boiler,131,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "GB212",boiler,131,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "GB212",boiler,131,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -1683,11 +1710,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "GB212",boiler,131,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "GB212",boiler,131,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "GB212",boiler,131,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"GB212",boiler,131,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"GB212",boiler,131,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"GB212",boiler,131,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"GB212",boiler,131,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"GB212",boiler,131,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "GB212",boiler,131,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"GB212",boiler,131,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"GB212",boiler,131,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "GB212",boiler,131,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"GB212",boiler,131,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"GB212",boiler,131,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "GB212",boiler,131,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "GB212",boiler,131,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "GB212",boiler,131,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -1730,11 +1760,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "GB212",boiler,131,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "GB212",boiler,131,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "GB212",boiler,131,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"GB212",boiler,131,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"GB212",boiler,131,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"GB212",boiler,131,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"GB212",boiler,131,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"GB212",boiler,131,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"GB212",boiler,131,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "GB212",boiler,131,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"GC7000F",boiler,132,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"GC7000F",boiler,132,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "GC7000F",boiler,132,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "GC7000F",boiler,132,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "GC7000F",boiler,132,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -1748,28 +1778,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "GC7000F",boiler,132,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "GC7000F",boiler,132,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "GC7000F",boiler,132,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"GC7000F",boiler,132,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"GC7000F",boiler,132,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"GC7000F",boiler,132,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"GC7000F",boiler,132,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"GC7000F",boiler,132,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"GC7000F",boiler,132,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"GC7000F",boiler,132,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"GC7000F",boiler,132,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"GC7000F",boiler,132,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"GC7000F",boiler,132,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"GC7000F",boiler,132,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"GC7000F",boiler,132,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"GC7000F",boiler,132,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"GC7000F",boiler,132,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"GC7000F",boiler,132,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"GC7000F",boiler,132,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"GC7000F",boiler,132,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"GC7000F",boiler,132,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"GC7000F",boiler,132,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"GC7000F",boiler,132,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"GC7000F",boiler,132,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"GC7000F",boiler,132,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"GC7000F",boiler,132,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"GC7000F",boiler,132,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"GC7000F",boiler,132,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"GC7000F",boiler,132,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"GC7000F",boiler,132,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"GC7000F",boiler,132,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"GC7000F",boiler,132,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"GC7000F",boiler,132,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"GC7000F",boiler,132,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"GC7000F",boiler,132,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"GC7000F",boiler,132,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"GC7000F",boiler,132,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"GC7000F",boiler,132,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"GC7000F",boiler,132,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"GC7000F",boiler,132,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"GC7000F",boiler,132,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"GC7000F",boiler,132,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"GC7000F",boiler,132,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"GC7000F",boiler,132,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"GC7000F",boiler,132,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"GC7000F",boiler,132,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "GC7000F",boiler,132,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "GC7000F",boiler,132,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "GC7000F",boiler,132,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -1800,11 +1829,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "GC7000F",boiler,132,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "GC7000F",boiler,132,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "GC7000F",boiler,132,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"GC7000F",boiler,132,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"GC7000F",boiler,132,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"GC7000F",boiler,132,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"GC7000F",boiler,132,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"GC7000F",boiler,132,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "GC7000F",boiler,132,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"GC7000F",boiler,132,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"GC7000F",boiler,132,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "GC7000F",boiler,132,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"GC7000F",boiler,132,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"GC7000F",boiler,132,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "GC7000F",boiler,132,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "GC7000F",boiler,132,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "GC7000F",boiler,132,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -1847,11 +1879,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "GC7000F",boiler,132,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "GC7000F",boiler,132,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "GC7000F",boiler,132,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"GC7000F",boiler,132,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"GC7000F",boiler,132,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"GC7000F",boiler,132,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"GC7000F",boiler,132,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"GC7000F",boiler,132,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"GC7000F",boiler,132,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "GC7000F",boiler,132,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -1865,28 +1897,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logano GB125/KB195i, Logamatic MC110",boiler,133,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -1917,11 +1948,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logano GB125/KB195i, Logamatic MC110",boiler,133,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Logano GB125/KB195i, Logamatic MC110",boiler,133,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Logano GB125/KB195i, Logamatic MC110",boiler,133,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Logano GB125/KB195i, Logamatic MC110",boiler,133,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Logano GB125/KB195i, Logamatic MC110",boiler,133,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -1964,11 +1998,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logano GB125/KB195i, Logamatic MC110",boiler,133,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Logano GB125/KB195i, Logamatic MC110",boiler,133,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Logano GB125/KB195i, Logamatic MC110",boiler,133,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Logano GB125/KB195i, Logamatic MC110",boiler,133,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Logano GB125/KB195i, Logamatic MC110",boiler,133,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Logano GB125/KB195i, Logamatic MC110",boiler,133,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Greenstar 30Ri Compact",boiler,154,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Greenstar 30Ri Compact",boiler,154,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Greenstar 30Ri Compact",boiler,154,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Greenstar 30Ri Compact",boiler,154,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Greenstar 30Ri Compact",boiler,154,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -1982,28 +2016,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Greenstar 30Ri Compact",boiler,154,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Greenstar 30Ri Compact",boiler,154,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Greenstar 30Ri Compact",boiler,154,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Greenstar 30Ri Compact",boiler,154,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Greenstar 30Ri Compact",boiler,154,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Greenstar 30Ri Compact",boiler,154,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Greenstar 30Ri Compact",boiler,154,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Greenstar 30Ri Compact",boiler,154,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Greenstar 30Ri Compact",boiler,154,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Greenstar 30Ri Compact",boiler,154,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Greenstar 30Ri Compact",boiler,154,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Greenstar 30Ri Compact",boiler,154,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Greenstar 30Ri Compact",boiler,154,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Greenstar 30Ri Compact",boiler,154,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Greenstar 30Ri Compact",boiler,154,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Greenstar 30Ri Compact",boiler,154,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Greenstar 30Ri Compact",boiler,154,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Greenstar 30Ri Compact",boiler,154,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Greenstar 30Ri Compact",boiler,154,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Greenstar 30Ri Compact",boiler,154,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Greenstar 30Ri Compact",boiler,154,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Greenstar 30Ri Compact",boiler,154,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Greenstar 30Ri Compact",boiler,154,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Greenstar 30Ri Compact",boiler,154,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Greenstar 30Ri Compact",boiler,154,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Greenstar 30Ri Compact",boiler,154,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Greenstar 30Ri Compact",boiler,154,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Greenstar 30Ri Compact",boiler,154,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Greenstar 30Ri Compact",boiler,154,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Greenstar 30Ri Compact",boiler,154,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Greenstar 30Ri Compact",boiler,154,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Greenstar 30Ri Compact",boiler,154,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Greenstar 30Ri Compact",boiler,154,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Greenstar 30Ri Compact",boiler,154,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Greenstar 30Ri Compact",boiler,154,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Greenstar 30Ri Compact",boiler,154,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Greenstar 30Ri Compact",boiler,154,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Greenstar 30Ri Compact",boiler,154,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Greenstar 30Ri Compact",boiler,154,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Greenstar 30Ri Compact",boiler,154,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Greenstar 30Ri Compact",boiler,154,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Greenstar 30Ri Compact",boiler,154,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Greenstar 30Ri Compact",boiler,154,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Greenstar 30Ri Compact",boiler,154,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Greenstar 30Ri Compact",boiler,154,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Greenstar 30Ri Compact",boiler,154,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Greenstar 30Ri Compact",boiler,154,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Greenstar 30Ri Compact",boiler,154,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Greenstar 30Ri Compact",boiler,154,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -2034,11 +2067,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Greenstar 30Ri Compact",boiler,154,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Greenstar 30Ri Compact",boiler,154,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Greenstar 30Ri Compact",boiler,154,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Greenstar 30Ri Compact",boiler,154,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Greenstar 30Ri Compact",boiler,154,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Greenstar 30Ri Compact",boiler,154,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Greenstar 30Ri Compact",boiler,154,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Greenstar 30Ri Compact",boiler,154,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Greenstar 30Ri Compact",boiler,154,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Greenstar 30Ri Compact",boiler,154,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Greenstar 30Ri Compact",boiler,154,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Greenstar 30Ri Compact",boiler,154,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Greenstar 30Ri Compact",boiler,154,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Greenstar 30Ri Compact",boiler,154,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Greenstar 30Ri Compact",boiler,154,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Greenstar 30Ri Compact",boiler,154,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Greenstar 30Ri Compact",boiler,154,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -2081,11 +2117,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Greenstar 30Ri Compact",boiler,154,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Greenstar 30Ri Compact",boiler,154,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Greenstar 30Ri Compact",boiler,154,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Greenstar 30Ri Compact",boiler,154,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Greenstar 30Ri Compact",boiler,154,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Greenstar 30Ri Compact",boiler,154,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Greenstar 30Ri Compact",boiler,154,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Greenstar 30Ri Compact",boiler,154,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Greenstar 30Ri Compact",boiler,154,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Greenstar 30Ri Compact",boiler,154,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Suprapur-o",boiler,155,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Suprapur-o",boiler,155,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Suprapur-o",boiler,155,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Suprapur-o",boiler,155,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Suprapur-o",boiler,155,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -2099,28 +2135,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Suprapur-o",boiler,155,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Suprapur-o",boiler,155,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Suprapur-o",boiler,155,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Suprapur-o",boiler,155,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Suprapur-o",boiler,155,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Suprapur-o",boiler,155,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Suprapur-o",boiler,155,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Suprapur-o",boiler,155,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Suprapur-o",boiler,155,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Suprapur-o",boiler,155,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Suprapur-o",boiler,155,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Suprapur-o",boiler,155,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Suprapur-o",boiler,155,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Suprapur-o",boiler,155,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Suprapur-o",boiler,155,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Suprapur-o",boiler,155,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Suprapur-o",boiler,155,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Suprapur-o",boiler,155,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Suprapur-o",boiler,155,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Suprapur-o",boiler,155,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Suprapur-o",boiler,155,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Suprapur-o",boiler,155,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Suprapur-o",boiler,155,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Suprapur-o",boiler,155,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Suprapur-o",boiler,155,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Suprapur-o",boiler,155,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Suprapur-o",boiler,155,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Suprapur-o",boiler,155,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Suprapur-o",boiler,155,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Suprapur-o",boiler,155,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Suprapur-o",boiler,155,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Suprapur-o",boiler,155,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Suprapur-o",boiler,155,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Suprapur-o",boiler,155,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Suprapur-o",boiler,155,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Suprapur-o",boiler,155,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Suprapur-o",boiler,155,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Suprapur-o",boiler,155,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Suprapur-o",boiler,155,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Suprapur-o",boiler,155,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Suprapur-o",boiler,155,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Suprapur-o",boiler,155,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Suprapur-o",boiler,155,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Suprapur-o",boiler,155,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Suprapur-o",boiler,155,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Suprapur-o",boiler,155,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Suprapur-o",boiler,155,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Suprapur-o",boiler,155,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Suprapur-o",boiler,155,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -2151,11 +2186,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Suprapur-o",boiler,155,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Suprapur-o",boiler,155,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Suprapur-o",boiler,155,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Suprapur-o",boiler,155,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Suprapur-o",boiler,155,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Suprapur-o",boiler,155,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Suprapur-o",boiler,155,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Suprapur-o",boiler,155,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Suprapur-o",boiler,155,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Suprapur-o",boiler,155,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Suprapur-o",boiler,155,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Suprapur-o",boiler,155,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Suprapur-o",boiler,155,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Suprapur-o",boiler,155,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Suprapur-o",boiler,155,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Suprapur-o",boiler,155,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Suprapur-o",boiler,155,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -2198,11 +2236,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Suprapur-o",boiler,155,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Suprapur-o",boiler,155,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Suprapur-o",boiler,155,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Suprapur-o",boiler,155,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Suprapur-o",boiler,155,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Suprapur-o",boiler,155,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Suprapur-o",boiler,155,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Suprapur-o",boiler,155,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Suprapur-o",boiler,155,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Suprapur-o",boiler,155,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Cerapur Aero",boiler,167,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Cerapur Aero",boiler,167,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Cerapur Aero",boiler,167,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Cerapur Aero",boiler,167,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Cerapur Aero",boiler,167,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -2216,28 +2254,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cerapur Aero",boiler,167,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Cerapur Aero",boiler,167,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Cerapur Aero",boiler,167,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Cerapur Aero",boiler,167,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Cerapur Aero",boiler,167,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Cerapur Aero",boiler,167,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Cerapur Aero",boiler,167,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Cerapur Aero",boiler,167,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Cerapur Aero",boiler,167,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Cerapur Aero",boiler,167,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Cerapur Aero",boiler,167,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Cerapur Aero",boiler,167,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Cerapur Aero",boiler,167,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Cerapur Aero",boiler,167,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Cerapur Aero",boiler,167,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Cerapur Aero",boiler,167,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Cerapur Aero",boiler,167,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Cerapur Aero",boiler,167,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Cerapur Aero",boiler,167,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Cerapur Aero",boiler,167,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Cerapur Aero",boiler,167,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Cerapur Aero",boiler,167,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Cerapur Aero",boiler,167,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Cerapur Aero",boiler,167,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Cerapur Aero",boiler,167,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Cerapur Aero",boiler,167,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Cerapur Aero",boiler,167,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Cerapur Aero",boiler,167,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Cerapur Aero",boiler,167,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Cerapur Aero",boiler,167,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Cerapur Aero",boiler,167,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Cerapur Aero",boiler,167,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Cerapur Aero",boiler,167,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Cerapur Aero",boiler,167,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Cerapur Aero",boiler,167,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Cerapur Aero",boiler,167,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Cerapur Aero",boiler,167,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Cerapur Aero",boiler,167,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Cerapur Aero",boiler,167,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Cerapur Aero",boiler,167,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Cerapur Aero",boiler,167,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Cerapur Aero",boiler,167,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Cerapur Aero",boiler,167,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Cerapur Aero",boiler,167,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Cerapur Aero",boiler,167,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Cerapur Aero",boiler,167,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Cerapur Aero",boiler,167,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Cerapur Aero",boiler,167,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Cerapur Aero",boiler,167,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -2268,11 +2305,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cerapur Aero",boiler,167,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Cerapur Aero",boiler,167,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Cerapur Aero",boiler,167,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Cerapur Aero",boiler,167,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Cerapur Aero",boiler,167,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Cerapur Aero",boiler,167,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Cerapur Aero",boiler,167,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Cerapur Aero",boiler,167,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Cerapur Aero",boiler,167,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Cerapur Aero",boiler,167,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Cerapur Aero",boiler,167,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Cerapur Aero",boiler,167,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Cerapur Aero",boiler,167,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Cerapur Aero",boiler,167,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Cerapur Aero",boiler,167,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Cerapur Aero",boiler,167,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Cerapur Aero",boiler,167,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -2315,11 +2355,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cerapur Aero",boiler,167,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Cerapur Aero",boiler,167,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Cerapur Aero",boiler,167,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Cerapur Aero",boiler,167,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Cerapur Aero",boiler,167,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Cerapur Aero",boiler,167,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Cerapur Aero",boiler,167,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Cerapur Aero",boiler,167,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Cerapur Aero",boiler,167,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Cerapur Aero",boiler,167,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Hybrid Heatpump",boiler,168,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Hybrid Heatpump",boiler,168,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Hybrid Heatpump",boiler,168,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Hybrid Heatpump",boiler,168,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Hybrid Heatpump",boiler,168,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -2333,28 +2373,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Hybrid Heatpump",boiler,168,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Hybrid Heatpump",boiler,168,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Hybrid Heatpump",boiler,168,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Hybrid Heatpump",boiler,168,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Hybrid Heatpump",boiler,168,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Hybrid Heatpump",boiler,168,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Hybrid Heatpump",boiler,168,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Hybrid Heatpump",boiler,168,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Hybrid Heatpump",boiler,168,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Hybrid Heatpump",boiler,168,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Hybrid Heatpump",boiler,168,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Hybrid Heatpump",boiler,168,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Hybrid Heatpump",boiler,168,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Hybrid Heatpump",boiler,168,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Hybrid Heatpump",boiler,168,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Hybrid Heatpump",boiler,168,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Hybrid Heatpump",boiler,168,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Hybrid Heatpump",boiler,168,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Hybrid Heatpump",boiler,168,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Hybrid Heatpump",boiler,168,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Hybrid Heatpump",boiler,168,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Hybrid Heatpump",boiler,168,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Hybrid Heatpump",boiler,168,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Hybrid Heatpump",boiler,168,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Hybrid Heatpump",boiler,168,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Hybrid Heatpump",boiler,168,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Hybrid Heatpump",boiler,168,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Hybrid Heatpump",boiler,168,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Hybrid Heatpump",boiler,168,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Hybrid Heatpump",boiler,168,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Hybrid Heatpump",boiler,168,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Hybrid Heatpump",boiler,168,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Hybrid Heatpump",boiler,168,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Hybrid Heatpump",boiler,168,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Hybrid Heatpump",boiler,168,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Hybrid Heatpump",boiler,168,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Hybrid Heatpump",boiler,168,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Hybrid Heatpump",boiler,168,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Hybrid Heatpump",boiler,168,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Hybrid Heatpump",boiler,168,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Hybrid Heatpump",boiler,168,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Hybrid Heatpump",boiler,168,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Hybrid Heatpump",boiler,168,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Hybrid Heatpump",boiler,168,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Hybrid Heatpump",boiler,168,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Hybrid Heatpump",boiler,168,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Hybrid Heatpump",boiler,168,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Hybrid Heatpump",boiler,168,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Hybrid Heatpump",boiler,168,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -2385,11 +2424,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Hybrid Heatpump",boiler,168,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Hybrid Heatpump",boiler,168,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Hybrid Heatpump",boiler,168,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Hybrid Heatpump",boiler,168,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Hybrid Heatpump",boiler,168,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Hybrid Heatpump",boiler,168,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Hybrid Heatpump",boiler,168,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Hybrid Heatpump",boiler,168,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Hybrid Heatpump",boiler,168,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Hybrid Heatpump",boiler,168,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Hybrid Heatpump",boiler,168,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Hybrid Heatpump",boiler,168,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Hybrid Heatpump",boiler,168,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Hybrid Heatpump",boiler,168,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Hybrid Heatpump",boiler,168,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Hybrid Heatpump",boiler,168,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Hybrid Heatpump",boiler,168,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -2432,11 +2474,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Hybrid Heatpump",boiler,168,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Hybrid Heatpump",boiler,168,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Hybrid Heatpump",boiler,168,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Hybrid Heatpump",boiler,168,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Hybrid Heatpump",boiler,168,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Hybrid Heatpump",boiler,168,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Hybrid Heatpump",boiler,168,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Hybrid Heatpump",boiler,168,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Hybrid Heatpump",boiler,168,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Hybrid Heatpump",boiler,168,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Logano GB212",boiler,170,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Logano GB212",boiler,170,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Logano GB212",boiler,170,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Logano GB212",boiler,170,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Logano GB212",boiler,170,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -2450,28 +2492,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logano GB212",boiler,170,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Logano GB212",boiler,170,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Logano GB212",boiler,170,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Logano GB212",boiler,170,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Logano GB212",boiler,170,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Logano GB212",boiler,170,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Logano GB212",boiler,170,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Logano GB212",boiler,170,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Logano GB212",boiler,170,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Logano GB212",boiler,170,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Logano GB212",boiler,170,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Logano GB212",boiler,170,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Logano GB212",boiler,170,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Logano GB212",boiler,170,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Logano GB212",boiler,170,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Logano GB212",boiler,170,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Logano GB212",boiler,170,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Logano GB212",boiler,170,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Logano GB212",boiler,170,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Logano GB212",boiler,170,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Logano GB212",boiler,170,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Logano GB212",boiler,170,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Logano GB212",boiler,170,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Logano GB212",boiler,170,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Logano GB212",boiler,170,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Logano GB212",boiler,170,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Logano GB212",boiler,170,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Logano GB212",boiler,170,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Logano GB212",boiler,170,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Logano GB212",boiler,170,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Logano GB212",boiler,170,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Logano GB212",boiler,170,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Logano GB212",boiler,170,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Logano GB212",boiler,170,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Logano GB212",boiler,170,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Logano GB212",boiler,170,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Logano GB212",boiler,170,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Logano GB212",boiler,170,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Logano GB212",boiler,170,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Logano GB212",boiler,170,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Logano GB212",boiler,170,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Logano GB212",boiler,170,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Logano GB212",boiler,170,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Logano GB212",boiler,170,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Logano GB212",boiler,170,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Logano GB212",boiler,170,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Logano GB212",boiler,170,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Logano GB212",boiler,170,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Logano GB212",boiler,170,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -2502,11 +2543,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logano GB212",boiler,170,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Logano GB212",boiler,170,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Logano GB212",boiler,170,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Logano GB212",boiler,170,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Logano GB212",boiler,170,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Logano GB212",boiler,170,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Logano GB212",boiler,170,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Logano GB212",boiler,170,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Logano GB212",boiler,170,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Logano GB212",boiler,170,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Logano GB212",boiler,170,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Logano GB212",boiler,170,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Logano GB212",boiler,170,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Logano GB212",boiler,170,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Logano GB212",boiler,170,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Logano GB212",boiler,170,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Logano GB212",boiler,170,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -2549,11 +2593,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logano GB212",boiler,170,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Logano GB212",boiler,170,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Logano GB212",boiler,170,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Logano GB212",boiler,170,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Logano GB212",boiler,170,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Logano GB212",boiler,170,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Logano GB212",boiler,170,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Logano GB212",boiler,170,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Logano GB212",boiler,170,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Logano GB212",boiler,170,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -2597,122 +2641,126 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,mandefrost,manual defrost,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_manual_defrost,sensor.boiler_mandefrost,5,0,1,84,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,mandefrost,manual defrost,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_manual_defrost,sensor.boiler_mandefrost,5,0,1,87,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.nrg,energy,uint24,kWh,false,sensor.boiler_dhw_energy,sensor.boiler_dhw_nrg,5,9,1/100,0,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgheat,energy heating,uint24,kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,87,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgcool,energy cooling,uint24,kWh,false,sensor.boiler_energy_cooling,sensor.boiler_nrgcool,5,0,1/100,89,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,metertotal,meter total,uint24,kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,91,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,metercomp,meter compressor,uint24,kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,93,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,metereheat,meter e-heater,uint24,kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,95,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,97,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,metercool,meter cooling,uint24,kWh,false,sensor.boiler_meter_cooling,sensor.boiler_metercool,5,0,1/100,99,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgheat,energy heating,uint24,kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,90,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgcool,energy cooling,uint24,kWh,false,sensor.boiler_energy_cooling,sensor.boiler_nrgcool,5,0,1/100,92,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,metertotal,meter total,uint24,kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,94,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,metercomp,meter compressor,uint24,kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,96,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,metereheat,meter e-heater,uint24,kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,98,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,100,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,metercool,meter cooling,uint24,kWh,false,sensor.boiler_meter_cooling,sensor.boiler_metercool,5,0,1/100,102,2 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/100,2,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,uptimetotal,heatpump total uptime,time,minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,101,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,uptimecontrol,total operating time heat,time,minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,103,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,uptimecompheating,operating time compressor heating,time,minutes,false,sensor.boiler_operating_time_compressor_heating,sensor.boiler_uptimecompheating,5,0,1/60,105,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,uptimecompcooling,operating time compressor cooling,time,minutes,false,sensor.boiler_operating_time_compressor_cooling,sensor.boiler_uptimecompcooling,5,0,1/60,107,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,uptimetotal,heatpump total uptime,time,minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,104,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,uptimecontrol,total operating time heat,time,minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,106,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,uptimecompheating,operating time compressor heating,time,minutes,false,sensor.boiler_operating_time_compressor_heating,sensor.boiler_uptimecompheating,5,0,1/60,108,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,uptimecompcooling,operating time compressor cooling,time,minutes,false,sensor.boiler_operating_time_compressor_cooling,sensor.boiler_uptimecompcooling,5,0,1/60,110,2 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.uptimecomp,operating time compressor,time,minutes,false,sensor.boiler_dhw_operating_time_compressor,sensor.boiler_dhw_uptimecomp,5,9,1/60,4,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,uptimecomppool,operating time compressor pool,time,minutes,false,sensor.boiler_operating_time_compressor_pool,sensor.boiler_uptimecomppool,5,0,1/60,109,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,totalcompstarts,total compressor control starts,uint24, ,false,sensor.boiler_total_compressor_control_starts,sensor.boiler_totalcompstarts,5,0,1,111,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,heatingstarts,heating control starts,uint24, ,false,sensor.boiler_heating_control_starts,sensor.boiler_heatingstarts,5,0,1,113,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,coolingstarts,cooling control starts,uint24, ,false,sensor.boiler_cooling_control_starts,sensor.boiler_coolingstarts,5,0,1,115,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,uptimecomppool,operating time compressor pool,time,minutes,false,sensor.boiler_operating_time_compressor_pool,sensor.boiler_uptimecomppool,5,0,1/60,112,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,totalcompstarts,total compressor control starts,uint24, ,false,sensor.boiler_total_compressor_control_starts,sensor.boiler_totalcompstarts,5,0,1,114,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,heatingstarts,heating control starts,uint24, ,false,sensor.boiler_heating_control_starts,sensor.boiler_heatingstarts,5,0,1,116,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,coolingstarts,cooling control starts,uint24, ,false,sensor.boiler_cooling_control_starts,sensor.boiler_coolingstarts,5,0,1,118,2 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.startshp,starts hp,uint24, ,false,sensor.boiler_dhw_starts_hp,sensor.boiler_dhw_startshp,5,9,1,6,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,poolstarts,pool control starts,uint24, ,false,sensor.boiler_pool_control_starts,sensor.boiler_poolstarts,5,0,1,117,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgconstotal,total energy consumption,uint24,kWh,false,sensor.boiler_total_energy_consumption,sensor.boiler_nrgconstotal,5,0,1,119,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgconscomptotal,total energy consumption compressor,uint24,kWh,false,sensor.boiler_total_energy_consumption_compressor,sensor.boiler_nrgconscomptotal,5,0,1,121,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgconscompheating,energy consumption compressor heating,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_heating,sensor.boiler_nrgconscompheating,5,0,1,123,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,poolstarts,pool control starts,uint24, ,false,sensor.boiler_pool_control_starts,sensor.boiler_poolstarts,5,0,1,120,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgconstotal,total energy consumption,uint24,kWh,false,sensor.boiler_total_energy_consumption,sensor.boiler_nrgconstotal,5,0,1,122,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgconscomptotal,total energy consumption compressor,uint24,kWh,false,sensor.boiler_total_energy_consumption_compressor,sensor.boiler_nrgconscomptotal,5,0,1,124,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgconscompheating,energy consumption compressor heating,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_heating,sensor.boiler_nrgconscompheating,5,0,1,126,2 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.nrgconscomp,energy consumption compressor,uint24,kWh,false,sensor.boiler_dhw_energy_consumption_compressor,sensor.boiler_dhw_nrgconscomp,5,9,1,8,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgconscompcooling,energy consumption compressor cooling,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_cooling,sensor.boiler_nrgconscompcooling,5,0,1,125,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgconscomppool,energy consumption compressor pool,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_pool,sensor.boiler_nrgconscomppool,5,0,1,127,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxelecheatnrgconstotal,total aux elec. heater energy consumption,uint24,kWh,false,sensor.boiler_total_aux_elec._heater_energy_consumption,sensor.boiler_auxelecheatnrgconstotal,5,0,1,129,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxelecheatnrgconsheating,aux elec. heater energy consumption heating,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_heating,sensor.boiler_auxelecheatnrgconsheating,5,0,1,131,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgconscompcooling,energy consumption compressor cooling,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_cooling,sensor.boiler_nrgconscompcooling,5,0,1,128,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgconscomppool,energy consumption compressor pool,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_pool,sensor.boiler_nrgconscomppool,5,0,1,130,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxelecheatnrgconstotal,total aux elec. heater energy consumption,uint24,kWh,false,sensor.boiler_total_aux_elec._heater_energy_consumption,sensor.boiler_auxelecheatnrgconstotal,5,0,1,132,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxelecheatnrgconsheating,aux elec. heater energy consumption heating,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_heating,sensor.boiler_auxelecheatnrgconsheating,5,0,1,134,2 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.auxelecheatnrgcons,aux elec. heater energy consumption,uint24,kWh,false,sensor.boiler_dhw_aux_elec._heater_energy_consumption,sensor.boiler_dhw_auxelecheatnrgcons,5,9,1,10,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxelecheatnrgconspool,aux elec. heater energy consumption pool,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_pool,sensor.boiler_auxelecheatnrgconspool,5,0,1,133,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgsupptotal,total energy supplied,uint24,kWh,false,sensor.boiler_total_energy_supplied,sensor.boiler_nrgsupptotal,5,0,1,135,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgsuppheating,total energy supplied heating,uint24,kWh,false,sensor.boiler_total_energy_supplied_heating,sensor.boiler_nrgsuppheating,5,0,1,137,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxelecheatnrgconspool,aux elec. heater energy consumption pool,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_pool,sensor.boiler_auxelecheatnrgconspool,5,0,1,136,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgsupptotal,total energy supplied,uint24,kWh,false,sensor.boiler_total_energy_supplied,sensor.boiler_nrgsupptotal,5,0,1,138,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgsuppheating,total energy supplied heating,uint24,kWh,false,sensor.boiler_total_energy_supplied_heating,sensor.boiler_nrgsuppheating,5,0,1,140,2 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.nrgsupp,total energy warm supplied,uint24,kWh,false,sensor.boiler_dhw_total_energy_warm_supplied,sensor.boiler_dhw_nrgsupp,5,9,1,12,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgsuppcooling,total energy supplied cooling,uint24,kWh,false,sensor.boiler_total_energy_supplied_cooling,sensor.boiler_nrgsuppcooling,5,0,1,139,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgsupppool,total energy supplied pool,uint24,kWh,false,sensor.boiler_total_energy_supplied_pool,sensor.boiler_nrgsupppool,5,0,1,141,2 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hppower,compressor power output,uint16,kW,false,sensor.boiler_compressor_power_output,sensor.boiler_hppower,5,0,1/10,143,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpmaxpower,compressor max power,uint8 (>=0<=0),%,true,number.boiler_compressor_max_power,number.boiler_hpmaxpower,5,0,1,144,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pvmaxcomp,pv compressor max power,uint8 (>=0<=0),kW,true,number.boiler_pv_compressor_max_power,number.boiler_pvmaxcomp,5,0,1/10,145,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,powerreduction,power reduction,uint8 (>=30<=60),%,true,number.boiler_power_reduction,number.boiler_powerreduction,5,0,10,146,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpsetdiffpress,set differential pressure,uint8 (>=150<=750),mbar,true,number.boiler_set_differential_pressure,number.boiler_hpsetdiffpress,5,0,50,147,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpcompon,hp compressor,boolean, ,false,binary_sensor.boiler_hp_compressor,binary_sensor.boiler_hpcompon,5,0,1,148,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpactivity,compressor activity,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_compressor_activity,sensor.boiler_hpactivity,5,0,1,149,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpbrinepumpspd,brine pump speed,uint8,%,false,sensor.boiler_brine_pump_speed,sensor.boiler_hpbrinepumpspd,5,0,1,150,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpswitchvalve,switch valve,boolean, ,false,binary_sensor.boiler_switch_valve,binary_sensor.boiler_hpswitchvalve,5,0,1,151,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpcompspd,compressor speed,uint8,%,false,sensor.boiler_compressor_speed,sensor.boiler_hpcompspd,5,0,1,152,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptargetspd,compressor target speed,uint8,%,false,sensor.boiler_compressor_target_speed,sensor.boiler_hptargetspd,5,0,1,153,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpcircspd,circulation pump speed,uint8,%,false,sensor.boiler_circulation_pump_speed,sensor.boiler_hpcircspd,5,0,1,154,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,recvalve,receiver valve VR0,uint8,%,false,sensor.boiler_receiver_valve_VR0,sensor.boiler_recvalve,5,0,1,155,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,expvalve,expansion valve VR1,uint8,%,false,sensor.boiler_expansion_valve_VR1,sensor.boiler_expvalve,5,0,1,156,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpbrinein,brine in/evaporator,int16,C,false,sensor.boiler_brine_in/evaporator,sensor.boiler_hpbrinein,5,0,1/10,157,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpbrineout,brine out/condenser,int16,C,false,sensor.boiler_brine_out/condenser,sensor.boiler_hpbrineout,5,0,1/10,158,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptc0,heat carrier return (TC0),int16,C,false,sensor.boiler_heat_carrier_return_(TC0),sensor.boiler_hptc0,5,0,1/10,159,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptc1,heat carrier forward (TC1),int16,C,false,sensor.boiler_heat_carrier_forward_(TC1),sensor.boiler_hptc1,5,0,1/10,160,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptc3,condenser temperature (TC3),int16,C,false,sensor.boiler_condenser_temperature_(TC3),sensor.boiler_hptc3,5,0,1/10,161,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr1,compressor temperature (TR1),int16,C,false,sensor.boiler_compressor_temperature_(TR1),sensor.boiler_hptr1,5,0,1/10,162,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr3,refrigerant temperature liquid side (condenser output) (TR3),int16,C,false,sensor.boiler_refrigerant_temperature_liquid_side_(condenser_output)_(TR3),sensor.boiler_hptr3,5,0,1/10,163,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr4,evaporator inlet temperature (TR4),int16,C,false,sensor.boiler_evaporator_inlet_temperature_(TR4),sensor.boiler_hptr4,5,0,1/10,164,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr5,compressor inlet temperature (TR5),int16,C,false,sensor.boiler_compressor_inlet_temperature_(TR5),sensor.boiler_hptr5,5,0,1/10,165,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr6,compressor outlet temperature (TR6),int16,C,false,sensor.boiler_compressor_outlet_temperature_(TR6),sensor.boiler_hptr6,5,0,1/10,166,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr7,refrigerant temperature gas side (condenser input) (TR7),int16,C,false,sensor.boiler_refrigerant_temperature_gas_side_(condenser_input)_(TR7),sensor.boiler_hptr7,5,0,1/10,167,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptl2,air inlet temperature (TL2),int16,C,false,sensor.boiler_air_inlet_temperature_(TL2),sensor.boiler_hptl2,5,0,1/10,168,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hppl1,low pressure side temperature (PL1),int16,C,false,sensor.boiler_low_pressure_side_temperature_(PL1),sensor.boiler_hppl1,5,0,1/10,169,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpph1,high pressure side temperature (PH1),int16,C,false,sensor.boiler_high_pressure_side_temperature_(PH1),sensor.boiler_hpph1,5,0,1/10,170,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpta4,drain pan temp (TA4),int16,C,false,sensor.boiler_drain_pan_temp_(TA4),sensor.boiler_hpta4,5,0,1/10,171,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptw1,reservoir temp (TW1),int16,C,false,sensor.boiler_reservoir_temp_(TW1),sensor.boiler_hptw1,5,0,1/10,172,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,poolsettemp,pool set temperature,uint8 (>=0<=0),C,true,number.boiler_pool_set_temperature,number.boiler_poolsettemp,5,0,1/2,173,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin1,input 1 state,boolean, ,false,binary_sensor.boiler_input_1_state,binary_sensor.boiler_hpin1,5,0,1,174,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin1opt,input 1 options,string (>=0<=0), ,true,sensor.boiler_input_1_options,sensor.boiler_hpin1opt,5,0,1,175,8 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin2,input 2 state,boolean, ,false,binary_sensor.boiler_input_2_state,binary_sensor.boiler_hpin2,5,0,1,183,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin2opt,input 2 options,string (>=0<=0), ,true,sensor.boiler_input_2_options,sensor.boiler_hpin2opt,5,0,1,184,8 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin3,input 3 state,boolean, ,false,binary_sensor.boiler_input_3_state,binary_sensor.boiler_hpin3,5,0,1,192,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin3opt,input 3 options,string (>=0<=0), ,true,sensor.boiler_input_3_options,sensor.boiler_hpin3opt,5,0,1,193,8 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin4,input 4 state,boolean, ,false,binary_sensor.boiler_input_4_state,binary_sensor.boiler_hpin4,5,0,1,201,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin4opt,input 4 options,string (>=0<=0), ,true,sensor.boiler_input_4_options,sensor.boiler_hpin4opt,5,0,1,202,8 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,maxheatcomp,heat limit compressor,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,210,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,maxheatheat,heat limit heating,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,211,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgsuppcooling,total energy supplied cooling,uint24,kWh,false,sensor.boiler_total_energy_supplied_cooling,sensor.boiler_nrgsuppcooling,5,0,1,142,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,nrgsupppool,total energy supplied pool,uint24,kWh,false,sensor.boiler_total_energy_supplied_pool,sensor.boiler_nrgsupppool,5,0,1,144,2 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hppower,compressor power output,uint16,kW,false,sensor.boiler_compressor_power_output,sensor.boiler_hppower,5,0,1/10,146,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpmaxpower,compressor max power,uint8 (>=0<=0),%,true,number.boiler_compressor_max_power,number.boiler_hpmaxpower,5,0,1,147,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pvmaxcomp,pv compressor max power,uint8 (>=0<=0),kW,true,number.boiler_pv_compressor_max_power,number.boiler_pvmaxcomp,5,0,1/10,148,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,powerreduction,power reduction,uint8 (>=30<=60),%,true,number.boiler_power_reduction,number.boiler_powerreduction,5,0,10,149,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpsetdiffpress,set differential pressure,uint8 (>=150<=750),mbar,true,number.boiler_set_differential_pressure,number.boiler_hpsetdiffpress,5,0,50,150,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpcompon,hp compressor,boolean, ,false,binary_sensor.boiler_hp_compressor,binary_sensor.boiler_hpcompon,5,0,1,151,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpactivity,compressor activity,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_compressor_activity,sensor.boiler_hpactivity,5,0,1,152,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpbrinepumpspd,brine pump speed,uint8,%,false,sensor.boiler_brine_pump_speed,sensor.boiler_hpbrinepumpspd,5,0,1,153,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpswitchvalve,switch valve,boolean, ,false,binary_sensor.boiler_switch_valve,binary_sensor.boiler_hpswitchvalve,5,0,1,154,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpcompspd,compressor speed,uint8,%,false,sensor.boiler_compressor_speed,sensor.boiler_hpcompspd,5,0,1,155,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptargetspd,compressor target speed,uint8,%,false,sensor.boiler_compressor_target_speed,sensor.boiler_hptargetspd,5,0,1,156,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpcircspd,circulation pump speed,uint8,%,false,sensor.boiler_circulation_pump_speed,sensor.boiler_hpcircspd,5,0,1,157,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,recvalve,receiver valve VR0,uint8,%,false,sensor.boiler_receiver_valve_VR0,sensor.boiler_recvalve,5,0,1,158,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,expvalve,expansion valve VR1,uint8,%,false,sensor.boiler_expansion_valve_VR1,sensor.boiler_expvalve,5,0,1,159,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpbrinein,brine in/evaporator,int16,C,false,sensor.boiler_brine_in/evaporator,sensor.boiler_hpbrinein,5,0,1/10,160,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpbrineout,brine out/condenser,int16,C,false,sensor.boiler_brine_out/condenser,sensor.boiler_hpbrineout,5,0,1/10,161,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptc0,heat carrier return (TC0),int16,C,false,sensor.boiler_heat_carrier_return_(TC0),sensor.boiler_hptc0,5,0,1/10,162,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptc1,heat carrier forward (TC1),int16,C,false,sensor.boiler_heat_carrier_forward_(TC1),sensor.boiler_hptc1,5,0,1/10,163,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptc3,condenser temperature (TC3),int16,C,false,sensor.boiler_condenser_temperature_(TC3),sensor.boiler_hptc3,5,0,1/10,164,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr1,compressor temperature (TR1),int16,C,false,sensor.boiler_compressor_temperature_(TR1),sensor.boiler_hptr1,5,0,1/10,165,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr3,refrigerant temperature liquid side (condenser output) (TR3),int16,C,false,sensor.boiler_refrigerant_temperature_liquid_side_(condenser_output)_(TR3),sensor.boiler_hptr3,5,0,1/10,166,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr4,evaporator inlet temperature (TR4),int16,C,false,sensor.boiler_evaporator_inlet_temperature_(TR4),sensor.boiler_hptr4,5,0,1/10,167,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr5,compressor inlet temperature (TR5),int16,C,false,sensor.boiler_compressor_inlet_temperature_(TR5),sensor.boiler_hptr5,5,0,1/10,168,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr6,compressor outlet temperature (TR6),int16,C,false,sensor.boiler_compressor_outlet_temperature_(TR6),sensor.boiler_hptr6,5,0,1/10,169,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptr7,refrigerant temperature gas side (condenser input) (TR7),int16,C,false,sensor.boiler_refrigerant_temperature_gas_side_(condenser_input)_(TR7),sensor.boiler_hptr7,5,0,1/10,170,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptl2,air inlet temperature (TL2),int16,C,false,sensor.boiler_air_inlet_temperature_(TL2),sensor.boiler_hptl2,5,0,1/10,171,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hppl1,low pressure side temperature (PL1),int16,C,false,sensor.boiler_low_pressure_side_temperature_(PL1),sensor.boiler_hppl1,5,0,1/10,172,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpph1,high pressure side temperature (PH1),int16,C,false,sensor.boiler_high_pressure_side_temperature_(PH1),sensor.boiler_hpph1,5,0,1/10,173,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpta4,drain pan temp (TA4),int16,C,false,sensor.boiler_drain_pan_temp_(TA4),sensor.boiler_hpta4,5,0,1/10,174,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hptw1,reservoir temp (TW1),int16,C,false,sensor.boiler_reservoir_temp_(TW1),sensor.boiler_hptw1,5,0,1/10,175,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,poolsettemp,pool set temperature,uint8 (>=0<=0),C,true,number.boiler_pool_set_temperature,number.boiler_poolsettemp,5,0,1/2,176,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hp4way,4-way valve (VR4),boolean, ,false,binary_sensor.boiler_4-way_valve_(VR4),binary_sensor.boiler_hp4way,5,0,1,177,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin1,input 1 state,boolean, ,false,binary_sensor.boiler_input_1_state,binary_sensor.boiler_hpin1,5,0,1,178,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin1opt,input 1 options,string (>=0<=0), ,true,sensor.boiler_input_1_options,sensor.boiler_hpin1opt,5,0,1,179,8 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin2,input 2 state,boolean, ,false,binary_sensor.boiler_input_2_state,binary_sensor.boiler_hpin2,5,0,1,187,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin2opt,input 2 options,string (>=0<=0), ,true,sensor.boiler_input_2_options,sensor.boiler_hpin2opt,5,0,1,188,8 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin3,input 3 state,boolean, ,false,binary_sensor.boiler_input_3_state,binary_sensor.boiler_hpin3,5,0,1,196,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin3opt,input 3 options,string (>=0<=0), ,true,sensor.boiler_input_3_options,sensor.boiler_hpin3opt,5,0,1,197,8 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin4,input 4 state,boolean, ,false,binary_sensor.boiler_input_4_state,binary_sensor.boiler_hpin4,5,0,1,205,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpin4opt,input 4 options,string (>=0<=0), ,true,sensor.boiler_input_4_options,sensor.boiler_hpin4opt,5,0,1,206,8 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,maxheatcomp,heat limit compressor,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,214,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,maxheatheat,heat limit heating,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,215,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.maxheat,heat limit,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_dhw_heat_limit,select.boiler_dhw_maxheat,5,9,1,14,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheatersource,aux heater source,enum [not installed\|electric heater\|exclusive\|parallel\|hybrid] (>=0<=0), ,true,select.boiler_aux_heater_source,select.boiler_auxheatersource,5,0,1,212,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pvcooling,cooling only with PV,boolean (>=0<=0), ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,213,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheateronly,aux heater only,boolean (>=0<=0), ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,214,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheateroff,disable aux heater,boolean (>=0<=0), ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,215,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheaterstatus,aux heater status,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_aux_heater_status,sensor.boiler_auxheaterstatus,5,0,1,216,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheaterlevel,aux heater level,uint8,%,false,sensor.boiler_aux_heater_level,sensor.boiler_auxheaterlevel,5,0,1,217,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheaterdelay,aux heater on delay,uint16 (>=10<=1000),K*min,true,number.boiler_aux_heater_on_delay,number.boiler_auxheaterdelay,5,0,10,218,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxmaxlimit,aux heater max limit,uint8 (>=0<=10),K,true,number.boiler_aux_heater_max_limit,number.boiler_auxmaxlimit,5,0,1/10,219,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxlimitstart,aux heater limit start,uint8 (>=0<=10),K,true,number.boiler_aux_heater_limit_start,number.boiler_auxlimitstart,5,0,1/10,220,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheatrmode,aux heater mode,enum [eco\|comfort] (>=0<=0), ,true,select.boiler_aux_heater_mode,select.boiler_auxheatrmode,5,0,1,221,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hphystheat,on/off hyst heat,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_heat,number.boiler_hphystheat,5,0,5,222,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hphystcool,on/off hyst cool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_cool,number.boiler_hphystcool,5,0,5,223,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hphystpool,on/off hyst pool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_pool,number.boiler_hphystpool,5,0,5,224,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,silentmode,silent mode,enum [off\|auto\|on] (>=0<=0), ,true,select.boiler_silent_mode,select.boiler_silentmode,5,0,1,225,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,silentfrom,silent mode from,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_from,number.boiler_silentfrom,5,0,15,226,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,silentto,silent mode to,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_to,number.boiler_silentto,5,0,15,227,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,mintempsilent,min outside temp for silent mode,int8 (>=0<=0),C,true,number.boiler_min_outside_temp_for_silent_mode,number.boiler_mintempsilent,5,0,1,228,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,tempparmode,outside temp parallel mode,int8 (>=0<=0),C,true,number.boiler_outside_temp_parallel_mode,number.boiler_tempparmode,5,0,1,229,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheatmix,aux heater mixing valve,int8,%,false,sensor.boiler_aux_heater_mixing_valve,sensor.boiler_auxheatmix,5,0,1,230,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,tempdiffheat,temp diff TC3/TC0 heat,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_heat,number.boiler_tempdiffheat,5,0,1/10,231,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,tempdiffcool,temp diff TC3/TC0 cool,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_cool,number.boiler_tempdiffcool,5,0,1/10,232,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,vpcooling,valve/pump cooling,boolean (>=0<=0), ,true,switch.boiler_valve/pump_cooling,switch.boiler_vpcooling,5,0,1,233,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,heatcable,heating cable,boolean (>=0<=0), ,true,switch.boiler_heating_cable,switch.boiler_heatcable,5,0,1,234,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,vc0valve,VC0 valve,boolean (>=0<=0), ,true,switch.boiler_VC0_valve,switch.boiler_vc0valve,5,0,1,235,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,primepump,primary heatpump,boolean (>=0<=0), ,true,switch.boiler_primary_heatpump,switch.boiler_primepump,5,0,1,236,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,primepumpmod,primary heatpump modulation,uint8 (>=0<=0),%,true,number.boiler_primary_heatpump_modulation,number.boiler_primepumpmod,5,0,1,237,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hp3way,3-way valve,boolean (>=0<=0), ,true,switch.boiler_3-way_valve,switch.boiler_hp3way,5,0,1,238,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,elheatstep1,el. heater step 1,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_1,switch.boiler_elheatstep1,5,0,1,239,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,elheatstep2,el. heater step 2,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_2,switch.boiler_elheatstep2,5,0,1,240,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,elheatstep3,el. heater step 3,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_3,switch.boiler_elheatstep3,5,0,1,241,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpea0,condensate reservoir heating (EA0),boolean, ,false,binary_sensor.boiler_condensate_reservoir_heating_(EA0),binary_sensor.boiler_hpea0,5,0,1,242,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hppumpmode,primary heatpump mode,enum [auto\|continuous] (>=0<=0), ,true,select.boiler_primary_heatpump_mode,select.boiler_hppumpmode,5,0,1,243,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,fan,fan,uint8 (>=20<=100),%,true,number.boiler_fan,number.boiler_fan,5,0,1,244,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,fanspd,fan speed,uint8,%,false,sensor.boiler_fan_speed,sensor.boiler_fanspd,5,0,1,245,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,shutdown,shutdown,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_shutdown,sensor.boiler_shutdown,5,0,1,246,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpcurrpower,compressor current power,uint16,W,false,sensor.boiler_compressor_current_power,sensor.boiler_hpcurrpower,5,0,1,247,1 -"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hppowerlimit,power limit,uint16 (>=0<=0),W,true,number.boiler_power_limit,number.boiler_hppowerlimit,5,0,1,248,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheatersource,aux heater source,enum [not installed\|electric heater\|exclusive\|parallel\|hybrid] (>=0<=0), ,true,select.boiler_aux_heater_source,select.boiler_auxheatersource,5,0,1,216,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,pvcooling,cooling only with PV,boolean (>=0<=0), ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,217,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheateronly,aux heater only,boolean (>=0<=0), ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,218,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheateroff,disable aux heater,boolean (>=0<=0), ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,219,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheaterstatus,aux heater status,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_aux_heater_status,sensor.boiler_auxheaterstatus,5,0,1,220,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheaterlevel,aux heater level,uint8,%,false,sensor.boiler_aux_heater_level,sensor.boiler_auxheaterlevel,5,0,1,221,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheaterdelay,aux heater on delay,uint16 (>=10<=1000),K*min,true,number.boiler_aux_heater_on_delay,number.boiler_auxheaterdelay,5,0,10,222,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxmaxlimit,aux heater max limit,uint8 (>=0<=10),K,true,number.boiler_aux_heater_max_limit,number.boiler_auxmaxlimit,5,0,1/10,223,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxlimitstart,aux heater limit start,uint8 (>=0<=10),K,true,number.boiler_aux_heater_limit_start,number.boiler_auxlimitstart,5,0,1/10,224,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheatrmode,aux heater mode,enum [eco\|comfort] (>=0<=0), ,true,select.boiler_aux_heater_mode,select.boiler_auxheatrmode,5,0,1,225,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hphystheat,on/off hyst heat,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_heat,number.boiler_hphystheat,5,0,5,226,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hphystcool,on/off hyst cool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_cool,number.boiler_hphystcool,5,0,5,227,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hphystpool,on/off hyst pool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_pool,number.boiler_hphystpool,5,0,5,228,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,silentmode,silent mode,enum [off\|auto\|on] (>=0<=0), ,true,select.boiler_silent_mode,select.boiler_silentmode,5,0,1,229,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,silentfrom,silent mode from,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_from,number.boiler_silentfrom,5,0,15,230,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,silentto,silent mode to,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_to,number.boiler_silentto,5,0,15,231,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,mintempsilent,min outside temp for silent mode,int8 (>=0<=0),C,true,number.boiler_min_outside_temp_for_silent_mode,number.boiler_mintempsilent,5,0,1,232,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,tempparmode,outside temp parallel mode,int8 (>=0<=0),C,true,number.boiler_outside_temp_parallel_mode,number.boiler_tempparmode,5,0,1,233,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,auxheatmix,aux heater mixing valve,int8,%,false,sensor.boiler_aux_heater_mixing_valve,sensor.boiler_auxheatmix,5,0,1,234,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,tempdiffheat,temp diff TC3/TC0 heat,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_heat,number.boiler_tempdiffheat,5,0,1/10,235,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,tempdiffcool,temp diff TC3/TC0 cool,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_cool,number.boiler_tempdiffcool,5,0,1/10,236,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,vpcooling,valve/pump cooling,boolean (>=0<=0), ,true,switch.boiler_valve/pump_cooling,switch.boiler_vpcooling,5,0,1,237,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,heatcable,heating cable,boolean (>=0<=0), ,true,switch.boiler_heating_cable,switch.boiler_heatcable,5,0,1,238,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,vc0valve,VC0 valve,boolean (>=0<=0), ,true,switch.boiler_VC0_valve,switch.boiler_vc0valve,5,0,1,239,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,primepump,primary heatpump,boolean (>=0<=0), ,true,switch.boiler_primary_heatpump,switch.boiler_primepump,5,0,1,240,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,primepumpmod,primary heatpump modulation,uint8 (>=0<=0),%,true,number.boiler_primary_heatpump_modulation,number.boiler_primepumpmod,5,0,1,241,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hp3way,3-way valve,boolean (>=0<=0), ,true,switch.boiler_3-way_valve,switch.boiler_hp3way,5,0,1,242,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,elheatstep1,el. heater step 1,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_1,switch.boiler_elheatstep1,5,0,1,243,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,elheatstep2,el. heater step 2,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_2,switch.boiler_elheatstep2,5,0,1,244,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,elheatstep3,el. heater step 3,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_3,switch.boiler_elheatstep3,5,0,1,245,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpea0,condensate reservoir heating (EA0),boolean, ,false,binary_sensor.boiler_condensate_reservoir_heating_(EA0),binary_sensor.boiler_hpea0,5,0,1,246,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hppumpmode,primary heatpump mode,enum [auto\|continuous] (>=0<=0), ,true,select.boiler_primary_heatpump_mode,select.boiler_hppumpmode,5,0,1,247,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,fan,fan,uint8 (>=20<=100),%,true,number.boiler_fan,number.boiler_fan,5,0,1,248,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,fanspd,fan speed,uint8,%,false,sensor.boiler_fan_speed,sensor.boiler_fanspd,5,0,1,249,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,shutdown,shutdown,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_shutdown,sensor.boiler_shutdown,5,0,1,250,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hpcurrpower,compressor current power,uint16,W,false,sensor.boiler_compressor_current_power,sensor.boiler_hpcurrpower,5,0,1,251,1 +"Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,hppowerlimit,power limit,uint16 (>=0<=0),W,true,number.boiler_power_limit,number.boiler_hppowerlimit,5,0,1,252,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.alternatingop,alternating operation,boolean (>=0<=0), ,true,switch.boiler_dhw_alternating_operation,switch.boiler_dhw_alternatingop,5,9,1,15,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.altopprioheat,prioritise heating during dhw,uint8 (>=20<=120),minutes,true,number.boiler_dhw_prioritise_heating_during_dhw,number.boiler_dhw_altopprioheat,5,9,1,16,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.altopprio,prioritise dhw during heating,uint8 (>=30<=120),minutes,true,number.boiler_dhw_prioritise_dhw_during_heating,number.boiler_dhw_altopprio,5,9,1,17,1 @@ -2767,7 +2815,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Enviline, Compress 6000AW, Hybrid 3000-7000iAW, SupraEco/Geo 5xx, WLW196i/WSW196i",boiler,172,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Geo 5xx",boiler,173,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Geo 5xx",boiler,173,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Geo 5xx",boiler,173,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Geo 5xx",boiler,173,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Geo 5xx",boiler,173,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -2811,122 +2859,126 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Geo 5xx",boiler,173,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Geo 5xx",boiler,173,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Geo 5xx",boiler,173,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Geo 5xx",boiler,173,mandefrost,manual defrost,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_manual_defrost,sensor.boiler_mandefrost,5,0,1,84,1 -"Geo 5xx",boiler,173,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 +"Geo 5xx",boiler,173,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Geo 5xx",boiler,173,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Geo 5xx",boiler,173,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Geo 5xx",boiler,173,mandefrost,manual defrost,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_manual_defrost,sensor.boiler_mandefrost,5,0,1,87,1 +"Geo 5xx",boiler,173,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 "Geo 5xx",boiler,173,dhw.nrg,energy,uint24,kWh,false,sensor.boiler_dhw_energy,sensor.boiler_dhw_nrg,5,9,1/100,0,2 -"Geo 5xx",boiler,173,nrgheat,energy heating,uint24,kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,87,2 -"Geo 5xx",boiler,173,nrgcool,energy cooling,uint24,kWh,false,sensor.boiler_energy_cooling,sensor.boiler_nrgcool,5,0,1/100,89,2 -"Geo 5xx",boiler,173,metertotal,meter total,uint24,kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,91,2 -"Geo 5xx",boiler,173,metercomp,meter compressor,uint24,kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,93,2 -"Geo 5xx",boiler,173,metereheat,meter e-heater,uint24,kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,95,2 -"Geo 5xx",boiler,173,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,97,2 -"Geo 5xx",boiler,173,metercool,meter cooling,uint24,kWh,false,sensor.boiler_meter_cooling,sensor.boiler_metercool,5,0,1/100,99,2 +"Geo 5xx",boiler,173,nrgheat,energy heating,uint24,kWh,false,sensor.boiler_energy_heating,sensor.boiler_nrgheat,5,0,1/100,90,2 +"Geo 5xx",boiler,173,nrgcool,energy cooling,uint24,kWh,false,sensor.boiler_energy_cooling,sensor.boiler_nrgcool,5,0,1/100,92,2 +"Geo 5xx",boiler,173,metertotal,meter total,uint24,kWh,false,sensor.boiler_meter_total,sensor.boiler_metertotal,5,0,1/100,94,2 +"Geo 5xx",boiler,173,metercomp,meter compressor,uint24,kWh,false,sensor.boiler_meter_compressor,sensor.boiler_metercomp,5,0,1/100,96,2 +"Geo 5xx",boiler,173,metereheat,meter e-heater,uint24,kWh,false,sensor.boiler_meter_e-heater,sensor.boiler_metereheat,5,0,1/100,98,2 +"Geo 5xx",boiler,173,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/100,100,2 +"Geo 5xx",boiler,173,metercool,meter cooling,uint24,kWh,false,sensor.boiler_meter_cooling,sensor.boiler_metercool,5,0,1/100,102,2 "Geo 5xx",boiler,173,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/100,2,2 -"Geo 5xx",boiler,173,uptimetotal,heatpump total uptime,time,minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,101,2 -"Geo 5xx",boiler,173,uptimecontrol,total operating time heat,time,minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,103,2 -"Geo 5xx",boiler,173,uptimecompheating,operating time compressor heating,time,minutes,false,sensor.boiler_operating_time_compressor_heating,sensor.boiler_uptimecompheating,5,0,1/60,105,2 -"Geo 5xx",boiler,173,uptimecompcooling,operating time compressor cooling,time,minutes,false,sensor.boiler_operating_time_compressor_cooling,sensor.boiler_uptimecompcooling,5,0,1/60,107,2 +"Geo 5xx",boiler,173,uptimetotal,heatpump total uptime,time,minutes,false,sensor.boiler_heatpump_total_uptime,sensor.boiler_uptimetotal,5,0,1/60,104,2 +"Geo 5xx",boiler,173,uptimecontrol,total operating time heat,time,minutes,false,sensor.boiler_total_operating_time_heat,sensor.boiler_uptimecontrol,5,0,1/60,106,2 +"Geo 5xx",boiler,173,uptimecompheating,operating time compressor heating,time,minutes,false,sensor.boiler_operating_time_compressor_heating,sensor.boiler_uptimecompheating,5,0,1/60,108,2 +"Geo 5xx",boiler,173,uptimecompcooling,operating time compressor cooling,time,minutes,false,sensor.boiler_operating_time_compressor_cooling,sensor.boiler_uptimecompcooling,5,0,1/60,110,2 "Geo 5xx",boiler,173,dhw.uptimecomp,operating time compressor,time,minutes,false,sensor.boiler_dhw_operating_time_compressor,sensor.boiler_dhw_uptimecomp,5,9,1/60,4,2 -"Geo 5xx",boiler,173,uptimecomppool,operating time compressor pool,time,minutes,false,sensor.boiler_operating_time_compressor_pool,sensor.boiler_uptimecomppool,5,0,1/60,109,2 -"Geo 5xx",boiler,173,totalcompstarts,total compressor control starts,uint24, ,false,sensor.boiler_total_compressor_control_starts,sensor.boiler_totalcompstarts,5,0,1,111,2 -"Geo 5xx",boiler,173,heatingstarts,heating control starts,uint24, ,false,sensor.boiler_heating_control_starts,sensor.boiler_heatingstarts,5,0,1,113,2 -"Geo 5xx",boiler,173,coolingstarts,cooling control starts,uint24, ,false,sensor.boiler_cooling_control_starts,sensor.boiler_coolingstarts,5,0,1,115,2 +"Geo 5xx",boiler,173,uptimecomppool,operating time compressor pool,time,minutes,false,sensor.boiler_operating_time_compressor_pool,sensor.boiler_uptimecomppool,5,0,1/60,112,2 +"Geo 5xx",boiler,173,totalcompstarts,total compressor control starts,uint24, ,false,sensor.boiler_total_compressor_control_starts,sensor.boiler_totalcompstarts,5,0,1,114,2 +"Geo 5xx",boiler,173,heatingstarts,heating control starts,uint24, ,false,sensor.boiler_heating_control_starts,sensor.boiler_heatingstarts,5,0,1,116,2 +"Geo 5xx",boiler,173,coolingstarts,cooling control starts,uint24, ,false,sensor.boiler_cooling_control_starts,sensor.boiler_coolingstarts,5,0,1,118,2 "Geo 5xx",boiler,173,dhw.startshp,starts hp,uint24, ,false,sensor.boiler_dhw_starts_hp,sensor.boiler_dhw_startshp,5,9,1,6,2 -"Geo 5xx",boiler,173,poolstarts,pool control starts,uint24, ,false,sensor.boiler_pool_control_starts,sensor.boiler_poolstarts,5,0,1,117,2 -"Geo 5xx",boiler,173,nrgconstotal,total energy consumption,uint24,kWh,false,sensor.boiler_total_energy_consumption,sensor.boiler_nrgconstotal,5,0,1,119,2 -"Geo 5xx",boiler,173,nrgconscomptotal,total energy consumption compressor,uint24,kWh,false,sensor.boiler_total_energy_consumption_compressor,sensor.boiler_nrgconscomptotal,5,0,1,121,2 -"Geo 5xx",boiler,173,nrgconscompheating,energy consumption compressor heating,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_heating,sensor.boiler_nrgconscompheating,5,0,1,123,2 +"Geo 5xx",boiler,173,poolstarts,pool control starts,uint24, ,false,sensor.boiler_pool_control_starts,sensor.boiler_poolstarts,5,0,1,120,2 +"Geo 5xx",boiler,173,nrgconstotal,total energy consumption,uint24,kWh,false,sensor.boiler_total_energy_consumption,sensor.boiler_nrgconstotal,5,0,1,122,2 +"Geo 5xx",boiler,173,nrgconscomptotal,total energy consumption compressor,uint24,kWh,false,sensor.boiler_total_energy_consumption_compressor,sensor.boiler_nrgconscomptotal,5,0,1,124,2 +"Geo 5xx",boiler,173,nrgconscompheating,energy consumption compressor heating,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_heating,sensor.boiler_nrgconscompheating,5,0,1,126,2 "Geo 5xx",boiler,173,dhw.nrgconscomp,energy consumption compressor,uint24,kWh,false,sensor.boiler_dhw_energy_consumption_compressor,sensor.boiler_dhw_nrgconscomp,5,9,1,8,2 -"Geo 5xx",boiler,173,nrgconscompcooling,energy consumption compressor cooling,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_cooling,sensor.boiler_nrgconscompcooling,5,0,1,125,2 -"Geo 5xx",boiler,173,nrgconscomppool,energy consumption compressor pool,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_pool,sensor.boiler_nrgconscomppool,5,0,1,127,2 -"Geo 5xx",boiler,173,auxelecheatnrgconstotal,total aux elec. heater energy consumption,uint24,kWh,false,sensor.boiler_total_aux_elec._heater_energy_consumption,sensor.boiler_auxelecheatnrgconstotal,5,0,1,129,2 -"Geo 5xx",boiler,173,auxelecheatnrgconsheating,aux elec. heater energy consumption heating,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_heating,sensor.boiler_auxelecheatnrgconsheating,5,0,1,131,2 +"Geo 5xx",boiler,173,nrgconscompcooling,energy consumption compressor cooling,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_cooling,sensor.boiler_nrgconscompcooling,5,0,1,128,2 +"Geo 5xx",boiler,173,nrgconscomppool,energy consumption compressor pool,uint24,kWh,false,sensor.boiler_energy_consumption_compressor_pool,sensor.boiler_nrgconscomppool,5,0,1,130,2 +"Geo 5xx",boiler,173,auxelecheatnrgconstotal,total aux elec. heater energy consumption,uint24,kWh,false,sensor.boiler_total_aux_elec._heater_energy_consumption,sensor.boiler_auxelecheatnrgconstotal,5,0,1,132,2 +"Geo 5xx",boiler,173,auxelecheatnrgconsheating,aux elec. heater energy consumption heating,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_heating,sensor.boiler_auxelecheatnrgconsheating,5,0,1,134,2 "Geo 5xx",boiler,173,dhw.auxelecheatnrgcons,aux elec. heater energy consumption,uint24,kWh,false,sensor.boiler_dhw_aux_elec._heater_energy_consumption,sensor.boiler_dhw_auxelecheatnrgcons,5,9,1,10,2 -"Geo 5xx",boiler,173,auxelecheatnrgconspool,aux elec. heater energy consumption pool,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_pool,sensor.boiler_auxelecheatnrgconspool,5,0,1,133,2 -"Geo 5xx",boiler,173,nrgsupptotal,total energy supplied,uint24,kWh,false,sensor.boiler_total_energy_supplied,sensor.boiler_nrgsupptotal,5,0,1,135,2 -"Geo 5xx",boiler,173,nrgsuppheating,total energy supplied heating,uint24,kWh,false,sensor.boiler_total_energy_supplied_heating,sensor.boiler_nrgsuppheating,5,0,1,137,2 +"Geo 5xx",boiler,173,auxelecheatnrgconspool,aux elec. heater energy consumption pool,uint24,kWh,false,sensor.boiler_aux_elec._heater_energy_consumption_pool,sensor.boiler_auxelecheatnrgconspool,5,0,1,136,2 +"Geo 5xx",boiler,173,nrgsupptotal,total energy supplied,uint24,kWh,false,sensor.boiler_total_energy_supplied,sensor.boiler_nrgsupptotal,5,0,1,138,2 +"Geo 5xx",boiler,173,nrgsuppheating,total energy supplied heating,uint24,kWh,false,sensor.boiler_total_energy_supplied_heating,sensor.boiler_nrgsuppheating,5,0,1,140,2 "Geo 5xx",boiler,173,dhw.nrgsupp,total energy warm supplied,uint24,kWh,false,sensor.boiler_dhw_total_energy_warm_supplied,sensor.boiler_dhw_nrgsupp,5,9,1,12,2 -"Geo 5xx",boiler,173,nrgsuppcooling,total energy supplied cooling,uint24,kWh,false,sensor.boiler_total_energy_supplied_cooling,sensor.boiler_nrgsuppcooling,5,0,1,139,2 -"Geo 5xx",boiler,173,nrgsupppool,total energy supplied pool,uint24,kWh,false,sensor.boiler_total_energy_supplied_pool,sensor.boiler_nrgsupppool,5,0,1,141,2 -"Geo 5xx",boiler,173,hppower,compressor power output,uint16,kW,false,sensor.boiler_compressor_power_output,sensor.boiler_hppower,5,0,1/10,143,1 -"Geo 5xx",boiler,173,hpmaxpower,compressor max power,uint8 (>=0<=0),%,true,number.boiler_compressor_max_power,number.boiler_hpmaxpower,5,0,1,144,1 -"Geo 5xx",boiler,173,pvmaxcomp,pv compressor max power,uint8 (>=0<=0),kW,true,number.boiler_pv_compressor_max_power,number.boiler_pvmaxcomp,5,0,1/10,145,1 -"Geo 5xx",boiler,173,powerreduction,power reduction,uint8 (>=30<=60),%,true,number.boiler_power_reduction,number.boiler_powerreduction,5,0,10,146,1 -"Geo 5xx",boiler,173,hpsetdiffpress,set differential pressure,uint8 (>=150<=750),mbar,true,number.boiler_set_differential_pressure,number.boiler_hpsetdiffpress,5,0,50,147,1 -"Geo 5xx",boiler,173,hpcompon,hp compressor,boolean, ,false,binary_sensor.boiler_hp_compressor,binary_sensor.boiler_hpcompon,5,0,1,148,1 -"Geo 5xx",boiler,173,hpactivity,compressor activity,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_compressor_activity,sensor.boiler_hpactivity,5,0,1,149,1 -"Geo 5xx",boiler,173,hpbrinepumpspd,brine pump speed,uint8,%,false,sensor.boiler_brine_pump_speed,sensor.boiler_hpbrinepumpspd,5,0,1,150,1 -"Geo 5xx",boiler,173,hpswitchvalve,switch valve,boolean, ,false,binary_sensor.boiler_switch_valve,binary_sensor.boiler_hpswitchvalve,5,0,1,151,1 -"Geo 5xx",boiler,173,hpcompspd,compressor speed,uint8,%,false,sensor.boiler_compressor_speed,sensor.boiler_hpcompspd,5,0,1,152,1 -"Geo 5xx",boiler,173,hptargetspd,compressor target speed,uint8,%,false,sensor.boiler_compressor_target_speed,sensor.boiler_hptargetspd,5,0,1,153,1 -"Geo 5xx",boiler,173,hpcircspd,circulation pump speed,uint8,%,false,sensor.boiler_circulation_pump_speed,sensor.boiler_hpcircspd,5,0,1,154,1 -"Geo 5xx",boiler,173,recvalve,receiver valve VR0,uint8,%,false,sensor.boiler_receiver_valve_VR0,sensor.boiler_recvalve,5,0,1,155,1 -"Geo 5xx",boiler,173,expvalve,expansion valve VR1,uint8,%,false,sensor.boiler_expansion_valve_VR1,sensor.boiler_expvalve,5,0,1,156,1 -"Geo 5xx",boiler,173,hpbrinein,brine in/evaporator,int16,C,false,sensor.boiler_brine_in/evaporator,sensor.boiler_hpbrinein,5,0,1/10,157,1 -"Geo 5xx",boiler,173,hpbrineout,brine out/condenser,int16,C,false,sensor.boiler_brine_out/condenser,sensor.boiler_hpbrineout,5,0,1/10,158,1 -"Geo 5xx",boiler,173,hptc0,heat carrier return (TC0),int16,C,false,sensor.boiler_heat_carrier_return_(TC0),sensor.boiler_hptc0,5,0,1/10,159,1 -"Geo 5xx",boiler,173,hptc1,heat carrier forward (TC1),int16,C,false,sensor.boiler_heat_carrier_forward_(TC1),sensor.boiler_hptc1,5,0,1/10,160,1 -"Geo 5xx",boiler,173,hptc3,condenser temperature (TC3),int16,C,false,sensor.boiler_condenser_temperature_(TC3),sensor.boiler_hptc3,5,0,1/10,161,1 -"Geo 5xx",boiler,173,hptr1,compressor temperature (TR1),int16,C,false,sensor.boiler_compressor_temperature_(TR1),sensor.boiler_hptr1,5,0,1/10,162,1 -"Geo 5xx",boiler,173,hptr3,refrigerant temperature liquid side (condenser output) (TR3),int16,C,false,sensor.boiler_refrigerant_temperature_liquid_side_(condenser_output)_(TR3),sensor.boiler_hptr3,5,0,1/10,163,1 -"Geo 5xx",boiler,173,hptr4,evaporator inlet temperature (TR4),int16,C,false,sensor.boiler_evaporator_inlet_temperature_(TR4),sensor.boiler_hptr4,5,0,1/10,164,1 -"Geo 5xx",boiler,173,hptr5,compressor inlet temperature (TR5),int16,C,false,sensor.boiler_compressor_inlet_temperature_(TR5),sensor.boiler_hptr5,5,0,1/10,165,1 -"Geo 5xx",boiler,173,hptr6,compressor outlet temperature (TR6),int16,C,false,sensor.boiler_compressor_outlet_temperature_(TR6),sensor.boiler_hptr6,5,0,1/10,166,1 -"Geo 5xx",boiler,173,hptr7,refrigerant temperature gas side (condenser input) (TR7),int16,C,false,sensor.boiler_refrigerant_temperature_gas_side_(condenser_input)_(TR7),sensor.boiler_hptr7,5,0,1/10,167,1 -"Geo 5xx",boiler,173,hptl2,air inlet temperature (TL2),int16,C,false,sensor.boiler_air_inlet_temperature_(TL2),sensor.boiler_hptl2,5,0,1/10,168,1 -"Geo 5xx",boiler,173,hppl1,low pressure side temperature (PL1),int16,C,false,sensor.boiler_low_pressure_side_temperature_(PL1),sensor.boiler_hppl1,5,0,1/10,169,1 -"Geo 5xx",boiler,173,hpph1,high pressure side temperature (PH1),int16,C,false,sensor.boiler_high_pressure_side_temperature_(PH1),sensor.boiler_hpph1,5,0,1/10,170,1 -"Geo 5xx",boiler,173,hpta4,drain pan temp (TA4),int16,C,false,sensor.boiler_drain_pan_temp_(TA4),sensor.boiler_hpta4,5,0,1/10,171,1 -"Geo 5xx",boiler,173,hptw1,reservoir temp (TW1),int16,C,false,sensor.boiler_reservoir_temp_(TW1),sensor.boiler_hptw1,5,0,1/10,172,1 -"Geo 5xx",boiler,173,poolsettemp,pool set temperature,uint8 (>=0<=0),C,true,number.boiler_pool_set_temperature,number.boiler_poolsettemp,5,0,1/2,173,1 -"Geo 5xx",boiler,173,hpin1,input 1 state,boolean, ,false,binary_sensor.boiler_input_1_state,binary_sensor.boiler_hpin1,5,0,1,174,1 -"Geo 5xx",boiler,173,hpin1opt,input 1 options,string (>=0<=0), ,true,sensor.boiler_input_1_options,sensor.boiler_hpin1opt,5,0,1,175,8 -"Geo 5xx",boiler,173,hpin2,input 2 state,boolean, ,false,binary_sensor.boiler_input_2_state,binary_sensor.boiler_hpin2,5,0,1,183,1 -"Geo 5xx",boiler,173,hpin2opt,input 2 options,string (>=0<=0), ,true,sensor.boiler_input_2_options,sensor.boiler_hpin2opt,5,0,1,184,8 -"Geo 5xx",boiler,173,hpin3,input 3 state,boolean, ,false,binary_sensor.boiler_input_3_state,binary_sensor.boiler_hpin3,5,0,1,192,1 -"Geo 5xx",boiler,173,hpin3opt,input 3 options,string (>=0<=0), ,true,sensor.boiler_input_3_options,sensor.boiler_hpin3opt,5,0,1,193,8 -"Geo 5xx",boiler,173,hpin4,input 4 state,boolean, ,false,binary_sensor.boiler_input_4_state,binary_sensor.boiler_hpin4,5,0,1,201,1 -"Geo 5xx",boiler,173,hpin4opt,input 4 options,string (>=0<=0), ,true,sensor.boiler_input_4_options,sensor.boiler_hpin4opt,5,0,1,202,8 -"Geo 5xx",boiler,173,maxheatcomp,heat limit compressor,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,210,1 -"Geo 5xx",boiler,173,maxheatheat,heat limit heating,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,211,1 +"Geo 5xx",boiler,173,nrgsuppcooling,total energy supplied cooling,uint24,kWh,false,sensor.boiler_total_energy_supplied_cooling,sensor.boiler_nrgsuppcooling,5,0,1,142,2 +"Geo 5xx",boiler,173,nrgsupppool,total energy supplied pool,uint24,kWh,false,sensor.boiler_total_energy_supplied_pool,sensor.boiler_nrgsupppool,5,0,1,144,2 +"Geo 5xx",boiler,173,hppower,compressor power output,uint16,kW,false,sensor.boiler_compressor_power_output,sensor.boiler_hppower,5,0,1/10,146,1 +"Geo 5xx",boiler,173,hpmaxpower,compressor max power,uint8 (>=0<=0),%,true,number.boiler_compressor_max_power,number.boiler_hpmaxpower,5,0,1,147,1 +"Geo 5xx",boiler,173,pvmaxcomp,pv compressor max power,uint8 (>=0<=0),kW,true,number.boiler_pv_compressor_max_power,number.boiler_pvmaxcomp,5,0,1/10,148,1 +"Geo 5xx",boiler,173,powerreduction,power reduction,uint8 (>=30<=60),%,true,number.boiler_power_reduction,number.boiler_powerreduction,5,0,10,149,1 +"Geo 5xx",boiler,173,hpsetdiffpress,set differential pressure,uint8 (>=150<=750),mbar,true,number.boiler_set_differential_pressure,number.boiler_hpsetdiffpress,5,0,50,150,1 +"Geo 5xx",boiler,173,hpcompon,hp compressor,boolean, ,false,binary_sensor.boiler_hp_compressor,binary_sensor.boiler_hpcompon,5,0,1,151,1 +"Geo 5xx",boiler,173,hpactivity,compressor activity,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_compressor_activity,sensor.boiler_hpactivity,5,0,1,152,1 +"Geo 5xx",boiler,173,hpbrinepumpspd,brine pump speed,uint8,%,false,sensor.boiler_brine_pump_speed,sensor.boiler_hpbrinepumpspd,5,0,1,153,1 +"Geo 5xx",boiler,173,hpswitchvalve,switch valve,boolean, ,false,binary_sensor.boiler_switch_valve,binary_sensor.boiler_hpswitchvalve,5,0,1,154,1 +"Geo 5xx",boiler,173,hpcompspd,compressor speed,uint8,%,false,sensor.boiler_compressor_speed,sensor.boiler_hpcompspd,5,0,1,155,1 +"Geo 5xx",boiler,173,hptargetspd,compressor target speed,uint8,%,false,sensor.boiler_compressor_target_speed,sensor.boiler_hptargetspd,5,0,1,156,1 +"Geo 5xx",boiler,173,hpcircspd,circulation pump speed,uint8,%,false,sensor.boiler_circulation_pump_speed,sensor.boiler_hpcircspd,5,0,1,157,1 +"Geo 5xx",boiler,173,recvalve,receiver valve VR0,uint8,%,false,sensor.boiler_receiver_valve_VR0,sensor.boiler_recvalve,5,0,1,158,1 +"Geo 5xx",boiler,173,expvalve,expansion valve VR1,uint8,%,false,sensor.boiler_expansion_valve_VR1,sensor.boiler_expvalve,5,0,1,159,1 +"Geo 5xx",boiler,173,hpbrinein,brine in/evaporator,int16,C,false,sensor.boiler_brine_in/evaporator,sensor.boiler_hpbrinein,5,0,1/10,160,1 +"Geo 5xx",boiler,173,hpbrineout,brine out/condenser,int16,C,false,sensor.boiler_brine_out/condenser,sensor.boiler_hpbrineout,5,0,1/10,161,1 +"Geo 5xx",boiler,173,hptc0,heat carrier return (TC0),int16,C,false,sensor.boiler_heat_carrier_return_(TC0),sensor.boiler_hptc0,5,0,1/10,162,1 +"Geo 5xx",boiler,173,hptc1,heat carrier forward (TC1),int16,C,false,sensor.boiler_heat_carrier_forward_(TC1),sensor.boiler_hptc1,5,0,1/10,163,1 +"Geo 5xx",boiler,173,hptc3,condenser temperature (TC3),int16,C,false,sensor.boiler_condenser_temperature_(TC3),sensor.boiler_hptc3,5,0,1/10,164,1 +"Geo 5xx",boiler,173,hptr1,compressor temperature (TR1),int16,C,false,sensor.boiler_compressor_temperature_(TR1),sensor.boiler_hptr1,5,0,1/10,165,1 +"Geo 5xx",boiler,173,hptr3,refrigerant temperature liquid side (condenser output) (TR3),int16,C,false,sensor.boiler_refrigerant_temperature_liquid_side_(condenser_output)_(TR3),sensor.boiler_hptr3,5,0,1/10,166,1 +"Geo 5xx",boiler,173,hptr4,evaporator inlet temperature (TR4),int16,C,false,sensor.boiler_evaporator_inlet_temperature_(TR4),sensor.boiler_hptr4,5,0,1/10,167,1 +"Geo 5xx",boiler,173,hptr5,compressor inlet temperature (TR5),int16,C,false,sensor.boiler_compressor_inlet_temperature_(TR5),sensor.boiler_hptr5,5,0,1/10,168,1 +"Geo 5xx",boiler,173,hptr6,compressor outlet temperature (TR6),int16,C,false,sensor.boiler_compressor_outlet_temperature_(TR6),sensor.boiler_hptr6,5,0,1/10,169,1 +"Geo 5xx",boiler,173,hptr7,refrigerant temperature gas side (condenser input) (TR7),int16,C,false,sensor.boiler_refrigerant_temperature_gas_side_(condenser_input)_(TR7),sensor.boiler_hptr7,5,0,1/10,170,1 +"Geo 5xx",boiler,173,hptl2,air inlet temperature (TL2),int16,C,false,sensor.boiler_air_inlet_temperature_(TL2),sensor.boiler_hptl2,5,0,1/10,171,1 +"Geo 5xx",boiler,173,hppl1,low pressure side temperature (PL1),int16,C,false,sensor.boiler_low_pressure_side_temperature_(PL1),sensor.boiler_hppl1,5,0,1/10,172,1 +"Geo 5xx",boiler,173,hpph1,high pressure side temperature (PH1),int16,C,false,sensor.boiler_high_pressure_side_temperature_(PH1),sensor.boiler_hpph1,5,0,1/10,173,1 +"Geo 5xx",boiler,173,hpta4,drain pan temp (TA4),int16,C,false,sensor.boiler_drain_pan_temp_(TA4),sensor.boiler_hpta4,5,0,1/10,174,1 +"Geo 5xx",boiler,173,hptw1,reservoir temp (TW1),int16,C,false,sensor.boiler_reservoir_temp_(TW1),sensor.boiler_hptw1,5,0,1/10,175,1 +"Geo 5xx",boiler,173,poolsettemp,pool set temperature,uint8 (>=0<=0),C,true,number.boiler_pool_set_temperature,number.boiler_poolsettemp,5,0,1/2,176,1 +"Geo 5xx",boiler,173,hp4way,4-way valve (VR4),boolean, ,false,binary_sensor.boiler_4-way_valve_(VR4),binary_sensor.boiler_hp4way,5,0,1,177,1 +"Geo 5xx",boiler,173,hpin1,input 1 state,boolean, ,false,binary_sensor.boiler_input_1_state,binary_sensor.boiler_hpin1,5,0,1,178,1 +"Geo 5xx",boiler,173,hpin1opt,input 1 options,string (>=0<=0), ,true,sensor.boiler_input_1_options,sensor.boiler_hpin1opt,5,0,1,179,8 +"Geo 5xx",boiler,173,hpin2,input 2 state,boolean, ,false,binary_sensor.boiler_input_2_state,binary_sensor.boiler_hpin2,5,0,1,187,1 +"Geo 5xx",boiler,173,hpin2opt,input 2 options,string (>=0<=0), ,true,sensor.boiler_input_2_options,sensor.boiler_hpin2opt,5,0,1,188,8 +"Geo 5xx",boiler,173,hpin3,input 3 state,boolean, ,false,binary_sensor.boiler_input_3_state,binary_sensor.boiler_hpin3,5,0,1,196,1 +"Geo 5xx",boiler,173,hpin3opt,input 3 options,string (>=0<=0), ,true,sensor.boiler_input_3_options,sensor.boiler_hpin3opt,5,0,1,197,8 +"Geo 5xx",boiler,173,hpin4,input 4 state,boolean, ,false,binary_sensor.boiler_input_4_state,binary_sensor.boiler_hpin4,5,0,1,205,1 +"Geo 5xx",boiler,173,hpin4opt,input 4 options,string (>=0<=0), ,true,sensor.boiler_input_4_options,sensor.boiler_hpin4opt,5,0,1,206,8 +"Geo 5xx",boiler,173,maxheatcomp,heat limit compressor,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_compressor,select.boiler_maxheatcomp,5,0,1,214,1 +"Geo 5xx",boiler,173,maxheatheat,heat limit heating,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_heat_limit_heating,select.boiler_maxheatheat,5,0,1,215,1 "Geo 5xx",boiler,173,dhw.maxheat,heat limit,enum [0 kW\|2 kW\|3 kW\|4 kW\|6 kW\|9 kW] (>=0<=0), ,true,select.boiler_dhw_heat_limit,select.boiler_dhw_maxheat,5,9,1,14,1 -"Geo 5xx",boiler,173,auxheatersource,aux heater source,enum [not installed\|electric heater\|exclusive\|parallel\|hybrid] (>=0<=0), ,true,select.boiler_aux_heater_source,select.boiler_auxheatersource,5,0,1,212,1 -"Geo 5xx",boiler,173,pvcooling,cooling only with PV,boolean (>=0<=0), ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,213,1 -"Geo 5xx",boiler,173,auxheateronly,aux heater only,boolean (>=0<=0), ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,214,1 -"Geo 5xx",boiler,173,auxheateroff,disable aux heater,boolean (>=0<=0), ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,215,1 -"Geo 5xx",boiler,173,auxheaterstatus,aux heater status,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_aux_heater_status,sensor.boiler_auxheaterstatus,5,0,1,216,1 -"Geo 5xx",boiler,173,auxheaterlevel,aux heater level,uint8,%,false,sensor.boiler_aux_heater_level,sensor.boiler_auxheaterlevel,5,0,1,217,1 -"Geo 5xx",boiler,173,auxheaterdelay,aux heater on delay,uint16 (>=10<=1000),K*min,true,number.boiler_aux_heater_on_delay,number.boiler_auxheaterdelay,5,0,10,218,1 -"Geo 5xx",boiler,173,auxmaxlimit,aux heater max limit,uint8 (>=0<=10),K,true,number.boiler_aux_heater_max_limit,number.boiler_auxmaxlimit,5,0,1/10,219,1 -"Geo 5xx",boiler,173,auxlimitstart,aux heater limit start,uint8 (>=0<=10),K,true,number.boiler_aux_heater_limit_start,number.boiler_auxlimitstart,5,0,1/10,220,1 -"Geo 5xx",boiler,173,auxheatrmode,aux heater mode,enum [eco\|comfort] (>=0<=0), ,true,select.boiler_aux_heater_mode,select.boiler_auxheatrmode,5,0,1,221,1 -"Geo 5xx",boiler,173,hphystheat,on/off hyst heat,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_heat,number.boiler_hphystheat,5,0,5,222,1 -"Geo 5xx",boiler,173,hphystcool,on/off hyst cool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_cool,number.boiler_hphystcool,5,0,5,223,1 -"Geo 5xx",boiler,173,hphystpool,on/off hyst pool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_pool,number.boiler_hphystpool,5,0,5,224,1 -"Geo 5xx",boiler,173,silentmode,silent mode,enum [off\|auto\|on] (>=0<=0), ,true,select.boiler_silent_mode,select.boiler_silentmode,5,0,1,225,1 -"Geo 5xx",boiler,173,silentfrom,silent mode from,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_from,number.boiler_silentfrom,5,0,15,226,1 -"Geo 5xx",boiler,173,silentto,silent mode to,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_to,number.boiler_silentto,5,0,15,227,1 -"Geo 5xx",boiler,173,mintempsilent,min outside temp for silent mode,int8 (>=0<=0),C,true,number.boiler_min_outside_temp_for_silent_mode,number.boiler_mintempsilent,5,0,1,228,1 -"Geo 5xx",boiler,173,tempparmode,outside temp parallel mode,int8 (>=0<=0),C,true,number.boiler_outside_temp_parallel_mode,number.boiler_tempparmode,5,0,1,229,1 -"Geo 5xx",boiler,173,auxheatmix,aux heater mixing valve,int8,%,false,sensor.boiler_aux_heater_mixing_valve,sensor.boiler_auxheatmix,5,0,1,230,1 -"Geo 5xx",boiler,173,tempdiffheat,temp diff TC3/TC0 heat,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_heat,number.boiler_tempdiffheat,5,0,1/10,231,1 -"Geo 5xx",boiler,173,tempdiffcool,temp diff TC3/TC0 cool,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_cool,number.boiler_tempdiffcool,5,0,1/10,232,1 -"Geo 5xx",boiler,173,vpcooling,valve/pump cooling,boolean (>=0<=0), ,true,switch.boiler_valve/pump_cooling,switch.boiler_vpcooling,5,0,1,233,1 -"Geo 5xx",boiler,173,heatcable,heating cable,boolean (>=0<=0), ,true,switch.boiler_heating_cable,switch.boiler_heatcable,5,0,1,234,1 -"Geo 5xx",boiler,173,vc0valve,VC0 valve,boolean (>=0<=0), ,true,switch.boiler_VC0_valve,switch.boiler_vc0valve,5,0,1,235,1 -"Geo 5xx",boiler,173,primepump,primary heatpump,boolean (>=0<=0), ,true,switch.boiler_primary_heatpump,switch.boiler_primepump,5,0,1,236,1 -"Geo 5xx",boiler,173,primepumpmod,primary heatpump modulation,uint8 (>=0<=0),%,true,number.boiler_primary_heatpump_modulation,number.boiler_primepumpmod,5,0,1,237,1 -"Geo 5xx",boiler,173,hp3way,3-way valve,boolean (>=0<=0), ,true,switch.boiler_3-way_valve,switch.boiler_hp3way,5,0,1,238,1 -"Geo 5xx",boiler,173,elheatstep1,el. heater step 1,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_1,switch.boiler_elheatstep1,5,0,1,239,1 -"Geo 5xx",boiler,173,elheatstep2,el. heater step 2,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_2,switch.boiler_elheatstep2,5,0,1,240,1 -"Geo 5xx",boiler,173,elheatstep3,el. heater step 3,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_3,switch.boiler_elheatstep3,5,0,1,241,1 -"Geo 5xx",boiler,173,hpea0,condensate reservoir heating (EA0),boolean, ,false,binary_sensor.boiler_condensate_reservoir_heating_(EA0),binary_sensor.boiler_hpea0,5,0,1,242,1 -"Geo 5xx",boiler,173,hppumpmode,primary heatpump mode,enum [auto\|continuous] (>=0<=0), ,true,select.boiler_primary_heatpump_mode,select.boiler_hppumpmode,5,0,1,243,1 -"Geo 5xx",boiler,173,fan,fan,uint8 (>=20<=100),%,true,number.boiler_fan,number.boiler_fan,5,0,1,244,1 -"Geo 5xx",boiler,173,fanspd,fan speed,uint8,%,false,sensor.boiler_fan_speed,sensor.boiler_fanspd,5,0,1,245,1 -"Geo 5xx",boiler,173,shutdown,shutdown,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_shutdown,sensor.boiler_shutdown,5,0,1,246,1 -"Geo 5xx",boiler,173,hpcurrpower,compressor current power,uint16,W,false,sensor.boiler_compressor_current_power,sensor.boiler_hpcurrpower,5,0,1,247,1 -"Geo 5xx",boiler,173,hppowerlimit,power limit,uint16 (>=0<=0),W,true,number.boiler_power_limit,number.boiler_hppowerlimit,5,0,1,248,1 +"Geo 5xx",boiler,173,auxheatersource,aux heater source,enum [not installed\|electric heater\|exclusive\|parallel\|hybrid] (>=0<=0), ,true,select.boiler_aux_heater_source,select.boiler_auxheatersource,5,0,1,216,1 +"Geo 5xx",boiler,173,pvcooling,cooling only with PV,boolean (>=0<=0), ,true,switch.boiler_cooling_only_with_PV,switch.boiler_pvcooling,5,0,1,217,1 +"Geo 5xx",boiler,173,auxheateronly,aux heater only,boolean (>=0<=0), ,true,switch.boiler_aux_heater_only,switch.boiler_auxheateronly,5,0,1,218,1 +"Geo 5xx",boiler,173,auxheateroff,disable aux heater,boolean (>=0<=0), ,true,switch.boiler_disable_aux_heater,switch.boiler_auxheateroff,5,0,1,219,1 +"Geo 5xx",boiler,173,auxheaterstatus,aux heater status,enum [off\|heating\|cooling\|hot water\|pool\|pool heating\|defrost\|compressor alarm], ,false,sensor.boiler_aux_heater_status,sensor.boiler_auxheaterstatus,5,0,1,220,1 +"Geo 5xx",boiler,173,auxheaterlevel,aux heater level,uint8,%,false,sensor.boiler_aux_heater_level,sensor.boiler_auxheaterlevel,5,0,1,221,1 +"Geo 5xx",boiler,173,auxheaterdelay,aux heater on delay,uint16 (>=10<=1000),K*min,true,number.boiler_aux_heater_on_delay,number.boiler_auxheaterdelay,5,0,10,222,1 +"Geo 5xx",boiler,173,auxmaxlimit,aux heater max limit,uint8 (>=0<=10),K,true,number.boiler_aux_heater_max_limit,number.boiler_auxmaxlimit,5,0,1/10,223,1 +"Geo 5xx",boiler,173,auxlimitstart,aux heater limit start,uint8 (>=0<=10),K,true,number.boiler_aux_heater_limit_start,number.boiler_auxlimitstart,5,0,1/10,224,1 +"Geo 5xx",boiler,173,auxheatrmode,aux heater mode,enum [eco\|comfort] (>=0<=0), ,true,select.boiler_aux_heater_mode,select.boiler_auxheatrmode,5,0,1,225,1 +"Geo 5xx",boiler,173,hphystheat,on/off hyst heat,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_heat,number.boiler_hphystheat,5,0,5,226,1 +"Geo 5xx",boiler,173,hphystcool,on/off hyst cool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_cool,number.boiler_hphystcool,5,0,5,227,1 +"Geo 5xx",boiler,173,hphystpool,on/off hyst pool,uint16 (>=50<=1500),K*min,true,number.boiler_on/off_hyst_pool,number.boiler_hphystpool,5,0,5,228,1 +"Geo 5xx",boiler,173,silentmode,silent mode,enum [off\|auto\|on] (>=0<=0), ,true,select.boiler_silent_mode,select.boiler_silentmode,5,0,1,229,1 +"Geo 5xx",boiler,173,silentfrom,silent mode from,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_from,number.boiler_silentfrom,5,0,15,230,1 +"Geo 5xx",boiler,173,silentto,silent mode to,uint8 (>=0<=0),minutes,true,number.boiler_silent_mode_to,number.boiler_silentto,5,0,15,231,1 +"Geo 5xx",boiler,173,mintempsilent,min outside temp for silent mode,int8 (>=0<=0),C,true,number.boiler_min_outside_temp_for_silent_mode,number.boiler_mintempsilent,5,0,1,232,1 +"Geo 5xx",boiler,173,tempparmode,outside temp parallel mode,int8 (>=0<=0),C,true,number.boiler_outside_temp_parallel_mode,number.boiler_tempparmode,5,0,1,233,1 +"Geo 5xx",boiler,173,auxheatmix,aux heater mixing valve,int8,%,false,sensor.boiler_aux_heater_mixing_valve,sensor.boiler_auxheatmix,5,0,1,234,1 +"Geo 5xx",boiler,173,tempdiffheat,temp diff TC3/TC0 heat,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_heat,number.boiler_tempdiffheat,5,0,1/10,235,1 +"Geo 5xx",boiler,173,tempdiffcool,temp diff TC3/TC0 cool,uint8 (>=2<=10),K,true,number.boiler_temp_diff_TC3/TC0_cool,number.boiler_tempdiffcool,5,0,1/10,236,1 +"Geo 5xx",boiler,173,vpcooling,valve/pump cooling,boolean (>=0<=0), ,true,switch.boiler_valve/pump_cooling,switch.boiler_vpcooling,5,0,1,237,1 +"Geo 5xx",boiler,173,heatcable,heating cable,boolean (>=0<=0), ,true,switch.boiler_heating_cable,switch.boiler_heatcable,5,0,1,238,1 +"Geo 5xx",boiler,173,vc0valve,VC0 valve,boolean (>=0<=0), ,true,switch.boiler_VC0_valve,switch.boiler_vc0valve,5,0,1,239,1 +"Geo 5xx",boiler,173,primepump,primary heatpump,boolean (>=0<=0), ,true,switch.boiler_primary_heatpump,switch.boiler_primepump,5,0,1,240,1 +"Geo 5xx",boiler,173,primepumpmod,primary heatpump modulation,uint8 (>=0<=0),%,true,number.boiler_primary_heatpump_modulation,number.boiler_primepumpmod,5,0,1,241,1 +"Geo 5xx",boiler,173,hp3way,3-way valve,boolean (>=0<=0), ,true,switch.boiler_3-way_valve,switch.boiler_hp3way,5,0,1,242,1 +"Geo 5xx",boiler,173,elheatstep1,el. heater step 1,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_1,switch.boiler_elheatstep1,5,0,1,243,1 +"Geo 5xx",boiler,173,elheatstep2,el. heater step 2,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_2,switch.boiler_elheatstep2,5,0,1,244,1 +"Geo 5xx",boiler,173,elheatstep3,el. heater step 3,boolean (>=0<=0), ,true,switch.boiler_el._heater_step_3,switch.boiler_elheatstep3,5,0,1,245,1 +"Geo 5xx",boiler,173,hpea0,condensate reservoir heating (EA0),boolean, ,false,binary_sensor.boiler_condensate_reservoir_heating_(EA0),binary_sensor.boiler_hpea0,5,0,1,246,1 +"Geo 5xx",boiler,173,hppumpmode,primary heatpump mode,enum [auto\|continuous] (>=0<=0), ,true,select.boiler_primary_heatpump_mode,select.boiler_hppumpmode,5,0,1,247,1 +"Geo 5xx",boiler,173,fan,fan,uint8 (>=20<=100),%,true,number.boiler_fan,number.boiler_fan,5,0,1,248,1 +"Geo 5xx",boiler,173,fanspd,fan speed,uint8,%,false,sensor.boiler_fan_speed,sensor.boiler_fanspd,5,0,1,249,1 +"Geo 5xx",boiler,173,shutdown,shutdown,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_shutdown,sensor.boiler_shutdown,5,0,1,250,1 +"Geo 5xx",boiler,173,hpcurrpower,compressor current power,uint16,W,false,sensor.boiler_compressor_current_power,sensor.boiler_hpcurrpower,5,0,1,251,1 +"Geo 5xx",boiler,173,hppowerlimit,power limit,uint16 (>=0<=0),W,true,number.boiler_power_limit,number.boiler_hppowerlimit,5,0,1,252,1 "Geo 5xx",boiler,173,dhw.alternatingop,alternating operation,boolean (>=0<=0), ,true,switch.boiler_dhw_alternating_operation,switch.boiler_dhw_alternatingop,5,9,1,15,1 "Geo 5xx",boiler,173,dhw.altopprioheat,prioritise heating during dhw,uint8 (>=20<=120),minutes,true,number.boiler_dhw_prioritise_heating_during_dhw,number.boiler_dhw_altopprioheat,5,9,1,16,1 "Geo 5xx",boiler,173,dhw.altopprio,prioritise dhw during heating,uint8 (>=30<=120),minutes,true,number.boiler_dhw_prioritise_dhw_during_heating,number.boiler_dhw_altopprio,5,9,1,17,1 @@ -2981,7 +3033,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Geo 5xx",boiler,173,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Geo 5xx",boiler,173,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Geo 5xx",boiler,173,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -2995,28 +3047,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -3047,11 +3098,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -3094,11 +3148,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Condens 5000i, Greenstar 8000/GC9800IW, GB192i*2",boiler,195,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Logamax U122, Cerapur",boiler,203,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Logamax U122, Cerapur",boiler,203,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Logamax U122, Cerapur",boiler,203,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Logamax U122, Cerapur",boiler,203,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Logamax U122, Cerapur",boiler,203,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -3112,28 +3166,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax U122, Cerapur",boiler,203,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Logamax U122, Cerapur",boiler,203,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Logamax U122, Cerapur",boiler,203,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Logamax U122, Cerapur",boiler,203,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Logamax U122, Cerapur",boiler,203,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Logamax U122, Cerapur",boiler,203,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Logamax U122, Cerapur",boiler,203,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Logamax U122, Cerapur",boiler,203,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Logamax U122, Cerapur",boiler,203,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Logamax U122, Cerapur",boiler,203,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Logamax U122, Cerapur",boiler,203,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Logamax U122, Cerapur",boiler,203,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Logamax U122, Cerapur",boiler,203,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Logamax U122, Cerapur",boiler,203,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Logamax U122, Cerapur",boiler,203,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Logamax U122, Cerapur",boiler,203,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Logamax U122, Cerapur",boiler,203,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Logamax U122, Cerapur",boiler,203,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Logamax U122, Cerapur",boiler,203,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Logamax U122, Cerapur",boiler,203,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Logamax U122, Cerapur",boiler,203,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Logamax U122, Cerapur",boiler,203,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Logamax U122, Cerapur",boiler,203,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Logamax U122, Cerapur",boiler,203,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Logamax U122, Cerapur",boiler,203,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Logamax U122, Cerapur",boiler,203,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Logamax U122, Cerapur",boiler,203,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Logamax U122, Cerapur",boiler,203,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Logamax U122, Cerapur",boiler,203,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Logamax U122, Cerapur",boiler,203,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Logamax U122, Cerapur",boiler,203,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Logamax U122, Cerapur",boiler,203,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Logamax U122, Cerapur",boiler,203,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Logamax U122, Cerapur",boiler,203,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Logamax U122, Cerapur",boiler,203,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Logamax U122, Cerapur",boiler,203,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Logamax U122, Cerapur",boiler,203,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Logamax U122, Cerapur",boiler,203,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Logamax U122, Cerapur",boiler,203,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Logamax U122, Cerapur",boiler,203,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Logamax U122, Cerapur",boiler,203,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Logamax U122, Cerapur",boiler,203,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Logamax U122, Cerapur",boiler,203,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Logamax U122, Cerapur",boiler,203,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Logamax U122, Cerapur",boiler,203,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Logamax U122, Cerapur",boiler,203,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Logamax U122, Cerapur",boiler,203,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Logamax U122, Cerapur",boiler,203,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Logamax U122, Cerapur",boiler,203,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -3164,11 +3217,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax U122, Cerapur",boiler,203,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Logamax U122, Cerapur",boiler,203,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Logamax U122, Cerapur",boiler,203,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Logamax U122, Cerapur",boiler,203,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Logamax U122, Cerapur",boiler,203,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Logamax U122, Cerapur",boiler,203,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Logamax U122, Cerapur",boiler,203,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Logamax U122, Cerapur",boiler,203,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Logamax U122, Cerapur",boiler,203,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Logamax U122, Cerapur",boiler,203,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Logamax U122, Cerapur",boiler,203,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Logamax U122, Cerapur",boiler,203,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Logamax U122, Cerapur",boiler,203,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Logamax U122, Cerapur",boiler,203,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Logamax U122, Cerapur",boiler,203,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Logamax U122, Cerapur",boiler,203,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Logamax U122, Cerapur",boiler,203,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -3211,11 +3267,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax U122, Cerapur",boiler,203,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Logamax U122, Cerapur",boiler,203,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Logamax U122, Cerapur",boiler,203,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Logamax U122, Cerapur",boiler,203,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Logamax U122, Cerapur",boiler,203,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Logamax U122, Cerapur",boiler,203,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Logamax U122, Cerapur",boiler,203,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Logamax U122, Cerapur",boiler,203,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Logamax U122, Cerapur",boiler,203,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Logamax U122, Cerapur",boiler,203,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Ecomline Excellent",boiler,206,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Ecomline Excellent",boiler,206,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Ecomline Excellent",boiler,206,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Ecomline Excellent",boiler,206,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Ecomline Excellent",boiler,206,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -3229,28 +3285,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Ecomline Excellent",boiler,206,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Ecomline Excellent",boiler,206,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Ecomline Excellent",boiler,206,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Ecomline Excellent",boiler,206,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Ecomline Excellent",boiler,206,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Ecomline Excellent",boiler,206,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Ecomline Excellent",boiler,206,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Ecomline Excellent",boiler,206,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Ecomline Excellent",boiler,206,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Ecomline Excellent",boiler,206,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Ecomline Excellent",boiler,206,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Ecomline Excellent",boiler,206,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Ecomline Excellent",boiler,206,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Ecomline Excellent",boiler,206,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Ecomline Excellent",boiler,206,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Ecomline Excellent",boiler,206,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Ecomline Excellent",boiler,206,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Ecomline Excellent",boiler,206,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Ecomline Excellent",boiler,206,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Ecomline Excellent",boiler,206,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Ecomline Excellent",boiler,206,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Ecomline Excellent",boiler,206,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Ecomline Excellent",boiler,206,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Ecomline Excellent",boiler,206,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Ecomline Excellent",boiler,206,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Ecomline Excellent",boiler,206,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Ecomline Excellent",boiler,206,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Ecomline Excellent",boiler,206,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Ecomline Excellent",boiler,206,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Ecomline Excellent",boiler,206,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Ecomline Excellent",boiler,206,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Ecomline Excellent",boiler,206,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Ecomline Excellent",boiler,206,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Ecomline Excellent",boiler,206,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Ecomline Excellent",boiler,206,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Ecomline Excellent",boiler,206,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Ecomline Excellent",boiler,206,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Ecomline Excellent",boiler,206,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Ecomline Excellent",boiler,206,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Ecomline Excellent",boiler,206,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Ecomline Excellent",boiler,206,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Ecomline Excellent",boiler,206,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Ecomline Excellent",boiler,206,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Ecomline Excellent",boiler,206,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Ecomline Excellent",boiler,206,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Ecomline Excellent",boiler,206,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Ecomline Excellent",boiler,206,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Ecomline Excellent",boiler,206,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Ecomline Excellent",boiler,206,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -3281,11 +3336,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Ecomline Excellent",boiler,206,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Ecomline Excellent",boiler,206,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Ecomline Excellent",boiler,206,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Ecomline Excellent",boiler,206,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Ecomline Excellent",boiler,206,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Ecomline Excellent",boiler,206,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Ecomline Excellent",boiler,206,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Ecomline Excellent",boiler,206,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Ecomline Excellent",boiler,206,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Ecomline Excellent",boiler,206,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Ecomline Excellent",boiler,206,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Ecomline Excellent",boiler,206,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Ecomline Excellent",boiler,206,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Ecomline Excellent",boiler,206,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Ecomline Excellent",boiler,206,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Ecomline Excellent",boiler,206,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Ecomline Excellent",boiler,206,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -3328,11 +3386,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Ecomline Excellent",boiler,206,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Ecomline Excellent",boiler,206,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Ecomline Excellent",boiler,206,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Ecomline Excellent",boiler,206,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Ecomline Excellent",boiler,206,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Ecomline Excellent",boiler,206,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Ecomline Excellent",boiler,206,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Ecomline Excellent",boiler,206,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Ecomline Excellent",boiler,206,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Ecomline Excellent",boiler,206,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -3346,28 +3404,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -3398,11 +3455,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -3445,11 +3505,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Logamax Plus, GB192, Condens GC9000, Greenstar ErP",boiler,208,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Cascade MC400",boiler,210,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Cascade MC400",boiler,210,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Cascade MC400",boiler,210,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Cascade MC400",boiler,210,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Cascade MC400",boiler,210,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -3463,28 +3523,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cascade MC400",boiler,210,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Cascade MC400",boiler,210,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Cascade MC400",boiler,210,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Cascade MC400",boiler,210,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Cascade MC400",boiler,210,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Cascade MC400",boiler,210,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Cascade MC400",boiler,210,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Cascade MC400",boiler,210,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Cascade MC400",boiler,210,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Cascade MC400",boiler,210,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Cascade MC400",boiler,210,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Cascade MC400",boiler,210,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Cascade MC400",boiler,210,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Cascade MC400",boiler,210,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Cascade MC400",boiler,210,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Cascade MC400",boiler,210,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Cascade MC400",boiler,210,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Cascade MC400",boiler,210,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Cascade MC400",boiler,210,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Cascade MC400",boiler,210,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Cascade MC400",boiler,210,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Cascade MC400",boiler,210,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Cascade MC400",boiler,210,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Cascade MC400",boiler,210,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Cascade MC400",boiler,210,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Cascade MC400",boiler,210,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Cascade MC400",boiler,210,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Cascade MC400",boiler,210,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Cascade MC400",boiler,210,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Cascade MC400",boiler,210,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Cascade MC400",boiler,210,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Cascade MC400",boiler,210,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Cascade MC400",boiler,210,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Cascade MC400",boiler,210,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Cascade MC400",boiler,210,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Cascade MC400",boiler,210,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Cascade MC400",boiler,210,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Cascade MC400",boiler,210,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Cascade MC400",boiler,210,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Cascade MC400",boiler,210,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Cascade MC400",boiler,210,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Cascade MC400",boiler,210,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Cascade MC400",boiler,210,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Cascade MC400",boiler,210,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Cascade MC400",boiler,210,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Cascade MC400",boiler,210,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Cascade MC400",boiler,210,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Cascade MC400",boiler,210,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Cascade MC400",boiler,210,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -3515,11 +3574,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cascade MC400",boiler,210,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Cascade MC400",boiler,210,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Cascade MC400",boiler,210,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Cascade MC400",boiler,210,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Cascade MC400",boiler,210,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Cascade MC400",boiler,210,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Cascade MC400",boiler,210,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Cascade MC400",boiler,210,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Cascade MC400",boiler,210,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Cascade MC400",boiler,210,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Cascade MC400",boiler,210,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Cascade MC400",boiler,210,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Cascade MC400",boiler,210,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Cascade MC400",boiler,210,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Cascade MC400",boiler,210,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Cascade MC400",boiler,210,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Cascade MC400",boiler,210,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -3562,11 +3624,11 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Cascade MC400",boiler,210,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Cascade MC400",boiler,210,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Cascade MC400",boiler,210,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Cascade MC400",boiler,210,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Cascade MC400",boiler,210,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Cascade MC400",boiler,210,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Cascade MC400",boiler,210,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Cascade MC400",boiler,210,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Cascade MC400",boiler,210,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Cascade MC400",boiler,210,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"EasyControl Adapter",boiler,211,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"EasyControl Adapter",boiler,211,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "EasyControl Adapter",boiler,211,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "EasyControl Adapter",boiler,211,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "EasyControl Adapter",boiler,211,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -3580,28 +3642,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "EasyControl Adapter",boiler,211,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "EasyControl Adapter",boiler,211,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "EasyControl Adapter",boiler,211,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"EasyControl Adapter",boiler,211,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"EasyControl Adapter",boiler,211,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"EasyControl Adapter",boiler,211,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"EasyControl Adapter",boiler,211,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"EasyControl Adapter",boiler,211,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"EasyControl Adapter",boiler,211,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"EasyControl Adapter",boiler,211,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"EasyControl Adapter",boiler,211,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"EasyControl Adapter",boiler,211,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"EasyControl Adapter",boiler,211,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"EasyControl Adapter",boiler,211,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"EasyControl Adapter",boiler,211,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"EasyControl Adapter",boiler,211,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"EasyControl Adapter",boiler,211,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"EasyControl Adapter",boiler,211,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"EasyControl Adapter",boiler,211,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"EasyControl Adapter",boiler,211,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"EasyControl Adapter",boiler,211,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"EasyControl Adapter",boiler,211,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"EasyControl Adapter",boiler,211,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"EasyControl Adapter",boiler,211,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"EasyControl Adapter",boiler,211,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"EasyControl Adapter",boiler,211,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"EasyControl Adapter",boiler,211,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"EasyControl Adapter",boiler,211,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"EasyControl Adapter",boiler,211,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"EasyControl Adapter",boiler,211,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"EasyControl Adapter",boiler,211,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"EasyControl Adapter",boiler,211,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"EasyControl Adapter",boiler,211,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"EasyControl Adapter",boiler,211,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"EasyControl Adapter",boiler,211,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"EasyControl Adapter",boiler,211,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"EasyControl Adapter",boiler,211,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"EasyControl Adapter",boiler,211,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"EasyControl Adapter",boiler,211,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"EasyControl Adapter",boiler,211,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"EasyControl Adapter",boiler,211,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"EasyControl Adapter",boiler,211,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"EasyControl Adapter",boiler,211,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"EasyControl Adapter",boiler,211,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"EasyControl Adapter",boiler,211,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"EasyControl Adapter",boiler,211,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "EasyControl Adapter",boiler,211,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "EasyControl Adapter",boiler,211,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "EasyControl Adapter",boiler,211,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -3632,11 +3693,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "EasyControl Adapter",boiler,211,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "EasyControl Adapter",boiler,211,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "EasyControl Adapter",boiler,211,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"EasyControl Adapter",boiler,211,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"EasyControl Adapter",boiler,211,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"EasyControl Adapter",boiler,211,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"EasyControl Adapter",boiler,211,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"EasyControl Adapter",boiler,211,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "EasyControl Adapter",boiler,211,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"EasyControl Adapter",boiler,211,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"EasyControl Adapter",boiler,211,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "EasyControl Adapter",boiler,211,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"EasyControl Adapter",boiler,211,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"EasyControl Adapter",boiler,211,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "EasyControl Adapter",boiler,211,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "EasyControl Adapter",boiler,211,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "EasyControl Adapter",boiler,211,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -3679,17 +3743,17 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "EasyControl Adapter",boiler,211,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "EasyControl Adapter",boiler,211,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "EasyControl Adapter",boiler,211,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"EasyControl Adapter",boiler,211,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"EasyControl Adapter",boiler,211,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"EasyControl Adapter",boiler,211,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"EasyControl Adapter",boiler,211,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"EasyControl Adapter",boiler,211,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"EasyControl Adapter",boiler,211,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "EasyControl Adapter",boiler,211,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 -"Greenstar HIU, Logamax kompakt WS170",boiler,219,netflowtemp,heat network flow temp,uint16,C,false,sensor.boiler_heat_network_flow_temp,sensor.boiler_netflowtemp,5,0,1/10,276,1 -"Greenstar HIU, Logamax kompakt WS170",boiler,219,heatvalve,heating valve,uint8,%,false,sensor.boiler_heating_valve,sensor.boiler_heatvalve,5,0,1,277,1 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,netflowtemp,heat network flow temp,uint16,C,false,sensor.boiler_heat_network_flow_temp,sensor.boiler_netflowtemp,5,0,1/10,279,1 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,heatvalve,heating valve,uint8,%,false,sensor.boiler_heating_valve,sensor.boiler_heatvalve,5,0,1,280,1 "Greenstar HIU, Logamax kompakt WS170",boiler,219,dhw.dhwvalve,valve,uint8,%,false,sensor.boiler_dhw_valve,sensor.boiler_dhw_dhwvalve,5,9,1,75,1 -"Greenstar HIU, Logamax kompakt WS170",boiler,219,keepwarmtemp,keep warm temperature,uint8 (>=0<=0),C,true,number.boiler_keep_warm_temperature,number.boiler_keepwarmtemp,5,0,1,278,1 -"Greenstar HIU, Logamax kompakt WS170",boiler,219,setreturntemp,set temp return,uint8 (>=0<=0),C,true,number.boiler_set_temp_return,number.boiler_setreturntemp,5,0,1,279,1 -"Greenstar HIU, Logamax kompakt WS170",boiler,219,heating,heating,boolean, ,false,binary_sensor.boiler_heating,binary_sensor.boiler_heating,5,0,1,280,1 -"Greenstar HIU, Logamax kompakt WS170",boiler,219,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,keepwarmtemp,keep warm temperature,uint8 (>=0<=0),C,true,number.boiler_keep_warm_temperature,number.boiler_keepwarmtemp,5,0,1,281,1 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,setreturntemp,set temp return,uint8 (>=0<=0),C,true,number.boiler_set_temp_return,number.boiler_setreturntemp,5,0,1,282,1 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,heating,heating,boolean, ,false,binary_sensor.boiler_heating,binary_sensor.boiler_heating,5,0,1,283,1 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Greenstar HIU, Logamax kompakt WS170",boiler,219,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Greenstar HIU, Logamax kompakt WS170",boiler,219,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Greenstar HIU, Logamax kompakt WS170",boiler,219,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -3733,11 +3797,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Greenstar HIU, Logamax kompakt WS170",boiler,219,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Greenstar HIU, Logamax kompakt WS170",boiler,219,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Greenstar HIU, Logamax kompakt WS170",boiler,219,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Greenstar HIU, Logamax kompakt WS170",boiler,219,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Greenstar HIU, Logamax kompakt WS170",boiler,219,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Greenstar HIU, Logamax kompakt WS170",boiler,219,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Greenstar HIU, Logamax kompakt WS170",boiler,219,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Greenstar HIU, Logamax kompakt WS170",boiler,219,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Greenstar HIU, Logamax kompakt WS170",boiler,219,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Greenstar HIU, Logamax kompakt WS170",boiler,219,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Greenstar HIU, Logamax kompakt WS170",boiler,219,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Greenstar HIU, Logamax kompakt WS170",boiler,219,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -3780,7 +3847,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Greenstar HIU, Logamax kompakt WS170",boiler,219,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Greenstar HIU, Logamax kompakt WS170",boiler,219,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Greenstar HIU, Logamax kompakt WS170",boiler,219,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,reset,reset,cmd [-\|maintenance\|error\|history\|message] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,reset,reset,cmd [-\|maintenance\|error\|history\|message\|hp error\|burner starts\|factory] (>=0<=0), ,true,sensor.boiler_reset,sensor.boiler_reset,5,0,1,0,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,chimneysweeper,chimney sweeper,cmd [off\|on] (>=0<=0), ,true,sensor.boiler_chimney_sweeper,sensor.boiler_chimneysweeper,5,0,1,1,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,heatingoff,force heating off,boolean (>=0<=0), ,true,switch.boiler_force_heating_off,switch.boiler_heatingoff,5,0,1,2,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,heatingactive,heating active,boolean, ,false,binary_sensor.boiler_heating_active,binary_sensor.boiler_heatingactive,5,0,1,3,1 @@ -3794,28 +3861,27 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,syspress,system pressure,uint8,bar,false,sensor.boiler_system_pressure,sensor.boiler_syspress,5,0,1/10,11,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boiltemp,actual boiler temperature,uint16,C,false,sensor.boiler_actual_boiler_temperature,sensor.boiler_boiltemp,5,0,1/10,12,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,headertemp,low loss header,uint16,C,false,sensor.boiler_low_loss_header,sensor.boiler_headertemp,5,0,1/10,13,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,249,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,250,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,251,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,252,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,253,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,254,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,255,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burnminpower,burner min power,uint8 (>=0<=0),%,true,number.boiler_burner_min_power,number.boiler_burnminpower,5,0,1,256,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,257,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,258,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,259,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,260,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,261,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,262,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,263,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,264,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,265,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,266,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,267,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,268,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,269,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,270,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,exhausttemp,exhaust temperature,uint16,C,false,sensor.boiler_exhaust_temperature,sensor.boiler_exhausttemp,5,0,1/10,253,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burngas,gas,boolean, ,false,binary_sensor.boiler_gas,binary_sensor.boiler_burngas,5,0,1,254,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burngas2,gas stage 2,boolean, ,false,binary_sensor.boiler_gas_stage_2,binary_sensor.boiler_burngas2,5,0,1,255,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,flamecurr,flame current,uint16,µA,false,sensor.boiler_flame_current,sensor.boiler_flamecurr,5,0,1/10,256,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,fanwork,fan,boolean, ,false,binary_sensor.boiler_fan,binary_sensor.boiler_fanwork,5,0,1,257,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,ignwork,ignition,boolean, ,false,binary_sensor.boiler_ignition,binary_sensor.boiler_ignwork,5,0,1,258,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,oilpreheat,oil preheating,boolean, ,false,binary_sensor.boiler_oil_preheating,binary_sensor.boiler_oilpreheat,5,0,1,259,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burnmaxpower,burner max power,uint8 (>=0<=254),%,true,number.boiler_burner_max_power,number.boiler_burnmaxpower,5,0,1,260,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,burnminperiod,burner min period,uint8 (>=0<=120),minutes,true,number.boiler_burner_min_period,number.boiler_burnminperiod,5,0,1,261,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,absburnpow,burner current power (absolute),uint8,%,false,sensor.boiler_burner_current_power_(absolute),sensor.boiler_absburnpow,5,0,1,262,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,heatblock,heating block,uint16,C,false,sensor.boiler_heating_block,sensor.boiler_heatblock,5,0,1/10,263,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boilhyston,hysteresis on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_on_temperature,number.boiler_boilhyston,5,0,1,264,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boilhystoff,hysteresis off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_off_temperature,number.boiler_boilhystoff,5,0,1,265,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boil2hyston,hysteresis stage 2 on temperature,int8 (>=-20<=0),C,true,number.boiler_hysteresis_stage_2_on_temperature,number.boiler_boil2hyston,5,0,1,266,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,boil2hystoff,hysteresis stage 2 off temperature,int8 (>=0<=20),C,true,number.boiler_hysteresis_stage_2_off_temperature,number.boiler_boil2hystoff,5,0,1,267,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,curveon,heatingcurve on,boolean (>=0<=0), ,true,switch.boiler_heatingcurve_on,switch.boiler_curveon,5,0,1,268,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,curvebase,heatingcurve base,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_base,number.boiler_curvebase,5,0,1,269,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,curveend,heatingcurve end,uint8 (>=20<=90),C,true,number.boiler_heatingcurve_end,number.boiler_curveend,5,0,1,270,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,summertemp,summer temperature,uint8 (>=0<=45),C,true,number.boiler_summer_temperature,number.boiler_summertemp,5,0,1,271,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nofrostmode,nofrost mode,boolean (>=0<=0), ,true,switch.boiler_nofrost_mode,switch.boiler_nofrostmode,5,0,1,272,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nofrosttemp,nofrost temperature,uint8 (>=0<=10),C,true,number.boiler_nofrost_temperature,number.boiler_nofrosttemp,5,0,1,273,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,heatingactivated,heating activated,boolean (>=0<=0), ,true,switch.boiler_heating_activated,switch.boiler_heatingactivated,5,0,1,14,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,heatingtemp,heating temperature,uint8 (>=0<=90),C,true,number.boiler_heating_temperature,number.boiler_heatingtemp,5,0,1,15,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,heatingpump,heating pump,boolean, ,false,binary_sensor.boiler_heating_pump,binary_sensor.boiler_heatingpump,5,0,1,16,1 @@ -3846,11 +3912,14 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,pc1flow,Flow PC1,int16,l/h,false,sensor.boiler_Flow_PC1,sensor.boiler_pc1flow,5,0,1,81,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,pc1on,PC1,boolean, ,false,binary_sensor.boiler_PC1,binary_sensor.boiler_pc1on,5,0,1,82,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,pc1rate,PC1 rate,uint8,%,false,sensor.boiler_PC1_rate,sensor.boiler_pc1rate,5,0,1,83,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,97,2 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,pumpkickhour,pump kick hour,uint8 (>=0<=23),hours,true,number.boiler_pump_kick_hour,number.boiler_pumpkickhour,5,0,1,84,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,pumpkickday,pump kick day,enum [mo\|tu\|we\|th\|fr\|sa\|su\|all] (>=0<=0), ,true,select.boiler_pump_kick_day,select.boiler_pumpkickday,5,0,1,85,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,pumpkickdelay,pump kick delay,uint16 (>=0<=32767),minutes,true,number.boiler_pump_kick_delay,number.boiler_pumpkickdelay,5,0,1,86,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,meterheat,meter heating,uint24,kWh,false,sensor.boiler_meter_heating,sensor.boiler_meterheat,5,0,1/10,100,2 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,dhw.meter,meter,uint24,kWh,false,sensor.boiler_dhw_meter,sensor.boiler_dhw_meter,5,9,1/10,2,2 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,271,2 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,gasmeterheat,gas meter heating,uint24,kWh,false,sensor.boiler_gas_meter_heating,sensor.boiler_gasmeterheat,5,0,1/10,274,2 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,dhw.gasmeter,gas meter,uint24,kWh,false,sensor.boiler_dhw_gas_meter,sensor.boiler_dhw_gasmeter,5,9,1/10,71,2 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,273,2 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nrgheat2,energy heating 2,uint24,kWh,false,sensor.boiler_energy_heating_2,sensor.boiler_nrgheat2,5,0,1/10,276,2 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,dhw.nrg2,energy 2,uint24,kWh,false,sensor.boiler_dhw_energy_2,sensor.boiler_dhw_nrg2,5,9,1/10,73,2 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,dhw.tapactivated,turn on/off,boolean (>=0<=0), ,true,switch.boiler_dhw_turn_on/off,switch.boiler_dhw_tapactivated,5,9,1,28,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,dhw.settemp,set temperature,uint8,C,false,sensor.boiler_dhw_set_temperature,sensor.boiler_dhw_settemp,5,9,1,29,1 @@ -3893,9 +3962,9 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,dhw.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.boiler_dhw_dhw_priority,switch.boiler_dhw_dhwprio,5,9,1,66,1 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,dhw.starts,starts,uint24, ,false,sensor.boiler_dhw_starts,sensor.boiler_dhw_starts,5,9,1,67,2 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,dhw.workm,active time,time,minutes,false,sensor.boiler_dhw_active_time,sensor.boiler_dhw_workm,5,9,1,69,2 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,275,1 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,85,2 -"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,87,2 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nompower,nominal Power,uint8 (>=0<=0),kW,true,number.boiler_nominal_Power,number.boiler_nompower,5,0,1,278,1 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nrgtotal,total energy,uint24,kWh,false,sensor.boiler_total_energy,sensor.boiler_nrgtotal,5,0,1/100,88,2 +"Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,nrgheat,energy heating,uint24 (>=0<=10000000),kWh,true,number.boiler_energy_heating,number.boiler_nrgheat,5,0,1/100,90,2 "Logamax Plus GB122, Condense 2300, Junkers Cerapur GC2200W",boiler,234,dhw.nrg,energy,uint24 (>=0<=10000000),kWh,true,number.boiler_dhw_energy,number.boiler_dhw_nrg,5,9,1/100,0,2 "Logamatic TC100, Moduline Easy",thermostat,202,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "Logamatic TC100, Moduline Easy",thermostat,202,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 @@ -3942,55 +4011,58 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "UI800, BC400",thermostat,4,hc1.summertemp,summer temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 "UI800, BC400",thermostat,4,hc1.designtemp,design temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 "UI800, BC400",thermostat,4,hc1.offsettemp,offset temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_offset_temperature,number.thermostat_hc1_offsettemp,6,1,1,10,1 -"UI800, BC400",thermostat,4,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"UI800, BC400",thermostat,4,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"UI800, BC400",thermostat,4,hc1.roominfluence,room influence,uint8 (>=0<=0),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,13,1 -"UI800, BC400",thermostat,4,hc1.roominflfactor,room influence factor,uint8 (>=0<=0), ,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,1/10,14,1 -"UI800, BC400",thermostat,4,hc1.curroominfl,current room influence,int16,C,false,sensor.thermostat_hc1_current_room_influence,sensor.thermostat_hc1_curroominfl,6,1,1/10,15,1 -"UI800, BC400",thermostat,4,hc1.nofrostmode,nofrost mode,enum [room\|outdoor\|room outdoor] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,16,1 -"UI800, BC400",thermostat,4,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,17,1 -"UI800, BC400",thermostat,4,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 -"UI800, BC400",thermostat,4,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"UI800, BC400",thermostat,4,hc1.summersetmode,set summer mode,enum [summer\|auto\|winter] (>=0<=0), ,true,select.thermostat_hc1_set_summer_mode,select.thermostat_hc1_summersetmode,6,1,1,20,1 -"UI800, BC400",thermostat,4,hc1.hpoperatingmode,heatpump operating mode,enum [off\|auto\|heating\|cooling] (>=0<=0), ,true,select.thermostat_hc1_heatpump_operating_mode,select.thermostat_hc1_hpoperatingmode,6,1,1,21,1 -"UI800, BC400",thermostat,4,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 -"UI800, BC400",thermostat,4,hc1.hpoperatingstate,heatpump operating state,enum [heating\|off\|cooling], ,false,sensor.thermostat_hc1_heatpump_operating_state,sensor.thermostat_hc1_hpoperatingstate,6,1,1,23,1 -"UI800, BC400",thermostat,4,hc1.vacationmode,vacation mode,boolean, ,false,binary_sensor.thermostat_hc1_vacation_mode,binary_sensor.thermostat_hc1_vacationmode,6,1,1,24,1 -"UI800, BC400",thermostat,4,hc1.controlmode,control mode,enum [weather compensated\|outside basepoint\|n/a\|room\|power\|constant] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 -"UI800, BC400",thermostat,4,hc1.program,program,enum [prog 1\|prog 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"UI800, BC400",thermostat,4,hc1.tempautotemp,temporary set temperature automode,int8 (>=-1<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"UI800, BC400",thermostat,4,hc1.cooltemp,cooling temperature,int8 (>=-1<=30),C,true,number.thermostat_hc1_cooling_temperature,number.thermostat_hc1_cooltemp,6,1,1/2,28,1 -"UI800, BC400",thermostat,4,hc1.fastheatup,fast heatup,uint8 (>=0<=0),%,true,number.thermostat_hc1_fast_heatup,number.thermostat_hc1_fastheatup,6,1,1,29,1 -"UI800, BC400",thermostat,4,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"UI800, BC400",thermostat,4,hc1.reducemode,reduce mode,enum [outdoor\|room\|reduce] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,31,1 -"UI800, BC400",thermostat,4,hc1.noreducetemp,no reduce below temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,32,1 -"UI800, BC400",thermostat,4,hc1.reducetemp,off/reduce switch temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,33,1 -"UI800, BC400",thermostat,4,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,34,1 -"UI800, BC400",thermostat,4,hc1.hpcooling,hp cooling,boolean (>=0<=0), ,true,switch.thermostat_hc1_hp_cooling,switch.thermostat_hc1_hpcooling,6,1,1,35,1 -"UI800, BC400",thermostat,4,hc1.coolingon,cooling on,boolean, ,false,binary_sensor.thermostat_hc1_cooling_on,binary_sensor.thermostat_hc1_coolingon,6,1,1,36,1 -"UI800, BC400",thermostat,4,hc1.hpmode,HP Mode,enum [heating\|cooling\|heating & cooling] (>=0<=0), ,true,select.thermostat_hc1_HP_Mode,select.thermostat_hc1_hpmode,6,1,1,37,1 -"UI800, BC400",thermostat,4,hc1.dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,38,1 -"UI800, BC400",thermostat,4,hc1.roomtempdiff,room temp difference,uint8 (>=0<=0),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,39,1 -"UI800, BC400",thermostat,4,hc1.hpminflowtemp,HP min. flow temp.,uint8 (>=0<=0),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,40,1 -"UI800, BC400",thermostat,4,hc1.control,control device,enum [off\|-\|RC100\|RC100H\|-\|RC120RF\|RC220/RT800\|single] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"UI800, BC400",thermostat,4,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"UI800, BC400",thermostat,4,hc1.remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,43,1 -"UI800, BC400",thermostat,4,hc1.heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,44,1 -"UI800, BC400",thermostat,4,hc1.heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,45,1 -"UI800, BC400",thermostat,4,hc1.instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,46,1 -"UI800, BC400",thermostat,4,hc1.boost,boost mode,boolean (>=0<=0), ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,47,1 -"UI800, BC400",thermostat,4,hc1.boosttime,boost time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,48,1 -"UI800, BC400",thermostat,4,hc1.coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,49,1 -"UI800, BC400",thermostat,4,hc1.coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,50,1 -"UI800, BC400",thermostat,4,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,51,1 -"UI800, BC400",thermostat,4,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,52,1 -"UI800, BC400",thermostat,4,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,53,1 -"UI800, BC400",thermostat,4,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,54,1 -"UI800, BC400",thermostat,4,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,55,1 -"UI800, BC400",thermostat,4,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,56,1 -"UI800, BC400",thermostat,4,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,57,1 -"UI800, BC400",thermostat,4,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,58,1 -"UI800, BC400",thermostat,4,hc1.inttime,integral time,uint8 (>=3<=80),minutes,true,number.thermostat_hc1_integral_time,number.thermostat_hc1_inttime,6,1,1,59,1 +"UI800, BC400",thermostat,4,hc1.baseflowtemp,base flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_base_flow_temperature,number.thermostat_hc1_baseflowtemp,6,1,1,11,1 +"UI800, BC400",thermostat,4,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"UI800, BC400",thermostat,4,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"UI800, BC400",thermostat,4,hc1.roominfluence,room influence,uint8 (>=0<=0),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,14,1 +"UI800, BC400",thermostat,4,hc1.roominflfactor,room influence factor,uint8 (>=0<=0), ,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,1/10,15,1 +"UI800, BC400",thermostat,4,hc1.curroominfl,current room influence,int16,C,false,sensor.thermostat_hc1_current_room_influence,sensor.thermostat_hc1_curroominfl,6,1,1/10,16,1 +"UI800, BC400",thermostat,4,hc1.nofrostmode,nofrost mode,enum [room\|outdoor\|room outdoor] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,17,1 +"UI800, BC400",thermostat,4,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,18,1 +"UI800, BC400",thermostat,4,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 +"UI800, BC400",thermostat,4,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"UI800, BC400",thermostat,4,hc1.summersetmode,set summer mode,enum [summer\|auto\|winter] (>=0<=0), ,true,select.thermostat_hc1_set_summer_mode,select.thermostat_hc1_summersetmode,6,1,1,21,1 +"UI800, BC400",thermostat,4,hc1.hpoperatingmode,heatpump operating mode,enum [off\|auto\|heating\|cooling] (>=0<=0), ,true,select.thermostat_hc1_heatpump_operating_mode,select.thermostat_hc1_hpoperatingmode,6,1,1,22,1 +"UI800, BC400",thermostat,4,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 +"UI800, BC400",thermostat,4,hc1.hpoperatingstate,heatpump operating state,enum [heating\|off\|cooling], ,false,sensor.thermostat_hc1_heatpump_operating_state,sensor.thermostat_hc1_hpoperatingstate,6,1,1,24,1 +"UI800, BC400",thermostat,4,hc1.vacationmode,vacation mode,boolean, ,false,binary_sensor.thermostat_hc1_vacation_mode,binary_sensor.thermostat_hc1_vacationmode,6,1,1,25,1 +"UI800, BC400",thermostat,4,hc1.controlmode,control mode,enum [weather compensated\|outside basepoint\|n/a\|room\|power\|constant] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 +"UI800, BC400",thermostat,4,hc1.program,program,enum [prog 1\|prog 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"UI800, BC400",thermostat,4,hc1.tempautotemp,temporary set temperature automode,int8 (>=-1<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"UI800, BC400",thermostat,4,hc1.cooltemp,cooling temperature,int8 (>=-1<=30),C,true,number.thermostat_hc1_cooling_temperature,number.thermostat_hc1_cooltemp,6,1,1/2,29,1 +"UI800, BC400",thermostat,4,hc1.fastheatup,fast heatup,uint8 (>=0<=0),%,true,number.thermostat_hc1_fast_heatup,number.thermostat_hc1_fastheatup,6,1,1,30,1 +"UI800, BC400",thermostat,4,hc1.comfoffset,comfort point offset,uint8 (>=0<=10),C,true,number.thermostat_hc1_comfort_point_offset,number.thermostat_hc1_comfoffset,6,1,1,31,1 +"UI800, BC400",thermostat,4,hc1.comftemp,comfort point temperature,int8 (>=-5<=15),C,true,number.thermostat_hc1_comfort_point_temperature,number.thermostat_hc1_comftemp,6,1,1,32,1 +"UI800, BC400",thermostat,4,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"UI800, BC400",thermostat,4,hc1.reducemode,reduce mode,enum [outdoor\|room\|reduce] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,34,1 +"UI800, BC400",thermostat,4,hc1.noreducetemp,no reduce below temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,35,1 +"UI800, BC400",thermostat,4,hc1.reducetemp,off/reduce switch temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,36,1 +"UI800, BC400",thermostat,4,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,37,1 +"UI800, BC400",thermostat,4,hc1.hpcooling,hp cooling,boolean (>=0<=0), ,true,switch.thermostat_hc1_hp_cooling,switch.thermostat_hc1_hpcooling,6,1,1,38,1 +"UI800, BC400",thermostat,4,hc1.coolingon,cooling on,boolean, ,false,binary_sensor.thermostat_hc1_cooling_on,binary_sensor.thermostat_hc1_coolingon,6,1,1,39,1 +"UI800, BC400",thermostat,4,hc1.hpmode,HP Mode,enum [heating\|cooling\|heating & cooling] (>=0<=0), ,true,select.thermostat_hc1_HP_Mode,select.thermostat_hc1_hpmode,6,1,1,40,1 +"UI800, BC400",thermostat,4,hc1.dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,41,1 +"UI800, BC400",thermostat,4,hc1.roomtempdiff,room temp difference,uint8 (>=0<=0),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,42,1 +"UI800, BC400",thermostat,4,hc1.hpminflowtemp,HP min. flow temp.,uint8 (>=0<=0),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,43,1 +"UI800, BC400",thermostat,4,hc1.control,control device,enum [off\|-\|RC100\|RC100H\|-\|RC120RF\|RC220/RT800\|single] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"UI800, BC400",thermostat,4,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"UI800, BC400",thermostat,4,hc1.remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,46,1 +"UI800, BC400",thermostat,4,hc1.heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,47,1 +"UI800, BC400",thermostat,4,hc1.heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,48,1 +"UI800, BC400",thermostat,4,hc1.instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,49,1 +"UI800, BC400",thermostat,4,hc1.boost,boost mode,boolean (>=0<=0), ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,50,1 +"UI800, BC400",thermostat,4,hc1.boosttime,boost time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,51,1 +"UI800, BC400",thermostat,4,hc1.coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,52,1 +"UI800, BC400",thermostat,4,hc1.coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,53,1 +"UI800, BC400",thermostat,4,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,54,1 +"UI800, BC400",thermostat,4,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,55,1 +"UI800, BC400",thermostat,4,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,56,1 +"UI800, BC400",thermostat,4,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 +"UI800, BC400",thermostat,4,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 +"UI800, BC400",thermostat,4,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,59,1 +"UI800, BC400",thermostat,4,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,60,1 +"UI800, BC400",thermostat,4,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,61,1 +"UI800, BC400",thermostat,4,hc1.inttime,integral time,uint8 (>=3<=80),minutes,true,number.thermostat_hc1_integral_time,number.thermostat_hc1_inttime,6,1,1,62,1 "UI800, BC400",thermostat,4,dhw.mode,operating mode,enum [off\|eco+\|eco\|comfort\|auto] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "UI800, BC400",thermostat,4,dhw.modetype,mode type,enum [off\|eco\|comfort\|eco+], ,false,sensor.thermostat_dhw_mode_type,sensor.thermostat_dhw_modetype,6,9,1,1,1 "UI800, BC400",thermostat,4,dhw.settemp,set temperature,uint8 (>=0<=0),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,2,1 @@ -4010,8 +4082,8 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "CR11",thermostat,10,hc1.currtemp,current room temperature,int16,C,false,sensor.thermostat_hc1_current_room_temperature,sensor.thermostat_hc1_currtemp,6,1,1/10,1,1 "CR11",thermostat,10,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "CR11",thermostat,10,hc1.mode,operating mode,enum [off\|manual] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 -"CR11",thermostat,10,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 -"CR11",thermostat,10,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 +"CR11",thermostat,10,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 +"CR11",thermostat,10,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 "RC10",thermostat,65,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "RC10",thermostat,65,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "RC10",thermostat,65,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4021,15 +4093,15 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC10",thermostat,65,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "RC10",thermostat,65,hc1.mode,operating mode,enum [night\|day\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "RC10",thermostat,65,hc1.modetype,mode type,enum [night\|day], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"RC10",thermostat,65,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"RC10",thermostat,65,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 -"RC10",thermostat,65,hc1.program,program,enum [family\|morning\|evening\|am\|pm\|midday\|singles\|seniors] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"RC10",thermostat,65,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"RC10",thermostat,65,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"RC10",thermostat,65,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=0),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"RC10",thermostat,65,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 +"RC10",thermostat,65,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"RC10",thermostat,65,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 +"RC10",thermostat,65,hc1.program,program,enum [family\|morning\|evening\|am\|pm\|midday\|singles\|seniors] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"RC10",thermostat,65,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"RC10",thermostat,65,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"RC10",thermostat,65,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=0),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"RC10",thermostat,65,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 "RC10",thermostat,65,hc1.summertemp,summer temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 -"RC10",thermostat,65,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 +"RC10",thermostat,65,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 "RC30",thermostat,67,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "RC30",thermostat,67,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "RC30",thermostat,67,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4048,40 +4120,40 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC30",thermostat,67,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "RC30",thermostat,67,hc1.mode,operating mode,enum [night\|day\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "RC30",thermostat,67,hc1.modetype,mode type,enum [night\|day], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"RC30",thermostat,67,hc1.daytemp,day temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"RC30",thermostat,67,hc1.nighttemp,night temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 +"RC30",thermostat,67,hc1.daytemp,day temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"RC30",thermostat,67,hc1.nighttemp,night temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 "RC30",thermostat,67,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 "RC30",thermostat,67,hc1.offsettemp,offset temperature,int8 (>=-5<=5),C,true,number.thermostat_hc1_offset_temperature,number.thermostat_hc1_offsettemp,6,1,1/2,10,1 -"RC30",thermostat,67,hc1.holidaytemp,holiday temperature,uint8 (>=5<=30),C,true,number.thermostat_hc1_holiday_temperature,number.thermostat_hc1_holidaytemp,6,1,1/2,62,1 -"RC30",thermostat,67,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"RC30",thermostat,67,hc1.holidaytemp,holiday temperature,uint8 (>=5<=30),C,true,number.thermostat_hc1_holiday_temperature,number.thermostat_hc1_holidaytemp,6,1,1/2,65,1 +"RC30",thermostat,67,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "RC30",thermostat,67,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 -"RC30",thermostat,67,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 -"RC30",thermostat,67,hc1.holidaymode,holiday mode,boolean, ,false,binary_sensor.thermostat_hc1_holiday_mode,binary_sensor.thermostat_hc1_holidaymode,6,1,1,63,1 -"RC30",thermostat,67,hc1.nofrosttemp,nofrost temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,17,1 -"RC30",thermostat,67,hc1.nofrostmode,nofrost mode,enum [off\|outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,16,1 -"RC30",thermostat,67,hc1.roominfluence,room influence,uint8 (>=0<=10),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,13,1 -"RC30",thermostat,67,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"RC30",thermostat,67,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"RC30",thermostat,67,hc1.flowtempoffset,flow temperature offset for mixer,uint8 (>=0<=20),C,true,number.thermostat_hc1_flow_temperature_offset_for_mixer,number.thermostat_hc1_flowtempoffset,6,1,1,64,1 -"RC30",thermostat,67,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"RC30",thermostat,67,hc1.reducemode,reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,31,1 -"RC30",thermostat,67,hc1.controlmode,control mode,enum [outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 -"RC30",thermostat,67,hc1.control,control device,enum [off\|RC20\|RC3x] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"RC30",thermostat,67,hc1.holidays,holiday dates,string (>=0<=0), ,true,sensor.thermostat_hc1_holiday_dates,sensor.thermostat_hc1_holidays,6,1,1,65,13 -"RC30",thermostat,67,hc1.vacations,vacation dates,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates,sensor.thermostat_hc1_vacations,6,1,1,78,13 -"RC30",thermostat,67,hc1.program,program,enum [own 1\|family\|morning\|evening\|am\|pm\|midday\|singles\|seniors\|new\|own 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"RC30",thermostat,67,hc1.pause,pause time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_pause_time,number.thermostat_hc1_pause,6,1,1,91,1 -"RC30",thermostat,67,hc1.party,party time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_party_time,number.thermostat_hc1_party,6,1,1,92,1 -"RC30",thermostat,67,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"RC30",thermostat,67,hc1.noreducetemp,no reduce below temperature,int8 (>=-31<=10),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,32,1 -"RC30",thermostat,67,hc1.reducetemp,off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,33,1 -"RC30",thermostat,67,hc1.vacreducetemp,vacations off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_vacations_off/reduce_switch_temperature,number.thermostat_hc1_vacreducetemp,6,1,1,93,1 -"RC30",thermostat,67,hc1.vacreducemode,vacations reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_vacations_reduce_mode,select.thermostat_hc1_vacreducemode,6,1,1,94,1 -"RC30",thermostat,67,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"RC30",thermostat,67,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,34,1 -"RC30",thermostat,67,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"RC30",thermostat,67,hc1.switchtime1,own1 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own1_program_switchtime,sensor.thermostat_hc1_switchtime1,6,1,1,95,8 -"RC30",thermostat,67,hc1.switchtime2,own2 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own2_program_switchtime,sensor.thermostat_hc1_switchtime2,6,1,1,103,8 +"RC30",thermostat,67,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 +"RC30",thermostat,67,hc1.holidaymode,holiday mode,boolean, ,false,binary_sensor.thermostat_hc1_holiday_mode,binary_sensor.thermostat_hc1_holidaymode,6,1,1,66,1 +"RC30",thermostat,67,hc1.nofrosttemp,nofrost temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,18,1 +"RC30",thermostat,67,hc1.nofrostmode,nofrost mode,enum [off\|outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,17,1 +"RC30",thermostat,67,hc1.roominfluence,room influence,uint8 (>=0<=10),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,14,1 +"RC30",thermostat,67,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"RC30",thermostat,67,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"RC30",thermostat,67,hc1.flowtempoffset,flow temperature offset for mixer,uint8 (>=0<=20),C,true,number.thermostat_hc1_flow_temperature_offset_for_mixer,number.thermostat_hc1_flowtempoffset,6,1,1,67,1 +"RC30",thermostat,67,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"RC30",thermostat,67,hc1.reducemode,reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,34,1 +"RC30",thermostat,67,hc1.controlmode,control mode,enum [outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 +"RC30",thermostat,67,hc1.control,control device,enum [off\|RC20\|RC3x] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"RC30",thermostat,67,hc1.holidays,holiday dates,string (>=0<=0), ,true,sensor.thermostat_hc1_holiday_dates,sensor.thermostat_hc1_holidays,6,1,1,68,13 +"RC30",thermostat,67,hc1.vacations,vacation dates,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates,sensor.thermostat_hc1_vacations,6,1,1,81,13 +"RC30",thermostat,67,hc1.program,program,enum [own 1\|family\|morning\|evening\|am\|pm\|midday\|singles\|seniors\|new\|own 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"RC30",thermostat,67,hc1.pause,pause time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_pause_time,number.thermostat_hc1_pause,6,1,1,94,1 +"RC30",thermostat,67,hc1.party,party time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_party_time,number.thermostat_hc1_party,6,1,1,95,1 +"RC30",thermostat,67,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"RC30",thermostat,67,hc1.noreducetemp,no reduce below temperature,int8 (>=-31<=10),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,35,1 +"RC30",thermostat,67,hc1.reducetemp,off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,36,1 +"RC30",thermostat,67,hc1.vacreducetemp,vacations off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_vacations_off/reduce_switch_temperature,number.thermostat_hc1_vacreducetemp,6,1,1,96,1 +"RC30",thermostat,67,hc1.vacreducemode,vacations reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_vacations_reduce_mode,select.thermostat_hc1_vacreducemode,6,1,1,97,1 +"RC30",thermostat,67,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"RC30",thermostat,67,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,37,1 +"RC30",thermostat,67,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"RC30",thermostat,67,hc1.switchtime1,own1 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own1_program_switchtime,sensor.thermostat_hc1_switchtime1,6,1,1,98,8 +"RC30",thermostat,67,hc1.switchtime2,own2 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own2_program_switchtime,sensor.thermostat_hc1_switchtime2,6,1,1,106,8 "RC30",thermostat,67,dhw.mode,operating mode,enum [off\|on\|auto] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "RC30",thermostat,67,dhw.circmode,circulation pump mode,enum [off\|on\|auto] (>=0<=0), ,true,select.thermostat_dhw_circulation_pump_mode,select.thermostat_dhw_circmode,6,9,1,4,1 "RC30",thermostat,67,dhw.progmode,program,enum [std prog\|own prog] (>=0<=0), ,true,select.thermostat_dhw_program,select.thermostat_dhw_progmode,6,9,1,13,1 @@ -4103,12 +4175,12 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC20, Moduline 300",thermostat,77,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "RC20, Moduline 300",thermostat,77,hc1.mode,operating mode,enum [off\|manual\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "RC20, Moduline 300",thermostat,77,hc1.manualtemp,manual temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_manual_temperature,number.thermostat_hc1_manualtemp,6,1,1/2,6,1 -"RC20, Moduline 300",thermostat,77,hc1.offtemp,temperature when mode is off,uint8 (>=0<=0),C,true,number.thermostat_hc1_temperature_when_mode_is_off,number.thermostat_hc1_offtemp,6,1,1/2,111,1 -"RC20, Moduline 300",thermostat,77,hc1.daytemp2,day temperature T2,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T2,number.thermostat_hc1_daytemp2,6,1,1/2,112,1 -"RC20, Moduline 300",thermostat,77,hc1.daytemp3,day temperature T3,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T3,number.thermostat_hc1_daytemp3,6,1,1/2,113,1 -"RC20, Moduline 300",thermostat,77,hc1.daytemp4,day temperature T4,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T4,number.thermostat_hc1_daytemp4,6,1,1/2,114,1 -"RC20, Moduline 300",thermostat,77,hc1.nighttemp,night temperature T1,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature_T1,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 -"RC20, Moduline 300",thermostat,77,hc1.switchtime,program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_program_switchtime,sensor.thermostat_hc1_switchtime,6,1,1,115,8 +"RC20, Moduline 300",thermostat,77,hc1.offtemp,temperature when mode is off,uint8 (>=0<=0),C,true,number.thermostat_hc1_temperature_when_mode_is_off,number.thermostat_hc1_offtemp,6,1,1/2,114,1 +"RC20, Moduline 300",thermostat,77,hc1.daytemp2,day temperature T2,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T2,number.thermostat_hc1_daytemp2,6,1,1/2,115,1 +"RC20, Moduline 300",thermostat,77,hc1.daytemp3,day temperature T3,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T3,number.thermostat_hc1_daytemp3,6,1,1/2,116,1 +"RC20, Moduline 300",thermostat,77,hc1.daytemp4,day temperature T4,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T4,number.thermostat_hc1_daytemp4,6,1,1/2,117,1 +"RC20, Moduline 300",thermostat,77,hc1.nighttemp,night temperature T1,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature_T1,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 +"RC20, Moduline 300",thermostat,77,hc1.switchtime,program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_program_switchtime,sensor.thermostat_hc1_switchtime,6,1,1,118,8 "Moduline 400",thermostat,78,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "Moduline 400",thermostat,78,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "Moduline 400",thermostat,78,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4126,26 +4198,26 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Moduline 400",thermostat,78,hc1.currtemp,current room temperature,int16,C,false,sensor.thermostat_hc1_current_room_temperature,sensor.thermostat_hc1_currtemp,6,1,1/10,1,1 "Moduline 400",thermostat,78,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "Moduline 400",thermostat,78,hc1.mode,operating mode,enum [off\|manual\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 -"Moduline 400",thermostat,78,hc1.pause,pause time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_pause_time,number.thermostat_hc1_pause,6,1,1,91,1 -"Moduline 400",thermostat,78,hc1.party,party time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_party_time,number.thermostat_hc1_party,6,1,1,92,1 -"Moduline 400",thermostat,78,hc1.vacations1,vacation dates 1,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_1,sensor.thermostat_hc1_vacations1,6,1,1,123,11 -"Moduline 400",thermostat,78,hc1.vacations2,vacation dates 2,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_2,sensor.thermostat_hc1_vacations2,6,1,1,134,11 -"Moduline 400",thermostat,78,hc1.vacations3,vacation dates 3,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_3,sensor.thermostat_hc1_vacations3,6,1,1,145,11 -"Moduline 400",thermostat,78,hc1.vacations4,vacation dates 4,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_4,sensor.thermostat_hc1_vacations4,6,1,1,156,11 -"Moduline 400",thermostat,78,hc1.vacations5,vacation dates 5,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_5,sensor.thermostat_hc1_vacations5,6,1,1,167,11 -"Moduline 400",thermostat,78,hc1.vacations6,vacation dates 6,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_6,sensor.thermostat_hc1_vacations6,6,1,1,178,11 -"Moduline 400",thermostat,78,hc1.vacations7,vacation dates 7,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_7,sensor.thermostat_hc1_vacations7,6,1,1,189,11 -"Moduline 400",thermostat,78,hc1.program,program,enum [own 1\|family\|morning\|evening\|am\|pm\|midday\|singles\|seniors\|new\|own 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"Moduline 400",thermostat,78,hc1.switchtime1,own1 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own1_program_switchtime,sensor.thermostat_hc1_switchtime1,6,1,1,95,8 -"Moduline 400",thermostat,78,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"Moduline 400",thermostat,78,hc1.controlmode,control mode,enum [outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 -"Moduline 400",thermostat,78,hc1.holidaytemp,holiday temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_holiday_temperature,number.thermostat_hc1_holidaytemp,6,1,1/2,62,1 -"Moduline 400",thermostat,78,hc1.nighttemp,night temperature T1,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature_T1,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 -"Moduline 400",thermostat,78,hc1.daytemp2,day temperature T2,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T2,number.thermostat_hc1_daytemp2,6,1,1/2,112,1 -"Moduline 400",thermostat,78,hc1.daytemp3,day temperature T3,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T3,number.thermostat_hc1_daytemp3,6,1,1/2,113,1 -"Moduline 400",thermostat,78,hc1.daytemp4,day temperature T4,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T4,number.thermostat_hc1_daytemp4,6,1,1/2,114,1 +"Moduline 400",thermostat,78,hc1.pause,pause time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_pause_time,number.thermostat_hc1_pause,6,1,1,94,1 +"Moduline 400",thermostat,78,hc1.party,party time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_party_time,number.thermostat_hc1_party,6,1,1,95,1 +"Moduline 400",thermostat,78,hc1.vacations1,vacation dates 1,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_1,sensor.thermostat_hc1_vacations1,6,1,1,126,11 +"Moduline 400",thermostat,78,hc1.vacations2,vacation dates 2,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_2,sensor.thermostat_hc1_vacations2,6,1,1,137,11 +"Moduline 400",thermostat,78,hc1.vacations3,vacation dates 3,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_3,sensor.thermostat_hc1_vacations3,6,1,1,148,11 +"Moduline 400",thermostat,78,hc1.vacations4,vacation dates 4,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_4,sensor.thermostat_hc1_vacations4,6,1,1,159,11 +"Moduline 400",thermostat,78,hc1.vacations5,vacation dates 5,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_5,sensor.thermostat_hc1_vacations5,6,1,1,170,11 +"Moduline 400",thermostat,78,hc1.vacations6,vacation dates 6,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_6,sensor.thermostat_hc1_vacations6,6,1,1,181,11 +"Moduline 400",thermostat,78,hc1.vacations7,vacation dates 7,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates_7,sensor.thermostat_hc1_vacations7,6,1,1,192,11 +"Moduline 400",thermostat,78,hc1.program,program,enum [own 1\|family\|morning\|evening\|am\|pm\|midday\|singles\|seniors\|new\|own 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"Moduline 400",thermostat,78,hc1.switchtime1,own1 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own1_program_switchtime,sensor.thermostat_hc1_switchtime1,6,1,1,98,8 +"Moduline 400",thermostat,78,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"Moduline 400",thermostat,78,hc1.controlmode,control mode,enum [outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 +"Moduline 400",thermostat,78,hc1.holidaytemp,holiday temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_holiday_temperature,number.thermostat_hc1_holidaytemp,6,1,1/2,65,1 +"Moduline 400",thermostat,78,hc1.nighttemp,night temperature T1,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature_T1,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 +"Moduline 400",thermostat,78,hc1.daytemp2,day temperature T2,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T2,number.thermostat_hc1_daytemp2,6,1,1/2,115,1 +"Moduline 400",thermostat,78,hc1.daytemp3,day temperature T3,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T3,number.thermostat_hc1_daytemp3,6,1,1/2,116,1 +"Moduline 400",thermostat,78,hc1.daytemp4,day temperature T4,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T4,number.thermostat_hc1_daytemp4,6,1,1/2,117,1 "Moduline 400",thermostat,78,hc1.manualtemp,manual temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_manual_temperature,number.thermostat_hc1_manualtemp,6,1,1/2,6,1 -"Moduline 400",thermostat,78,hc1.offtemp,temperature when mode is off,uint8 (>=0<=0),C,true,number.thermostat_hc1_temperature_when_mode_is_off,number.thermostat_hc1_offtemp,6,1,1/2,111,1 +"Moduline 400",thermostat,78,hc1.offtemp,temperature when mode is off,uint8 (>=0<=0),C,true,number.thermostat_hc1_temperature_when_mode_is_off,number.thermostat_hc1_offtemp,6,1,1/2,114,1 "Moduline 400",thermostat,78,dhw.mode,operating mode,enum [on\|off\|auto] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "Moduline 400",thermostat,78,dhw.whenmodeoff,when thermostat mode off,boolean (>=0<=0), ,true,switch.thermostat_dhw_when_thermostat_mode_off,switch.thermostat_dhw_whenmodeoff,6,9,1,60,1 "Moduline 400",thermostat,78,dhw.disinfecting,disinfecting,boolean (>=0<=0), ,true,switch.thermostat_dhw_disinfecting,switch.thermostat_dhw_disinfecting,6,9,1,8,1 @@ -4160,10 +4232,10 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC10, Moduline 100",thermostat,79,hc1.currtemp,current room temperature,int16,C,false,sensor.thermostat_hc1_current_room_temperature,sensor.thermostat_hc1_currtemp,6,1,1/10,1,1 "RC10, Moduline 100",thermostat,79,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "RC10, Moduline 100",thermostat,79,hc1.mode,operating mode,enum [nofrost\|night\|day] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 -"RC10, Moduline 100",thermostat,79,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"RC10, Moduline 100",thermostat,79,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 -"RC10, Moduline 100",thermostat,79,hc1.reducehours,duration for nighttemp,uint8 (>=0<=0),hours,true,number.thermostat_hc1_duration_for_nighttemp,number.thermostat_hc1_reducehours,6,1,1,200,1 -"RC10, Moduline 100",thermostat,79,hc1.reduceminutes,remaining time for nightmode,uint16,minutes,false,sensor.thermostat_hc1_remaining_time_for_nightmode,sensor.thermostat_hc1_reduceminutes,6,1,1,201,1 +"RC10, Moduline 100",thermostat,79,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"RC10, Moduline 100",thermostat,79,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 +"RC10, Moduline 100",thermostat,79,hc1.reducehours,duration for nighttemp,uint8 (>=0<=0),hours,true,number.thermostat_hc1_duration_for_nighttemp,number.thermostat_hc1_reducehours,6,1,1,203,1 +"RC10, Moduline 100",thermostat,79,hc1.reduceminutes,remaining time for nightmode,uint16,minutes,false,sensor.thermostat_hc1_remaining_time_for_nightmode,sensor.thermostat_hc1_reduceminutes,6,1,1,204,1 "RC10, Moduline 100",thermostat,79,dhw.mode,operating mode,enum [on\|off\|auto] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "Moduline 200",thermostat,80,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "Moduline 200",thermostat,80,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 @@ -4174,10 +4246,10 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Moduline 200",thermostat,80,hc1.currtemp,current room temperature,int16,C,false,sensor.thermostat_hc1_current_room_temperature,sensor.thermostat_hc1_currtemp,6,1,1/10,1,1 "Moduline 200",thermostat,80,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "Moduline 200",thermostat,80,hc1.mode,operating mode,enum [nofrost\|night\|day] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 -"Moduline 200",thermostat,80,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"Moduline 200",thermostat,80,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 -"Moduline 200",thermostat,80,hc1.reducehours,duration for nighttemp,uint8 (>=0<=0),hours,true,number.thermostat_hc1_duration_for_nighttemp,number.thermostat_hc1_reducehours,6,1,1,200,1 -"Moduline 200",thermostat,80,hc1.reduceminutes,remaining time for nightmode,uint16,minutes,false,sensor.thermostat_hc1_remaining_time_for_nightmode,sensor.thermostat_hc1_reduceminutes,6,1,1,201,1 +"Moduline 200",thermostat,80,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"Moduline 200",thermostat,80,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 +"Moduline 200",thermostat,80,hc1.reducehours,duration for nighttemp,uint8 (>=0<=0),hours,true,number.thermostat_hc1_duration_for_nighttemp,number.thermostat_hc1_reducehours,6,1,1,203,1 +"Moduline 200",thermostat,80,hc1.reduceminutes,remaining time for nightmode,uint16,minutes,false,sensor.thermostat_hc1_remaining_time_for_nightmode,sensor.thermostat_hc1_reduceminutes,6,1,1,204,1 "Moduline 200",thermostat,80,dhw.mode,operating mode,enum [on\|off\|auto] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "RC35",thermostat,86,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "RC35",thermostat,86,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 @@ -4194,40 +4266,40 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC35",thermostat,86,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "RC35",thermostat,86,hc1.mode,operating mode,enum [night\|day\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "RC35",thermostat,86,hc1.modetype,mode type,enum [night\|day], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"RC35",thermostat,86,hc1.daytemp,day temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"RC35",thermostat,86,hc1.nighttemp,night temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 +"RC35",thermostat,86,hc1.daytemp,day temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"RC35",thermostat,86,hc1.nighttemp,night temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 "RC35",thermostat,86,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 "RC35",thermostat,86,hc1.offsettemp,offset temperature,int8 (>=-5<=5),C,true,number.thermostat_hc1_offset_temperature,number.thermostat_hc1_offsettemp,6,1,1/2,10,1 -"RC35",thermostat,86,hc1.holidaytemp,holiday temperature,uint8 (>=5<=30),C,true,number.thermostat_hc1_holiday_temperature,number.thermostat_hc1_holidaytemp,6,1,1/2,62,1 -"RC35",thermostat,86,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"RC35",thermostat,86,hc1.holidaytemp,holiday temperature,uint8 (>=5<=30),C,true,number.thermostat_hc1_holiday_temperature,number.thermostat_hc1_holidaytemp,6,1,1/2,65,1 +"RC35",thermostat,86,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "RC35",thermostat,86,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 -"RC35",thermostat,86,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 -"RC35",thermostat,86,hc1.holidaymode,holiday mode,boolean, ,false,binary_sensor.thermostat_hc1_holiday_mode,binary_sensor.thermostat_hc1_holidaymode,6,1,1,63,1 -"RC35",thermostat,86,hc1.nofrosttemp,nofrost temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,17,1 -"RC35",thermostat,86,hc1.nofrostmode,nofrost mode,enum [off\|outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,16,1 -"RC35",thermostat,86,hc1.roominfluence,room influence,uint8 (>=0<=10),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,13,1 -"RC35",thermostat,86,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"RC35",thermostat,86,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"RC35",thermostat,86,hc1.flowtempoffset,flow temperature offset for mixer,uint8 (>=0<=20),C,true,number.thermostat_hc1_flow_temperature_offset_for_mixer,number.thermostat_hc1_flowtempoffset,6,1,1,64,1 -"RC35",thermostat,86,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"RC35",thermostat,86,hc1.reducemode,reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,31,1 -"RC35",thermostat,86,hc1.controlmode,control mode,enum [outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 -"RC35",thermostat,86,hc1.control,control device,enum [off\|RC20\|RC3x] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"RC35",thermostat,86,hc1.holidays,holiday dates,string (>=0<=0), ,true,sensor.thermostat_hc1_holiday_dates,sensor.thermostat_hc1_holidays,6,1,1,65,13 -"RC35",thermostat,86,hc1.vacations,vacation dates,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates,sensor.thermostat_hc1_vacations,6,1,1,78,13 -"RC35",thermostat,86,hc1.program,program,enum [own 1\|family\|morning\|evening\|am\|pm\|midday\|singles\|seniors\|new\|own 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"RC35",thermostat,86,hc1.pause,pause time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_pause_time,number.thermostat_hc1_pause,6,1,1,91,1 -"RC35",thermostat,86,hc1.party,party time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_party_time,number.thermostat_hc1_party,6,1,1,92,1 -"RC35",thermostat,86,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"RC35",thermostat,86,hc1.noreducetemp,no reduce below temperature,int8 (>=-31<=10),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,32,1 -"RC35",thermostat,86,hc1.reducetemp,off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,33,1 -"RC35",thermostat,86,hc1.vacreducetemp,vacations off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_vacations_off/reduce_switch_temperature,number.thermostat_hc1_vacreducetemp,6,1,1,93,1 -"RC35",thermostat,86,hc1.vacreducemode,vacations reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_vacations_reduce_mode,select.thermostat_hc1_vacreducemode,6,1,1,94,1 -"RC35",thermostat,86,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"RC35",thermostat,86,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,34,1 -"RC35",thermostat,86,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"RC35",thermostat,86,hc1.switchtime1,own1 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own1_program_switchtime,sensor.thermostat_hc1_switchtime1,6,1,1,95,8 -"RC35",thermostat,86,hc1.switchtime2,own2 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own2_program_switchtime,sensor.thermostat_hc1_switchtime2,6,1,1,103,8 +"RC35",thermostat,86,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 +"RC35",thermostat,86,hc1.holidaymode,holiday mode,boolean, ,false,binary_sensor.thermostat_hc1_holiday_mode,binary_sensor.thermostat_hc1_holidaymode,6,1,1,66,1 +"RC35",thermostat,86,hc1.nofrosttemp,nofrost temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,18,1 +"RC35",thermostat,86,hc1.nofrostmode,nofrost mode,enum [off\|outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,17,1 +"RC35",thermostat,86,hc1.roominfluence,room influence,uint8 (>=0<=10),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,14,1 +"RC35",thermostat,86,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"RC35",thermostat,86,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"RC35",thermostat,86,hc1.flowtempoffset,flow temperature offset for mixer,uint8 (>=0<=20),C,true,number.thermostat_hc1_flow_temperature_offset_for_mixer,number.thermostat_hc1_flowtempoffset,6,1,1,67,1 +"RC35",thermostat,86,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"RC35",thermostat,86,hc1.reducemode,reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,34,1 +"RC35",thermostat,86,hc1.controlmode,control mode,enum [outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 +"RC35",thermostat,86,hc1.control,control device,enum [off\|RC20\|RC3x] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"RC35",thermostat,86,hc1.holidays,holiday dates,string (>=0<=0), ,true,sensor.thermostat_hc1_holiday_dates,sensor.thermostat_hc1_holidays,6,1,1,68,13 +"RC35",thermostat,86,hc1.vacations,vacation dates,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates,sensor.thermostat_hc1_vacations,6,1,1,81,13 +"RC35",thermostat,86,hc1.program,program,enum [own 1\|family\|morning\|evening\|am\|pm\|midday\|singles\|seniors\|new\|own 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"RC35",thermostat,86,hc1.pause,pause time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_pause_time,number.thermostat_hc1_pause,6,1,1,94,1 +"RC35",thermostat,86,hc1.party,party time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_party_time,number.thermostat_hc1_party,6,1,1,95,1 +"RC35",thermostat,86,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"RC35",thermostat,86,hc1.noreducetemp,no reduce below temperature,int8 (>=-31<=10),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,35,1 +"RC35",thermostat,86,hc1.reducetemp,off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,36,1 +"RC35",thermostat,86,hc1.vacreducetemp,vacations off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_vacations_off/reduce_switch_temperature,number.thermostat_hc1_vacreducetemp,6,1,1,96,1 +"RC35",thermostat,86,hc1.vacreducemode,vacations reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_vacations_reduce_mode,select.thermostat_hc1_vacreducemode,6,1,1,97,1 +"RC35",thermostat,86,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"RC35",thermostat,86,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,37,1 +"RC35",thermostat,86,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"RC35",thermostat,86,hc1.switchtime1,own1 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own1_program_switchtime,sensor.thermostat_hc1_switchtime1,6,1,1,98,8 +"RC35",thermostat,86,hc1.switchtime2,own2 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own2_program_switchtime,sensor.thermostat_hc1_switchtime2,6,1,1,106,8 "RC35",thermostat,86,dhw.mode,operating mode,enum [off\|on\|auto] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "RC35",thermostat,86,dhw.circmode,circulation pump mode,enum [off\|on\|auto] (>=0<=0), ,true,select.thermostat_dhw_circulation_pump_mode,select.thermostat_dhw_circmode,6,9,1,4,1 "RC35",thermostat,86,dhw.progmode,program,enum [std prog\|own prog] (>=0<=0), ,true,select.thermostat_dhw_program,select.thermostat_dhw_progmode,6,9,1,13,1 @@ -4250,15 +4322,15 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC10, Moduline 100",thermostat,90,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "RC10, Moduline 100",thermostat,90,hc1.mode,operating mode,enum [night\|day\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "RC10, Moduline 100",thermostat,90,hc1.modetype,mode type,enum [night\|day], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"RC10, Moduline 100",thermostat,90,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"RC10, Moduline 100",thermostat,90,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 -"RC10, Moduline 100",thermostat,90,hc1.program,program,enum [family\|morning\|evening\|am\|pm\|midday\|singles\|seniors] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"RC10, Moduline 100",thermostat,90,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"RC10, Moduline 100",thermostat,90,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"RC10, Moduline 100",thermostat,90,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=0),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"RC10, Moduline 100",thermostat,90,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 +"RC10, Moduline 100",thermostat,90,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"RC10, Moduline 100",thermostat,90,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 +"RC10, Moduline 100",thermostat,90,hc1.program,program,enum [family\|morning\|evening\|am\|pm\|midday\|singles\|seniors] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"RC10, Moduline 100",thermostat,90,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"RC10, Moduline 100",thermostat,90,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"RC10, Moduline 100",thermostat,90,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=0),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"RC10, Moduline 100",thermostat,90,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 "RC10, Moduline 100",thermostat,90,hc1.summertemp,summer temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 -"RC10, Moduline 100",thermostat,90,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 +"RC10, Moduline 100",thermostat,90,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 "RC20RF",thermostat,93,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "RC20RF",thermostat,93,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "RC20RF",thermostat,93,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4267,12 +4339,12 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC20RF",thermostat,93,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "RC20RF",thermostat,93,hc1.mode,operating mode,enum [off\|manual\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "RC20RF",thermostat,93,hc1.manualtemp,manual temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_manual_temperature,number.thermostat_hc1_manualtemp,6,1,1/2,6,1 -"RC20RF",thermostat,93,hc1.offtemp,temperature when mode is off,uint8 (>=0<=0),C,true,number.thermostat_hc1_temperature_when_mode_is_off,number.thermostat_hc1_offtemp,6,1,1/2,111,1 -"RC20RF",thermostat,93,hc1.daytemp2,day temperature T2,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T2,number.thermostat_hc1_daytemp2,6,1,1/2,112,1 -"RC20RF",thermostat,93,hc1.daytemp3,day temperature T3,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T3,number.thermostat_hc1_daytemp3,6,1,1/2,113,1 -"RC20RF",thermostat,93,hc1.daytemp4,day temperature T4,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T4,number.thermostat_hc1_daytemp4,6,1,1/2,114,1 -"RC20RF",thermostat,93,hc1.nighttemp,night temperature T1,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature_T1,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 -"RC20RF",thermostat,93,hc1.switchtime,program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_program_switchtime,sensor.thermostat_hc1_switchtime,6,1,1,115,8 +"RC20RF",thermostat,93,hc1.offtemp,temperature when mode is off,uint8 (>=0<=0),C,true,number.thermostat_hc1_temperature_when_mode_is_off,number.thermostat_hc1_offtemp,6,1,1/2,114,1 +"RC20RF",thermostat,93,hc1.daytemp2,day temperature T2,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T2,number.thermostat_hc1_daytemp2,6,1,1/2,115,1 +"RC20RF",thermostat,93,hc1.daytemp3,day temperature T3,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T3,number.thermostat_hc1_daytemp3,6,1,1/2,116,1 +"RC20RF",thermostat,93,hc1.daytemp4,day temperature T4,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature_T4,number.thermostat_hc1_daytemp4,6,1,1/2,117,1 +"RC20RF",thermostat,93,hc1.nighttemp,night temperature T1,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature_T1,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 +"RC20RF",thermostat,93,hc1.switchtime,program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_program_switchtime,sensor.thermostat_hc1_switchtime,6,1,1,118,8 "RFM20 Remote",thermostat,94,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "RFM20 Remote",thermostat,94,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "RFM20 Remote",thermostat,94,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4288,15 +4360,15 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC25",thermostat,151,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "RC25",thermostat,151,hc1.mode,operating mode,enum [night\|day\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "RC25",thermostat,151,hc1.modetype,mode type,enum [night\|day], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"RC25",thermostat,151,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"RC25",thermostat,151,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 -"RC25",thermostat,151,hc1.program,program,enum [family\|morning\|evening\|am\|pm\|midday\|singles\|seniors] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"RC25",thermostat,151,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"RC25",thermostat,151,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"RC25",thermostat,151,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=0),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"RC25",thermostat,151,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 +"RC25",thermostat,151,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"RC25",thermostat,151,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 +"RC25",thermostat,151,hc1.program,program,enum [family\|morning\|evening\|am\|pm\|midday\|singles\|seniors] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"RC25",thermostat,151,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"RC25",thermostat,151,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"RC25",thermostat,151,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=0),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"RC25",thermostat,151,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 "RC25",thermostat,151,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 -"RC25",thermostat,151,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 +"RC25",thermostat,151,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 "RC200, CW100, CR120, CR50",thermostat,157,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "RC200, CW100, CR120, CR50",thermostat,157,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "RC200, CW100, CR120, CR50",thermostat,157,datetime,date/time,string (>=0<=0), ,true,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4331,53 +4403,56 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC200, CW100, CR120, CR50",thermostat,157,hc1.summertemp,summer temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 "RC200, CW100, CR120, CR50",thermostat,157,hc1.designtemp,design temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 "RC200, CW100, CR120, CR50",thermostat,157,hc1.offsettemp,offset temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_offset_temperature,number.thermostat_hc1_offsettemp,6,1,1,10,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.roominfluence,room influence,uint8 (>=0<=0),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,13,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.roominflfactor,room influence factor,uint8 (>=0<=0), ,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,1/10,14,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.curroominfl,current room influence,int16,C,false,sensor.thermostat_hc1_current_room_influence,sensor.thermostat_hc1_curroominfl,6,1,1/10,15,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.nofrostmode,nofrost mode,enum [room\|outdoor\|room outdoor] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,16,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,17,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.summersetmode,set summer mode,enum [summer\|auto\|winter] (>=0<=0), ,true,select.thermostat_hc1_set_summer_mode,select.thermostat_hc1_summersetmode,6,1,1,20,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.hpoperatingmode,heatpump operating mode,enum [off\|auto\|heating\|cooling] (>=0<=0), ,true,select.thermostat_hc1_heatpump_operating_mode,select.thermostat_hc1_hpoperatingmode,6,1,1,21,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.hpoperatingstate,heatpump operating state,enum [heating\|off\|cooling], ,false,sensor.thermostat_hc1_heatpump_operating_state,sensor.thermostat_hc1_hpoperatingstate,6,1,1,23,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.vacationmode,vacation mode,boolean, ,false,binary_sensor.thermostat_hc1_vacation_mode,binary_sensor.thermostat_hc1_vacationmode,6,1,1,24,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.controlmode,control mode,enum [optimized\|simple\|n/a\|room\|power] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.program,program,enum [prog 1\|prog 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.tempautotemp,temporary set temperature automode,int8 (>=-1<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.cooltemp,cooling temperature,int8 (>=-1<=30),C,true,number.thermostat_hc1_cooling_temperature,number.thermostat_hc1_cooltemp,6,1,1/2,28,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.fastheatup,fast heatup,uint8 (>=0<=0),%,true,number.thermostat_hc1_fast_heatup,number.thermostat_hc1_fastheatup,6,1,1,29,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.reducemode,reduce mode,enum [outdoor\|room\|reduce] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,31,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.noreducetemp,no reduce below temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,32,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.reducetemp,off/reduce switch temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,33,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,34,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.hpcooling,hp cooling,boolean (>=0<=0), ,true,switch.thermostat_hc1_hp_cooling,switch.thermostat_hc1_hpcooling,6,1,1,35,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.coolingon,cooling on,boolean, ,false,binary_sensor.thermostat_hc1_cooling_on,binary_sensor.thermostat_hc1_coolingon,6,1,1,36,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.hpmode,HP Mode,enum [heating\|cooling\|heating & cooling] (>=0<=0), ,true,select.thermostat_hc1_HP_Mode,select.thermostat_hc1_hpmode,6,1,1,37,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,38,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.roomtempdiff,room temp difference,uint8 (>=0<=0),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,39,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.hpminflowtemp,HP min. flow temp.,uint8 (>=0<=0),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,40,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,44,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,45,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,46,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.boost,boost mode,boolean (>=0<=0), ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,47,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.boosttime,boost time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,48,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,49,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,50,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,51,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,52,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,53,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,54,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,55,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,56,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,57,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,58,1 -"RC200, CW100, CR120, CR50",thermostat,157,hc1.inttime,integral time,uint8 (>=3<=80),minutes,true,number.thermostat_hc1_integral_time,number.thermostat_hc1_inttime,6,1,1,59,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.baseflowtemp,base flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_base_flow_temperature,number.thermostat_hc1_baseflowtemp,6,1,1,11,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.roominfluence,room influence,uint8 (>=0<=0),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,14,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.roominflfactor,room influence factor,uint8 (>=0<=0), ,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,1/10,15,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.curroominfl,current room influence,int16,C,false,sensor.thermostat_hc1_current_room_influence,sensor.thermostat_hc1_curroominfl,6,1,1/10,16,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.nofrostmode,nofrost mode,enum [room\|outdoor\|room outdoor] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,17,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,18,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.summersetmode,set summer mode,enum [summer\|auto\|winter] (>=0<=0), ,true,select.thermostat_hc1_set_summer_mode,select.thermostat_hc1_summersetmode,6,1,1,21,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.hpoperatingmode,heatpump operating mode,enum [off\|auto\|heating\|cooling] (>=0<=0), ,true,select.thermostat_hc1_heatpump_operating_mode,select.thermostat_hc1_hpoperatingmode,6,1,1,22,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.hpoperatingstate,heatpump operating state,enum [heating\|off\|cooling], ,false,sensor.thermostat_hc1_heatpump_operating_state,sensor.thermostat_hc1_hpoperatingstate,6,1,1,24,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.vacationmode,vacation mode,boolean, ,false,binary_sensor.thermostat_hc1_vacation_mode,binary_sensor.thermostat_hc1_vacationmode,6,1,1,25,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.controlmode,control mode,enum [optimized\|simple\|n/a\|room\|power] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.program,program,enum [prog 1\|prog 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.tempautotemp,temporary set temperature automode,int8 (>=-1<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.cooltemp,cooling temperature,int8 (>=-1<=30),C,true,number.thermostat_hc1_cooling_temperature,number.thermostat_hc1_cooltemp,6,1,1/2,29,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.fastheatup,fast heatup,uint8 (>=0<=0),%,true,number.thermostat_hc1_fast_heatup,number.thermostat_hc1_fastheatup,6,1,1,30,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.comfoffset,comfort point offset,uint8 (>=0<=10),C,true,number.thermostat_hc1_comfort_point_offset,number.thermostat_hc1_comfoffset,6,1,1,31,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.comftemp,comfort point temperature,int8 (>=-5<=15),C,true,number.thermostat_hc1_comfort_point_temperature,number.thermostat_hc1_comftemp,6,1,1,32,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.reducemode,reduce mode,enum [outdoor\|room\|reduce] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,34,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.noreducetemp,no reduce below temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,35,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.reducetemp,off/reduce switch temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,36,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,37,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.hpcooling,hp cooling,boolean (>=0<=0), ,true,switch.thermostat_hc1_hp_cooling,switch.thermostat_hc1_hpcooling,6,1,1,38,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.coolingon,cooling on,boolean, ,false,binary_sensor.thermostat_hc1_cooling_on,binary_sensor.thermostat_hc1_coolingon,6,1,1,39,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.hpmode,HP Mode,enum [heating\|cooling\|heating & cooling] (>=0<=0), ,true,select.thermostat_hc1_HP_Mode,select.thermostat_hc1_hpmode,6,1,1,40,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,41,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.roomtempdiff,room temp difference,uint8 (>=0<=0),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,42,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.hpminflowtemp,HP min. flow temp.,uint8 (>=0<=0),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,43,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,47,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,48,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,49,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.boost,boost mode,boolean (>=0<=0), ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,50,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.boosttime,boost time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,51,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,52,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,53,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,54,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,55,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,56,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,59,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,60,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,61,1 +"RC200, CW100, CR120, CR50",thermostat,157,hc1.inttime,integral time,uint8 (>=3<=80),minutes,true,number.thermostat_hc1_integral_time,number.thermostat_hc1_inttime,6,1,1,62,1 "RC200, CW100, CR120, CR50",thermostat,157,dhw.mode,operating mode,enum [off\|on\|auto] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "RC200, CW100, CR120, CR50",thermostat,157,dhw.modetype,mode type,enum [off\|eco\|comfort\|eco+], ,false,sensor.thermostat_dhw_mode_type,sensor.thermostat_dhw_modetype,6,9,1,1,1 "RC200, CW100, CR120, CR50",thermostat,157,dhw.settemp,set temperature,uint8 (>=0<=0),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,2,1 @@ -4424,55 +4499,58 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.summertemp,summer temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.designtemp,design temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.offsettemp,offset temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_offset_temperature,number.thermostat_hc1_offsettemp,6,1,1,10,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.roominfluence,room influence,uint8 (>=0<=0),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,13,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.roominflfactor,room influence factor,uint8 (>=0<=0), ,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,1/10,14,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.curroominfl,current room influence,int16,C,false,sensor.thermostat_hc1_current_room_influence,sensor.thermostat_hc1_curroominfl,6,1,1/10,15,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.nofrostmode,nofrost mode,enum [room\|outdoor\|room outdoor] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,16,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,17,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.summersetmode,set summer mode,enum [summer\|auto\|winter] (>=0<=0), ,true,select.thermostat_hc1_set_summer_mode,select.thermostat_hc1_summersetmode,6,1,1,20,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.hpoperatingmode,heatpump operating mode,enum [off\|auto\|heating\|cooling] (>=0<=0), ,true,select.thermostat_hc1_heatpump_operating_mode,select.thermostat_hc1_hpoperatingmode,6,1,1,21,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.hpoperatingstate,heatpump operating state,enum [heating\|off\|cooling], ,false,sensor.thermostat_hc1_heatpump_operating_state,sensor.thermostat_hc1_hpoperatingstate,6,1,1,23,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.vacationmode,vacation mode,boolean, ,false,binary_sensor.thermostat_hc1_vacation_mode,binary_sensor.thermostat_hc1_vacationmode,6,1,1,24,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.controlmode,control mode,enum [weather compensated\|outside basepoint\|n/a\|room\|power\|constant] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.program,program,enum [prog 1\|prog 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.tempautotemp,temporary set temperature automode,int8 (>=-1<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.cooltemp,cooling temperature,int8 (>=-1<=30),C,true,number.thermostat_hc1_cooling_temperature,number.thermostat_hc1_cooltemp,6,1,1/2,28,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.fastheatup,fast heatup,uint8 (>=0<=0),%,true,number.thermostat_hc1_fast_heatup,number.thermostat_hc1_fastheatup,6,1,1,29,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.reducemode,reduce mode,enum [outdoor\|room\|reduce] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,31,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.noreducetemp,no reduce below temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,32,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.reducetemp,off/reduce switch temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,33,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,34,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.hpcooling,hp cooling,boolean (>=0<=0), ,true,switch.thermostat_hc1_hp_cooling,switch.thermostat_hc1_hpcooling,6,1,1,35,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.coolingon,cooling on,boolean, ,false,binary_sensor.thermostat_hc1_cooling_on,binary_sensor.thermostat_hc1_coolingon,6,1,1,36,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.hpmode,HP Mode,enum [heating\|cooling\|heating & cooling] (>=0<=0), ,true,select.thermostat_hc1_HP_Mode,select.thermostat_hc1_hpmode,6,1,1,37,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,38,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.roomtempdiff,room temp difference,uint8 (>=0<=0),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,39,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.hpminflowtemp,HP min. flow temp.,uint8 (>=0<=0),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,40,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,43,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,44,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,45,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,46,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.boost,boost mode,boolean (>=0<=0), ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,47,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.boosttime,boost time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,48,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,49,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,50,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,51,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,52,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,53,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,54,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,55,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,56,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,57,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,58,1 -"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.inttime,integral time,uint8 (>=3<=80),minutes,true,number.thermostat_hc1_integral_time,number.thermostat_hc1_inttime,6,1,1,59,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.baseflowtemp,base flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_base_flow_temperature,number.thermostat_hc1_baseflowtemp,6,1,1,11,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.roominfluence,room influence,uint8 (>=0<=0),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,14,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.roominflfactor,room influence factor,uint8 (>=0<=0), ,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,1/10,15,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.curroominfl,current room influence,int16,C,false,sensor.thermostat_hc1_current_room_influence,sensor.thermostat_hc1_curroominfl,6,1,1/10,16,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.nofrostmode,nofrost mode,enum [room\|outdoor\|room outdoor] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,17,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,18,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.summersetmode,set summer mode,enum [summer\|auto\|winter] (>=0<=0), ,true,select.thermostat_hc1_set_summer_mode,select.thermostat_hc1_summersetmode,6,1,1,21,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.hpoperatingmode,heatpump operating mode,enum [off\|auto\|heating\|cooling] (>=0<=0), ,true,select.thermostat_hc1_heatpump_operating_mode,select.thermostat_hc1_hpoperatingmode,6,1,1,22,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.hpoperatingstate,heatpump operating state,enum [heating\|off\|cooling], ,false,sensor.thermostat_hc1_heatpump_operating_state,sensor.thermostat_hc1_hpoperatingstate,6,1,1,24,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.vacationmode,vacation mode,boolean, ,false,binary_sensor.thermostat_hc1_vacation_mode,binary_sensor.thermostat_hc1_vacationmode,6,1,1,25,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.controlmode,control mode,enum [weather compensated\|outside basepoint\|n/a\|room\|power\|constant] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.program,program,enum [prog 1\|prog 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.tempautotemp,temporary set temperature automode,int8 (>=-1<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.cooltemp,cooling temperature,int8 (>=-1<=30),C,true,number.thermostat_hc1_cooling_temperature,number.thermostat_hc1_cooltemp,6,1,1/2,29,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.fastheatup,fast heatup,uint8 (>=0<=0),%,true,number.thermostat_hc1_fast_heatup,number.thermostat_hc1_fastheatup,6,1,1,30,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.comfoffset,comfort point offset,uint8 (>=0<=10),C,true,number.thermostat_hc1_comfort_point_offset,number.thermostat_hc1_comfoffset,6,1,1,31,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.comftemp,comfort point temperature,int8 (>=-5<=15),C,true,number.thermostat_hc1_comfort_point_temperature,number.thermostat_hc1_comftemp,6,1,1,32,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.reducemode,reduce mode,enum [outdoor\|room\|reduce] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,34,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.noreducetemp,no reduce below temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,35,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.reducetemp,off/reduce switch temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,36,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,37,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.hpcooling,hp cooling,boolean (>=0<=0), ,true,switch.thermostat_hc1_hp_cooling,switch.thermostat_hc1_hpcooling,6,1,1,38,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.coolingon,cooling on,boolean, ,false,binary_sensor.thermostat_hc1_cooling_on,binary_sensor.thermostat_hc1_coolingon,6,1,1,39,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.hpmode,HP Mode,enum [heating\|cooling\|heating & cooling] (>=0<=0), ,true,select.thermostat_hc1_HP_Mode,select.thermostat_hc1_hpmode,6,1,1,40,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,41,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.roomtempdiff,room temp difference,uint8 (>=0<=0),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,42,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.hpminflowtemp,HP min. flow temp.,uint8 (>=0<=0),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,43,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,46,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,47,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,48,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,49,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.boost,boost mode,boolean (>=0<=0), ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,50,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.boosttime,boost time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,51,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,52,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,53,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,54,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,55,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,56,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,59,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,60,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,61,1 +"RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,hc1.inttime,integral time,uint8 (>=3<=80),minutes,true,number.thermostat_hc1_integral_time,number.thermostat_hc1_inttime,6,1,1,62,1 "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,dhw.mode,operating mode,enum [off\|normal\|comfort\|auto\|own prog] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,dhw.modetype,mode type,enum [off\|eco\|comfort\|eco+], ,false,sensor.thermostat_dhw_mode_type,sensor.thermostat_dhw_modetype,6,9,1,1,1 "RC3*0, Moduline 3000/1010H, CW400, Sense II, HPC410",thermostat,158,dhw.settemp,set temperature,uint8 (>=0<=0),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,2,1 @@ -4492,8 +4570,8 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "RC100, CR10, Moduline 1000/1010",thermostat,165,hc1.currtemp,current room temperature,int16,C,false,sensor.thermostat_hc1_current_room_temperature,sensor.thermostat_hc1_currtemp,6,1,1/10,1,1 "RC100, CR10, Moduline 1000/1010",thermostat,165,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "RC100, CR10, Moduline 1000/1010",thermostat,165,hc1.mode,operating mode,enum [off\|manual] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 -"RC100, CR10, Moduline 1000/1010",thermostat,165,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 -"RC100, CR10, Moduline 1000/1010",thermostat,165,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 +"RC100, CR10, Moduline 1000/1010",thermostat,165,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 +"RC100, CR10, Moduline 1000/1010",thermostat,165,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 "Rego 2000/3000",thermostat,172,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "Rego 2000/3000",thermostat,172,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "Rego 2000/3000",thermostat,172,datetime,date/time,string (>=0<=0), ,true,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4528,55 +4606,58 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Rego 2000/3000",thermostat,172,hc1.summertemp,summer temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 "Rego 2000/3000",thermostat,172,hc1.designtemp,design temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 "Rego 2000/3000",thermostat,172,hc1.offsettemp,offset temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_offset_temperature,number.thermostat_hc1_offsettemp,6,1,1,10,1 -"Rego 2000/3000",thermostat,172,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"Rego 2000/3000",thermostat,172,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"Rego 2000/3000",thermostat,172,hc1.roominfluence,room influence,uint8 (>=0<=0),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,13,1 -"Rego 2000/3000",thermostat,172,hc1.roominflfactor,room influence factor,uint8 (>=0<=0), ,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,1/10,14,1 -"Rego 2000/3000",thermostat,172,hc1.curroominfl,current room influence,int16,C,false,sensor.thermostat_hc1_current_room_influence,sensor.thermostat_hc1_curroominfl,6,1,1/10,15,1 -"Rego 2000/3000",thermostat,172,hc1.nofrostmode,nofrost mode,enum [room\|outdoor\|room outdoor] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,16,1 -"Rego 2000/3000",thermostat,172,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,17,1 -"Rego 2000/3000",thermostat,172,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 -"Rego 2000/3000",thermostat,172,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"Rego 2000/3000",thermostat,172,hc1.summersetmode,set summer mode,enum [summer\|auto\|winter] (>=0<=0), ,true,select.thermostat_hc1_set_summer_mode,select.thermostat_hc1_summersetmode,6,1,1,20,1 -"Rego 2000/3000",thermostat,172,hc1.hpoperatingmode,heatpump operating mode,enum [off\|auto\|heating\|cooling] (>=0<=0), ,true,select.thermostat_hc1_heatpump_operating_mode,select.thermostat_hc1_hpoperatingmode,6,1,1,21,1 -"Rego 2000/3000",thermostat,172,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 -"Rego 2000/3000",thermostat,172,hc1.hpoperatingstate,heatpump operating state,enum [heating\|off\|cooling], ,false,sensor.thermostat_hc1_heatpump_operating_state,sensor.thermostat_hc1_hpoperatingstate,6,1,1,23,1 -"Rego 2000/3000",thermostat,172,hc1.vacationmode,vacation mode,boolean, ,false,binary_sensor.thermostat_hc1_vacation_mode,binary_sensor.thermostat_hc1_vacationmode,6,1,1,24,1 -"Rego 2000/3000",thermostat,172,hc1.controlmode,control mode,enum [weather compensated\|outside basepoint\|n/a\|room\|power\|constant] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 -"Rego 2000/3000",thermostat,172,hc1.program,program,enum [prog 1\|prog 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"Rego 2000/3000",thermostat,172,hc1.tempautotemp,temporary set temperature automode,int8 (>=-1<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"Rego 2000/3000",thermostat,172,hc1.cooltemp,cooling temperature,int8 (>=-1<=30),C,true,number.thermostat_hc1_cooling_temperature,number.thermostat_hc1_cooltemp,6,1,1/2,28,1 -"Rego 2000/3000",thermostat,172,hc1.fastheatup,fast heatup,uint8 (>=0<=0),%,true,number.thermostat_hc1_fast_heatup,number.thermostat_hc1_fastheatup,6,1,1,29,1 -"Rego 2000/3000",thermostat,172,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"Rego 2000/3000",thermostat,172,hc1.reducemode,reduce mode,enum [outdoor\|room\|reduce] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,31,1 -"Rego 2000/3000",thermostat,172,hc1.noreducetemp,no reduce below temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,32,1 -"Rego 2000/3000",thermostat,172,hc1.reducetemp,off/reduce switch temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,33,1 -"Rego 2000/3000",thermostat,172,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,34,1 -"Rego 2000/3000",thermostat,172,hc1.hpcooling,hp cooling,boolean (>=0<=0), ,true,switch.thermostat_hc1_hp_cooling,switch.thermostat_hc1_hpcooling,6,1,1,35,1 -"Rego 2000/3000",thermostat,172,hc1.coolingon,cooling on,boolean, ,false,binary_sensor.thermostat_hc1_cooling_on,binary_sensor.thermostat_hc1_coolingon,6,1,1,36,1 -"Rego 2000/3000",thermostat,172,hc1.hpmode,HP Mode,enum [heating\|cooling\|heating & cooling] (>=0<=0), ,true,select.thermostat_hc1_HP_Mode,select.thermostat_hc1_hpmode,6,1,1,37,1 -"Rego 2000/3000",thermostat,172,hc1.dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,38,1 -"Rego 2000/3000",thermostat,172,hc1.roomtempdiff,room temp difference,uint8 (>=0<=0),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,39,1 -"Rego 2000/3000",thermostat,172,hc1.hpminflowtemp,HP min. flow temp.,uint8 (>=0<=0),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,40,1 -"Rego 2000/3000",thermostat,172,hc1.control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"Rego 2000/3000",thermostat,172,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"Rego 2000/3000",thermostat,172,hc1.remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,43,1 -"Rego 2000/3000",thermostat,172,hc1.heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,44,1 -"Rego 2000/3000",thermostat,172,hc1.heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,45,1 -"Rego 2000/3000",thermostat,172,hc1.instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,46,1 -"Rego 2000/3000",thermostat,172,hc1.boost,boost mode,boolean (>=0<=0), ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,47,1 -"Rego 2000/3000",thermostat,172,hc1.boosttime,boost time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,48,1 -"Rego 2000/3000",thermostat,172,hc1.coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,49,1 -"Rego 2000/3000",thermostat,172,hc1.coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,50,1 -"Rego 2000/3000",thermostat,172,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,51,1 -"Rego 2000/3000",thermostat,172,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,52,1 -"Rego 2000/3000",thermostat,172,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,53,1 -"Rego 2000/3000",thermostat,172,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,54,1 -"Rego 2000/3000",thermostat,172,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,55,1 -"Rego 2000/3000",thermostat,172,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,56,1 -"Rego 2000/3000",thermostat,172,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,57,1 -"Rego 2000/3000",thermostat,172,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,58,1 -"Rego 2000/3000",thermostat,172,hc1.inttime,integral time,uint8 (>=3<=80),minutes,true,number.thermostat_hc1_integral_time,number.thermostat_hc1_inttime,6,1,1,59,1 +"Rego 2000/3000",thermostat,172,hc1.baseflowtemp,base flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_base_flow_temperature,number.thermostat_hc1_baseflowtemp,6,1,1,11,1 +"Rego 2000/3000",thermostat,172,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"Rego 2000/3000",thermostat,172,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"Rego 2000/3000",thermostat,172,hc1.roominfluence,room influence,uint8 (>=0<=0),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,14,1 +"Rego 2000/3000",thermostat,172,hc1.roominflfactor,room influence factor,uint8 (>=0<=0), ,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,1/10,15,1 +"Rego 2000/3000",thermostat,172,hc1.curroominfl,current room influence,int16,C,false,sensor.thermostat_hc1_current_room_influence,sensor.thermostat_hc1_curroominfl,6,1,1/10,16,1 +"Rego 2000/3000",thermostat,172,hc1.nofrostmode,nofrost mode,enum [room\|outdoor\|room outdoor] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,17,1 +"Rego 2000/3000",thermostat,172,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,18,1 +"Rego 2000/3000",thermostat,172,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 +"Rego 2000/3000",thermostat,172,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"Rego 2000/3000",thermostat,172,hc1.summersetmode,set summer mode,enum [summer\|auto\|winter] (>=0<=0), ,true,select.thermostat_hc1_set_summer_mode,select.thermostat_hc1_summersetmode,6,1,1,21,1 +"Rego 2000/3000",thermostat,172,hc1.hpoperatingmode,heatpump operating mode,enum [off\|auto\|heating\|cooling] (>=0<=0), ,true,select.thermostat_hc1_heatpump_operating_mode,select.thermostat_hc1_hpoperatingmode,6,1,1,22,1 +"Rego 2000/3000",thermostat,172,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 +"Rego 2000/3000",thermostat,172,hc1.hpoperatingstate,heatpump operating state,enum [heating\|off\|cooling], ,false,sensor.thermostat_hc1_heatpump_operating_state,sensor.thermostat_hc1_hpoperatingstate,6,1,1,24,1 +"Rego 2000/3000",thermostat,172,hc1.vacationmode,vacation mode,boolean, ,false,binary_sensor.thermostat_hc1_vacation_mode,binary_sensor.thermostat_hc1_vacationmode,6,1,1,25,1 +"Rego 2000/3000",thermostat,172,hc1.controlmode,control mode,enum [weather compensated\|outside basepoint\|n/a\|room\|power\|constant] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 +"Rego 2000/3000",thermostat,172,hc1.program,program,enum [prog 1\|prog 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"Rego 2000/3000",thermostat,172,hc1.tempautotemp,temporary set temperature automode,int8 (>=-1<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"Rego 2000/3000",thermostat,172,hc1.cooltemp,cooling temperature,int8 (>=-1<=30),C,true,number.thermostat_hc1_cooling_temperature,number.thermostat_hc1_cooltemp,6,1,1/2,29,1 +"Rego 2000/3000",thermostat,172,hc1.fastheatup,fast heatup,uint8 (>=0<=0),%,true,number.thermostat_hc1_fast_heatup,number.thermostat_hc1_fastheatup,6,1,1,30,1 +"Rego 2000/3000",thermostat,172,hc1.comfoffset,comfort point offset,uint8 (>=0<=10),C,true,number.thermostat_hc1_comfort_point_offset,number.thermostat_hc1_comfoffset,6,1,1,31,1 +"Rego 2000/3000",thermostat,172,hc1.comftemp,comfort point temperature,int8 (>=-5<=15),C,true,number.thermostat_hc1_comfort_point_temperature,number.thermostat_hc1_comftemp,6,1,1,32,1 +"Rego 2000/3000",thermostat,172,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"Rego 2000/3000",thermostat,172,hc1.reducemode,reduce mode,enum [outdoor\|room\|reduce] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,34,1 +"Rego 2000/3000",thermostat,172,hc1.noreducetemp,no reduce below temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,35,1 +"Rego 2000/3000",thermostat,172,hc1.reducetemp,off/reduce switch temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,36,1 +"Rego 2000/3000",thermostat,172,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,37,1 +"Rego 2000/3000",thermostat,172,hc1.hpcooling,hp cooling,boolean (>=0<=0), ,true,switch.thermostat_hc1_hp_cooling,switch.thermostat_hc1_hpcooling,6,1,1,38,1 +"Rego 2000/3000",thermostat,172,hc1.coolingon,cooling on,boolean, ,false,binary_sensor.thermostat_hc1_cooling_on,binary_sensor.thermostat_hc1_coolingon,6,1,1,39,1 +"Rego 2000/3000",thermostat,172,hc1.hpmode,HP Mode,enum [heating\|cooling\|heating & cooling] (>=0<=0), ,true,select.thermostat_hc1_HP_Mode,select.thermostat_hc1_hpmode,6,1,1,40,1 +"Rego 2000/3000",thermostat,172,hc1.dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,41,1 +"Rego 2000/3000",thermostat,172,hc1.roomtempdiff,room temp difference,uint8 (>=0<=0),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,42,1 +"Rego 2000/3000",thermostat,172,hc1.hpminflowtemp,HP min. flow temp.,uint8 (>=0<=0),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,43,1 +"Rego 2000/3000",thermostat,172,hc1.control,control device,enum [RC310\|RC200\|RC100\|RC100H\|TC100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"Rego 2000/3000",thermostat,172,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"Rego 2000/3000",thermostat,172,hc1.remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,46,1 +"Rego 2000/3000",thermostat,172,hc1.heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,47,1 +"Rego 2000/3000",thermostat,172,hc1.heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,48,1 +"Rego 2000/3000",thermostat,172,hc1.instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,49,1 +"Rego 2000/3000",thermostat,172,hc1.boost,boost mode,boolean (>=0<=0), ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,50,1 +"Rego 2000/3000",thermostat,172,hc1.boosttime,boost time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,51,1 +"Rego 2000/3000",thermostat,172,hc1.coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,52,1 +"Rego 2000/3000",thermostat,172,hc1.coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,53,1 +"Rego 2000/3000",thermostat,172,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,54,1 +"Rego 2000/3000",thermostat,172,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,55,1 +"Rego 2000/3000",thermostat,172,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,56,1 +"Rego 2000/3000",thermostat,172,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 +"Rego 2000/3000",thermostat,172,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 +"Rego 2000/3000",thermostat,172,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,59,1 +"Rego 2000/3000",thermostat,172,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,60,1 +"Rego 2000/3000",thermostat,172,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,61,1 +"Rego 2000/3000",thermostat,172,hc1.inttime,integral time,uint8 (>=3<=80),minutes,true,number.thermostat_hc1_integral_time,number.thermostat_hc1_inttime,6,1,1,62,1 "Rego 2000/3000",thermostat,172,dhw.mode,operating mode,enum [normal\|comfort\|eco+] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "Rego 2000/3000",thermostat,172,dhw.modetype,mode type,enum [off\|eco\|comfort\|eco+], ,false,sensor.thermostat_dhw_mode_type,sensor.thermostat_dhw_modetype,6,9,1,1,1 "Rego 2000/3000",thermostat,172,dhw.settemp,set temperature,uint8 (>=0<=0),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,2,1 @@ -4598,7 +4679,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Comfort RF",thermostat,215,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "Comfort RF",thermostat,215,hc1.mode,operating mode,enum [auto\|off], ,false,sensor.thermostat_hc1_operating_mode,sensor.thermostat_hc1_mode,6,1,1,3,1 "Comfort RF",thermostat,215,hc1.modetype,mode type,enum [off\|on], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"Comfort RF",thermostat,215,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"Comfort RF",thermostat,215,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "CRF200S",thermostat,216,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "CRF200S",thermostat,216,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "CRF200S",thermostat,216,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4607,7 +4688,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "CRF200S",thermostat,216,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "CRF200S",thermostat,216,hc1.mode,operating mode,enum [auto\|off], ,false,sensor.thermostat_hc1_operating_mode,sensor.thermostat_hc1_mode,6,1,1,3,1 "CRF200S",thermostat,216,hc1.modetype,mode type,enum [off\|on], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"CRF200S",thermostat,216,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"CRF200S",thermostat,216,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "Comfort+2RF",thermostat,246,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "Comfort+2RF",thermostat,246,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "Comfort+2RF",thermostat,246,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4616,7 +4697,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Comfort+2RF",thermostat,246,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "Comfort+2RF",thermostat,246,hc1.mode,operating mode,enum [auto\|off], ,false,sensor.thermostat_hc1_operating_mode,sensor.thermostat_hc1_mode,6,1,1,3,1 "Comfort+2RF",thermostat,246,hc1.modetype,mode type,enum [off\|on], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"Comfort+2RF",thermostat,246,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"Comfort+2RF",thermostat,246,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "Rego 3000, UI800, Logamatic BC400",thermostat,253,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "Rego 3000, UI800, Logamatic BC400",thermostat,253,datetime,date/time,string (>=0<=0), ,true,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4650,55 +4731,58 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.summertemp,summer temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.designtemp,design temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.offsettemp,offset temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_offset_temperature,number.thermostat_hc1_offsettemp,6,1,1,10,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.roominfluence,room influence,uint8 (>=0<=0),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,13,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.roominflfactor,room influence factor,uint8 (>=0<=0), ,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,1/10,14,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.curroominfl,current room influence,int16,C,false,sensor.thermostat_hc1_current_room_influence,sensor.thermostat_hc1_curroominfl,6,1,1/10,15,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.nofrostmode,nofrost mode,enum [room\|outdoor\|room outdoor] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,16,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,17,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.summersetmode,set summer mode,enum [summer\|auto\|winter] (>=0<=0), ,true,select.thermostat_hc1_set_summer_mode,select.thermostat_hc1_summersetmode,6,1,1,20,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.hpoperatingmode,heatpump operating mode,enum [off\|auto\|heating\|cooling] (>=0<=0), ,true,select.thermostat_hc1_heatpump_operating_mode,select.thermostat_hc1_hpoperatingmode,6,1,1,21,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.hpoperatingstate,heatpump operating state,enum [heating\|off\|cooling], ,false,sensor.thermostat_hc1_heatpump_operating_state,sensor.thermostat_hc1_hpoperatingstate,6,1,1,23,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.vacationmode,vacation mode,boolean, ,false,binary_sensor.thermostat_hc1_vacation_mode,binary_sensor.thermostat_hc1_vacationmode,6,1,1,24,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.controlmode,control mode,enum [weather compensated\|outside basepoint\|n/a\|room\|power\|constant] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.program,program,enum [prog 1\|prog 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.tempautotemp,temporary set temperature automode,int8 (>=-1<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.cooltemp,cooling temperature,int8 (>=-1<=30),C,true,number.thermostat_hc1_cooling_temperature,number.thermostat_hc1_cooltemp,6,1,1/2,28,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.fastheatup,fast heatup,uint8 (>=0<=0),%,true,number.thermostat_hc1_fast_heatup,number.thermostat_hc1_fastheatup,6,1,1,29,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.reducemode,reduce mode,enum [outdoor\|room\|reduce] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,31,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.noreducetemp,no reduce below temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,32,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.reducetemp,off/reduce switch temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,33,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,34,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.hpcooling,hp cooling,boolean (>=0<=0), ,true,switch.thermostat_hc1_hp_cooling,switch.thermostat_hc1_hpcooling,6,1,1,35,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.coolingon,cooling on,boolean, ,false,binary_sensor.thermostat_hc1_cooling_on,binary_sensor.thermostat_hc1_coolingon,6,1,1,36,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.hpmode,HP Mode,enum [heating\|cooling\|heating & cooling] (>=0<=0), ,true,select.thermostat_hc1_HP_Mode,select.thermostat_hc1_hpmode,6,1,1,37,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,38,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.roomtempdiff,room temp difference,uint8 (>=0<=0),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,39,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.hpminflowtemp,HP min. flow temp.,uint8 (>=0<=0),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,40,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.control,control device,enum [off\|-\|RC100\|RC100H\|-\|RC120RF\|RC220/RT800\|single] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,43,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,44,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,45,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,46,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.boost,boost mode,boolean (>=0<=0), ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,47,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.boosttime,boost time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,48,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,49,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,50,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,51,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,52,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,53,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,54,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,55,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,56,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,57,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,58,1 -"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.inttime,integral time,uint8 (>=3<=80),minutes,true,number.thermostat_hc1_integral_time,number.thermostat_hc1_inttime,6,1,1,59,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.baseflowtemp,base flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_base_flow_temperature,number.thermostat_hc1_baseflowtemp,6,1,1,11,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.roominfluence,room influence,uint8 (>=0<=0),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,14,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.roominflfactor,room influence factor,uint8 (>=0<=0), ,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,1/10,15,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.curroominfl,current room influence,int16,C,false,sensor.thermostat_hc1_current_room_influence,sensor.thermostat_hc1_curroominfl,6,1,1/10,16,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.nofrostmode,nofrost mode,enum [room\|outdoor\|room outdoor] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,17,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,18,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.summersetmode,set summer mode,enum [summer\|auto\|winter] (>=0<=0), ,true,select.thermostat_hc1_set_summer_mode,select.thermostat_hc1_summersetmode,6,1,1,21,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.hpoperatingmode,heatpump operating mode,enum [off\|auto\|heating\|cooling] (>=0<=0), ,true,select.thermostat_hc1_heatpump_operating_mode,select.thermostat_hc1_hpoperatingmode,6,1,1,22,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.hpoperatingstate,heatpump operating state,enum [heating\|off\|cooling], ,false,sensor.thermostat_hc1_heatpump_operating_state,sensor.thermostat_hc1_hpoperatingstate,6,1,1,24,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.vacationmode,vacation mode,boolean, ,false,binary_sensor.thermostat_hc1_vacation_mode,binary_sensor.thermostat_hc1_vacationmode,6,1,1,25,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.controlmode,control mode,enum [weather compensated\|outside basepoint\|n/a\|room\|power\|constant] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.program,program,enum [prog 1\|prog 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.tempautotemp,temporary set temperature automode,int8 (>=-1<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.cooltemp,cooling temperature,int8 (>=-1<=30),C,true,number.thermostat_hc1_cooling_temperature,number.thermostat_hc1_cooltemp,6,1,1/2,29,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.fastheatup,fast heatup,uint8 (>=0<=0),%,true,number.thermostat_hc1_fast_heatup,number.thermostat_hc1_fastheatup,6,1,1,30,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.comfoffset,comfort point offset,uint8 (>=0<=10),C,true,number.thermostat_hc1_comfort_point_offset,number.thermostat_hc1_comfoffset,6,1,1,31,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.comftemp,comfort point temperature,int8 (>=-5<=15),C,true,number.thermostat_hc1_comfort_point_temperature,number.thermostat_hc1_comftemp,6,1,1,32,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.reducemode,reduce mode,enum [outdoor\|room\|reduce] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,34,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.noreducetemp,no reduce below temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,35,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.reducetemp,off/reduce switch temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,36,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,37,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.hpcooling,hp cooling,boolean (>=0<=0), ,true,switch.thermostat_hc1_hp_cooling,switch.thermostat_hc1_hpcooling,6,1,1,38,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.coolingon,cooling on,boolean, ,false,binary_sensor.thermostat_hc1_cooling_on,binary_sensor.thermostat_hc1_coolingon,6,1,1,39,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.hpmode,HP Mode,enum [heating\|cooling\|heating & cooling] (>=0<=0), ,true,select.thermostat_hc1_HP_Mode,select.thermostat_hc1_hpmode,6,1,1,40,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.dewoffset,dew point offset,uint8 (>=2<=10),K,true,number.thermostat_hc1_dew_point_offset,number.thermostat_hc1_dewoffset,6,1,1,41,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.roomtempdiff,room temp difference,uint8 (>=0<=0),K,true,number.thermostat_hc1_room_temp_difference,number.thermostat_hc1_roomtempdiff,6,1,1,42,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.hpminflowtemp,HP min. flow temp.,uint8 (>=0<=0),C,true,number.thermostat_hc1_HP_min._flow_temp.,number.thermostat_hc1_hpminflowtemp,6,1,1,43,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.control,control device,enum [off\|-\|RC100\|RC100H\|-\|RC120RF\|RC220/RT800\|single] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.remotehum,room humidity from remote,cmd [] (>=-1<=101),%,true,sensor.thermostat_hc1_room_humidity_from_remote,sensor.thermostat_hc1_remotehum,6,1,1,46,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.heatondelay,heat-on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-on_delay,number.thermostat_hc1_heatondelay,6,1,1,47,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.heatoffdelay,heat-off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_heat-off_delay,number.thermostat_hc1_heatoffdelay,6,1,1,48,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.instantstart,instant start,uint8 (>=1<=10),K,true,number.thermostat_hc1_instant_start,number.thermostat_hc1_instantstart,6,1,1,49,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.boost,boost mode,boolean (>=0<=0), ,true,switch.thermostat_hc1_boost_mode,switch.thermostat_hc1_boost,6,1,1,50,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.boosttime,boost time,uint8 (>=0<=0),hours,true,number.thermostat_hc1_boost_time,number.thermostat_hc1_boosttime,6,1,1,51,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.coolstart,cooling starttemp,uint8 (>=20<=35),C,true,number.thermostat_hc1_cooling_starttemp,number.thermostat_hc1_coolstart,6,1,1,52,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.coolondelay,cooling on delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_on_delay,number.thermostat_hc1_coolondelay,6,1,1,53,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.cooloffdelay,cooling off delay,uint8 (>=1<=48),hours,true,number.thermostat_hc1_cooling_off_delay,number.thermostat_hc1_cooloffdelay,6,1,1,54,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.switchprogmode,switch program mode,enum [level\|absolute] (>=0<=0), ,true,select.thermostat_hc1_switch_program_mode,select.thermostat_hc1_switchprogmode,6,1,1,55,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.redthreshold,reduction threshold,int8 (>=12<=22),C,true,number.thermostat_hc1_reduction_threshold,number.thermostat_hc1_redthreshold,6,1,1/2,56,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.solarinfl,solar influence,uint8 (>=-5<=4294967295),C,true,number.thermostat_hc1_solar_influence,number.thermostat_hc1_solarinfl,6,1,1,57,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.currsolarinfl,current solar influence,uint8,C,false,sensor.thermostat_hc1_current_solar_influence,sensor.thermostat_hc1_currsolarinfl,6,1,1/10,58,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.heatingpid,heating PID,enum [fast\|medium\|slow] (>=0<=0), ,true,select.thermostat_hc1_heating_PID,select.thermostat_hc1_heatingpid,6,1,1,59,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.pumpopt,pump optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_pump_optimization,switch.thermostat_hc1_pumpopt,6,1,1,60,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.inttimefloor,integral time floor,uint8 (>=160<=320),minutes,true,number.thermostat_hc1_integral_time_floor,number.thermostat_hc1_inttimefloor,6,1,10,61,1 +"Rego 3000, UI800, Logamatic BC400",thermostat,253,hc1.inttime,integral time,uint8 (>=3<=80),minutes,true,number.thermostat_hc1_integral_time,number.thermostat_hc1_inttime,6,1,1,62,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,dhw.mode,operating mode,enum [off\|eco+\|eco\|comfort\|auto] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,dhw.modetype,mode type,enum [off\|eco\|comfort\|eco+], ,false,sensor.thermostat_dhw_mode_type,sensor.thermostat_dhw_modetype,6,9,1,1,1 "Rego 3000, UI800, Logamatic BC400",thermostat,253,dhw.settemp,set temperature,uint8 (>=0<=0),C,true,number.thermostat_dhw_set_temperature,number.thermostat_dhw_settemp,6,9,1,2,1 @@ -4721,15 +4805,15 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "ES72, RC20",thermostat,66,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "ES72, RC20",thermostat,66,hc1.mode,operating mode,enum [night\|day\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "ES72, RC20",thermostat,66,hc1.modetype,mode type,enum [night\|day], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"ES72, RC20",thermostat,66,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"ES72, RC20",thermostat,66,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 -"ES72, RC20",thermostat,66,hc1.program,program,enum [family\|morning\|evening\|am\|pm\|midday\|singles\|seniors] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"ES72, RC20",thermostat,66,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"ES72, RC20",thermostat,66,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"ES72, RC20",thermostat,66,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=0),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"ES72, RC20",thermostat,66,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 +"ES72, RC20",thermostat,66,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"ES72, RC20",thermostat,66,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 +"ES72, RC20",thermostat,66,hc1.program,program,enum [family\|morning\|evening\|am\|pm\|midday\|singles\|seniors] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"ES72, RC20",thermostat,66,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"ES72, RC20",thermostat,66,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"ES72, RC20",thermostat,66,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=0),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"ES72, RC20",thermostat,66,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 "ES72, RC20",thermostat,66,hc1.summertemp,summer temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 -"ES72, RC20",thermostat,66,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 +"ES72, RC20",thermostat,66,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 "ES73",thermostat,76,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "ES73",thermostat,76,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "ES73",thermostat,76,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4748,40 +4832,40 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "ES73",thermostat,76,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "ES73",thermostat,76,hc1.mode,operating mode,enum [night\|day\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "ES73",thermostat,76,hc1.modetype,mode type,enum [night\|day], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"ES73",thermostat,76,hc1.daytemp,day temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"ES73",thermostat,76,hc1.nighttemp,night temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 +"ES73",thermostat,76,hc1.daytemp,day temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"ES73",thermostat,76,hc1.nighttemp,night temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 "ES73",thermostat,76,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 "ES73",thermostat,76,hc1.offsettemp,offset temperature,int8 (>=-5<=5),C,true,number.thermostat_hc1_offset_temperature,number.thermostat_hc1_offsettemp,6,1,1/2,10,1 -"ES73",thermostat,76,hc1.holidaytemp,holiday temperature,uint8 (>=5<=30),C,true,number.thermostat_hc1_holiday_temperature,number.thermostat_hc1_holidaytemp,6,1,1/2,62,1 -"ES73",thermostat,76,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"ES73",thermostat,76,hc1.holidaytemp,holiday temperature,uint8 (>=5<=30),C,true,number.thermostat_hc1_holiday_temperature,number.thermostat_hc1_holidaytemp,6,1,1/2,65,1 +"ES73",thermostat,76,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "ES73",thermostat,76,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 -"ES73",thermostat,76,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 -"ES73",thermostat,76,hc1.holidaymode,holiday mode,boolean, ,false,binary_sensor.thermostat_hc1_holiday_mode,binary_sensor.thermostat_hc1_holidaymode,6,1,1,63,1 -"ES73",thermostat,76,hc1.nofrosttemp,nofrost temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,17,1 -"ES73",thermostat,76,hc1.nofrostmode,nofrost mode,enum [off\|outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,16,1 -"ES73",thermostat,76,hc1.roominfluence,room influence,uint8 (>=0<=10),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,13,1 -"ES73",thermostat,76,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"ES73",thermostat,76,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"ES73",thermostat,76,hc1.flowtempoffset,flow temperature offset for mixer,uint8 (>=0<=20),C,true,number.thermostat_hc1_flow_temperature_offset_for_mixer,number.thermostat_hc1_flowtempoffset,6,1,1,64,1 -"ES73",thermostat,76,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"ES73",thermostat,76,hc1.reducemode,reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,31,1 -"ES73",thermostat,76,hc1.controlmode,control mode,enum [outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 -"ES73",thermostat,76,hc1.control,control device,enum [off\|RC20\|RC3x] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"ES73",thermostat,76,hc1.holidays,holiday dates,string (>=0<=0), ,true,sensor.thermostat_hc1_holiday_dates,sensor.thermostat_hc1_holidays,6,1,1,65,13 -"ES73",thermostat,76,hc1.vacations,vacation dates,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates,sensor.thermostat_hc1_vacations,6,1,1,78,13 -"ES73",thermostat,76,hc1.program,program,enum [own 1\|family\|morning\|evening\|am\|pm\|midday\|singles\|seniors\|new\|own 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"ES73",thermostat,76,hc1.pause,pause time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_pause_time,number.thermostat_hc1_pause,6,1,1,91,1 -"ES73",thermostat,76,hc1.party,party time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_party_time,number.thermostat_hc1_party,6,1,1,92,1 -"ES73",thermostat,76,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"ES73",thermostat,76,hc1.noreducetemp,no reduce below temperature,int8 (>=-31<=10),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,32,1 -"ES73",thermostat,76,hc1.reducetemp,off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,33,1 -"ES73",thermostat,76,hc1.vacreducetemp,vacations off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_vacations_off/reduce_switch_temperature,number.thermostat_hc1_vacreducetemp,6,1,1,93,1 -"ES73",thermostat,76,hc1.vacreducemode,vacations reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_vacations_reduce_mode,select.thermostat_hc1_vacreducemode,6,1,1,94,1 -"ES73",thermostat,76,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"ES73",thermostat,76,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,34,1 -"ES73",thermostat,76,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"ES73",thermostat,76,hc1.switchtime1,own1 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own1_program_switchtime,sensor.thermostat_hc1_switchtime1,6,1,1,95,8 -"ES73",thermostat,76,hc1.switchtime2,own2 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own2_program_switchtime,sensor.thermostat_hc1_switchtime2,6,1,1,103,8 +"ES73",thermostat,76,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 +"ES73",thermostat,76,hc1.holidaymode,holiday mode,boolean, ,false,binary_sensor.thermostat_hc1_holiday_mode,binary_sensor.thermostat_hc1_holidaymode,6,1,1,66,1 +"ES73",thermostat,76,hc1.nofrosttemp,nofrost temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,18,1 +"ES73",thermostat,76,hc1.nofrostmode,nofrost mode,enum [off\|outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,17,1 +"ES73",thermostat,76,hc1.roominfluence,room influence,uint8 (>=0<=10),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,14,1 +"ES73",thermostat,76,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"ES73",thermostat,76,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"ES73",thermostat,76,hc1.flowtempoffset,flow temperature offset for mixer,uint8 (>=0<=20),C,true,number.thermostat_hc1_flow_temperature_offset_for_mixer,number.thermostat_hc1_flowtempoffset,6,1,1,67,1 +"ES73",thermostat,76,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"ES73",thermostat,76,hc1.reducemode,reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,34,1 +"ES73",thermostat,76,hc1.controlmode,control mode,enum [outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 +"ES73",thermostat,76,hc1.control,control device,enum [off\|RC20\|RC3x] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"ES73",thermostat,76,hc1.holidays,holiday dates,string (>=0<=0), ,true,sensor.thermostat_hc1_holiday_dates,sensor.thermostat_hc1_holidays,6,1,1,68,13 +"ES73",thermostat,76,hc1.vacations,vacation dates,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates,sensor.thermostat_hc1_vacations,6,1,1,81,13 +"ES73",thermostat,76,hc1.program,program,enum [own 1\|family\|morning\|evening\|am\|pm\|midday\|singles\|seniors\|new\|own 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"ES73",thermostat,76,hc1.pause,pause time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_pause_time,number.thermostat_hc1_pause,6,1,1,94,1 +"ES73",thermostat,76,hc1.party,party time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_party_time,number.thermostat_hc1_party,6,1,1,95,1 +"ES73",thermostat,76,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"ES73",thermostat,76,hc1.noreducetemp,no reduce below temperature,int8 (>=-31<=10),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,35,1 +"ES73",thermostat,76,hc1.reducetemp,off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,36,1 +"ES73",thermostat,76,hc1.vacreducetemp,vacations off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_vacations_off/reduce_switch_temperature,number.thermostat_hc1_vacreducetemp,6,1,1,96,1 +"ES73",thermostat,76,hc1.vacreducemode,vacations reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_vacations_reduce_mode,select.thermostat_hc1_vacreducemode,6,1,1,97,1 +"ES73",thermostat,76,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"ES73",thermostat,76,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,37,1 +"ES73",thermostat,76,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"ES73",thermostat,76,hc1.switchtime1,own1 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own1_program_switchtime,sensor.thermostat_hc1_switchtime1,6,1,1,98,8 +"ES73",thermostat,76,hc1.switchtime2,own2 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own2_program_switchtime,sensor.thermostat_hc1_switchtime2,6,1,1,106,8 "ES73",thermostat,76,dhw.mode,operating mode,enum [off\|on\|auto] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "ES73",thermostat,76,dhw.circmode,circulation pump mode,enum [off\|on\|auto] (>=0<=0), ,true,select.thermostat_dhw_circulation_pump_mode,select.thermostat_dhw_circmode,6,9,1,4,1 "ES73",thermostat,76,dhw.progmode,program,enum [std prog\|own prog] (>=0<=0), ,true,select.thermostat_dhw_program,select.thermostat_dhw_progmode,6,9,1,13,1 @@ -4804,15 +4888,15 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "ES72, RC20",thermostat,113,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "ES72, RC20",thermostat,113,hc1.mode,operating mode,enum [night\|day\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "ES72, RC20",thermostat,113,hc1.modetype,mode type,enum [night\|day], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"ES72, RC20",thermostat,113,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"ES72, RC20",thermostat,113,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 -"ES72, RC20",thermostat,113,hc1.program,program,enum [family\|morning\|evening\|am\|pm\|midday\|singles\|seniors] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"ES72, RC20",thermostat,113,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"ES72, RC20",thermostat,113,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"ES72, RC20",thermostat,113,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=0),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"ES72, RC20",thermostat,113,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 +"ES72, RC20",thermostat,113,hc1.daytemp,day temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"ES72, RC20",thermostat,113,hc1.nighttemp,night temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 +"ES72, RC20",thermostat,113,hc1.program,program,enum [family\|morning\|evening\|am\|pm\|midday\|singles\|seniors] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"ES72, RC20",thermostat,113,hc1.minflowtemp,min flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"ES72, RC20",thermostat,113,hc1.maxflowtemp,max flow temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"ES72, RC20",thermostat,113,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=0),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"ES72, RC20",thermostat,113,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 "ES72, RC20",thermostat,113,hc1.summertemp,summer temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 -"ES72, RC20",thermostat,113,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 +"ES72, RC20",thermostat,113,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 "ES79",thermostat,156,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "ES79",thermostat,156,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "ES79",thermostat,156,datetime,date/time,string (>=0<=0), ,true,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 @@ -4828,40 +4912,40 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "ES79",thermostat,156,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "ES79",thermostat,156,hc1.mode,operating mode,enum [night\|day\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "ES79",thermostat,156,hc1.modetype,mode type,enum [night\|day], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"ES79",thermostat,156,hc1.daytemp,day temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,60,1 -"ES79",thermostat,156,hc1.nighttemp,night temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,61,1 +"ES79",thermostat,156,hc1.daytemp,day temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_day_temperature,number.thermostat_hc1_daytemp,6,1,1/2,63,1 +"ES79",thermostat,156,hc1.nighttemp,night temperature,uint8 (>=10<=30),C,true,number.thermostat_hc1_night_temperature,number.thermostat_hc1_nighttemp,6,1,1/2,64,1 "ES79",thermostat,156,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 "ES79",thermostat,156,hc1.offsettemp,offset temperature,int8 (>=-5<=5),C,true,number.thermostat_hc1_offset_temperature,number.thermostat_hc1_offsettemp,6,1,1/2,10,1 -"ES79",thermostat,156,hc1.holidaytemp,holiday temperature,uint8 (>=5<=30),C,true,number.thermostat_hc1_holiday_temperature,number.thermostat_hc1_holidaytemp,6,1,1/2,62,1 -"ES79",thermostat,156,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"ES79",thermostat,156,hc1.holidaytemp,holiday temperature,uint8 (>=5<=30),C,true,number.thermostat_hc1_holiday_temperature,number.thermostat_hc1_holidaytemp,6,1,1/2,65,1 +"ES79",thermostat,156,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "ES79",thermostat,156,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1,8,1 -"ES79",thermostat,156,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,22,1 -"ES79",thermostat,156,hc1.holidaymode,holiday mode,boolean, ,false,binary_sensor.thermostat_hc1_holiday_mode,binary_sensor.thermostat_hc1_holidaymode,6,1,1,63,1 -"ES79",thermostat,156,hc1.nofrosttemp,nofrost temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,17,1 -"ES79",thermostat,156,hc1.nofrostmode,nofrost mode,enum [off\|outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,16,1 -"ES79",thermostat,156,hc1.roominfluence,room influence,uint8 (>=0<=10),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,13,1 -"ES79",thermostat,156,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"ES79",thermostat,156,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 -"ES79",thermostat,156,hc1.flowtempoffset,flow temperature offset for mixer,uint8 (>=0<=20),C,true,number.thermostat_hc1_flow_temperature_offset_for_mixer,number.thermostat_hc1_flowtempoffset,6,1,1,64,1 -"ES79",thermostat,156,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"ES79",thermostat,156,hc1.reducemode,reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,31,1 -"ES79",thermostat,156,hc1.controlmode,control mode,enum [outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 -"ES79",thermostat,156,hc1.control,control device,enum [off\|RC20\|RC3x] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"ES79",thermostat,156,hc1.holidays,holiday dates,string (>=0<=0), ,true,sensor.thermostat_hc1_holiday_dates,sensor.thermostat_hc1_holidays,6,1,1,65,13 -"ES79",thermostat,156,hc1.vacations,vacation dates,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates,sensor.thermostat_hc1_vacations,6,1,1,78,13 -"ES79",thermostat,156,hc1.program,program,enum [own 1\|family\|morning\|evening\|am\|pm\|midday\|singles\|seniors\|new\|own 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"ES79",thermostat,156,hc1.pause,pause time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_pause_time,number.thermostat_hc1_pause,6,1,1,91,1 -"ES79",thermostat,156,hc1.party,party time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_party_time,number.thermostat_hc1_party,6,1,1,92,1 -"ES79",thermostat,156,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,27,1 -"ES79",thermostat,156,hc1.noreducetemp,no reduce below temperature,int8 (>=-31<=10),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,32,1 -"ES79",thermostat,156,hc1.reducetemp,off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,33,1 -"ES79",thermostat,156,hc1.vacreducetemp,vacations off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_vacations_off/reduce_switch_temperature,number.thermostat_hc1_vacreducetemp,6,1,1,93,1 -"ES79",thermostat,156,hc1.vacreducemode,vacations reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_vacations_reduce_mode,select.thermostat_hc1_vacreducemode,6,1,1,94,1 -"ES79",thermostat,156,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"ES79",thermostat,156,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,34,1 -"ES79",thermostat,156,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"ES79",thermostat,156,hc1.switchtime1,own1 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own1_program_switchtime,sensor.thermostat_hc1_switchtime1,6,1,1,95,8 -"ES79",thermostat,156,hc1.switchtime2,own2 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own2_program_switchtime,sensor.thermostat_hc1_switchtime2,6,1,1,103,8 +"ES79",thermostat,156,hc1.summermode,summer mode,enum [winter\|summer], ,false,sensor.thermostat_hc1_summer_mode,sensor.thermostat_hc1_summermode,6,1,1,23,1 +"ES79",thermostat,156,hc1.holidaymode,holiday mode,boolean, ,false,binary_sensor.thermostat_hc1_holiday_mode,binary_sensor.thermostat_hc1_holidaymode,6,1,1,66,1 +"ES79",thermostat,156,hc1.nofrosttemp,nofrost temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1,18,1 +"ES79",thermostat,156,hc1.nofrostmode,nofrost mode,enum [off\|outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_nofrost_mode,select.thermostat_hc1_nofrostmode,6,1,1,17,1 +"ES79",thermostat,156,hc1.roominfluence,room influence,uint8 (>=0<=10),C,true,number.thermostat_hc1_room_influence,number.thermostat_hc1_roominfluence,6,1,1,14,1 +"ES79",thermostat,156,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"ES79",thermostat,156,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 +"ES79",thermostat,156,hc1.flowtempoffset,flow temperature offset for mixer,uint8 (>=0<=20),C,true,number.thermostat_hc1_flow_temperature_offset_for_mixer,number.thermostat_hc1_flowtempoffset,6,1,1,67,1 +"ES79",thermostat,156,hc1.heatingtype,heating type,enum [off\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"ES79",thermostat,156,hc1.reducemode,reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_reduce_mode,select.thermostat_hc1_reducemode,6,1,1,34,1 +"ES79",thermostat,156,hc1.controlmode,control mode,enum [outdoor\|room] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 +"ES79",thermostat,156,hc1.control,control device,enum [off\|RC20\|RC3x] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"ES79",thermostat,156,hc1.holidays,holiday dates,string (>=0<=0), ,true,sensor.thermostat_hc1_holiday_dates,sensor.thermostat_hc1_holidays,6,1,1,68,13 +"ES79",thermostat,156,hc1.vacations,vacation dates,string (>=0<=0), ,true,sensor.thermostat_hc1_vacation_dates,sensor.thermostat_hc1_vacations,6,1,1,81,13 +"ES79",thermostat,156,hc1.program,program,enum [own 1\|family\|morning\|evening\|am\|pm\|midday\|singles\|seniors\|new\|own 2] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"ES79",thermostat,156,hc1.pause,pause time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_pause_time,number.thermostat_hc1_pause,6,1,1,94,1 +"ES79",thermostat,156,hc1.party,party time,uint8 (>=0<=99),hours,true,number.thermostat_hc1_party_time,number.thermostat_hc1_party,6,1,1,95,1 +"ES79",thermostat,156,hc1.tempautotemp,temporary set temperature automode,uint8 (>=0<=30),C,true,number.thermostat_hc1_temporary_set_temperature_automode,number.thermostat_hc1_tempautotemp,6,1,1/2,28,1 +"ES79",thermostat,156,hc1.noreducetemp,no reduce below temperature,int8 (>=-31<=10),C,true,number.thermostat_hc1_no_reduce_below_temperature,number.thermostat_hc1_noreducetemp,6,1,1,35,1 +"ES79",thermostat,156,hc1.reducetemp,off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_off/reduce_switch_temperature,number.thermostat_hc1_reducetemp,6,1,1,36,1 +"ES79",thermostat,156,hc1.vacreducetemp,vacations off/reduce switch temperature,int8 (>=-20<=10),C,true,number.thermostat_hc1_vacations_off/reduce_switch_temperature,number.thermostat_hc1_vacreducetemp,6,1,1,96,1 +"ES79",thermostat,156,hc1.vacreducemode,vacations reduce mode,enum [nofrost\|reduce\|room\|outdoor] (>=0<=0), ,true,select.thermostat_hc1_vacations_reduce_mode,select.thermostat_hc1_vacreducemode,6,1,1,97,1 +"ES79",thermostat,156,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"ES79",thermostat,156,hc1.dhwprio,dhw priority,boolean (>=0<=0), ,true,switch.thermostat_hc1_dhw_priority,switch.thermostat_hc1_dhwprio,6,1,1,37,1 +"ES79",thermostat,156,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"ES79",thermostat,156,hc1.switchtime1,own1 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own1_program_switchtime,sensor.thermostat_hc1_switchtime1,6,1,1,98,8 +"ES79",thermostat,156,hc1.switchtime2,own2 program switchtime,string (>=0<=0), ,true,sensor.thermostat_hc1_own2_program_switchtime,sensor.thermostat_hc1_switchtime2,6,1,1,106,8 "ES79",thermostat,156,dhw.mode,operating mode,enum [off\|on\|auto] (>=0<=0), ,true,select.thermostat_dhw_operating_mode,select.thermostat_dhw_mode,6,9,1,0,1 "ES79",thermostat,156,dhw.circmode,circulation pump mode,enum [off\|on\|auto] (>=0<=0), ,true,select.thermostat_dhw_circulation_pump_mode,select.thermostat_dhw_circmode,6,9,1,4,1 "ES79",thermostat,156,dhw.progmode,program,enum [std prog\|own prog] (>=0<=0), ,true,select.thermostat_dhw_program,select.thermostat_dhw_progmode,6,9,1,13,1 @@ -4880,6 +4964,8 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FW100",thermostat,105,datetime,date/time,string (>=0<=0), ,true,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 "FW100",thermostat,105,display,display,enum [dhw temperature\|date\|external temperature] (>=0<=0), ,true,select.thermostat_display,select.thermostat_display,6,0,1,65,1 "FW100",thermostat,105,language,language,enum [german\|italian\|french\|dutch] (>=0<=0), ,true,select.thermostat_language,select.thermostat_language,6,0,1,66,1 +"FW100",thermostat,105,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FW100",thermostat,105,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FW100",thermostat,105,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FW100",thermostat,105,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FW100",thermostat,105,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -4892,31 +4978,33 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FW100",thermostat,105,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FW100",thermostat,105,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FW100",thermostat,105,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FW100",thermostat,105,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FW100",thermostat,105,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FW100",thermostat,105,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FW100",thermostat,105,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FW100",thermostat,105,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FW100",thermostat,105,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FW100",thermostat,105,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FW100",thermostat,105,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FW100",thermostat,105,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FW100",thermostat,105,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FW100",thermostat,105,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FW100",thermostat,105,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FW100",thermostat,105,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FW100",thermostat,105,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FW100",thermostat,105,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FW100",thermostat,105,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FW100",thermostat,105,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FW100",thermostat,105,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FW100",thermostat,105,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FW100",thermostat,105,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FW100",thermostat,105,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FW100",thermostat,105,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FW100",thermostat,105,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FW100",thermostat,105,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FW100",thermostat,105,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FW100",thermostat,105,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FW100",thermostat,105,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FW100",thermostat,105,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FW100",thermostat,105,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FW100",thermostat,105,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FW100",thermostat,105,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FW100",thermostat,105,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FW100",thermostat,105,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FW100",thermostat,105,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FW100",thermostat,105,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FW100",thermostat,105,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "FW200",thermostat,106,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "FW200",thermostat,106,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "FW200",thermostat,106,datetime,date/time,string (>=0<=0), ,true,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 "FW200",thermostat,106,display,display,enum [dhw temperature\|date\|external temperature] (>=0<=0), ,true,select.thermostat_display,select.thermostat_display,6,0,1,65,1 "FW200",thermostat,106,language,language,enum [german\|italian\|french\|dutch] (>=0<=0), ,true,select.thermostat_language,select.thermostat_language,6,0,1,66,1 +"FW200",thermostat,106,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FW200",thermostat,106,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FW200",thermostat,106,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FW200",thermostat,106,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FW200",thermostat,106,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -4929,29 +5017,31 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FW200",thermostat,106,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FW200",thermostat,106,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FW200",thermostat,106,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FW200",thermostat,106,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FW200",thermostat,106,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FW200",thermostat,106,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FW200",thermostat,106,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FW200",thermostat,106,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FW200",thermostat,106,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FW200",thermostat,106,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FW200",thermostat,106,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FW200",thermostat,106,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FW200",thermostat,106,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FW200",thermostat,106,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FW200",thermostat,106,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FW200",thermostat,106,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FW200",thermostat,106,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FW200",thermostat,106,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FW200",thermostat,106,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FW200",thermostat,106,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FW200",thermostat,106,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FW200",thermostat,106,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FW200",thermostat,106,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FW200",thermostat,106,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FW200",thermostat,106,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FW200",thermostat,106,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FW200",thermostat,106,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FW200",thermostat,106,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FW200",thermostat,106,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FW200",thermostat,106,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FW200",thermostat,106,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FW200",thermostat,106,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FW200",thermostat,106,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FW200",thermostat,106,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FW200",thermostat,106,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FW200",thermostat,106,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FW200",thermostat,106,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FW200",thermostat,106,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FW200",thermostat,106,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "FR100",thermostat,107,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "FR100",thermostat,107,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "FR100",thermostat,107,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 +"FR100",thermostat,107,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FR100",thermostat,107,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FR100",thermostat,107,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FR100",thermostat,107,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FR100",thermostat,107,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -4964,29 +5054,31 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FR100",thermostat,107,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FR100",thermostat,107,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FR100",thermostat,107,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FR100",thermostat,107,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FR100",thermostat,107,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FR100",thermostat,107,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FR100",thermostat,107,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FR100",thermostat,107,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FR100",thermostat,107,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FR100",thermostat,107,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FR100",thermostat,107,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FR100",thermostat,107,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FR100",thermostat,107,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FR100",thermostat,107,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FR100",thermostat,107,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FR100",thermostat,107,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FR100",thermostat,107,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FR100",thermostat,107,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FR100",thermostat,107,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FR100",thermostat,107,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FR100",thermostat,107,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FR100",thermostat,107,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FR100",thermostat,107,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FR100",thermostat,107,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FR100",thermostat,107,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FR100",thermostat,107,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FR100",thermostat,107,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FR100",thermostat,107,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FR100",thermostat,107,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FR100",thermostat,107,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FR100",thermostat,107,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FR100",thermostat,107,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FR100",thermostat,107,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FR100",thermostat,107,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FR100",thermostat,107,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FR100",thermostat,107,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FR100",thermostat,107,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FR100",thermostat,107,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FR100",thermostat,107,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "FR110",thermostat,108,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "FR110",thermostat,108,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "FR110",thermostat,108,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 +"FR110",thermostat,108,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FR110",thermostat,108,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FR110",thermostat,108,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FR110",thermostat,108,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FR110",thermostat,108,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -4999,31 +5091,33 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FR110",thermostat,108,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FR110",thermostat,108,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FR110",thermostat,108,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FR110",thermostat,108,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FR110",thermostat,108,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FR110",thermostat,108,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FR110",thermostat,108,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FR110",thermostat,108,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FR110",thermostat,108,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FR110",thermostat,108,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FR110",thermostat,108,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FR110",thermostat,108,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FR110",thermostat,108,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FR110",thermostat,108,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FR110",thermostat,108,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FR110",thermostat,108,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FR110",thermostat,108,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FR110",thermostat,108,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FR110",thermostat,108,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FR110",thermostat,108,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FR110",thermostat,108,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FR110",thermostat,108,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FR110",thermostat,108,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FR110",thermostat,108,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FR110",thermostat,108,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FR110",thermostat,108,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FR110",thermostat,108,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FR110",thermostat,108,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FR110",thermostat,108,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FR110",thermostat,108,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FR110",thermostat,108,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FR110",thermostat,108,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FR110",thermostat,108,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FR110",thermostat,108,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FR110",thermostat,108,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FR110",thermostat,108,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FR110",thermostat,108,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FR110",thermostat,108,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FR110",thermostat,108,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "FB10",thermostat,109,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "FB10",thermostat,109,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "FB10",thermostat,109,datetime,date/time,string (>=0<=0), ,true,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 "FB10",thermostat,109,display,display,enum [dhw temperature\|date\|external temperature] (>=0<=0), ,true,select.thermostat_display,select.thermostat_display,6,0,1,65,1 "FB10",thermostat,109,language,language,enum [german\|italian\|french\|dutch] (>=0<=0), ,true,select.thermostat_language,select.thermostat_language,6,0,1,66,1 +"FB10",thermostat,109,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FB10",thermostat,109,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FB10",thermostat,109,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FB10",thermostat,109,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FB10",thermostat,109,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -5036,31 +5130,33 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FB10",thermostat,109,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FB10",thermostat,109,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FB10",thermostat,109,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FB10",thermostat,109,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FB10",thermostat,109,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FB10",thermostat,109,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FB10",thermostat,109,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FB10",thermostat,109,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FB10",thermostat,109,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FB10",thermostat,109,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FB10",thermostat,109,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FB10",thermostat,109,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FB10",thermostat,109,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FB10",thermostat,109,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FB10",thermostat,109,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FB10",thermostat,109,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FB10",thermostat,109,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FB10",thermostat,109,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FB10",thermostat,109,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FB10",thermostat,109,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FB10",thermostat,109,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FB10",thermostat,109,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FB10",thermostat,109,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FB10",thermostat,109,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FB10",thermostat,109,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FB10",thermostat,109,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FB10",thermostat,109,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FB10",thermostat,109,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FB10",thermostat,109,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FB10",thermostat,109,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FB10",thermostat,109,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FB10",thermostat,109,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FB10",thermostat,109,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FB10",thermostat,109,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FB10",thermostat,109,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FB10",thermostat,109,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FB10",thermostat,109,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FB10",thermostat,109,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FB10",thermostat,109,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "FB100",thermostat,110,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "FB100",thermostat,110,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "FB100",thermostat,110,datetime,date/time,string (>=0<=0), ,true,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 "FB100",thermostat,110,display,display,enum [dhw temperature\|date\|external temperature] (>=0<=0), ,true,select.thermostat_display,select.thermostat_display,6,0,1,65,1 "FB100",thermostat,110,language,language,enum [german\|italian\|french\|dutch] (>=0<=0), ,true,select.thermostat_language,select.thermostat_language,6,0,1,66,1 +"FB100",thermostat,110,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FB100",thermostat,110,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FB100",thermostat,110,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FB100",thermostat,110,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FB100",thermostat,110,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -5073,29 +5169,31 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FB100",thermostat,110,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FB100",thermostat,110,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FB100",thermostat,110,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FB100",thermostat,110,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FB100",thermostat,110,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FB100",thermostat,110,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FB100",thermostat,110,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FB100",thermostat,110,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FB100",thermostat,110,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FB100",thermostat,110,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FB100",thermostat,110,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FB100",thermostat,110,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FB100",thermostat,110,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FB100",thermostat,110,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FB100",thermostat,110,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FB100",thermostat,110,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FB100",thermostat,110,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FB100",thermostat,110,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FB100",thermostat,110,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FB100",thermostat,110,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FB100",thermostat,110,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FB100",thermostat,110,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FB100",thermostat,110,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FB100",thermostat,110,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FB100",thermostat,110,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FB100",thermostat,110,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FB100",thermostat,110,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FB100",thermostat,110,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FB100",thermostat,110,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FB100",thermostat,110,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FB100",thermostat,110,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FB100",thermostat,110,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FB100",thermostat,110,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FB100",thermostat,110,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FB100",thermostat,110,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FB100",thermostat,110,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FB100",thermostat,110,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FB100",thermostat,110,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FB100",thermostat,110,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "FR10",thermostat,111,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "FR10",thermostat,111,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "FR10",thermostat,111,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 +"FR10",thermostat,111,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FR10",thermostat,111,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FR10",thermostat,111,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FR10",thermostat,111,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FR10",thermostat,111,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -5108,31 +5206,33 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FR10",thermostat,111,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FR10",thermostat,111,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FR10",thermostat,111,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FR10",thermostat,111,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FR10",thermostat,111,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FR10",thermostat,111,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FR10",thermostat,111,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FR10",thermostat,111,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FR10",thermostat,111,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FR10",thermostat,111,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FR10",thermostat,111,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FR10",thermostat,111,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FR10",thermostat,111,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FR10",thermostat,111,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FR10",thermostat,111,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FR10",thermostat,111,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FR10",thermostat,111,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FR10",thermostat,111,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FR10",thermostat,111,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FR10",thermostat,111,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FR10",thermostat,111,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FR10",thermostat,111,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FR10",thermostat,111,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FR10",thermostat,111,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FR10",thermostat,111,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FR10",thermostat,111,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FR10",thermostat,111,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FR10",thermostat,111,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FR10",thermostat,111,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FR10",thermostat,111,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FR10",thermostat,111,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FR10",thermostat,111,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FR10",thermostat,111,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FR10",thermostat,111,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FR10",thermostat,111,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FR10",thermostat,111,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FR10",thermostat,111,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FR10",thermostat,111,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FR10",thermostat,111,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "FW500",thermostat,116,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "FW500",thermostat,116,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "FW500",thermostat,116,datetime,date/time,string (>=0<=0), ,true,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 "FW500",thermostat,116,display,display,enum [dhw temperature\|date\|external temperature] (>=0<=0), ,true,select.thermostat_display,select.thermostat_display,6,0,1,65,1 "FW500",thermostat,116,language,language,enum [german\|italian\|french\|dutch] (>=0<=0), ,true,select.thermostat_language,select.thermostat_language,6,0,1,66,1 +"FW500",thermostat,116,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FW500",thermostat,116,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FW500",thermostat,116,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FW500",thermostat,116,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FW500",thermostat,116,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -5145,29 +5245,31 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FW500",thermostat,116,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FW500",thermostat,116,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FW500",thermostat,116,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FW500",thermostat,116,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FW500",thermostat,116,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FW500",thermostat,116,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FW500",thermostat,116,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FW500",thermostat,116,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FW500",thermostat,116,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FW500",thermostat,116,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FW500",thermostat,116,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FW500",thermostat,116,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FW500",thermostat,116,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FW500",thermostat,116,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FW500",thermostat,116,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FW500",thermostat,116,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FW500",thermostat,116,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FW500",thermostat,116,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FW500",thermostat,116,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FW500",thermostat,116,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FW500",thermostat,116,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FW500",thermostat,116,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FW500",thermostat,116,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FW500",thermostat,116,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FW500",thermostat,116,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FW500",thermostat,116,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FW500",thermostat,116,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FW500",thermostat,116,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FW500",thermostat,116,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FW500",thermostat,116,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FW500",thermostat,116,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FW500",thermostat,116,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FW500",thermostat,116,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FW500",thermostat,116,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FW500",thermostat,116,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FW500",thermostat,116,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FW500",thermostat,116,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FW500",thermostat,116,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FW500",thermostat,116,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "FR50",thermostat,147,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "FR50",thermostat,147,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "FR50",thermostat,147,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 +"FR50",thermostat,147,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FR50",thermostat,147,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FR50",thermostat,147,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FR50",thermostat,147,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FR50",thermostat,147,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -5180,29 +5282,31 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FR50",thermostat,147,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FR50",thermostat,147,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FR50",thermostat,147,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FR50",thermostat,147,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FR50",thermostat,147,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FR50",thermostat,147,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FR50",thermostat,147,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FR50",thermostat,147,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FR50",thermostat,147,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FR50",thermostat,147,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FR50",thermostat,147,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FR50",thermostat,147,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FR50",thermostat,147,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FR50",thermostat,147,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FR50",thermostat,147,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FR50",thermostat,147,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FR50",thermostat,147,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FR50",thermostat,147,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FR50",thermostat,147,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FR50",thermostat,147,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FR50",thermostat,147,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FR50",thermostat,147,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FR50",thermostat,147,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FR50",thermostat,147,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FR50",thermostat,147,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FR50",thermostat,147,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FR50",thermostat,147,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FR50",thermostat,147,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FR50",thermostat,147,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FR50",thermostat,147,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FR50",thermostat,147,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FR50",thermostat,147,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FR50",thermostat,147,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FR50",thermostat,147,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FR50",thermostat,147,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FR50",thermostat,147,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FR50",thermostat,147,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FR50",thermostat,147,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FR50",thermostat,147,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "FR120",thermostat,191,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "FR120",thermostat,191,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "FR120",thermostat,191,datetime,date/time,string, ,false,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 +"FR120",thermostat,191,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FR120",thermostat,191,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FR120",thermostat,191,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FR120",thermostat,191,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FR120",thermostat,191,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -5215,31 +5319,33 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FR120",thermostat,191,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FR120",thermostat,191,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FR120",thermostat,191,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FR120",thermostat,191,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FR120",thermostat,191,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FR120",thermostat,191,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FR120",thermostat,191,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FR120",thermostat,191,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FR120",thermostat,191,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FR120",thermostat,191,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FR120",thermostat,191,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FR120",thermostat,191,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FR120",thermostat,191,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FR120",thermostat,191,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FR120",thermostat,191,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FR120",thermostat,191,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FR120",thermostat,191,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FR120",thermostat,191,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FR120",thermostat,191,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FR120",thermostat,191,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FR120",thermostat,191,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FR120",thermostat,191,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FR120",thermostat,191,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FR120",thermostat,191,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FR120",thermostat,191,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FR120",thermostat,191,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FR120",thermostat,191,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FR120",thermostat,191,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FR120",thermostat,191,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FR120",thermostat,191,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FR120",thermostat,191,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FR120",thermostat,191,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FR120",thermostat,191,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FR120",thermostat,191,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FR120",thermostat,191,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FR120",thermostat,191,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FR120",thermostat,191,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FR120",thermostat,191,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FR120",thermostat,191,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "FW120",thermostat,192,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "FW120",thermostat,192,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 "FW120",thermostat,192,datetime,date/time,string (>=0<=0), ,true,sensor.thermostat_date/time,sensor.thermostat_datetime,6,0,1,33,13 "FW120",thermostat,192,display,display,enum [dhw temperature\|date\|external temperature] (>=0<=0), ,true,select.thermostat_display,select.thermostat_display,6,0,1,65,1 "FW120",thermostat,192,language,language,enum [german\|italian\|french\|dutch] (>=0<=0), ,true,select.thermostat_language,select.thermostat_language,6,0,1,66,1 +"FW120",thermostat,192,building,building type,uint8 (>=0<=0),%,true,number.thermostat_building_type,number.thermostat_building,6,0,10,50,1 +"FW120",thermostat,192,minexttemp,minimal external temperature,int8 (>=0<=0),C,true,number.thermostat_minimal_external_temperature,number.thermostat_minexttemp,6,0,1,51,1 "FW120",thermostat,192,hybridstrategy,hybrid control strategy,enum [co2 optimized\|cost optimized\|outside temp switched\|co2 cost mix] (>=0<=0), ,true,select.thermostat_hybrid_control_strategy,select.thermostat_hybridstrategy,6,0,1,54,1 "FW120",thermostat,192,switchovertemp,outside switchover temperature,int8 (>=-20<=20),C,true,number.thermostat_outside_switchover_temperature,number.thermostat_switchovertemp,6,0,1,55,1 "FW120",thermostat,192,energycostratio,energy cost ratio,uint8 (>=0<=20), ,true,number.thermostat_energy_cost_ratio,number.thermostat_energycostratio,6,0,1/10,56,1 @@ -5252,25 +5358,25 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "FW120",thermostat,192,hc1.haclimate,mqtt discovery current room temperature,enum [selTemp\|roomTemp], ,false,sensor.thermostat_hc1_mqtt_discovery_current_room_temperature,sensor.thermostat_hc1_haclimate,6,1,1,2,1 "FW120",thermostat,192,hc1.mode,operating mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_operating_mode,select.thermostat_hc1_mode,6,1,1,3,1 "FW120",thermostat,192,hc1.modetype,mode type,enum [nofrost\|eco\|heat], ,false,sensor.thermostat_hc1_mode_type,sensor.thermostat_hc1_modetype,6,1,1,4,1 -"FW120",thermostat,192,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,202,1 +"FW120",thermostat,192,hc1.heattemp,heat temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_heat_temperature,number.thermostat_hc1_heattemp,6,1,1/2,205,1 "FW120",thermostat,192,hc1.ecotemp,eco temperature,uint8 (>=0<=0),C,true,number.thermostat_hc1_eco_temperature,number.thermostat_hc1_ecotemp,6,1,1/2,5,1 -"FW120",thermostat,192,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,17,1 -"FW120",thermostat,192,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,41,1 -"FW120",thermostat,192,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,26,1 -"FW120",thermostat,192,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,42,1 -"FW120",thermostat,192,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,18,1 +"FW120",thermostat,192,hc1.nofrosttemp,nofrost temperature,int8 (>=0<=0),C,true,number.thermostat_hc1_nofrost_temperature,number.thermostat_hc1_nofrosttemp,6,1,1/2,18,1 +"FW120",thermostat,192,hc1.control,control device,enum [off\|FB10\|FB100] (>=0<=0), ,true,select.thermostat_hc1_control_device,select.thermostat_hc1_control,6,1,1,44,1 +"FW120",thermostat,192,hc1.program,program,enum [prog a\|prog b\|prog c\|prog d\|prog e\|prog f] (>=0<=0), ,true,select.thermostat_hc1_program,select.thermostat_hc1_program,6,1,1,27,1 +"FW120",thermostat,192,hc1.remotetemp,room temperature from remote,cmd [] (>=-1<=101),C,true,sensor.thermostat_hc1_room_temperature_from_remote,sensor.thermostat_hc1_remotetemp,6,1,1/10,45,1 +"FW120",thermostat,192,hc1.targetflowtemp,target flow temperature,uint8,C,false,sensor.thermostat_hc1_target_flow_temperature,sensor.thermostat_hc1_targetflowtemp,6,1,1,19,1 "FW120",thermostat,192,hc1.summertemp,summer temperature,uint8 (>=9<=25),C,true,number.thermostat_hc1_summer_temperature,number.thermostat_hc1_summertemp,6,1,1/2,8,1 -"FW120",thermostat,192,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,203,1 -"FW120",thermostat,192,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,63,1 -"FW120",thermostat,192,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,30,1 -"FW120",thermostat,192,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,204,1 -"FW120",thermostat,192,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,11,1 -"FW120",thermostat,192,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,12,1 +"FW120",thermostat,192,hc1.roomsensor,room sensor,enum [extern\|intern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_sensor,select.thermostat_hc1_roomsensor,6,1,1,206,1 +"FW120",thermostat,192,hc1.holidaymode,holiday mode,enum [nofrost\|eco\|heat\|auto] (>=0<=0), ,true,select.thermostat_hc1_holiday_mode,select.thermostat_hc1_holidaymode,6,1,1,66,1 +"FW120",thermostat,192,hc1.switchonoptimization,switch-on optimization,boolean (>=0<=0), ,true,switch.thermostat_hc1_switch-on_optimization,switch.thermostat_hc1_switchonoptimization,6,1,1,33,1 +"FW120",thermostat,192,hc1.heatup,heatup,enum [slow\|medium\|fast] (>=0<=0), ,true,select.thermostat_hc1_heatup,select.thermostat_hc1_heatup,6,1,1,207,1 +"FW120",thermostat,192,hc1.minflowtemp,min flow temperature,uint8 (>=5<=70),C,true,number.thermostat_hc1_min_flow_temperature,number.thermostat_hc1_minflowtemp,6,1,1,12,1 +"FW120",thermostat,192,hc1.maxflowtemp,max flow temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_max_flow_temperature,number.thermostat_hc1_maxflowtemp,6,1,1,13,1 "FW120",thermostat,192,hc1.designtemp,design temperature,uint8 (>=30<=90),C,true,number.thermostat_hc1_design_temperature,number.thermostat_hc1_designtemp,6,1,1,9,1 -"FW120",thermostat,192,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,13,1 -"FW120",thermostat,192,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,14,1 -"FW120",thermostat,192,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,19,1 -"FW120",thermostat,192,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,25,1 +"FW120",thermostat,192,hc1.roominfluence,room influence,enum [off\|intern\|extern\|auto] (>=0<=0), ,true,select.thermostat_hc1_room_influence,select.thermostat_hc1_roominfluence,6,1,1,14,1 +"FW120",thermostat,192,hc1.roominflfactor,room influence factor,uint8 (>=0<=0),%,true,number.thermostat_hc1_room_influence_factor,number.thermostat_hc1_roominflfactor,6,1,10,15,1 +"FW120",thermostat,192,hc1.heatingtype,heating type,enum [off\|heatingcurve\|radiator\|convector\|floor] (>=0<=0), ,true,select.thermostat_hc1_heating_type,select.thermostat_hc1_heatingtype,6,1,1,20,1 +"FW120",thermostat,192,hc1.controlmode,control mode,enum [off\|unmixed\|unmixed IPM\|mixed IPM] (>=0<=0), ,true,select.thermostat_hc1_control_mode,select.thermostat_hc1_controlmode,6,1,1,26,1 "FW120",thermostat,192,dhw.charge,charge,boolean (>=0<=0), ,true,switch.thermostat_dhw_charge,switch.thermostat_dhw_charge,6,9,1,6,1 "RT800, RC220",thermostat,3,errorcode,error code,string, ,false,sensor.thermostat_error_code,sensor.thermostat_errorcode,6,0,1,0,8 "RT800, RC220",thermostat,3,lastcode,last error code,string, ,false,sensor.thermostat_last_error_code,sensor.thermostat_lastcode,6,0,1,8,25 @@ -5389,7 +5495,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "ISM1",solar,101,cylmaxtemp,maximum cylinder temperature,uint8 (>=0<=0),C,true,number.solar_maximum_cylinder_temperature,number.solar_cylmaxtemp,8,0,1,5,1 "ISM1",solar,101,collectorshutdown,collector shutdown,boolean, ,false,binary_sensor.solar_collector_shutdown,binary_sensor.solar_collectorshutdown,8,0,1,6,1 "ISM1",solar,101,cylheated,cyl heated,boolean, ,false,binary_sensor.solar_cyl_heated,binary_sensor.solar_cylheated,8,0,1,7,1 -"ISM1",solar,101,cylmiddletemp,cylinder middle temperature (TS3),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS3),sensor.solar_cylmiddletemp,8,0,1/10,17,1 +"ISM1",solar,101,cylmiddletemp,cylinder middle temperature (TS14),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS14),sensor.solar_cylmiddletemp,8,0,1/10,17,1 "ISM1",solar,101,retheatassist,return temperature heat assistance (TS4),int16,C,false,sensor.solar_return_temperature_heat_assistance_(TS4),sensor.solar_retheatassist,8,0,1/10,18,1 "ISM1",solar,101,heatassistvalve,heat assistance valve (M1),boolean, ,false,binary_sensor.solar_heat_assistance_valve_(M1),binary_sensor.solar_heatassistvalve,8,0,1,19,1 "ISM1",solar,101,energylasthour,energy last hour,uint24,Wh,false,sensor.solar_energy_last_hour,sensor.solar_energylasthour,8,0,1/10,13,2 @@ -5400,7 +5506,7 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "ISM2",solar,103,cylmaxtemp,maximum cylinder temperature,uint8 (>=0<=0),C,true,number.solar_maximum_cylinder_temperature,number.solar_cylmaxtemp,8,0,1,5,1 "ISM2",solar,103,collectorshutdown,collector shutdown,boolean, ,false,binary_sensor.solar_collector_shutdown,binary_sensor.solar_collectorshutdown,8,0,1,6,1 "ISM2",solar,103,cylheated,cyl heated,boolean, ,false,binary_sensor.solar_cyl_heated,binary_sensor.solar_cylheated,8,0,1,7,1 -"ISM2",solar,103,cylmiddletemp,cylinder middle temperature (TS3),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS3),sensor.solar_cylmiddletemp,8,0,1/10,17,1 +"ISM2",solar,103,cylmiddletemp,cylinder middle temperature (TS14),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS14),sensor.solar_cylmiddletemp,8,0,1/10,17,1 "ISM2",solar,103,retheatassist,return temperature heat assistance (TS4),int16,C,false,sensor.solar_return_temperature_heat_assistance_(TS4),sensor.solar_retheatassist,8,0,1/10,18,1 "ISM2",solar,103,heatassistvalve,heat assistance valve (M1),boolean, ,false,binary_sensor.solar_heat_assistance_valve_(M1),binary_sensor.solar_heatassistvalve,8,0,1,19,1 "ISM2",solar,103,energylasthour,energy last hour,uint24,Wh,false,sensor.solar_energy_last_hour,sensor.solar_energylasthour,8,0,1/10,13,2 @@ -5416,57 +5522,58 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "SM50",solar,162,turnondiff,pump turn on difference,uint8 (>=0<=0),C,true,number.solar_pump_turn_on_difference,number.solar_turnondiff,8,0,1/10,10,1 "SM50",solar,162,turnoffdiff,pump turn off difference,uint8 (>=0<=0),C,true,number.solar_pump_turn_off_difference,number.solar_turnoffdiff,8,0,1/10,11,1 "SM50",solar,162,collector2temp,collector 2 temperature (TS7),int16,C,false,sensor.solar_collector_2_temperature_(TS7),sensor.solar_collector2temp,8,0,1/10,20,1 -"SM50",solar,162,cylmiddletemp,cylinder middle temperature (TS3),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS3),sensor.solar_cylmiddletemp,8,0,1/10,17,1 +"SM50",solar,162,cylmiddletemp,cylinder middle temperature (TS14),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS14),sensor.solar_cylmiddletemp,8,0,1/10,17,1 +"SM50",solar,162,ts3,cylinder middle temperature (TS3),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS3),sensor.solar_ts3,8,0,1/10,21,1 "SM50",solar,162,retheatassist,return temperature heat assistance (TS4),int16,C,false,sensor.solar_return_temperature_heat_assistance_(TS4),sensor.solar_retheatassist,8,0,1/10,18,1 -"SM50",solar,162,ts8,(TS8),int16,C,false,sensor.solar_(TS8),sensor.solar_ts8,8,0,1/10,21,1 -"SM50",solar,162,ts16,(TS16),int16,C,false,sensor.solar_(TS16),sensor.solar_ts16,8,0,1/10,22,1 +"SM50",solar,162,ts8,(TS8),int16,C,false,sensor.solar_(TS8),sensor.solar_ts8,8,0,1/10,22,1 +"SM50",solar,162,ts16,(TS16),int16,C,false,sensor.solar_(TS16),sensor.solar_ts16,8,0,1/10,23,1 "SM50",solar,162,heatassistvalve,heat assistance valve (M1),boolean, ,false,binary_sensor.solar_heat_assistance_valve_(M1),binary_sensor.solar_heatassistvalve,8,0,1,19,1 -"SM50",solar,162,heatassistpower,heat assistance valve power (M1),uint8,%,false,sensor.solar_heat_assistance_valve_power_(M1),sensor.solar_heatassistpower,8,0,1,23,1 -"SM50",solar,162,solarpump2,pump 2 (PS4),boolean, ,false,binary_sensor.solar_pump_2_(PS4),binary_sensor.solar_solarpump2,8,0,1,24,1 -"SM50",solar,162,solarpump2mod,pump 2 modulation (PS4),uint8,%,false,sensor.solar_pump_2_modulation_(PS4),sensor.solar_solarpump2mod,8,0,1,25,1 -"SM50",solar,162,cyl2bottomtemp,second cylinder bottom temperature (TS5),int16,C,false,sensor.solar_second_cylinder_bottom_temperature_(TS5),sensor.solar_cyl2bottomtemp,8,0,1/10,26,1 -"SM50",solar,162,cyl3bottomtemp,third cylinder bottom temperature (TS11),int16,C,false,sensor.solar_third_cylinder_bottom_temperature_(TS11),sensor.solar_cyl3bottomtemp,8,0,1/10,27,1 -"SM50",solar,162,cyltoptemp,cylinder top temperature (TS10),int16,C,false,sensor.solar_cylinder_top_temperature_(TS10),sensor.solar_cyltoptemp,8,0,1/10,28,1 -"SM50",solar,162,heatexchangertemp,heat exchanger temperature (TS6),int16,C,false,sensor.solar_heat_exchanger_temperature_(TS6),sensor.solar_heatexchangertemp,8,0,1/10,29,1 -"SM50",solar,162,cylpumpmod,cylinder pump modulation (PS5),uint8,%,false,sensor.solar_cylinder_pump_modulation_(PS5),sensor.solar_cylpumpmod,8,0,1,30,1 -"SM50",solar,162,valvestatus,valve status,boolean, ,false,binary_sensor.solar_valve_status,binary_sensor.solar_valvestatus,8,0,1,31,1 -"SM50",solar,162,vs1status,valve status VS1,boolean, ,false,binary_sensor.solar_valve_status_VS1,binary_sensor.solar_vs1status,8,0,1,32,1 -"SM50",solar,162,vs3status,valve status VS3,boolean, ,false,binary_sensor.solar_valve_status_VS3,binary_sensor.solar_vs3status,8,0,1,33,1 -"SM50",solar,162,transferpump,transfer pump,boolean, ,false,binary_sensor.solar_transfer_pump,binary_sensor.solar_transferpump,8,0,1,34,1 -"SM50",solar,162,transferpumpmod,transfer pump modulation,uint8,%,false,sensor.solar_transfer_pump_modulation,sensor.solar_transferpumpmod,8,0,1,35,1 -"SM50",solar,162,collectormaxtemp,maximum collector temperature,uint8 (>=0<=0),C,true,number.solar_maximum_collector_temperature,number.solar_collectormaxtemp,8,0,1,36,1 -"SM50",solar,162,collectormintemp,minimum collector temperature,uint8 (>=0<=0),C,true,number.solar_minimum_collector_temperature,number.solar_collectormintemp,8,0,1,37,1 +"SM50",solar,162,heatassistpower,heat assistance valve power (M1),uint8,%,false,sensor.solar_heat_assistance_valve_power_(M1),sensor.solar_heatassistpower,8,0,1,24,1 +"SM50",solar,162,solarpump2,pump 2 (PS4),boolean, ,false,binary_sensor.solar_pump_2_(PS4),binary_sensor.solar_solarpump2,8,0,1,25,1 +"SM50",solar,162,solarpump2mod,pump 2 modulation (PS4),uint8,%,false,sensor.solar_pump_2_modulation_(PS4),sensor.solar_solarpump2mod,8,0,1,26,1 +"SM50",solar,162,cyl2bottomtemp,second cylinder bottom temperature (TS5),int16,C,false,sensor.solar_second_cylinder_bottom_temperature_(TS5),sensor.solar_cyl2bottomtemp,8,0,1/10,27,1 +"SM50",solar,162,cyl3bottomtemp,third cylinder bottom temperature (TS11),int16,C,false,sensor.solar_third_cylinder_bottom_temperature_(TS11),sensor.solar_cyl3bottomtemp,8,0,1/10,28,1 +"SM50",solar,162,cyltoptemp,cylinder top temperature (TS10),int16,C,false,sensor.solar_cylinder_top_temperature_(TS10),sensor.solar_cyltoptemp,8,0,1/10,29,1 +"SM50",solar,162,heatexchangertemp,heat exchanger temperature (TS6),int16,C,false,sensor.solar_heat_exchanger_temperature_(TS6),sensor.solar_heatexchangertemp,8,0,1/10,30,1 +"SM50",solar,162,cylpumpmod,cylinder pump modulation (PS5),uint8,%,false,sensor.solar_cylinder_pump_modulation_(PS5),sensor.solar_cylpumpmod,8,0,1,31,1 +"SM50",solar,162,valvestatus,valve status,boolean, ,false,binary_sensor.solar_valve_status,binary_sensor.solar_valvestatus,8,0,1,32,1 +"SM50",solar,162,vs1status,valve status VS1,boolean, ,false,binary_sensor.solar_valve_status_VS1,binary_sensor.solar_vs1status,8,0,1,33,1 +"SM50",solar,162,vs3status,valve status VS3,boolean, ,false,binary_sensor.solar_valve_status_VS3,binary_sensor.solar_vs3status,8,0,1,34,1 +"SM50",solar,162,transferpump,transfer pump,boolean, ,false,binary_sensor.solar_transfer_pump,binary_sensor.solar_transferpump,8,0,1,35,1 +"SM50",solar,162,transferpumpmod,transfer pump modulation,uint8,%,false,sensor.solar_transfer_pump_modulation,sensor.solar_transferpumpmod,8,0,1,36,1 +"SM50",solar,162,collectormaxtemp,maximum collector temperature,uint8 (>=0<=0),C,true,number.solar_maximum_collector_temperature,number.solar_collectormaxtemp,8,0,1,37,1 +"SM50",solar,162,collectormintemp,minimum collector temperature,uint8 (>=0<=0),C,true,number.solar_minimum_collector_temperature,number.solar_collectormintemp,8,0,1,38,1 "SM50",solar,162,energylasthour,energy last hour,uint24,Wh,false,sensor.solar_energy_last_hour,sensor.solar_energylasthour,8,0,1/10,13,2 -"SM50",solar,162,energytoday,total energy today,uint24,Wh,false,sensor.solar_total_energy_today,sensor.solar_energytoday,8,0,1,38,2 -"SM50",solar,162,energytotal,total energy,uint24,kWh,false,sensor.solar_total_energy,sensor.solar_energytotal,8,0,1/10,40,2 -"SM50",solar,162,pump2worktime,pump 2 working time,time,minutes,false,sensor.solar_pump_2_working_time,sensor.solar_pump2worktime,8,0,1,42,2 -"SM50",solar,162,m1worktime,differential control working time,time,minutes,false,sensor.solar_differential_control_working_time,sensor.solar_m1worktime,8,0,1,44,2 -"SM50",solar,162,heattransfersystem,heattransfer system,boolean (>=0<=0), ,true,switch.solar_heattransfer_system,switch.solar_heattransfersystem,8,0,1,46,1 -"SM50",solar,162,externalcyl,external cylinder,boolean (>=0<=0), ,true,switch.solar_external_cylinder,switch.solar_externalcyl,8,0,1,47,1 -"SM50",solar,162,thermaldisinfect,thermal disinfection,boolean (>=0<=0), ,true,switch.solar_thermal_disinfection,switch.solar_thermaldisinfect,8,0,1,48,1 -"SM50",solar,162,heatmetering,heatmetering,boolean (>=0<=0), ,true,switch.solar_heatmetering,switch.solar_heatmetering,8,0,1,49,1 -"SM50",solar,162,activated,activated,boolean (>=0<=0), ,true,switch.solar_activated,switch.solar_activated,8,0,1,50,1 -"SM50",solar,162,solarpumpmode,solar pump mode,enum [constant\|pwm\|analog] (>=0<=0), ,true,select.solar_solar_pump_mode,select.solar_solarpumpmode,8,0,1,51,1 -"SM50",solar,162,solarpumpkick,solar pump kick,boolean (>=0<=0), ,true,switch.solar_solar_pump_kick,switch.solar_solarpumpkick,8,0,1,52,1 -"SM50",solar,162,plainwatermode,plain water mode,boolean (>=0<=0), ,true,switch.solar_plain_water_mode,switch.solar_plainwatermode,8,0,1,53,1 -"SM50",solar,162,doublematchflow,doublematchflow,boolean (>=0<=0), ,true,switch.solar_doublematchflow,switch.solar_doublematchflow,8,0,1,54,1 -"SM50",solar,162,pump2minmod,minimum pump 2 modulation,uint8 (>=0<=0),%,true,number.solar_minimum_pump_2_modulation,number.solar_pump2minmod,8,0,1,55,1 -"SM50",solar,162,turnondiff2,pump 2 turn on difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_on_difference,number.solar_turnondiff2,8,0,1/10,56,1 -"SM50",solar,162,turnoffdiff2,pump 2 turn off difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_off_difference,number.solar_turnoffdiff2,8,0,1/10,57,1 -"SM50",solar,162,pump2kick,pump kick 2,boolean (>=0<=0), ,true,switch.solar_pump_kick_2,switch.solar_pump2kick,8,0,1,58,1 -"SM50",solar,162,climatezone,climate zone,uint8 (>=0<=0), ,true,number.solar_climate_zone,number.solar_climatezone,8,0,1,59,1 -"SM50",solar,162,collector1area,collector 1 area,uint16 (>=0<=0),m²,true,number.solar_collector_1_area,number.solar_collector1area,8,0,1/10,60,1 -"SM50",solar,162,collector1type,collector 1 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_1_type,select.solar_collector1type,8,0,1,61,1 -"SM50",solar,162,collector2area,collector 2 area,uint16 (>=0<=0),m²,true,number.solar_collector_2_area,number.solar_collector2area,8,0,1/10,62,1 -"SM50",solar,162,collector2type,collector 2 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_2_type,select.solar_collector2type,8,0,1,63,1 -"SM50",solar,162,cylpriority,cylinder priority,enum [cyl 1\|cyl 2] (>=0<=0), ,true,select.solar_cylinder_priority,select.solar_cylpriority,8,0,1,64,1 -"SM50",solar,162,heatcntflowtemp,heat counter flow temperature,uint16,C,false,sensor.solar_heat_counter_flow_temperature,sensor.solar_heatcntflowtemp,8,0,1/10,65,1 -"SM50",solar,162,heatcntrettemp,heat counter return temperature,uint16,C,false,sensor.solar_heat_counter_return_temperature,sensor.solar_heatcntrettemp,8,0,1/10,66,1 -"SM50",solar,162,heatcnt,heat counter impulses,uint8, ,false,sensor.solar_heat_counter_impulses,sensor.solar_heatcnt,8,0,1,67,1 -"SM50",solar,162,swapflowtemp,swap flow temperature (TS14),uint16,C,false,sensor.solar_swap_flow_temperature_(TS14),sensor.solar_swapflowtemp,8,0,1/10,68,1 -"SM50",solar,162,swaprettemp,swap return temperature (TS15),uint16,C,false,sensor.solar_swap_return_temperature_(TS15),sensor.solar_swaprettemp,8,0,1/10,69,1 -"SM50",solar,162,heatassiston,heat assistance on,int8 (>=0<=0),K,true,number.solar_heat_assistance_on,number.solar_heatassiston,8,0,1/10,70,1 -"SM50",solar,162,heatassistoff,heat assistance off,int8 (>=0<=0),K,true,number.solar_heat_assistance_off,number.solar_heatassistoff,8,0,1/10,71,1 +"SM50",solar,162,energytoday,total energy today,uint24,Wh,false,sensor.solar_total_energy_today,sensor.solar_energytoday,8,0,1,39,2 +"SM50",solar,162,energytotal,total energy,uint24,kWh,false,sensor.solar_total_energy,sensor.solar_energytotal,8,0,1/10,41,2 +"SM50",solar,162,pump2worktime,pump 2 working time,time,minutes,false,sensor.solar_pump_2_working_time,sensor.solar_pump2worktime,8,0,1,43,2 +"SM50",solar,162,m1worktime,differential control working time,time,minutes,false,sensor.solar_differential_control_working_time,sensor.solar_m1worktime,8,0,1,45,2 +"SM50",solar,162,heattransfersystem,heattransfer system,boolean (>=0<=0), ,true,switch.solar_heattransfer_system,switch.solar_heattransfersystem,8,0,1,47,1 +"SM50",solar,162,externalcyl,external cylinder,boolean (>=0<=0), ,true,switch.solar_external_cylinder,switch.solar_externalcyl,8,0,1,48,1 +"SM50",solar,162,thermaldisinfect,thermal disinfection,boolean (>=0<=0), ,true,switch.solar_thermal_disinfection,switch.solar_thermaldisinfect,8,0,1,49,1 +"SM50",solar,162,heatmetering,heatmetering,boolean (>=0<=0), ,true,switch.solar_heatmetering,switch.solar_heatmetering,8,0,1,50,1 +"SM50",solar,162,activated,activated,boolean (>=0<=0), ,true,switch.solar_activated,switch.solar_activated,8,0,1,51,1 +"SM50",solar,162,solarpumpmode,solar pump mode,enum [constant\|pwm\|analog] (>=0<=0), ,true,select.solar_solar_pump_mode,select.solar_solarpumpmode,8,0,1,52,1 +"SM50",solar,162,solarpumpkick,solar pump kick,boolean (>=0<=0), ,true,switch.solar_solar_pump_kick,switch.solar_solarpumpkick,8,0,1,53,1 +"SM50",solar,162,plainwatermode,plain water mode,boolean (>=0<=0), ,true,switch.solar_plain_water_mode,switch.solar_plainwatermode,8,0,1,54,1 +"SM50",solar,162,doublematchflow,doublematchflow,boolean (>=0<=0), ,true,switch.solar_doublematchflow,switch.solar_doublematchflow,8,0,1,55,1 +"SM50",solar,162,pump2minmod,minimum pump 2 modulation,uint8 (>=0<=0),%,true,number.solar_minimum_pump_2_modulation,number.solar_pump2minmod,8,0,1,56,1 +"SM50",solar,162,turnondiff2,pump 2 turn on difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_on_difference,number.solar_turnondiff2,8,0,1/10,57,1 +"SM50",solar,162,turnoffdiff2,pump 2 turn off difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_off_difference,number.solar_turnoffdiff2,8,0,1/10,58,1 +"SM50",solar,162,pump2kick,pump kick 2,boolean (>=0<=0), ,true,switch.solar_pump_kick_2,switch.solar_pump2kick,8,0,1,59,1 +"SM50",solar,162,climatezone,climate zone,uint8 (>=0<=0), ,true,number.solar_climate_zone,number.solar_climatezone,8,0,1,60,1 +"SM50",solar,162,collector1area,collector 1 area,uint16 (>=0<=0),m²,true,number.solar_collector_1_area,number.solar_collector1area,8,0,1/10,61,1 +"SM50",solar,162,collector1type,collector 1 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_1_type,select.solar_collector1type,8,0,1,62,1 +"SM50",solar,162,collector2area,collector 2 area,uint16 (>=0<=0),m²,true,number.solar_collector_2_area,number.solar_collector2area,8,0,1/10,63,1 +"SM50",solar,162,collector2type,collector 2 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_2_type,select.solar_collector2type,8,0,1,64,1 +"SM50",solar,162,cylpriority,cylinder priority,enum [cyl 1\|cyl 2] (>=0<=0), ,true,select.solar_cylinder_priority,select.solar_cylpriority,8,0,1,65,1 +"SM50",solar,162,heatcntflowtemp,heat counter flow temperature,uint16,C,false,sensor.solar_heat_counter_flow_temperature,sensor.solar_heatcntflowtemp,8,0,1/10,66,1 +"SM50",solar,162,heatcntrettemp,heat counter return temperature,uint16,C,false,sensor.solar_heat_counter_return_temperature,sensor.solar_heatcntrettemp,8,0,1/10,67,1 +"SM50",solar,162,heatcnt,heat counter impulses,uint8, ,false,sensor.solar_heat_counter_impulses,sensor.solar_heatcnt,8,0,1,68,1 +"SM50",solar,162,swapflowtemp,swap flow temperature (TS14),uint16,C,false,sensor.solar_swap_flow_temperature_(TS14),sensor.solar_swapflowtemp,8,0,1/10,69,1 +"SM50",solar,162,swaprettemp,swap return temperature (TS15),uint16,C,false,sensor.solar_swap_return_temperature_(TS15),sensor.solar_swaprettemp,8,0,1/10,70,1 +"SM50",solar,162,heatassiston,heat assistance on,int8 (>=0<=0),K,true,number.solar_heat_assistance_on,number.solar_heatassiston,8,0,1/10,71,1 +"SM50",solar,162,heatassistoff,heat assistance off,int8 (>=0<=0),K,true,number.solar_heat_assistance_off,number.solar_heatassistoff,8,0,1/10,72,1 "SM100, MS100",solar,163,collectortemp,collector temperature (TS1),int16,C,false,sensor.solar_collector_temperature_(TS1),sensor.solar_collectortemp,8,0,1/10,0,1 "SM100, MS100",solar,163,cylbottomtemp,cylinder bottom temperature (TS2),int16,C,false,sensor.solar_cylinder_bottom_temperature_(TS2),sensor.solar_cylbottomtemp,8,0,1/10,1,1 "SM100, MS100",solar,163,solarpump,pump (PS1),boolean, ,false,binary_sensor.solar_pump_(PS1),binary_sensor.solar_solarpump,8,0,1,2,1 @@ -5479,57 +5586,58 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "SM100, MS100",solar,163,turnondiff,pump turn on difference,uint8 (>=0<=0),C,true,number.solar_pump_turn_on_difference,number.solar_turnondiff,8,0,1/10,10,1 "SM100, MS100",solar,163,turnoffdiff,pump turn off difference,uint8 (>=0<=0),C,true,number.solar_pump_turn_off_difference,number.solar_turnoffdiff,8,0,1/10,11,1 "SM100, MS100",solar,163,collector2temp,collector 2 temperature (TS7),int16,C,false,sensor.solar_collector_2_temperature_(TS7),sensor.solar_collector2temp,8,0,1/10,20,1 -"SM100, MS100",solar,163,cylmiddletemp,cylinder middle temperature (TS3),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS3),sensor.solar_cylmiddletemp,8,0,1/10,17,1 +"SM100, MS100",solar,163,cylmiddletemp,cylinder middle temperature (TS14),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS14),sensor.solar_cylmiddletemp,8,0,1/10,17,1 +"SM100, MS100",solar,163,ts3,cylinder middle temperature (TS3),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS3),sensor.solar_ts3,8,0,1/10,21,1 "SM100, MS100",solar,163,retheatassist,return temperature heat assistance (TS4),int16,C,false,sensor.solar_return_temperature_heat_assistance_(TS4),sensor.solar_retheatassist,8,0,1/10,18,1 -"SM100, MS100",solar,163,ts8,(TS8),int16,C,false,sensor.solar_(TS8),sensor.solar_ts8,8,0,1/10,21,1 -"SM100, MS100",solar,163,ts16,(TS16),int16,C,false,sensor.solar_(TS16),sensor.solar_ts16,8,0,1/10,22,1 +"SM100, MS100",solar,163,ts8,(TS8),int16,C,false,sensor.solar_(TS8),sensor.solar_ts8,8,0,1/10,22,1 +"SM100, MS100",solar,163,ts16,(TS16),int16,C,false,sensor.solar_(TS16),sensor.solar_ts16,8,0,1/10,23,1 "SM100, MS100",solar,163,heatassistvalve,heat assistance valve (M1),boolean, ,false,binary_sensor.solar_heat_assistance_valve_(M1),binary_sensor.solar_heatassistvalve,8,0,1,19,1 -"SM100, MS100",solar,163,heatassistpower,heat assistance valve power (M1),uint8,%,false,sensor.solar_heat_assistance_valve_power_(M1),sensor.solar_heatassistpower,8,0,1,23,1 -"SM100, MS100",solar,163,solarpump2,pump 2 (PS4),boolean, ,false,binary_sensor.solar_pump_2_(PS4),binary_sensor.solar_solarpump2,8,0,1,24,1 -"SM100, MS100",solar,163,solarpump2mod,pump 2 modulation (PS4),uint8,%,false,sensor.solar_pump_2_modulation_(PS4),sensor.solar_solarpump2mod,8,0,1,25,1 -"SM100, MS100",solar,163,cyl2bottomtemp,second cylinder bottom temperature (TS5),int16,C,false,sensor.solar_second_cylinder_bottom_temperature_(TS5),sensor.solar_cyl2bottomtemp,8,0,1/10,26,1 -"SM100, MS100",solar,163,cyl3bottomtemp,third cylinder bottom temperature (TS11),int16,C,false,sensor.solar_third_cylinder_bottom_temperature_(TS11),sensor.solar_cyl3bottomtemp,8,0,1/10,27,1 -"SM100, MS100",solar,163,cyltoptemp,cylinder top temperature (TS10),int16,C,false,sensor.solar_cylinder_top_temperature_(TS10),sensor.solar_cyltoptemp,8,0,1/10,28,1 -"SM100, MS100",solar,163,heatexchangertemp,heat exchanger temperature (TS6),int16,C,false,sensor.solar_heat_exchanger_temperature_(TS6),sensor.solar_heatexchangertemp,8,0,1/10,29,1 -"SM100, MS100",solar,163,cylpumpmod,cylinder pump modulation (PS5),uint8,%,false,sensor.solar_cylinder_pump_modulation_(PS5),sensor.solar_cylpumpmod,8,0,1,30,1 -"SM100, MS100",solar,163,valvestatus,valve status,boolean, ,false,binary_sensor.solar_valve_status,binary_sensor.solar_valvestatus,8,0,1,31,1 -"SM100, MS100",solar,163,vs1status,valve status VS1,boolean, ,false,binary_sensor.solar_valve_status_VS1,binary_sensor.solar_vs1status,8,0,1,32,1 -"SM100, MS100",solar,163,vs3status,valve status VS3,boolean, ,false,binary_sensor.solar_valve_status_VS3,binary_sensor.solar_vs3status,8,0,1,33,1 -"SM100, MS100",solar,163,transferpump,transfer pump,boolean, ,false,binary_sensor.solar_transfer_pump,binary_sensor.solar_transferpump,8,0,1,34,1 -"SM100, MS100",solar,163,transferpumpmod,transfer pump modulation,uint8,%,false,sensor.solar_transfer_pump_modulation,sensor.solar_transferpumpmod,8,0,1,35,1 -"SM100, MS100",solar,163,collectormaxtemp,maximum collector temperature,uint8 (>=0<=0),C,true,number.solar_maximum_collector_temperature,number.solar_collectormaxtemp,8,0,1,36,1 -"SM100, MS100",solar,163,collectormintemp,minimum collector temperature,uint8 (>=0<=0),C,true,number.solar_minimum_collector_temperature,number.solar_collectormintemp,8,0,1,37,1 +"SM100, MS100",solar,163,heatassistpower,heat assistance valve power (M1),uint8,%,false,sensor.solar_heat_assistance_valve_power_(M1),sensor.solar_heatassistpower,8,0,1,24,1 +"SM100, MS100",solar,163,solarpump2,pump 2 (PS4),boolean, ,false,binary_sensor.solar_pump_2_(PS4),binary_sensor.solar_solarpump2,8,0,1,25,1 +"SM100, MS100",solar,163,solarpump2mod,pump 2 modulation (PS4),uint8,%,false,sensor.solar_pump_2_modulation_(PS4),sensor.solar_solarpump2mod,8,0,1,26,1 +"SM100, MS100",solar,163,cyl2bottomtemp,second cylinder bottom temperature (TS5),int16,C,false,sensor.solar_second_cylinder_bottom_temperature_(TS5),sensor.solar_cyl2bottomtemp,8,0,1/10,27,1 +"SM100, MS100",solar,163,cyl3bottomtemp,third cylinder bottom temperature (TS11),int16,C,false,sensor.solar_third_cylinder_bottom_temperature_(TS11),sensor.solar_cyl3bottomtemp,8,0,1/10,28,1 +"SM100, MS100",solar,163,cyltoptemp,cylinder top temperature (TS10),int16,C,false,sensor.solar_cylinder_top_temperature_(TS10),sensor.solar_cyltoptemp,8,0,1/10,29,1 +"SM100, MS100",solar,163,heatexchangertemp,heat exchanger temperature (TS6),int16,C,false,sensor.solar_heat_exchanger_temperature_(TS6),sensor.solar_heatexchangertemp,8,0,1/10,30,1 +"SM100, MS100",solar,163,cylpumpmod,cylinder pump modulation (PS5),uint8,%,false,sensor.solar_cylinder_pump_modulation_(PS5),sensor.solar_cylpumpmod,8,0,1,31,1 +"SM100, MS100",solar,163,valvestatus,valve status,boolean, ,false,binary_sensor.solar_valve_status,binary_sensor.solar_valvestatus,8,0,1,32,1 +"SM100, MS100",solar,163,vs1status,valve status VS1,boolean, ,false,binary_sensor.solar_valve_status_VS1,binary_sensor.solar_vs1status,8,0,1,33,1 +"SM100, MS100",solar,163,vs3status,valve status VS3,boolean, ,false,binary_sensor.solar_valve_status_VS3,binary_sensor.solar_vs3status,8,0,1,34,1 +"SM100, MS100",solar,163,transferpump,transfer pump,boolean, ,false,binary_sensor.solar_transfer_pump,binary_sensor.solar_transferpump,8,0,1,35,1 +"SM100, MS100",solar,163,transferpumpmod,transfer pump modulation,uint8,%,false,sensor.solar_transfer_pump_modulation,sensor.solar_transferpumpmod,8,0,1,36,1 +"SM100, MS100",solar,163,collectormaxtemp,maximum collector temperature,uint8 (>=0<=0),C,true,number.solar_maximum_collector_temperature,number.solar_collectormaxtemp,8,0,1,37,1 +"SM100, MS100",solar,163,collectormintemp,minimum collector temperature,uint8 (>=0<=0),C,true,number.solar_minimum_collector_temperature,number.solar_collectormintemp,8,0,1,38,1 "SM100, MS100",solar,163,energylasthour,energy last hour,uint24,Wh,false,sensor.solar_energy_last_hour,sensor.solar_energylasthour,8,0,1/10,13,2 -"SM100, MS100",solar,163,energytoday,total energy today,uint24,Wh,false,sensor.solar_total_energy_today,sensor.solar_energytoday,8,0,1,38,2 -"SM100, MS100",solar,163,energytotal,total energy,uint24,kWh,false,sensor.solar_total_energy,sensor.solar_energytotal,8,0,1/10,40,2 -"SM100, MS100",solar,163,pump2worktime,pump 2 working time,time,minutes,false,sensor.solar_pump_2_working_time,sensor.solar_pump2worktime,8,0,1,42,2 -"SM100, MS100",solar,163,m1worktime,differential control working time,time,minutes,false,sensor.solar_differential_control_working_time,sensor.solar_m1worktime,8,0,1,44,2 -"SM100, MS100",solar,163,heattransfersystem,heattransfer system,boolean (>=0<=0), ,true,switch.solar_heattransfer_system,switch.solar_heattransfersystem,8,0,1,46,1 -"SM100, MS100",solar,163,externalcyl,external cylinder,boolean (>=0<=0), ,true,switch.solar_external_cylinder,switch.solar_externalcyl,8,0,1,47,1 -"SM100, MS100",solar,163,thermaldisinfect,thermal disinfection,boolean (>=0<=0), ,true,switch.solar_thermal_disinfection,switch.solar_thermaldisinfect,8,0,1,48,1 -"SM100, MS100",solar,163,heatmetering,heatmetering,boolean (>=0<=0), ,true,switch.solar_heatmetering,switch.solar_heatmetering,8,0,1,49,1 -"SM100, MS100",solar,163,activated,activated,boolean (>=0<=0), ,true,switch.solar_activated,switch.solar_activated,8,0,1,50,1 -"SM100, MS100",solar,163,solarpumpmode,solar pump mode,enum [constant\|pwm\|analog] (>=0<=0), ,true,select.solar_solar_pump_mode,select.solar_solarpumpmode,8,0,1,51,1 -"SM100, MS100",solar,163,solarpumpkick,solar pump kick,boolean (>=0<=0), ,true,switch.solar_solar_pump_kick,switch.solar_solarpumpkick,8,0,1,52,1 -"SM100, MS100",solar,163,plainwatermode,plain water mode,boolean (>=0<=0), ,true,switch.solar_plain_water_mode,switch.solar_plainwatermode,8,0,1,53,1 -"SM100, MS100",solar,163,doublematchflow,doublematchflow,boolean (>=0<=0), ,true,switch.solar_doublematchflow,switch.solar_doublematchflow,8,0,1,54,1 -"SM100, MS100",solar,163,pump2minmod,minimum pump 2 modulation,uint8 (>=0<=0),%,true,number.solar_minimum_pump_2_modulation,number.solar_pump2minmod,8,0,1,55,1 -"SM100, MS100",solar,163,turnondiff2,pump 2 turn on difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_on_difference,number.solar_turnondiff2,8,0,1/10,56,1 -"SM100, MS100",solar,163,turnoffdiff2,pump 2 turn off difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_off_difference,number.solar_turnoffdiff2,8,0,1/10,57,1 -"SM100, MS100",solar,163,pump2kick,pump kick 2,boolean (>=0<=0), ,true,switch.solar_pump_kick_2,switch.solar_pump2kick,8,0,1,58,1 -"SM100, MS100",solar,163,climatezone,climate zone,uint8 (>=0<=0), ,true,number.solar_climate_zone,number.solar_climatezone,8,0,1,59,1 -"SM100, MS100",solar,163,collector1area,collector 1 area,uint16 (>=0<=0),m²,true,number.solar_collector_1_area,number.solar_collector1area,8,0,1/10,60,1 -"SM100, MS100",solar,163,collector1type,collector 1 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_1_type,select.solar_collector1type,8,0,1,61,1 -"SM100, MS100",solar,163,collector2area,collector 2 area,uint16 (>=0<=0),m²,true,number.solar_collector_2_area,number.solar_collector2area,8,0,1/10,62,1 -"SM100, MS100",solar,163,collector2type,collector 2 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_2_type,select.solar_collector2type,8,0,1,63,1 -"SM100, MS100",solar,163,cylpriority,cylinder priority,enum [cyl 1\|cyl 2] (>=0<=0), ,true,select.solar_cylinder_priority,select.solar_cylpriority,8,0,1,64,1 -"SM100, MS100",solar,163,heatcntflowtemp,heat counter flow temperature,uint16,C,false,sensor.solar_heat_counter_flow_temperature,sensor.solar_heatcntflowtemp,8,0,1/10,65,1 -"SM100, MS100",solar,163,heatcntrettemp,heat counter return temperature,uint16,C,false,sensor.solar_heat_counter_return_temperature,sensor.solar_heatcntrettemp,8,0,1/10,66,1 -"SM100, MS100",solar,163,heatcnt,heat counter impulses,uint8, ,false,sensor.solar_heat_counter_impulses,sensor.solar_heatcnt,8,0,1,67,1 -"SM100, MS100",solar,163,swapflowtemp,swap flow temperature (TS14),uint16,C,false,sensor.solar_swap_flow_temperature_(TS14),sensor.solar_swapflowtemp,8,0,1/10,68,1 -"SM100, MS100",solar,163,swaprettemp,swap return temperature (TS15),uint16,C,false,sensor.solar_swap_return_temperature_(TS15),sensor.solar_swaprettemp,8,0,1/10,69,1 -"SM100, MS100",solar,163,heatassiston,heat assistance on,int8 (>=0<=0),K,true,number.solar_heat_assistance_on,number.solar_heatassiston,8,0,1/10,70,1 -"SM100, MS100",solar,163,heatassistoff,heat assistance off,int8 (>=0<=0),K,true,number.solar_heat_assistance_off,number.solar_heatassistoff,8,0,1/10,71,1 +"SM100, MS100",solar,163,energytoday,total energy today,uint24,Wh,false,sensor.solar_total_energy_today,sensor.solar_energytoday,8,0,1,39,2 +"SM100, MS100",solar,163,energytotal,total energy,uint24,kWh,false,sensor.solar_total_energy,sensor.solar_energytotal,8,0,1/10,41,2 +"SM100, MS100",solar,163,pump2worktime,pump 2 working time,time,minutes,false,sensor.solar_pump_2_working_time,sensor.solar_pump2worktime,8,0,1,43,2 +"SM100, MS100",solar,163,m1worktime,differential control working time,time,minutes,false,sensor.solar_differential_control_working_time,sensor.solar_m1worktime,8,0,1,45,2 +"SM100, MS100",solar,163,heattransfersystem,heattransfer system,boolean (>=0<=0), ,true,switch.solar_heattransfer_system,switch.solar_heattransfersystem,8,0,1,47,1 +"SM100, MS100",solar,163,externalcyl,external cylinder,boolean (>=0<=0), ,true,switch.solar_external_cylinder,switch.solar_externalcyl,8,0,1,48,1 +"SM100, MS100",solar,163,thermaldisinfect,thermal disinfection,boolean (>=0<=0), ,true,switch.solar_thermal_disinfection,switch.solar_thermaldisinfect,8,0,1,49,1 +"SM100, MS100",solar,163,heatmetering,heatmetering,boolean (>=0<=0), ,true,switch.solar_heatmetering,switch.solar_heatmetering,8,0,1,50,1 +"SM100, MS100",solar,163,activated,activated,boolean (>=0<=0), ,true,switch.solar_activated,switch.solar_activated,8,0,1,51,1 +"SM100, MS100",solar,163,solarpumpmode,solar pump mode,enum [constant\|pwm\|analog] (>=0<=0), ,true,select.solar_solar_pump_mode,select.solar_solarpumpmode,8,0,1,52,1 +"SM100, MS100",solar,163,solarpumpkick,solar pump kick,boolean (>=0<=0), ,true,switch.solar_solar_pump_kick,switch.solar_solarpumpkick,8,0,1,53,1 +"SM100, MS100",solar,163,plainwatermode,plain water mode,boolean (>=0<=0), ,true,switch.solar_plain_water_mode,switch.solar_plainwatermode,8,0,1,54,1 +"SM100, MS100",solar,163,doublematchflow,doublematchflow,boolean (>=0<=0), ,true,switch.solar_doublematchflow,switch.solar_doublematchflow,8,0,1,55,1 +"SM100, MS100",solar,163,pump2minmod,minimum pump 2 modulation,uint8 (>=0<=0),%,true,number.solar_minimum_pump_2_modulation,number.solar_pump2minmod,8,0,1,56,1 +"SM100, MS100",solar,163,turnondiff2,pump 2 turn on difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_on_difference,number.solar_turnondiff2,8,0,1/10,57,1 +"SM100, MS100",solar,163,turnoffdiff2,pump 2 turn off difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_off_difference,number.solar_turnoffdiff2,8,0,1/10,58,1 +"SM100, MS100",solar,163,pump2kick,pump kick 2,boolean (>=0<=0), ,true,switch.solar_pump_kick_2,switch.solar_pump2kick,8,0,1,59,1 +"SM100, MS100",solar,163,climatezone,climate zone,uint8 (>=0<=0), ,true,number.solar_climate_zone,number.solar_climatezone,8,0,1,60,1 +"SM100, MS100",solar,163,collector1area,collector 1 area,uint16 (>=0<=0),m²,true,number.solar_collector_1_area,number.solar_collector1area,8,0,1/10,61,1 +"SM100, MS100",solar,163,collector1type,collector 1 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_1_type,select.solar_collector1type,8,0,1,62,1 +"SM100, MS100",solar,163,collector2area,collector 2 area,uint16 (>=0<=0),m²,true,number.solar_collector_2_area,number.solar_collector2area,8,0,1/10,63,1 +"SM100, MS100",solar,163,collector2type,collector 2 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_2_type,select.solar_collector2type,8,0,1,64,1 +"SM100, MS100",solar,163,cylpriority,cylinder priority,enum [cyl 1\|cyl 2] (>=0<=0), ,true,select.solar_cylinder_priority,select.solar_cylpriority,8,0,1,65,1 +"SM100, MS100",solar,163,heatcntflowtemp,heat counter flow temperature,uint16,C,false,sensor.solar_heat_counter_flow_temperature,sensor.solar_heatcntflowtemp,8,0,1/10,66,1 +"SM100, MS100",solar,163,heatcntrettemp,heat counter return temperature,uint16,C,false,sensor.solar_heat_counter_return_temperature,sensor.solar_heatcntrettemp,8,0,1/10,67,1 +"SM100, MS100",solar,163,heatcnt,heat counter impulses,uint8, ,false,sensor.solar_heat_counter_impulses,sensor.solar_heatcnt,8,0,1,68,1 +"SM100, MS100",solar,163,swapflowtemp,swap flow temperature (TS14),uint16,C,false,sensor.solar_swap_flow_temperature_(TS14),sensor.solar_swapflowtemp,8,0,1/10,69,1 +"SM100, MS100",solar,163,swaprettemp,swap return temperature (TS15),uint16,C,false,sensor.solar_swap_return_temperature_(TS15),sensor.solar_swaprettemp,8,0,1/10,70,1 +"SM100, MS100",solar,163,heatassiston,heat assistance on,int8 (>=0<=0),K,true,number.solar_heat_assistance_on,number.solar_heatassiston,8,0,1/10,71,1 +"SM100, MS100",solar,163,heatassistoff,heat assistance off,int8 (>=0<=0),K,true,number.solar_heat_assistance_off,number.solar_heatassistoff,8,0,1/10,72,1 "SM200, MS200",solar,164,collectortemp,collector temperature (TS1),int16,C,false,sensor.solar_collector_temperature_(TS1),sensor.solar_collectortemp,8,0,1/10,0,1 "SM200, MS200",solar,164,cylbottomtemp,cylinder bottom temperature (TS2),int16,C,false,sensor.solar_cylinder_bottom_temperature_(TS2),sensor.solar_cylbottomtemp,8,0,1/10,1,1 "SM200, MS200",solar,164,solarpump,pump (PS1),boolean, ,false,binary_sensor.solar_pump_(PS1),binary_sensor.solar_solarpump,8,0,1,2,1 @@ -5542,57 +5650,58 @@ device name,device type,product id,shortname,fullname,type [options...] \| (min/ "SM200, MS200",solar,164,turnondiff,pump turn on difference,uint8 (>=0<=0),C,true,number.solar_pump_turn_on_difference,number.solar_turnondiff,8,0,1/10,10,1 "SM200, MS200",solar,164,turnoffdiff,pump turn off difference,uint8 (>=0<=0),C,true,number.solar_pump_turn_off_difference,number.solar_turnoffdiff,8,0,1/10,11,1 "SM200, MS200",solar,164,collector2temp,collector 2 temperature (TS7),int16,C,false,sensor.solar_collector_2_temperature_(TS7),sensor.solar_collector2temp,8,0,1/10,20,1 -"SM200, MS200",solar,164,cylmiddletemp,cylinder middle temperature (TS3),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS3),sensor.solar_cylmiddletemp,8,0,1/10,17,1 +"SM200, MS200",solar,164,cylmiddletemp,cylinder middle temperature (TS14),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS14),sensor.solar_cylmiddletemp,8,0,1/10,17,1 +"SM200, MS200",solar,164,ts3,cylinder middle temperature (TS3),int16,C,false,sensor.solar_cylinder_middle_temperature_(TS3),sensor.solar_ts3,8,0,1/10,21,1 "SM200, MS200",solar,164,retheatassist,return temperature heat assistance (TS4),int16,C,false,sensor.solar_return_temperature_heat_assistance_(TS4),sensor.solar_retheatassist,8,0,1/10,18,1 -"SM200, MS200",solar,164,ts8,(TS8),int16,C,false,sensor.solar_(TS8),sensor.solar_ts8,8,0,1/10,21,1 -"SM200, MS200",solar,164,ts16,(TS16),int16,C,false,sensor.solar_(TS16),sensor.solar_ts16,8,0,1/10,22,1 +"SM200, MS200",solar,164,ts8,(TS8),int16,C,false,sensor.solar_(TS8),sensor.solar_ts8,8,0,1/10,22,1 +"SM200, MS200",solar,164,ts16,(TS16),int16,C,false,sensor.solar_(TS16),sensor.solar_ts16,8,0,1/10,23,1 "SM200, MS200",solar,164,heatassistvalve,heat assistance valve (M1),boolean, ,false,binary_sensor.solar_heat_assistance_valve_(M1),binary_sensor.solar_heatassistvalve,8,0,1,19,1 -"SM200, MS200",solar,164,heatassistpower,heat assistance valve power (M1),uint8,%,false,sensor.solar_heat_assistance_valve_power_(M1),sensor.solar_heatassistpower,8,0,1,23,1 -"SM200, MS200",solar,164,solarpump2,pump 2 (PS4),boolean, ,false,binary_sensor.solar_pump_2_(PS4),binary_sensor.solar_solarpump2,8,0,1,24,1 -"SM200, MS200",solar,164,solarpump2mod,pump 2 modulation (PS4),uint8,%,false,sensor.solar_pump_2_modulation_(PS4),sensor.solar_solarpump2mod,8,0,1,25,1 -"SM200, MS200",solar,164,cyl2bottomtemp,second cylinder bottom temperature (TS5),int16,C,false,sensor.solar_second_cylinder_bottom_temperature_(TS5),sensor.solar_cyl2bottomtemp,8,0,1/10,26,1 -"SM200, MS200",solar,164,cyl3bottomtemp,third cylinder bottom temperature (TS11),int16,C,false,sensor.solar_third_cylinder_bottom_temperature_(TS11),sensor.solar_cyl3bottomtemp,8,0,1/10,27,1 -"SM200, MS200",solar,164,cyltoptemp,cylinder top temperature (TS10),int16,C,false,sensor.solar_cylinder_top_temperature_(TS10),sensor.solar_cyltoptemp,8,0,1/10,28,1 -"SM200, MS200",solar,164,heatexchangertemp,heat exchanger temperature (TS6),int16,C,false,sensor.solar_heat_exchanger_temperature_(TS6),sensor.solar_heatexchangertemp,8,0,1/10,29,1 -"SM200, MS200",solar,164,cylpumpmod,cylinder pump modulation (PS5),uint8,%,false,sensor.solar_cylinder_pump_modulation_(PS5),sensor.solar_cylpumpmod,8,0,1,30,1 -"SM200, MS200",solar,164,valvestatus,valve status,boolean, ,false,binary_sensor.solar_valve_status,binary_sensor.solar_valvestatus,8,0,1,31,1 -"SM200, MS200",solar,164,vs1status,valve status VS1,boolean, ,false,binary_sensor.solar_valve_status_VS1,binary_sensor.solar_vs1status,8,0,1,32,1 -"SM200, MS200",solar,164,vs3status,valve status VS3,boolean, ,false,binary_sensor.solar_valve_status_VS3,binary_sensor.solar_vs3status,8,0,1,33,1 -"SM200, MS200",solar,164,transferpump,transfer pump,boolean, ,false,binary_sensor.solar_transfer_pump,binary_sensor.solar_transferpump,8,0,1,34,1 -"SM200, MS200",solar,164,transferpumpmod,transfer pump modulation,uint8,%,false,sensor.solar_transfer_pump_modulation,sensor.solar_transferpumpmod,8,0,1,35,1 -"SM200, MS200",solar,164,collectormaxtemp,maximum collector temperature,uint8 (>=0<=0),C,true,number.solar_maximum_collector_temperature,number.solar_collectormaxtemp,8,0,1,36,1 -"SM200, MS200",solar,164,collectormintemp,minimum collector temperature,uint8 (>=0<=0),C,true,number.solar_minimum_collector_temperature,number.solar_collectormintemp,8,0,1,37,1 +"SM200, MS200",solar,164,heatassistpower,heat assistance valve power (M1),uint8,%,false,sensor.solar_heat_assistance_valve_power_(M1),sensor.solar_heatassistpower,8,0,1,24,1 +"SM200, MS200",solar,164,solarpump2,pump 2 (PS4),boolean, ,false,binary_sensor.solar_pump_2_(PS4),binary_sensor.solar_solarpump2,8,0,1,25,1 +"SM200, MS200",solar,164,solarpump2mod,pump 2 modulation (PS4),uint8,%,false,sensor.solar_pump_2_modulation_(PS4),sensor.solar_solarpump2mod,8,0,1,26,1 +"SM200, MS200",solar,164,cyl2bottomtemp,second cylinder bottom temperature (TS5),int16,C,false,sensor.solar_second_cylinder_bottom_temperature_(TS5),sensor.solar_cyl2bottomtemp,8,0,1/10,27,1 +"SM200, MS200",solar,164,cyl3bottomtemp,third cylinder bottom temperature (TS11),int16,C,false,sensor.solar_third_cylinder_bottom_temperature_(TS11),sensor.solar_cyl3bottomtemp,8,0,1/10,28,1 +"SM200, MS200",solar,164,cyltoptemp,cylinder top temperature (TS10),int16,C,false,sensor.solar_cylinder_top_temperature_(TS10),sensor.solar_cyltoptemp,8,0,1/10,29,1 +"SM200, MS200",solar,164,heatexchangertemp,heat exchanger temperature (TS6),int16,C,false,sensor.solar_heat_exchanger_temperature_(TS6),sensor.solar_heatexchangertemp,8,0,1/10,30,1 +"SM200, MS200",solar,164,cylpumpmod,cylinder pump modulation (PS5),uint8,%,false,sensor.solar_cylinder_pump_modulation_(PS5),sensor.solar_cylpumpmod,8,0,1,31,1 +"SM200, MS200",solar,164,valvestatus,valve status,boolean, ,false,binary_sensor.solar_valve_status,binary_sensor.solar_valvestatus,8,0,1,32,1 +"SM200, MS200",solar,164,vs1status,valve status VS1,boolean, ,false,binary_sensor.solar_valve_status_VS1,binary_sensor.solar_vs1status,8,0,1,33,1 +"SM200, MS200",solar,164,vs3status,valve status VS3,boolean, ,false,binary_sensor.solar_valve_status_VS3,binary_sensor.solar_vs3status,8,0,1,34,1 +"SM200, MS200",solar,164,transferpump,transfer pump,boolean, ,false,binary_sensor.solar_transfer_pump,binary_sensor.solar_transferpump,8,0,1,35,1 +"SM200, MS200",solar,164,transferpumpmod,transfer pump modulation,uint8,%,false,sensor.solar_transfer_pump_modulation,sensor.solar_transferpumpmod,8,0,1,36,1 +"SM200, MS200",solar,164,collectormaxtemp,maximum collector temperature,uint8 (>=0<=0),C,true,number.solar_maximum_collector_temperature,number.solar_collectormaxtemp,8,0,1,37,1 +"SM200, MS200",solar,164,collectormintemp,minimum collector temperature,uint8 (>=0<=0),C,true,number.solar_minimum_collector_temperature,number.solar_collectormintemp,8,0,1,38,1 "SM200, MS200",solar,164,energylasthour,energy last hour,uint24,Wh,false,sensor.solar_energy_last_hour,sensor.solar_energylasthour,8,0,1/10,13,2 -"SM200, MS200",solar,164,energytoday,total energy today,uint24,Wh,false,sensor.solar_total_energy_today,sensor.solar_energytoday,8,0,1,38,2 -"SM200, MS200",solar,164,energytotal,total energy,uint24,kWh,false,sensor.solar_total_energy,sensor.solar_energytotal,8,0,1/10,40,2 -"SM200, MS200",solar,164,pump2worktime,pump 2 working time,time,minutes,false,sensor.solar_pump_2_working_time,sensor.solar_pump2worktime,8,0,1,42,2 -"SM200, MS200",solar,164,m1worktime,differential control working time,time,minutes,false,sensor.solar_differential_control_working_time,sensor.solar_m1worktime,8,0,1,44,2 -"SM200, MS200",solar,164,heattransfersystem,heattransfer system,boolean (>=0<=0), ,true,switch.solar_heattransfer_system,switch.solar_heattransfersystem,8,0,1,46,1 -"SM200, MS200",solar,164,externalcyl,external cylinder,boolean (>=0<=0), ,true,switch.solar_external_cylinder,switch.solar_externalcyl,8,0,1,47,1 -"SM200, MS200",solar,164,thermaldisinfect,thermal disinfection,boolean (>=0<=0), ,true,switch.solar_thermal_disinfection,switch.solar_thermaldisinfect,8,0,1,48,1 -"SM200, MS200",solar,164,heatmetering,heatmetering,boolean (>=0<=0), ,true,switch.solar_heatmetering,switch.solar_heatmetering,8,0,1,49,1 -"SM200, MS200",solar,164,activated,activated,boolean (>=0<=0), ,true,switch.solar_activated,switch.solar_activated,8,0,1,50,1 -"SM200, MS200",solar,164,solarpumpmode,solar pump mode,enum [constant\|pwm\|analog] (>=0<=0), ,true,select.solar_solar_pump_mode,select.solar_solarpumpmode,8,0,1,51,1 -"SM200, MS200",solar,164,solarpumpkick,solar pump kick,boolean (>=0<=0), ,true,switch.solar_solar_pump_kick,switch.solar_solarpumpkick,8,0,1,52,1 -"SM200, MS200",solar,164,plainwatermode,plain water mode,boolean (>=0<=0), ,true,switch.solar_plain_water_mode,switch.solar_plainwatermode,8,0,1,53,1 -"SM200, MS200",solar,164,doublematchflow,doublematchflow,boolean (>=0<=0), ,true,switch.solar_doublematchflow,switch.solar_doublematchflow,8,0,1,54,1 -"SM200, MS200",solar,164,pump2minmod,minimum pump 2 modulation,uint8 (>=0<=0),%,true,number.solar_minimum_pump_2_modulation,number.solar_pump2minmod,8,0,1,55,1 -"SM200, MS200",solar,164,turnondiff2,pump 2 turn on difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_on_difference,number.solar_turnondiff2,8,0,1/10,56,1 -"SM200, MS200",solar,164,turnoffdiff2,pump 2 turn off difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_off_difference,number.solar_turnoffdiff2,8,0,1/10,57,1 -"SM200, MS200",solar,164,pump2kick,pump kick 2,boolean (>=0<=0), ,true,switch.solar_pump_kick_2,switch.solar_pump2kick,8,0,1,58,1 -"SM200, MS200",solar,164,climatezone,climate zone,uint8 (>=0<=0), ,true,number.solar_climate_zone,number.solar_climatezone,8,0,1,59,1 -"SM200, MS200",solar,164,collector1area,collector 1 area,uint16 (>=0<=0),m²,true,number.solar_collector_1_area,number.solar_collector1area,8,0,1/10,60,1 -"SM200, MS200",solar,164,collector1type,collector 1 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_1_type,select.solar_collector1type,8,0,1,61,1 -"SM200, MS200",solar,164,collector2area,collector 2 area,uint16 (>=0<=0),m²,true,number.solar_collector_2_area,number.solar_collector2area,8,0,1/10,62,1 -"SM200, MS200",solar,164,collector2type,collector 2 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_2_type,select.solar_collector2type,8,0,1,63,1 -"SM200, MS200",solar,164,cylpriority,cylinder priority,enum [cyl 1\|cyl 2] (>=0<=0), ,true,select.solar_cylinder_priority,select.solar_cylpriority,8,0,1,64,1 -"SM200, MS200",solar,164,heatcntflowtemp,heat counter flow temperature,uint16,C,false,sensor.solar_heat_counter_flow_temperature,sensor.solar_heatcntflowtemp,8,0,1/10,65,1 -"SM200, MS200",solar,164,heatcntrettemp,heat counter return temperature,uint16,C,false,sensor.solar_heat_counter_return_temperature,sensor.solar_heatcntrettemp,8,0,1/10,66,1 -"SM200, MS200",solar,164,heatcnt,heat counter impulses,uint8, ,false,sensor.solar_heat_counter_impulses,sensor.solar_heatcnt,8,0,1,67,1 -"SM200, MS200",solar,164,swapflowtemp,swap flow temperature (TS14),uint16,C,false,sensor.solar_swap_flow_temperature_(TS14),sensor.solar_swapflowtemp,8,0,1/10,68,1 -"SM200, MS200",solar,164,swaprettemp,swap return temperature (TS15),uint16,C,false,sensor.solar_swap_return_temperature_(TS15),sensor.solar_swaprettemp,8,0,1/10,69,1 -"SM200, MS200",solar,164,heatassiston,heat assistance on,int8 (>=0<=0),K,true,number.solar_heat_assistance_on,number.solar_heatassiston,8,0,1/10,70,1 -"SM200, MS200",solar,164,heatassistoff,heat assistance off,int8 (>=0<=0),K,true,number.solar_heat_assistance_off,number.solar_heatassistoff,8,0,1/10,71,1 +"SM200, MS200",solar,164,energytoday,total energy today,uint24,Wh,false,sensor.solar_total_energy_today,sensor.solar_energytoday,8,0,1,39,2 +"SM200, MS200",solar,164,energytotal,total energy,uint24,kWh,false,sensor.solar_total_energy,sensor.solar_energytotal,8,0,1/10,41,2 +"SM200, MS200",solar,164,pump2worktime,pump 2 working time,time,minutes,false,sensor.solar_pump_2_working_time,sensor.solar_pump2worktime,8,0,1,43,2 +"SM200, MS200",solar,164,m1worktime,differential control working time,time,minutes,false,sensor.solar_differential_control_working_time,sensor.solar_m1worktime,8,0,1,45,2 +"SM200, MS200",solar,164,heattransfersystem,heattransfer system,boolean (>=0<=0), ,true,switch.solar_heattransfer_system,switch.solar_heattransfersystem,8,0,1,47,1 +"SM200, MS200",solar,164,externalcyl,external cylinder,boolean (>=0<=0), ,true,switch.solar_external_cylinder,switch.solar_externalcyl,8,0,1,48,1 +"SM200, MS200",solar,164,thermaldisinfect,thermal disinfection,boolean (>=0<=0), ,true,switch.solar_thermal_disinfection,switch.solar_thermaldisinfect,8,0,1,49,1 +"SM200, MS200",solar,164,heatmetering,heatmetering,boolean (>=0<=0), ,true,switch.solar_heatmetering,switch.solar_heatmetering,8,0,1,50,1 +"SM200, MS200",solar,164,activated,activated,boolean (>=0<=0), ,true,switch.solar_activated,switch.solar_activated,8,0,1,51,1 +"SM200, MS200",solar,164,solarpumpmode,solar pump mode,enum [constant\|pwm\|analog] (>=0<=0), ,true,select.solar_solar_pump_mode,select.solar_solarpumpmode,8,0,1,52,1 +"SM200, MS200",solar,164,solarpumpkick,solar pump kick,boolean (>=0<=0), ,true,switch.solar_solar_pump_kick,switch.solar_solarpumpkick,8,0,1,53,1 +"SM200, MS200",solar,164,plainwatermode,plain water mode,boolean (>=0<=0), ,true,switch.solar_plain_water_mode,switch.solar_plainwatermode,8,0,1,54,1 +"SM200, MS200",solar,164,doublematchflow,doublematchflow,boolean (>=0<=0), ,true,switch.solar_doublematchflow,switch.solar_doublematchflow,8,0,1,55,1 +"SM200, MS200",solar,164,pump2minmod,minimum pump 2 modulation,uint8 (>=0<=0),%,true,number.solar_minimum_pump_2_modulation,number.solar_pump2minmod,8,0,1,56,1 +"SM200, MS200",solar,164,turnondiff2,pump 2 turn on difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_on_difference,number.solar_turnondiff2,8,0,1/10,57,1 +"SM200, MS200",solar,164,turnoffdiff2,pump 2 turn off difference,uint8 (>=0<=0),C,true,number.solar_pump_2_turn_off_difference,number.solar_turnoffdiff2,8,0,1/10,58,1 +"SM200, MS200",solar,164,pump2kick,pump kick 2,boolean (>=0<=0), ,true,switch.solar_pump_kick_2,switch.solar_pump2kick,8,0,1,59,1 +"SM200, MS200",solar,164,climatezone,climate zone,uint8 (>=0<=0), ,true,number.solar_climate_zone,number.solar_climatezone,8,0,1,60,1 +"SM200, MS200",solar,164,collector1area,collector 1 area,uint16 (>=0<=0),m²,true,number.solar_collector_1_area,number.solar_collector1area,8,0,1/10,61,1 +"SM200, MS200",solar,164,collector1type,collector 1 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_1_type,select.solar_collector1type,8,0,1,62,1 +"SM200, MS200",solar,164,collector2area,collector 2 area,uint16 (>=0<=0),m²,true,number.solar_collector_2_area,number.solar_collector2area,8,0,1/10,63,1 +"SM200, MS200",solar,164,collector2type,collector 2 type,enum [flat\|vacuum] (>=0<=0), ,true,select.solar_collector_2_type,select.solar_collector2type,8,0,1,64,1 +"SM200, MS200",solar,164,cylpriority,cylinder priority,enum [cyl 1\|cyl 2] (>=0<=0), ,true,select.solar_cylinder_priority,select.solar_cylpriority,8,0,1,65,1 +"SM200, MS200",solar,164,heatcntflowtemp,heat counter flow temperature,uint16,C,false,sensor.solar_heat_counter_flow_temperature,sensor.solar_heatcntflowtemp,8,0,1/10,66,1 +"SM200, MS200",solar,164,heatcntrettemp,heat counter return temperature,uint16,C,false,sensor.solar_heat_counter_return_temperature,sensor.solar_heatcntrettemp,8,0,1/10,67,1 +"SM200, MS200",solar,164,heatcnt,heat counter impulses,uint8, ,false,sensor.solar_heat_counter_impulses,sensor.solar_heatcnt,8,0,1,68,1 +"SM200, MS200",solar,164,swapflowtemp,swap flow temperature (TS14),uint16,C,false,sensor.solar_swap_flow_temperature_(TS14),sensor.solar_swapflowtemp,8,0,1/10,69,1 +"SM200, MS200",solar,164,swaprettemp,swap return temperature (TS15),uint16,C,false,sensor.solar_swap_return_temperature_(TS15),sensor.solar_swaprettemp,8,0,1/10,70,1 +"SM200, MS200",solar,164,heatassiston,heat assistance on,int8 (>=0<=0),K,true,number.solar_heat_assistance_on,number.solar_heatassiston,8,0,1/10,71,1 +"SM200, MS200",solar,164,heatassistoff,heat assistance off,int8 (>=0<=0),K,true,number.solar_heat_assistance_off,number.solar_heatassistoff,8,0,1/10,72,1 "HP Module",heatpump,252,airhumidity,relative air humidity,uint8,%,false,sensor.heatpump_relative_air_humidity,sensor.heatpump_airhumidity,9,0,1,0,1 "HP Module",heatpump,252,dewtemperature,dew point temperature,uint8,C,false,sensor.heatpump_dew_point_temperature,sensor.heatpump_dewtemperature,9,0,1,1,1 "HP Module",heatpump,252,curflowtemp,current flow temperature,int16,C,false,sensor.heatpump_current_flow_temperature,sensor.heatpump_curflowtemp,9,0,1/10,2,1 diff --git a/docs/dump_telegrams.csv b/docs/dump_telegrams.csv index 297405d42..4a5053260 100644 --- a/docs/dump_telegrams.csv +++ b/docs/dump_telegrams.csv @@ -13,7 +13,7 @@ telegram_type_id,name,is_fetched 0x19,UBAMonitorSlow, 0x1A,UBASetPoints, 0x1C,UBAMaintenanceStatus, -0x1E,WM10TempMessage, +0x1E,HydrTemp, 0x23,JunkersSetMixer,fetched 0x27,UBASettingsWW,fetched 0x28,WeatherComp,fetched @@ -72,11 +72,12 @@ telegram_type_id,name,is_fetched 0xE6,UBAParametersPlus,fetched 0xE9,UBAMonitorWWPlus, 0xEA,UBAParameterWWPlus,fetched +0xEB,PumpKick,fetched 0x0101,ISM1Set,fetched 0x0103,ISM1StatusMessage,fetched 0x0104,ISM2StatusMessage, 0x010C,IPMStatusMessage, -0x011E,JunkersDisp,fetched +0x011E,IPMTempMessage, 0x012E,HPEnergy1, 0x013B,HPEnergy2, 0x0165,JunkersSet, @@ -114,7 +115,7 @@ telegram_type_id,name,is_fetched 0x02A5,RC300Monitor, 0x02A6,RC300Monitor, 0x02A7,RC300Monitor, -0x02A8,CRFMonitor, +0x02A8,RC300Monitor, 0x02A9,RC300Monitor, 0x02AA,RC300Monitor, 0x02AB,RC300Monitor, @@ -170,6 +171,7 @@ telegram_type_id,name,is_fetched 0x0468,HPSet, 0x0469,HPSet, 0x046A,HPSet, +0x0470,RC300Summer2,fetched 0x0471,RC300Summer2, 0x0472,RC300Summer2, 0x0473,RC300Summer2, @@ -197,7 +199,7 @@ telegram_type_id,name,is_fetched 0x04A2,HpInput,fetched 0x04A5,HPFan,fetched 0x04A7,HPPowerLimit,fetched -0x04AA,HPPower2,fetched +0x04AA,HPPower, 0x04AE,HPEnergy,fetched 0x04AF,HPMeters,fetched 0x055C,VentilationSet,fetched diff --git a/interface/.typesafe-i18n.json b/interface/.typesafe-i18n.json index ab39dacfa..f6eb40742 100644 --- a/interface/.typesafe-i18n.json +++ b/interface/.typesafe-i18n.json @@ -1,5 +1,5 @@ { "adapter": "react", "baseLocale": "pl", - "$schema": "https://unpkg.com/typesafe-i18n@5.26.2/schema/typesafe-i18n.json" + "$schema": "https://unpkg.com/typesafe-i18n@5.27.1/schema/typesafe-i18n.json" } \ No newline at end of file diff --git a/interface/eslint.config.js b/interface/eslint.config.js index 4eca2f5e5..bacff3965 100644 --- a/interface/eslint.config.js +++ b/interface/eslint.config.js @@ -1,9 +1,10 @@ // @ts-check import eslint from '@eslint/js'; import prettierConfig from 'eslint-config-prettier'; +import { defineConfig } from 'eslint/config'; import tseslint from 'typescript-eslint'; -export default tseslint.config( +export default defineConfig( eslint.configs.recommended, ...tseslint.configs.recommendedTypeChecked, prettierConfig, diff --git a/interface/package.json b/interface/package.json index 87005f6d9..876fa545a 100644 --- a/interface/package.json +++ b/interface/package.json @@ -1,6 +1,6 @@ { "name": "EMS-ESP", - "version": "3.8.0", + "version": "3.8.2", "description": "EMS-ESP WebUI", "homepage": "https://emsesp.org", "author": "proddy, emsesp.org", @@ -17,7 +17,7 @@ "preview-standalone": "typesafe-i18n --no-watch && vite build && concurrently -c \"auto\" \"pnpm:mock-rest\" \"vite preview\"", "standalone": "concurrently -c \"auto\" \"typesafe-i18n\" \"pnpm:mock-rest\" \"vite dev\"", "typesafe-i18n": "typesafe-i18n --no-watch", - "build_webUI": "typesafe-i18n --no-watch && vite build && node progmem-generator.js", + "build-webUI": "typesafe-i18n --no-watch && vite build && node progmem-generator.js", "format": "prettier -l -w '**/*.{ts,tsx,js,css,json,md}'", "lint": "eslint . --fix", "standalone-devcontainer": "concurrently -c \"auto\" \"typesafe-i18n\" \"pnpm:mock-rest\" \"vite --host\"" @@ -26,46 +26,46 @@ "@alova/adapter-xhr": "2.3.1", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "@mui/icons-material": "^7.3.7", - "@mui/material": "^7.3.7", - "@preact/compat": "^18.3.1", + "@mui/icons-material": "^9.0.1", + "@mui/material": "^9.0.1", + "@preact/compat": "^18.3.2", "@table-library/react-table-library": "4.1.15", - "alova": "3.4.1", + "alova": "3.5.1", "async-validator": "^4.2.5", "etag": "^1.8.1", "formidable": "^3.5.4", "jwt-decode": "^4.0.0", "magic-string": "^0.30.21", "mime-types": "^3.0.2", - "preact": "^10.28.2", - "react": "^19.2.3", - "react-dom": "^19.2.3", - "react-icons": "^5.5.0", - "react-router": "^7.12.0", - "react-toastify": "^11.0.5", - "typesafe-i18n": "^5.26.2", - "typescript": "^5.9.3" + "preact": "^10.29.1", + "react": "^19.2.6", + "react-dom": "^19.2.6", + "react-icons": "^5.6.0", + "react-router": "^7.15.0", + "react-toastify": "^11.1.0", + "typesafe-i18n": "^5.27.1", + "typescript": "^6.0.3" }, "devDependencies": { - "@babel/core": "^7.28.5", - "@eslint/js": "^9.39.2", - "@preact/compat": "^18.3.1", - "@preact/preset-vite": "^2.10.2", + "@babel/core": "^7.29.0", + "@eslint/js": "^10.0.1", + "@preact/compat": "^18.3.2", + "@preact/preset-vite": "^2.10.5", "@trivago/prettier-plugin-sort-imports": "^6.0.2", - "@types/node": "^25.0.6", - "@types/react": "^19.2.8", + "@types/node": "^25.7.0", + "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", - "axe-core": "^4.11.1", + "axe-core": "^4.11.4", "concurrently": "^9.2.1", - "eslint": "^9.39.2", + "eslint": "^10.3.0", "eslint-config-prettier": "^10.1.8", - "prettier": "^3.7.4", - "rollup-plugin-visualizer": "^6.0.5", - "terser": "^5.44.1", - "typescript-eslint": "^8.52.0", - "vite": "^7.3.1", + "prettier": "^3.8.3", + "rollup-plugin-visualizer": "^7.0.1", + "terser": "^5.47.1", + "typescript-eslint": "^8.59.3", + "vite": "^8.0.12", "vite-plugin-imagemin": "^0.6.1", - "vite-tsconfig-paths": "^6.0.4" + "vite-tsconfig-paths": "^6.1.1" }, - "packageManager": "pnpm@10.28.0+sha512.05df71d1421f21399e053fde567cea34d446fa02c76571441bfc1c7956e98e363088982d940465fd34480d4d90a0668bc12362f8aa88000a64e83d0b0e47be48" + "packageManager": "pnpm@10.33.4+sha512.1c67b3b359b2d408119ba1ed289f34b8fc3c6873412bec6fd264fbdc82489e510fcbecb9ce9d22dae7f3b76269d8441046014bdca53b9979cd7a561ad631b800" } diff --git a/interface/pnpm-lock.yaml b/interface/pnpm-lock.yaml index a46d81557..1125acdd2 100644 --- a/interface/pnpm-lock.yaml +++ b/interface/pnpm-lock.yaml @@ -10,28 +10,28 @@ importers: dependencies: '@alova/adapter-xhr': specifier: 2.3.1 - version: 2.3.1(alova@3.4.1) + version: 2.3.1(alova@3.5.1) '@emotion/react': specifier: ^11.14.0 - version: 11.14.0(@types/react@19.2.8)(react@19.2.3) + version: 11.14.0(@types/react@19.2.14)(react@19.2.6) '@emotion/styled': specifier: ^11.14.1 - version: 11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3) + version: 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6) '@mui/icons-material': - specifier: ^7.3.7 - version: 7.3.7(@mui/material@7.3.7(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.8)(react@19.2.3) + specifier: ^9.0.1 + version: 9.0.1(@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/react@19.2.14)(react@19.2.6) '@mui/material': - specifier: ^7.3.7 - version: 7.3.7(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^9.0.1 + version: 9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) '@preact/compat': - specifier: ^18.3.1 - version: 18.3.1(preact@10.28.2) + specifier: ^18.3.2 + version: 18.3.2(preact@10.29.1) '@table-library/react-table-library': specifier: 4.1.15 - version: 4.1.15(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 4.1.15(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) alova: - specifier: 3.4.1 - version: 3.4.1 + specifier: 3.5.1 + version: 3.5.1 async-validator: specifier: ^4.2.5 version: 4.2.5 @@ -51,84 +51,84 @@ importers: specifier: ^3.0.2 version: 3.0.2 preact: - specifier: ^10.28.2 - version: 10.28.2 + specifier: ^10.29.1 + version: 10.29.1 react: - specifier: ^19.2.3 - version: 19.2.3 + specifier: ^19.2.6 + version: 19.2.6 react-dom: - specifier: ^19.2.3 - version: 19.2.3(react@19.2.3) + specifier: ^19.2.6 + version: 19.2.6(react@19.2.6) react-icons: - specifier: ^5.5.0 - version: 5.5.0(react@19.2.3) + specifier: ^5.6.0 + version: 5.6.0(react@19.2.6) react-router: - specifier: ^7.12.0 - version: 7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^7.15.0 + version: 7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) react-toastify: - specifier: ^11.0.5 - version: 11.0.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^11.1.0 + version: 11.1.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6) typesafe-i18n: - specifier: ^5.26.2 - version: 5.26.2(typescript@5.9.3) + specifier: ^5.27.1 + version: 5.27.1(typescript@6.0.3) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 devDependencies: '@babel/core': - specifier: ^7.28.5 - version: 7.28.5 + specifier: ^7.29.0 + version: 7.29.0 '@eslint/js': - specifier: ^9.39.2 - version: 9.39.2 + specifier: ^10.0.1 + version: 10.0.1(eslint@10.3.0) '@preact/preset-vite': - specifier: ^2.10.2 - version: 2.10.2(@babel/core@7.28.5)(preact@10.28.2)(vite@7.3.1(@types/node@25.0.6)(terser@5.44.1)) + specifier: ^2.10.5 + version: 2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.59.0)(vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1)) '@trivago/prettier-plugin-sort-imports': specifier: ^6.0.2 - version: 6.0.2(prettier@3.7.4) + version: 6.0.2(prettier@3.8.3) '@types/node': - specifier: ^25.0.6 - version: 25.0.6 + specifier: ^25.7.0 + version: 25.7.0 '@types/react': - specifier: ^19.2.8 - version: 19.2.8 + specifier: ^19.2.14 + version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.8) + version: 19.2.3(@types/react@19.2.14) axe-core: - specifier: ^4.11.1 - version: 4.11.1 + specifier: ^4.11.4 + version: 4.11.4 concurrently: specifier: ^9.2.1 version: 9.2.1 eslint: - specifier: ^9.39.2 - version: 9.39.2 + specifier: ^10.3.0 + version: 10.3.0 eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.2) + version: 10.1.8(eslint@10.3.0) prettier: - specifier: ^3.7.4 - version: 3.7.4 + specifier: ^3.8.3 + version: 3.8.3 rollup-plugin-visualizer: - specifier: ^6.0.5 - version: 6.0.5(rollup@4.55.1) + specifier: ^7.0.1 + version: 7.0.1(rolldown@1.0.0)(rollup@4.59.0) terser: - specifier: ^5.44.1 - version: 5.44.1 + specifier: ^5.47.1 + version: 5.47.1 typescript-eslint: - specifier: ^8.52.0 - version: 8.52.0(eslint@9.39.2)(typescript@5.9.3) + specifier: ^8.59.3 + version: 8.59.3(eslint@10.3.0)(typescript@6.0.3) vite: - specifier: ^7.3.1 - version: 7.3.1(@types/node@25.0.6)(terser@5.44.1) + specifier: ^8.0.12 + version: 8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1) vite-plugin-imagemin: specifier: ^0.6.1 - version: 0.6.1(vite@7.3.1(@types/node@25.0.6)(terser@5.44.1)) + version: 0.6.1(vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1)) vite-tsconfig-paths: - specifier: ^6.0.4 - version: 6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.6)(terser@5.44.1)) + specifier: ^6.1.1 + version: 6.1.1(typescript@6.0.3)(vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1)) packages: @@ -140,46 +140,46 @@ packages: '@alova/shared@1.3.2': resolution: {integrity: sha512-1XvDLWgYpVZ99MmLl1f3Fw4T6S6pPYk5afz5cwRVjuq8JXEGsDn9IygDKfvRyWqkqCBx7Jif07LIct1O+MVEow==} - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.5': - resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + '@babel/compat-data@7.29.3': + resolution: {integrity: sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.5': - resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.27.1': @@ -194,17 +194,17 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-syntax-jsx@7.27.1': - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + '@babel/plugin-syntax-jsx@7.28.6': + resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -215,28 +215,37 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.27.1': - resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} + '@babel/plugin-transform-react-jsx@7.28.6': + resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -291,68 +300,68 @@ packages: '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + '@esbuild/aix-ppc64@0.27.4': + resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + '@esbuild/android-arm64@0.27.4': + resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + '@esbuild/android-arm@0.27.4': + resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + '@esbuild/android-x64@0.27.4': + resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + '@esbuild/darwin-arm64@0.27.4': + resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + '@esbuild/darwin-x64@0.27.4': + resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + '@esbuild/freebsd-arm64@0.27.4': + resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + '@esbuild/freebsd-x64@0.27.4': + resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + '@esbuild/linux-arm64@0.27.4': + resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + '@esbuild/linux-arm@0.27.4': + resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + '@esbuild/linux-ia32@0.27.4': + resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -363,92 +372,92 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + '@esbuild/linux-loong64@0.27.4': + resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + '@esbuild/linux-mips64el@0.27.4': + resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + '@esbuild/linux-ppc64@0.27.4': + resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + '@esbuild/linux-riscv64@0.27.4': + resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + '@esbuild/linux-s390x@0.27.4': + resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + '@esbuild/linux-x64@0.27.4': + resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + '@esbuild/netbsd-arm64@0.27.4': + resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + '@esbuild/netbsd-x64@0.27.4': + resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + '@esbuild/openbsd-arm64@0.27.4': + resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + '@esbuild/openbsd-x64@0.27.4': + resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.2': - resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + '@esbuild/openharmony-arm64@0.27.4': + resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + '@esbuild/sunos-x64@0.27.4': + resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + '@esbuild/win32-arm64@0.27.4': + resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + '@esbuild/win32-ia32@0.27.4': + resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + '@esbuild/win32-x64@0.27.4': + resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -463,40 +472,45 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.5.5': + resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/eslintrc@3.3.3': - resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.7.1': + resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -507,14 +521,6 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -534,27 +540,27 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@mui/core-downloads-tracker@7.3.7': - resolution: {integrity: sha512-8jWwS6FweMkpyRkrJooamUGe1CQfO1yJ+lM43IyUJbrhHW/ObES+6ry4vfGi8EKaldHL3t3BG1bcLcERuJPcjg==} + '@mui/core-downloads-tracker@9.0.1': + resolution: {integrity: sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==} - '@mui/icons-material@7.3.7': - resolution: {integrity: sha512-3Q+ulAqG+A1+R4ebgoIs7AccaJhIGy+Xi/9OnvX376jQ6wcy+rz4geDGrxQxCGzdjOQr4Z3NgyFSZCz4T999lA==} + '@mui/icons-material@9.0.1': + resolution: {integrity: sha512-5PRpQjVLTNLyV/2J9J53Yz4R0tVbodG0BQDN2zQI1QBG1OPYM25ar+4N20eyFOfJT6zKglLzsnU70+zdVLaTkw==} engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^7.3.7 + '@mui/material': ^9.0.1 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/material@7.3.7': - resolution: {integrity: sha512-6bdIxqzeOtBAj2wAsfhWCYyMKPLkRO9u/2o5yexcL0C3APqyy91iGSWgT3H7hg+zR2XgE61+WAu12wXPON8b6A==} + '@mui/material@9.0.1': + resolution: {integrity: sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material-pigment-css': ^7.3.7 + '@mui/material-pigment-css': ^9.0.1 '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -568,8 +574,8 @@ packages: '@types/react': optional: true - '@mui/private-theming@7.3.7': - resolution: {integrity: sha512-w7r1+CYhG0syCAQUWAuV5zSaU2/67WA9JXUderdb7DzCIJdp/5RmJv6L85wRjgKCMsxFF0Kfn0kPgPbPgw/jdw==} + '@mui/private-theming@9.0.1': + resolution: {integrity: sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -578,8 +584,8 @@ packages: '@types/react': optional: true - '@mui/styled-engine@7.3.7': - resolution: {integrity: sha512-y/QkNXv6cF6dZ5APztd/dFWfQ6LHKPx3skyYO38YhQD4+Cxd6sFAL3Z38WMSSC8LQz145Mpp3CcLrSCLKPwYAg==} + '@mui/styled-engine@9.0.0': + resolution: {integrity: sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.4.1 @@ -591,8 +597,8 @@ packages: '@emotion/styled': optional: true - '@mui/system@7.3.7': - resolution: {integrity: sha512-DovL3k+FBRKnhmatzUMyO5bKkhMLlQ9L7Qw5qHrre3m8zCZmE+31NDVBFfqrbrA7sq681qaEIHdkWD5nmiAjyQ==} + '@mui/system@9.0.1': + resolution: {integrity: sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -607,16 +613,16 @@ packages: '@types/react': optional: true - '@mui/types@7.4.10': - resolution: {integrity: sha512-0+4mSjknSu218GW3isRqoxKRTOrTLd/vHi/7UC4+wZcUrOAqD9kRk7UQRL1mcrzqRoe7s3UT6rsRpbLkW5mHpQ==} + '@mui/types@9.0.0': + resolution: {integrity: sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/utils@7.3.7': - resolution: {integrity: sha512-+YjnjMRnyeTkWnspzoxRdiSOgkrcpTikhNPoxOZW0APXx+urHtUoXJ9lbtCZRCA5a4dg5gSbd19alL1DvRs5fg==} + '@mui/utils@9.0.1': + resolution: {integrity: sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -625,6 +631,12 @@ packages: '@types/react': optional: true + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@noble/hashes@1.8.0': resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} @@ -641,166 +653,289 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-project/types@0.129.0': + resolution: {integrity: sha512-3oz8m3FGdr2nDXVqmFUw7jolKliC4MoyXYIG2c7gpjBnzUWQpUGIYcXYKxTdTi+N2jusvt610ckTMkxdwHkYEg==} + '@paralleldrive/cuid2@2.3.1': resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@preact/compat@18.3.1': - resolution: {integrity: sha512-Kog4PSRxtT4COtOXjsuQPV1vMXpUzREQfv+6Dmcy9/rMk0HOPK0HTE9fspFjAmY8R80T/T8gtgmZ68u5bOSngw==} + '@preact/compat@18.3.2': + resolution: {integrity: sha512-5vSl55K5yLMvocT7PBKxDOHGgYPjMrKQqqr6roSNjIXcJOtSgDDMjpiCAF3s7klRdmGrN75b/Przmjw8gmlg/w==} peerDependencies: preact: '*' - '@preact/preset-vite@2.10.2': - resolution: {integrity: sha512-K9wHlJOtkE+cGqlyQ5v9kL3Ge0Ql4LlIZjkUTL+1zf3nNdF88F9UZN6VTV8jdzBX9Fl7WSzeNMSDG7qECPmSmg==} + '@preact/preset-vite@2.10.5': + resolution: {integrity: sha512-p0vJpxiVO7KWWazWny3LUZ+saXyZKWv6Ju0bYMWNJRp2YveufRPgSUB1C4MTqGJfz07EehMgfN+AJNwQy+w6Iw==} peerDependencies: '@babel/core': 7.x - vite: 2.x || 3.x || 4.x || 5.x || 6.x || 7.x + vite: 2.x || 3.x || 4.x || 5.x || 6.x || 7.x || 8.x - '@prefresh/babel-plugin@0.5.2': - resolution: {integrity: sha512-AOl4HG6dAxWkJ5ndPHBgBa49oo/9bOiJuRDKHLSTyH+Fd9x00shTXpdiTj1W41l6oQIwUOAgJeHMn4QwIDpHkA==} + '@prefresh/babel-plugin@0.5.3': + resolution: {integrity: sha512-57LX2SHs4BX2s1IwCjNzTE2OJeEepRCNf1VTEpbNcUyHfMO68eeOWGDIt4ob9aYlW6PEWZ1SuwNikuoIXANDtQ==} - '@prefresh/core@1.5.9': - resolution: {integrity: sha512-IKBKCPaz34OFVC+adiQ2qaTF5qdztO2/4ZPf4KsRTgjKosWqxVXmEbxCiUydYZRY8GVie+DQlKzQr9gt6HQ+EQ==} + '@prefresh/core@1.5.10': + resolution: {integrity: sha512-7yPTFbG56sutaFu8krp3B4a200KOFUvrtlllKWRuLjsYXo9UUucHOZRcer+gtgMkFTpv6ob8TGcTwA32bSwa1w==} peerDependencies: preact: ^10.0.0 || ^11.0.0-0 '@prefresh/utils@1.2.1': resolution: {integrity: sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==} - '@prefresh/vite@2.4.11': - resolution: {integrity: sha512-/XjURQqdRiCG3NpMmWqE9kJwrg9IchIOWHzulCfqg2sRe/8oQ1g5De7xrk9lbqPIQLn7ntBkKdqWXIj4E9YXyg==} + '@prefresh/vite@2.4.12': + resolution: {integrity: sha512-FY1fzXpUjiuosznMV0YM7XAOPZjB5FIdWS0W24+XnlxYkt9hNAwwsiKYn+cuTEoMtD/ZVazS5QVssBr9YhpCQA==} peerDependencies: preact: ^10.4.0 || ^11.0.0-0 vite: '>=2.0.0' + '@rolldown/binding-android-arm64@1.0.0': + resolution: {integrity: sha512-TWMZnRLMe63C2Lhyicviu7ZHaU4kxa6PS3rofvc9GmcvptzNN11BcfQ4Sl7MwTOsisQoa2keB/EBdNCAnUo8vA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0': + resolution: {integrity: sha512-6XcD+8k0gPVItNagEw78/qqcBDwKcwDYS8V2hRmVsfUSIrd8cWe/CBvRDI5toqFyPfj+FJr6t8U6Xj2P2prEew==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0': + resolution: {integrity: sha512-iN/tWVXRQDWvmZlKdceP1Dwug9GDpEymhb9p4xnEe6zvCg5lFmzVljl+1qR1NVx3yfGpr2Na+CuLmv5IU8uzfQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0': + resolution: {integrity: sha512-jjQMDvvwSOuhOwMszD/klSOjyWMM3zI64hWTj9KT5x4MxRbZAf+7vLQ6qouRhtsLVFHr3f0ILaJAfgENPiQdAQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0': + resolution: {integrity: sha512-d//Dtg2x6/m3mbV64yUGNnDGNZaDGRpDLLNGerHQUVObuNaIQaaDp25yUiqGXtHEXX+NP2d0wAlmKgpYgIAJ2A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0': + resolution: {integrity: sha512-n7Ofp0mx+aB2cC+Sdy5YtMnXtY9lchnHbY+3Yt0uq9JsWQExf4f5Whu0tK0R8Jdc9S6RchTHjIFY7uc92puOVQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.0': + resolution: {integrity: sha512-EIVjy2cgd7uuMMo94FVkBp7F6DhcZAUwNURkSG3RwUmvAXR6s0ISxM81U+IydcZByPG0pZIHsf1b6kTxoFDgJA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0': + resolution: {integrity: sha512-JEwwOPcwTLAcpDQlqSmjEmfs63xJnSiUNIGvLcDLUHCWK4XowpS/7c7tUsUH6uT/ct6bMUTdXKfI8967FYj6mg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.0': + resolution: {integrity: sha512-0wjCFhLrihtAubnT9iA0N++0pSV0z5Hg7tNGdNJ4RFaINceHadoF+kiFGyY1qSSNVIAZtLotG8Ju1bgDPkjnFA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.0': + resolution: {integrity: sha512-Dfn7iak9BcMMePxcoJfpSbWqnEyrp/dRF63/8qW/eHBdOZov6x5aShLLEYGYdIeSJ6vMLK/XCVB+lGIxm41bQA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.0': + resolution: {integrity: sha512-5/utzzDmD/pD/bmuaUcbTf/sZYy0aztwIVlfpoW1fTjCZ0BaPOMVWGZL1zvgxyi7ZIVYWlxKONHmSbHuiOh8Jw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.0': + resolution: {integrity: sha512-ouJs8VcUomfLfpbUECqFMRqdV4x6aeAK3MA4m6vTrJJjKyWTV5KnxZx7Jd9G+GlDaQQxubcba00x16OyJ1meig==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0': + resolution: {integrity: sha512-E+oHKGiDA+lsKMmFtffDDw91EryDT7uJocrIuCHqhm6bCTM6xFK+3gaCkYOHfPwQr0cCNarSM2xaELoQDz9jJg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0': + resolution: {integrity: sha512-yYK02n8Rngo+gbm1y6G0+7jk1sJ/2Wt7K0me0Y7k/ErBpyf+LJ2gFpqWVTcRV1rUepBlQRmpgWkTQCiiwrK0Ow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0': + resolution: {integrity: sha512-14bpChMahXRRXiTwahSl+zzHPW6qQTXtkMuJBFlbo+pqSAews2d4BdCSHfrJ/MBsCZtpmTafsY+1QhBzitcmdg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0': + resolution: {integrity: sha512-aKs/3GSWyV0mrhNmt/96/Z3yczC3yvrzYATCiCXQebBsGyYzjNdUphRVLeJQ67ySKVXRfMxt2lm12pmXvbPFQQ==} + '@rollup/pluginutils@4.2.1': resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} - '@rollup/rollup-android-arm-eabi@4.55.1': - resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.55.1': - resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.55.1': - resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.55.1': - resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.55.1': - resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.55.1': - resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] + libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.55.1': - resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.55.1': - resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.55.1': - resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} cpu: [loong64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.55.1': - resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.55.1': - resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.55.1': - resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] + libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.55.1': - resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.55.1': - resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] + libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.55.1': - resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] + libc: [musl] - '@rollup/rollup-openbsd-x64@4.55.1': - resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.55.1': - resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.55.1': - resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.55.1': - resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.55.1': - resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.55.1': - resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] @@ -834,13 +969,18 @@ packages: svelte: optional: true - '@trysound/sax@0.2.0': - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} @@ -875,8 +1015,8 @@ packages: resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==} deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. - '@types/node@25.0.6': - resolution: {integrity: sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==} + '@types/node@25.7.0': + resolution: {integrity: sha512-z+pdZyxE+RTQE9AcboAZCb4otwcrvgHD+GlBpPgn0emDVt0ohrTMhAwlr2Wd9nZ+nihhYFxO2pThz3C5qSu2Eg==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -894,8 +1034,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@19.2.8': - resolution: {integrity: sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==} + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} @@ -903,63 +1043,63 @@ packages: '@types/svgo@2.6.4': resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} - '@typescript-eslint/eslint-plugin@8.52.0': - resolution: {integrity: sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==} + '@typescript-eslint/eslint-plugin@8.59.3': + resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.52.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser': ^8.59.3 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.52.0': - resolution: {integrity: sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==} + '@typescript-eslint/parser@8.59.3': + resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.52.0': - resolution: {integrity: sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==} + '@typescript-eslint/project-service@8.59.3': + resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.52.0': - resolution: {integrity: sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==} + '@typescript-eslint/scope-manager@8.59.3': + resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.52.0': - resolution: {integrity: sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==} + '@typescript-eslint/tsconfig-utils@8.59.3': + resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.52.0': - resolution: {integrity: sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==} + '@typescript-eslint/type-utils@8.59.3': + resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.52.0': - resolution: {integrity: sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==} + '@typescript-eslint/types@8.59.3': + resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.52.0': - resolution: {integrity: sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==} + '@typescript-eslint/typescript-estree@8.59.3': + resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.52.0': - resolution: {integrity: sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==} + '@typescript-eslint/utils@8.59.3': + resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.52.0': - resolution: {integrity: sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==} + '@typescript-eslint/visitor-keys@8.59.3': + resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: @@ -967,16 +1107,16 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} - alova@3.4.1: - resolution: {integrity: sha512-xGChKIiCHDqcMglF9RyuWAsk+ltwnja8Dp4MgRIRbUlhOi8XFiQnaoWwIQzJcODKeblmmiFAK7YrYnpskFZWLA==} + alova@3.5.1: + resolution: {integrity: sha512-avrWPyFFWW51YLoy0S3OleNw1BV0GqNI+DSdWHfFbAoKZp80cXCCc7OtjA6OWeyhCOMglUMwo9O8j5huwnzFtQ==} engines: {node: '>= 18.0.0'} ansi-regex@2.1.1: @@ -987,6 +1127,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + ansi-styles@2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} engines: {node: '>=0.10.0'} @@ -995,6 +1139,10 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} @@ -1002,9 +1150,6 @@ packages: resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==} engines: {node: '>=4'} - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-find-index@1.0.2: resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} engines: {node: '>=0.10.0'} @@ -1023,8 +1168,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axe-core@4.11.1: - resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} + axe-core@4.11.4: + resolution: {integrity: sha512-KunSNx+TVpkAw/6ULfhnx+HWRecjqZGTOyquAoWHYLRSdK1tB5Ihce1ZW+UY3fj33bYAFWPu7W/GRSmmrCGuxA==} engines: {node: '>=4'} babel-plugin-macros@3.1.0: @@ -1039,11 +1184,16 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.9.14: - resolution: {integrity: sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==} + baseline-browser-mapping@2.10.29: + resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} + engines: {node: '>=6.0.0'} hasBin: true bin-build@3.0.0: @@ -1072,18 +1222,22 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@1.1.14: + resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.1.0: + resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} + + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1105,6 +1259,10 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + cacheable-request@2.1.4: resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==} @@ -1112,8 +1270,8 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} engines: {node: '>= 0.4'} call-bound@1.0.4: @@ -1132,8 +1290,8 @@ packages: resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} engines: {node: '>=0.10.0'} - caniuse-lite@1.0.30001764: - resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==} + caniuse-lite@1.0.30001792: + resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} caw@2.0.1: resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} @@ -1151,6 +1309,10 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clone-response@1.0.2: resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==} @@ -1296,12 +1458,24 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} + engines: {node: '>=18'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} dezalgo@1.0.4: @@ -1352,8 +1526,11 @@ packages: duplexer3@0.1.5: resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - electron-to-chromium@1.5.267: - resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + electron-to-chromium@1.5.353: + resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1508,8 +1685,8 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + esbuild@0.27.4: + resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} engines: {node: '>=18'} hasBin: true @@ -1531,21 +1708,21 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@9.39.2: - resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@10.3.0: + resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: jiti: '*' @@ -1553,9 +1730,9 @@ packages: jiti: optional: true - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} esquery@1.7.0: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} @@ -1625,8 +1802,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-xml-parser@4.5.3: - resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} + fast-xml-parser@4.5.6: + resolution: {integrity: sha512-Yd4vkROfJf8AuJrDIVMVmYfULKmIJszVsMv7Vo71aocsKgFxpdlpSHXSaInvyYfgw2PRuObQSW2GFpVMUjxu9A==} hasBin: true fastq@1.20.1: @@ -1711,8 +1888,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} @@ -1751,6 +1928,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -1802,11 +1983,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me globby@10.0.2: resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} @@ -1855,8 +2032,8 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} he@1.2.0: @@ -1960,16 +2137,16 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-cwebp-readable@3.0.0: resolution: {integrity: sha512-bpELc7/Q1/U5MWHn4NdHI44R3jxk0h9ew9ljzabiRl70/UIjL/ZAqRMb52F5+eke/VC8yTiv4Ewryo1fPWidvA==} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true is-extglob@2.1.1: @@ -1992,6 +2169,15 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-in-ssh@1.0.0: + resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==} + engines: {node: '>=20'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-jpg@2.0.0: resolution: {integrity: sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==} engines: {node: '>=6'} @@ -2037,9 +2223,9 @@ packages: is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -2070,10 +2256,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - jsesc@3.1.0: resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} @@ -2099,8 +2281,8 @@ packages: engines: {node: '>=6'} hasBin: true - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} junk@3.1.0: resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} @@ -2123,6 +2305,80 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -2134,11 +2390,8 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash-es@4.17.22: - resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} logalot@2.1.0: resolution: {integrity: sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw==} @@ -2231,15 +2484,15 @@ packages: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -2253,8 +2506,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2267,8 +2520,8 @@ packages: node-html-parser@6.1.13: resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.44: + resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -2303,9 +2556,9 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + open@11.0.0: + resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} + engines: {node: '>=20'} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -2434,12 +2687,12 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} pify@2.3.0: @@ -2471,12 +2724,16 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} - preact@10.28.2: - resolution: {integrity: sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA==} + powershell-utils@0.1.0: + resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} + engines: {node: '>=20'} + + preact@10.29.1: + resolution: {integrity: sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -2490,8 +2747,8 @@ packages: resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} engines: {node: '>=4'} - prettier@3.7.4: - resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} hasBin: true @@ -2507,8 +2764,8 @@ packages: pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -2524,24 +2781,24 @@ packages: rate-limiter-flexible@5.0.5: resolution: {integrity: sha512-+/dSQfo+3FYwYygUs/V2BBdwGa9nFtakDwKt4l0bnvNB53TNT++QSFewwHX9qXrZJuMe9j+TUaU21lm5ARgqdQ==} - react-dom@19.2.3: - resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} + react-dom@19.2.6: + resolution: {integrity: sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==} peerDependencies: - react: ^19.2.3 + react: ^19.2.6 - react-icons@5.5.0: - resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} + react-icons@5.6.0: + resolution: {integrity: sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==} peerDependencies: react: '*' react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@19.2.3: - resolution: {integrity: sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==} + react-is@19.2.6: + resolution: {integrity: sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==} - react-router@7.12.0: - resolution: {integrity: sha512-kTPDYPFzDVGIIGNLS5VJykK0HfHLY5MF3b+xj0/tTyNYL1gF1qs7u67Z9jEhQk2sQ98SUaHxlG31g1JtF7IfVw==} + react-router@7.15.0: + resolution: {integrity: sha512-HW9vYwuM8f4yx66Izy8xfrzCM+SBJluoZcCbww9A1TySax11S5Vgw6fi3ZjMONw9J4gQwngL7PzkyIpJJpJ7RQ==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -2550,8 +2807,8 @@ packages: react-dom: optional: true - react-toastify@11.0.5: - resolution: {integrity: sha512-EpqHBGvnSTtHYhCPLxML05NLY2ZX0JURbAdNYa6BUkk+amz4wbKBQvoKQAB0ardvSarUBuY4Q4s1sluAzZwkmA==} + react-toastify@11.1.0: + resolution: {integrity: sha512-e9h23x3phN0wbFeB6yovmWp7lobzV4CaCH0LO8nVP6H7Y+3GbcLpIzMm9dJhcp1RXbpyfvjgpfXqO80QAmn7sg==} peerDependencies: react: ^18 || ^19 react-dom: ^18 || ^19 @@ -2575,8 +2832,8 @@ packages: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react@19.2.3: - resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} + react@19.2.6: + resolution: {integrity: sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==} engines: {node: '>=0.10.0'} read-pkg-up@1.0.1: @@ -2610,8 +2867,8 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} engines: {node: '>= 0.4'} hasBin: true @@ -2627,12 +2884,17 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rollup-plugin-visualizer@6.0.5: - resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==} - engines: {node: '>=18'} + rolldown@1.0.0: + resolution: {integrity: sha512-yD986aXDESFGS95spT1LAv0jssywP4npMEjmMHyN2/5+eE8qQJUype2AaKkRiLgBgyD0LFlubwAht7VmY8rGoA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + rollup-plugin-visualizer@7.0.1: + resolution: {integrity: sha512-UJUT4+1Ho4OcWmPYU3sYXgUqI8B8Ayfe06MX7y0qCJ1K8aGoKtR/NDd/2nZqM7ADkrzny+I99Ul7GgyoiVNAgg==} + engines: {node: '>=22'} hasBin: true peerDependencies: - rolldown: 1.x || ^1.0.0-beta + rolldown: 1.x || ^1.0.0-beta || ^1.0.0-rc rollup: 2.x || 3.x || 4.x peerDependenciesMeta: rolldown: @@ -2640,11 +2902,15 @@ packages: rollup: optional: true - rollup@4.55.1: - resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -2657,6 +2923,10 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -2680,8 +2950,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + semver@7.8.0: + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} engines: {node: '>=10'} hasBin: true @@ -2762,8 +3032,8 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.22: - resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} squeak@1.3.0: resolution: {integrity: sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==} @@ -2773,9 +3043,9 @@ packages: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - stack-trace@1.0.0-pre2: - resolution: {integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==} - engines: {node: '>=16'} + stack-trace@1.0.0: + resolution: {integrity: sha512-H6D7134xi6qONvh7ZHKgviXf+rd3vhGBSvebPZCaUkd8zvQ+7PtDw6CljPTe4cXWNf2IKZGNqw6VJXSb9IgBpA==} + engines: {node: '>=20.0.0'} strict-uri-encode@1.1.0: resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} @@ -2785,6 +3055,10 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -2796,6 +3070,10 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-bom@2.0.0: resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} engines: {node: '>=0.10.0'} @@ -2816,10 +3094,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - strip-outer@1.0.1: resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} engines: {node: '>=0.10.0'} @@ -2846,8 +3120,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svgo@2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + svgo@2.8.2: + resolution: {integrity: sha512-TyzE4NVGLUFy+H/Uy4N6c3G0HEeprsVfge6Lmq+0FdQQ/zqoVYB62IsBZORsiL+o96s6ff/V6/3UQo/C0cgCAA==} engines: {node: '>=10.13.0'} hasBin: true @@ -2863,8 +3137,8 @@ packages: resolution: {integrity: sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==} engines: {node: '>=4'} - terser@5.44.1: - resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==} + terser@5.47.1: + resolution: {integrity: sha512-tPbLXTI6ohPASb/1YViL428oEHu6/qv1OxqYnfaonVCFHqx4+wCd95pHrQWsL5X4pl90CTyW9piSAsS2L0VoMw==} engines: {node: '>=10'} hasBin: true @@ -2875,8 +3149,8 @@ packages: resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} engines: {node: '>=0.10.0'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} to-buffer@1.2.2: @@ -2899,8 +3173,8 @@ packages: resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} engines: {node: '>=0.10.0'} - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -2933,29 +3207,29 @@ packages: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typesafe-i18n@5.26.2: - resolution: {integrity: sha512-2QAriFmiY5JwUAJtG7yufoE/XZ1aFBY++wj7YFS2yo89a3jLBfKoWSdq5JfQYk1V2BS7V2c/u+KEcaCQoE65hw==} + typesafe-i18n@5.27.1: + resolution: {integrity: sha512-749uWo2ZXETT//kWjVYPm8QPYR8xLh8G0wLfoAyCAtAmysX67uCaAyLjAjAWojL6fuJpE5B6yIjwvO9orXzUPg==} hasBin: true peerDependencies: typescript: '>=3.5.1' - typescript-eslint@8.52.0: - resolution: {integrity: sha512-atlQQJ2YkO4pfTVQmQ+wvYQwexPDOIgo+RaVcD7gHgzy/IQA+XTyuxNM9M9TVXvttkF7koBHmcwisKdOAf2EcA==} + typescript-eslint@8.59.3: + resolution: {integrity: sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - undici-types@7.16.0: - resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici-types@7.21.0: + resolution: {integrity: sha512-w9IMgQrz4O0YN1LtB7K5P63vhlIOvC7opSmouCJ+ZywlPAlO9gIkJ+otk6LvGpAs2wg4econaCz3TvQ9xPoyuQ==} universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} @@ -2987,7 +3261,7 @@ packages: uuid@3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true validate-npm-package-license@3.0.4: @@ -2998,28 +3272,26 @@ packages: peerDependencies: vite: '>=2.0.0' - vite-prerender-plugin@0.5.12: - resolution: {integrity: sha512-EiwhbMn+flg14EysbLTmZSzq8NGTxhytgK3bf4aGRF1evWLGwZiHiUJ1KZDvbxgKbMf2pG6fJWGEa3UZXOnR1g==} + vite-prerender-plugin@0.5.13: + resolution: {integrity: sha512-IKSpYkzDBsKAxa05naRbj7GvNVMSdww/Z/E89oO3xndz+gWnOBOKOAbEXv7qDhktY/j3vHgJmoV1pPzqU2tx9g==} peerDependencies: - vite: 5.x || 6.x || 7.x + vite: 5.x || 6.x || 7.x || 8.x - vite-tsconfig-paths@6.0.4: - resolution: {integrity: sha512-iIsEJ+ek5KqRTK17pmxtgIxXtqr3qDdE6OxrP9mVeGhVDNXRJTKN/l9oMbujTQNzMLe6XZ8qmpztfbkPu2TiFQ==} + vite-tsconfig-paths@6.1.1: + resolution: {integrity: sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg==} peerDependencies: vite: '*' - peerDependenciesMeta: - vite: - optional: true - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@8.0.12: + resolution: {integrity: sha512-w2dDofOWv2QB09ZITZBsvKTVAlYvPR4IAmrY/v0ir9KvLs0xybR7i48wxhM1/oyBWO34wPns+bPGw5ZrZqDpZg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 - lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: '>=0.54.8' @@ -3030,12 +3302,14 @@ packages: peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -3051,8 +3325,8 @@ packages: yaml: optional: true - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + which-typed-array@1.1.20: + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} which@1.3.1: @@ -3072,9 +3346,17 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + wsl-utils@0.3.1: + resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} + engines: {node: '>=20'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -3089,18 +3371,26 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} @@ -3108,34 +3398,37 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + snapshots: - '@alova/adapter-xhr@2.3.1(alova@3.4.1)': + '@alova/adapter-xhr@2.3.1(alova@3.5.1)': dependencies: '@alova/shared': 1.3.2 - alova: 3.4.1 + alova: 3.5.1 '@alova/shared@1.3.2': {} - '@babel/code-frame@7.27.1': + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.5': {} + '@babel/compat-data@7.29.3': {} - '@babel/core@7.28.5': + '@babel/core@7.29.0': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3 @@ -3145,45 +3438,45 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.5': + '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 - '@babel/helper-compilation-targets@7.27.2': + '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/compat-data': 7.28.5 + '@babel/compat-data': 7.29.3 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 '@babel/helper-globals@7.28.0': {} - '@babel/helper-module-imports@7.27.1': + '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.27.1': {} + '@babel/helper-plugin-utils@7.28.6': {} '@babel/helper-string-parser@7.27.1': {} @@ -3191,67 +3484,83 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.28.4': + '@babel/helpers@7.29.2': dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 - '@babel/parser@7.28.5': + '@babel/parser@7.29.3': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/types': 7.28.5 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/runtime@7.28.4': {} + '@babel/runtime@7.29.2': {} - '@babel/template@7.27.2': + '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 - '@babel/traverse@7.28.5': + '@babel/traverse@7.29.0': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.5': + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/babel-plugin@11.13.5': dependencies: - '@babel/helper-module-imports': 7.27.1 - '@babel/runtime': 7.28.4 + '@babel/helper-module-imports': 7.28.6 + '@babel/runtime': 7.29.2 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/serialize': 1.3.3 @@ -3280,19 +3589,19 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3)': + '@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.2 '@emotion/babel-plugin': 11.13.5 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.3) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.6) '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 - react: 19.2.3 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.8 + '@types/react': 19.2.14 transitivePeerDependencies: - supports-color @@ -3306,175 +3615,162 @@ snapshots: '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3)': + '@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.2 '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.4.0 - '@emotion/react': 11.14.0(@types/react@19.2.8)(react@19.2.3) + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6) '@emotion/serialize': 1.3.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.3) + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.6) '@emotion/utils': 1.4.2 - react: 19.2.3 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.8 + '@types/react': 19.2.14 transitivePeerDependencies: - supports-color '@emotion/unitless@0.10.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.3)': + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.6)': dependencies: - react: 19.2.3 + react: 19.2.6 '@emotion/utils@1.4.2': {} '@emotion/weak-memoize@0.4.0': {} - '@esbuild/aix-ppc64@0.27.2': + '@esbuild/aix-ppc64@0.27.4': optional: true - '@esbuild/android-arm64@0.27.2': + '@esbuild/android-arm64@0.27.4': optional: true - '@esbuild/android-arm@0.27.2': + '@esbuild/android-arm@0.27.4': optional: true - '@esbuild/android-x64@0.27.2': + '@esbuild/android-x64@0.27.4': optional: true - '@esbuild/darwin-arm64@0.27.2': + '@esbuild/darwin-arm64@0.27.4': optional: true - '@esbuild/darwin-x64@0.27.2': + '@esbuild/darwin-x64@0.27.4': optional: true - '@esbuild/freebsd-arm64@0.27.2': + '@esbuild/freebsd-arm64@0.27.4': optional: true - '@esbuild/freebsd-x64@0.27.2': + '@esbuild/freebsd-x64@0.27.4': optional: true - '@esbuild/linux-arm64@0.27.2': + '@esbuild/linux-arm64@0.27.4': optional: true - '@esbuild/linux-arm@0.27.2': + '@esbuild/linux-arm@0.27.4': optional: true - '@esbuild/linux-ia32@0.27.2': + '@esbuild/linux-ia32@0.27.4': optional: true '@esbuild/linux-loong64@0.14.54': optional: true - '@esbuild/linux-loong64@0.27.2': + '@esbuild/linux-loong64@0.27.4': optional: true - '@esbuild/linux-mips64el@0.27.2': + '@esbuild/linux-mips64el@0.27.4': optional: true - '@esbuild/linux-ppc64@0.27.2': + '@esbuild/linux-ppc64@0.27.4': optional: true - '@esbuild/linux-riscv64@0.27.2': + '@esbuild/linux-riscv64@0.27.4': optional: true - '@esbuild/linux-s390x@0.27.2': + '@esbuild/linux-s390x@0.27.4': optional: true - '@esbuild/linux-x64@0.27.2': + '@esbuild/linux-x64@0.27.4': optional: true - '@esbuild/netbsd-arm64@0.27.2': + '@esbuild/netbsd-arm64@0.27.4': optional: true - '@esbuild/netbsd-x64@0.27.2': + '@esbuild/netbsd-x64@0.27.4': optional: true - '@esbuild/openbsd-arm64@0.27.2': + '@esbuild/openbsd-arm64@0.27.4': optional: true - '@esbuild/openbsd-x64@0.27.2': + '@esbuild/openbsd-x64@0.27.4': optional: true - '@esbuild/openharmony-arm64@0.27.2': + '@esbuild/openharmony-arm64@0.27.4': optional: true - '@esbuild/sunos-x64@0.27.2': + '@esbuild/sunos-x64@0.27.4': optional: true - '@esbuild/win32-arm64@0.27.2': + '@esbuild/win32-arm64@0.27.4': optional: true - '@esbuild/win32-ia32@0.27.2': + '@esbuild/win32-ia32@0.27.4': optional: true - '@esbuild/win32-x64@0.27.2': + '@esbuild/win32-x64@0.27.4': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0)': dependencies: - eslint: 9.39.2 + eslint: 10.3.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.1': + '@eslint/config-array@0.23.5': dependencies: - '@eslint/object-schema': 2.1.7 + '@eslint/object-schema': 3.0.5 debug: 4.4.3 - minimatch: 3.1.2 + minimatch: 10.2.5 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.2': + '@eslint/config-helpers@0.5.5': dependencies: - '@eslint/core': 0.17.0 + '@eslint/core': 1.2.1 - '@eslint/core@0.17.0': + '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.3': + '@eslint/js@10.0.1(eslint@10.3.0)': + optionalDependencies: + eslint: 10.3.0 + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.1': dependencies: - ajv: 6.12.6 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.39.2': {} - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 + '@eslint/core': 1.2.1 levn: 0.4.1 - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.7': + '@humanfs/core@0.19.2': dependencies: - '@humanfs/core': 0.19.1 + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 '@humanwhocodes/retry': 0.4.3 + '@humanfs/types@0.15.0': {} + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.4.3': {} - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -3499,92 +3795,99 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@mui/core-downloads-tracker@7.3.7': {} + '@mui/core-downloads-tracker@9.0.1': {} - '@mui/icons-material@7.3.7(@mui/material@7.3.7(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.8)(react@19.2.3)': + '@mui/icons-material@9.0.1(@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)': dependencies: - '@babel/runtime': 7.28.4 - '@mui/material': 7.3.7(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 + '@babel/runtime': 7.29.2 + '@mui/material': 9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.8 + '@types/react': 19.2.14 - '@mui/material@7.3.7(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@mui/material@9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@babel/runtime': 7.28.4 - '@mui/core-downloads-tracker': 7.3.7 - '@mui/system': 7.3.7(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3) - '@mui/types': 7.4.10(@types/react@19.2.8) - '@mui/utils': 7.3.7(@types/react@19.2.8)(react@19.2.3) + '@babel/runtime': 7.29.2 + '@mui/core-downloads-tracker': 9.0.1 + '@mui/system': 9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6) + '@mui/types': 9.0.0(@types/react@19.2.14) + '@mui/utils': 9.0.1(@types/react@19.2.14)(react@19.2.6) '@popperjs/core': 2.11.8 - '@types/react-transition-group': 4.4.12(@types/react@19.2.8) + '@types/react-transition-group': 4.4.12(@types/react@19.2.14) clsx: 2.1.1 csstype: 3.2.3 prop-types: 15.8.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-is: 19.2.3 - react-transition-group: 4.4.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-is: 19.2.6 + react-transition-group: 4.4.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6) optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.2.8)(react@19.2.3) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3) - '@types/react': 19.2.8 + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6) + '@types/react': 19.2.14 - '@mui/private-theming@7.3.7(@types/react@19.2.8)(react@19.2.3)': + '@mui/private-theming@9.0.1(@types/react@19.2.14)(react@19.2.6)': dependencies: - '@babel/runtime': 7.28.4 - '@mui/utils': 7.3.7(@types/react@19.2.8)(react@19.2.3) + '@babel/runtime': 7.29.2 + '@mui/utils': 9.0.1(@types/react@19.2.14)(react@19.2.6) prop-types: 15.8.1 - react: 19.2.3 + react: 19.2.6 optionalDependencies: - '@types/react': 19.2.8 + '@types/react': 19.2.14 - '@mui/styled-engine@7.3.7(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3))(react@19.2.3)': + '@mui/styled-engine@9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(react@19.2.6)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.2 '@emotion/cache': 11.14.0 '@emotion/serialize': 1.3.3 '@emotion/sheet': 1.4.0 csstype: 3.2.3 prop-types: 15.8.1 - react: 19.2.3 + react: 19.2.6 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.2.8)(react@19.2.3) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3) + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6) - '@mui/system@7.3.7(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3)': + '@mui/system@9.0.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6)': dependencies: - '@babel/runtime': 7.28.4 - '@mui/private-theming': 7.3.7(@types/react@19.2.8)(react@19.2.3) - '@mui/styled-engine': 7.3.7(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3))(react@19.2.3) - '@mui/types': 7.4.10(@types/react@19.2.8) - '@mui/utils': 7.3.7(@types/react@19.2.8)(react@19.2.3) + '@babel/runtime': 7.29.2 + '@mui/private-theming': 9.0.1(@types/react@19.2.14)(react@19.2.6) + '@mui/styled-engine': 9.0.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6))(react@19.2.6) + '@mui/types': 9.0.0(@types/react@19.2.14) + '@mui/utils': 9.0.1(@types/react@19.2.14)(react@19.2.6) clsx: 2.1.1 csstype: 3.2.3 prop-types: 15.8.1 - react: 19.2.3 + react: 19.2.6 optionalDependencies: - '@emotion/react': 11.14.0(@types/react@19.2.8)(react@19.2.3) - '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(@types/react@19.2.8)(react@19.2.3) - '@types/react': 19.2.8 + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6) + '@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(@types/react@19.2.14)(react@19.2.6) + '@types/react': 19.2.14 - '@mui/types@7.4.10(@types/react@19.2.8)': + '@mui/types@9.0.0(@types/react@19.2.14)': dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.2 optionalDependencies: - '@types/react': 19.2.8 + '@types/react': 19.2.14 - '@mui/utils@7.3.7(@types/react@19.2.8)(react@19.2.3)': + '@mui/utils@9.0.1(@types/react@19.2.14)(react@19.2.6)': dependencies: - '@babel/runtime': 7.28.4 - '@mui/types': 7.4.10(@types/react@19.2.8) + '@babel/runtime': 7.29.2 + '@mui/types': 9.0.0(@types/react@19.2.14) '@types/prop-types': 15.7.15 clsx: 2.1.1 prop-types: 15.8.1 - react: 19.2.3 - react-is: 19.2.3 + react: 19.2.6 + react-is: 19.2.6 optionalDependencies: - '@types/react': 19.2.8 + '@types/react': 19.2.14 + + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true '@noble/hashes@1.8.0': {} @@ -3600,165 +3903,237 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@oxc-project/types@0.129.0': {} + '@paralleldrive/cuid2@2.3.1': dependencies: '@noble/hashes': 1.8.0 '@popperjs/core@2.11.8': {} - '@preact/compat@18.3.1(preact@10.28.2)': + '@preact/compat@18.3.2(preact@10.29.1)': dependencies: - preact: 10.28.2 + preact: 10.29.1 - '@preact/preset-vite@2.10.2(@babel/core@7.28.5)(preact@10.28.2)(vite@7.3.1(@types/node@25.0.6)(terser@5.44.1))': + '@preact/preset-vite@2.10.5(@babel/core@7.29.0)(preact@10.29.1)(rollup@4.59.0)(vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1))': dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5) - '@prefresh/vite': 2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@25.0.6)(terser@5.44.1)) - '@rollup/pluginutils': 4.2.1 - babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.5) + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) + '@prefresh/vite': 2.4.12(preact@10.29.1)(vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1)) + '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.0) debug: 4.4.3 + magic-string: 0.30.21 picocolors: 1.1.1 - vite: 7.3.1(@types/node@25.0.6)(terser@5.44.1) - vite-prerender-plugin: 0.5.12(vite@7.3.1(@types/node@25.0.6)(terser@5.44.1)) + vite: 8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1) + vite-prerender-plugin: 0.5.13(vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1)) + zimmerframe: 1.1.4 transitivePeerDependencies: - preact + - rollup - supports-color - '@prefresh/babel-plugin@0.5.2': {} + '@prefresh/babel-plugin@0.5.3': {} - '@prefresh/core@1.5.9(preact@10.28.2)': + '@prefresh/core@1.5.10(preact@10.29.1)': dependencies: - preact: 10.28.2 + preact: 10.29.1 '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@25.0.6)(terser@5.44.1))': + '@prefresh/vite@2.4.12(preact@10.29.1)(vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1))': dependencies: - '@babel/core': 7.28.5 - '@prefresh/babel-plugin': 0.5.2 - '@prefresh/core': 1.5.9(preact@10.28.2) + '@babel/core': 7.29.0 + '@prefresh/babel-plugin': 0.5.3 + '@prefresh/core': 1.5.10(preact@10.29.1) '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 - preact: 10.28.2 - vite: 7.3.1(@types/node@25.0.6)(terser@5.44.1) + preact: 10.29.1 + vite: 8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1) transitivePeerDependencies: - supports-color + '@rolldown/binding-android-arm64@1.0.0': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.0': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.0': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0': + optional: true + + '@rolldown/pluginutils@1.0.0': {} + '@rollup/pluginutils@4.2.1': dependencies: estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 2.3.2 - '@rollup/rollup-android-arm-eabi@4.55.1': + '@rollup/pluginutils@5.3.0(rollup@4.59.0)': + dependencies: + '@types/estree': 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.4 + optionalDependencies: + rollup: 4.59.0 + + '@rollup/rollup-android-arm-eabi@4.59.0': optional: true - '@rollup/rollup-android-arm64@4.55.1': + '@rollup/rollup-android-arm64@4.59.0': optional: true - '@rollup/rollup-darwin-arm64@4.55.1': + '@rollup/rollup-darwin-arm64@4.59.0': optional: true - '@rollup/rollup-darwin-x64@4.55.1': + '@rollup/rollup-darwin-x64@4.59.0': optional: true - '@rollup/rollup-freebsd-arm64@4.55.1': + '@rollup/rollup-freebsd-arm64@4.59.0': optional: true - '@rollup/rollup-freebsd-x64@4.55.1': + '@rollup/rollup-freebsd-x64@4.59.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.55.1': + '@rollup/rollup-linux-arm-musleabihf@4.59.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.55.1': + '@rollup/rollup-linux-arm64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.55.1': + '@rollup/rollup-linux-arm64-musl@4.59.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.55.1': + '@rollup/rollup-linux-loong64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.55.1': + '@rollup/rollup-linux-loong64-musl@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.55.1': + '@rollup/rollup-linux-ppc64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.55.1': + '@rollup/rollup-linux-ppc64-musl@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.55.1': + '@rollup/rollup-linux-riscv64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.55.1': + '@rollup/rollup-linux-riscv64-musl@4.59.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.55.1': + '@rollup/rollup-linux-s390x-gnu@4.59.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.55.1': + '@rollup/rollup-linux-x64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-x64-musl@4.55.1': + '@rollup/rollup-linux-x64-musl@4.59.0': optional: true - '@rollup/rollup-openbsd-x64@4.55.1': + '@rollup/rollup-openbsd-x64@4.59.0': optional: true - '@rollup/rollup-openharmony-arm64@4.55.1': + '@rollup/rollup-openharmony-arm64@4.59.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.55.1': + '@rollup/rollup-win32-arm64-msvc@4.59.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.55.1': + '@rollup/rollup-win32-ia32-msvc@4.59.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.55.1': + '@rollup/rollup-win32-x64-gnu@4.59.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.55.1': + '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true '@sindresorhus/is@0.7.0': {} - '@table-library/react-table-library@4.1.15(@emotion/react@11.14.0(@types/react@19.2.8)(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@table-library/react-table-library@4.1.15(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.6))(react-dom@19.2.6(react@19.2.6))(react@19.2.6)': dependencies: - '@emotion/react': 11.14.0(@types/react@19.2.8)(react@19.2.3) + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.6) clsx: 1.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-virtualized-auto-sizer: 1.0.26(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react-window: 1.8.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + react-virtualized-auto-sizer: 1.0.26(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + react-window: 1.8.11(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - '@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.7.4)': + '@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.3)': dependencies: - '@babel/generator': 7.28.5 - '@babel/parser': 7.28.5 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.3 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 javascript-natural-sort: 0.7.1 - lodash-es: 4.17.22 - minimatch: 9.0.5 + lodash-es: 4.18.1 + minimatch: 9.0.9 parse-imports-exports: 0.2.4 - prettier: 3.7.4 + prettier: 3.8.3 transitivePeerDependencies: - supports-color - '@trysound/sax@0.2.0': {} + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.8.1 + optional: true - '@types/estree@1.0.8': {} + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.8': + optional: true + + '@types/estree@1.0.9': {} '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 25.0.6 + '@types/node': 25.7.0 '@types/imagemin-gifsicle@7.0.4': dependencies: @@ -3787,151 +4162,151 @@ snapshots: '@types/imagemin@7.0.1': dependencies: - '@types/node': 25.0.6 + '@types/node': 25.7.0 '@types/json-schema@7.0.15': {} '@types/keyv@3.1.4': dependencies: - '@types/node': 25.0.6 + '@types/node': 25.7.0 '@types/minimatch@6.0.0': dependencies: - minimatch: 10.1.1 + minimatch: 10.2.5 - '@types/node@25.0.6': + '@types/node@25.7.0': dependencies: - undici-types: 7.16.0 + undici-types: 7.21.0 '@types/parse-json@4.0.2': {} '@types/prop-types@15.7.15': {} - '@types/react-dom@19.2.3(@types/react@19.2.8)': + '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: - '@types/react': 19.2.8 + '@types/react': 19.2.14 - '@types/react-transition-group@4.4.12(@types/react@19.2.8)': + '@types/react-transition-group@4.4.12(@types/react@19.2.14)': dependencies: - '@types/react': 19.2.8 + '@types/react': 19.2.14 - '@types/react@19.2.8': + '@types/react@19.2.14': dependencies: csstype: 3.2.3 '@types/responselike@1.0.3': dependencies: - '@types/node': 25.0.6 + '@types/node': 25.7.0 '@types/svgo@2.6.4': dependencies: - '@types/node': 25.0.6 + '@types/node': 25.7.0 - '@typescript-eslint/eslint-plugin@8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0)(typescript@6.0.3))(eslint@10.3.0)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.52.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.52.0 - '@typescript-eslint/type-utils': 8.52.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.52.0 - eslint: 9.39.2 + '@typescript-eslint/parser': 8.59.3(eslint@10.3.0)(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/type-utils': 8.59.3(eslint@10.3.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.3 + eslint: 10.3.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.52.0(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.3(eslint@10.3.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.52.0 - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.52.0 + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 - eslint: 9.39.2 - typescript: 5.9.3 + eslint: 10.3.0 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.52.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.59.3(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.52.0(typescript@5.9.3) - '@typescript-eslint/types': 8.52.0 + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@6.0.3) + '@typescript-eslint/types': 8.59.3 debug: 4.4.3 - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.52.0': + '@typescript-eslint/scope-manager@8.59.3': dependencies: - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/visitor-keys': 8.52.0 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 - '@typescript-eslint/tsconfig-utils@8.52.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.59.3(typescript@6.0.3)': dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - '@typescript-eslint/type-utils@8.52.0(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.3(eslint@10.3.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0)(typescript@6.0.3) debug: 4.4.3 - eslint: 9.39.2 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + eslint: 10.3.0 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.52.0': {} + '@typescript-eslint/types@8.59.3': {} - '@typescript-eslint/typescript-estree@8.52.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.59.3(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.52.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.52.0(typescript@5.9.3) - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/visitor-keys': 8.52.0 + '@typescript-eslint/project-service': 8.59.3(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@6.0.3) + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 - minimatch: 9.0.5 - semver: 7.7.3 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + minimatch: 10.2.5 + semver: 7.8.0 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.52.0(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.3(eslint@10.3.0)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2) - '@typescript-eslint/scope-manager': 8.52.0 - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - eslint: 9.39.2 - typescript: 5.9.3 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) + eslint: 10.3.0 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.52.0': + '@typescript-eslint/visitor-keys@8.59.3': dependencies: - '@typescript-eslint/types': 8.52.0 - eslint-visitor-keys: 4.2.1 + '@typescript-eslint/types': 8.59.3 + eslint-visitor-keys: 5.0.1 - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn@8.15.0: {} + acorn@8.16.0: {} - ajv@6.12.6: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - alova@3.4.1: + alova@3.5.1: dependencies: '@alova/shared': 1.3.2 rate-limiter-flexible: 5.0.5 @@ -3940,20 +4315,22 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + ansi-styles@2.2.1: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.3: {} + arch@2.2.0: {} archive-type@4.0.0: dependencies: file-type: 4.4.0 - argparse@2.0.1: {} - array-find-index@1.0.2: {} array-union@2.1.0: {} @@ -3966,23 +4343,25 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - axe-core@4.11.1: {} + axe-core@4.11.4: {} babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.2 cosmiconfig: 7.1.0 - resolve: 1.22.11 + resolve: 1.22.12 - babel-plugin-transform-hook-names@1.0.2(@babel/core@7.28.5): + babel-plugin-transform-hook-names@1.0.2(@babel/core@7.29.0): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} - baseline-browser-mapping@2.9.14: {} + baseline-browser-mapping@2.10.29: {} bin-build@3.0.0: dependencies: @@ -4024,26 +4403,30 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@1.1.12: + brace-expansion@1.1.14: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.2: + brace-expansion@2.1.0: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 - browserslist@4.28.1: + browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.9.14 - caniuse-lite: 1.0.30001764 - electron-to-chromium: 1.5.267 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + baseline-browser-mapping: 2.10.29 + caniuse-lite: 1.0.30001792 + electron-to-chromium: 1.5.353 + node-releases: 2.0.44 + update-browserslist-db: 1.2.3(browserslist@4.28.2) buffer-alloc-unsafe@1.1.0: {} @@ -4063,6 +4446,10 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + cacheable-request@2.1.4: dependencies: clone-response: 1.0.2 @@ -4078,7 +4465,7 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.8: + call-bind@1.0.9: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 @@ -4099,7 +4486,7 @@ snapshots: camelcase@2.1.1: {} - caniuse-lite@1.0.30001764: {} + caniuse-lite@1.0.30001792: {} caw@2.0.1: dependencies: @@ -4127,6 +4514,12 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + clone-response@1.0.2: dependencies: mimic-response: 1.0.1 @@ -4181,7 +4574,7 @@ snapshots: import-fresh: 3.3.1 parse-json: 5.2.0 path-type: 4.0.0 - yaml: 1.10.2 + yaml: 1.10.3 cross-spawn@5.1.0: dependencies: @@ -4293,13 +4686,22 @@ snapshots: deep-is@0.1.4: {} + default-browser-id@5.0.1: {} + + default-browser@5.5.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 - define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + + detect-libc@2.1.2: {} dezalgo@1.0.4: dependencies: @@ -4312,7 +4714,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.2 csstype: 3.2.3 dom-serializer@1.4.1: @@ -4386,7 +4788,9 @@ snapshots: duplexer3@0.1.5: {} - electron-to-chromium@1.5.267: {} + electron-to-chromium@1.5.353: {} + + emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -4494,34 +4898,35 @@ snapshots: esbuild-windows-64: 0.14.54 esbuild-windows-arm64: 0.14.54 - esbuild@0.27.2: + esbuild@0.27.4: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.2 - '@esbuild/android-arm': 0.27.2 - '@esbuild/android-arm64': 0.27.2 - '@esbuild/android-x64': 0.27.2 - '@esbuild/darwin-arm64': 0.27.2 - '@esbuild/darwin-x64': 0.27.2 - '@esbuild/freebsd-arm64': 0.27.2 - '@esbuild/freebsd-x64': 0.27.2 - '@esbuild/linux-arm': 0.27.2 - '@esbuild/linux-arm64': 0.27.2 - '@esbuild/linux-ia32': 0.27.2 - '@esbuild/linux-loong64': 0.27.2 - '@esbuild/linux-mips64el': 0.27.2 - '@esbuild/linux-ppc64': 0.27.2 - '@esbuild/linux-riscv64': 0.27.2 - '@esbuild/linux-s390x': 0.27.2 - '@esbuild/linux-x64': 0.27.2 - '@esbuild/netbsd-arm64': 0.27.2 - '@esbuild/netbsd-x64': 0.27.2 - '@esbuild/openbsd-arm64': 0.27.2 - '@esbuild/openbsd-x64': 0.27.2 - '@esbuild/openharmony-arm64': 0.27.2 - '@esbuild/sunos-x64': 0.27.2 - '@esbuild/win32-arm64': 0.27.2 - '@esbuild/win32-ia32': 0.27.2 - '@esbuild/win32-x64': 0.27.2 + '@esbuild/aix-ppc64': 0.27.4 + '@esbuild/android-arm': 0.27.4 + '@esbuild/android-arm64': 0.27.4 + '@esbuild/android-x64': 0.27.4 + '@esbuild/darwin-arm64': 0.27.4 + '@esbuild/darwin-x64': 0.27.4 + '@esbuild/freebsd-arm64': 0.27.4 + '@esbuild/freebsd-x64': 0.27.4 + '@esbuild/linux-arm': 0.27.4 + '@esbuild/linux-arm64': 0.27.4 + '@esbuild/linux-ia32': 0.27.4 + '@esbuild/linux-loong64': 0.27.4 + '@esbuild/linux-mips64el': 0.27.4 + '@esbuild/linux-ppc64': 0.27.4 + '@esbuild/linux-riscv64': 0.27.4 + '@esbuild/linux-s390x': 0.27.4 + '@esbuild/linux-x64': 0.27.4 + '@esbuild/netbsd-arm64': 0.27.4 + '@esbuild/netbsd-x64': 0.27.4 + '@esbuild/openbsd-arm64': 0.27.4 + '@esbuild/openbsd-x64': 0.27.4 + '@esbuild/openharmony-arm64': 0.27.4 + '@esbuild/sunos-x64': 0.27.4 + '@esbuild/win32-arm64': 0.27.4 + '@esbuild/win32-ia32': 0.27.4 + '@esbuild/win32-x64': 0.27.4 + optional: true escalade@3.2.0: {} @@ -4529,41 +4934,40 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@9.39.2): + eslint-config-prettier@10.1.8(eslint@10.3.0): dependencies: - eslint: 9.39.2 + eslint: 10.3.0 - eslint-scope@8.4.0: + eslint-scope@9.1.2: dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.1: {} + eslint-visitor-keys@5.0.1: {} - eslint@9.39.2: + eslint@10.3.0: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.2 - '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.7 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.5.5 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.1 + '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 + '@types/estree': 1.0.9 + ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -4574,18 +4978,17 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 transitivePeerDependencies: - supports-color - espree@10.4.0: + espree@11.2.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 esquery@1.7.0: dependencies: @@ -4682,7 +5085,7 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-xml-parser@4.5.3: + fast-xml-parser@4.5.6: dependencies: strnum: 1.1.2 @@ -4694,9 +5097,9 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 figures@1.7.0: dependencies: @@ -4751,10 +5154,10 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 - flatted@3.3.3: {} + flatted@3.4.2: {} for-each@0.3.5: dependencies: @@ -4776,7 +5179,7 @@ snapshots: fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.2.1 universalify: 2.0.1 fs.realpath@1.0.0: {} @@ -4790,6 +5193,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.6.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -4800,7 +5205,7 @@ snapshots: get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.3 math-intrinsics: 1.1.0 get-proto@1.0.1: @@ -4823,11 +5228,11 @@ snapshots: get-stream@4.1.0: dependencies: - pump: 3.0.3 + pump: 3.0.4 get-stream@5.2.0: dependencies: - pump: 3.0.3 + pump: 3.0.4 get-stream@6.0.1: {} @@ -4851,12 +5256,10 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 - globals@14.0.0: {} - globby@10.0.2: dependencies: '@types/glob': 7.2.0 @@ -4937,7 +5340,7 @@ snapshots: dependencies: has-symbols: 1.1.0 - hasown@2.0.2: + hasown@2.0.3: dependencies: function-bind: 1.1.2 @@ -4996,7 +5399,7 @@ snapshots: imagemin-svgo@9.0.0: dependencies: is-svg: 4.4.0 - svgo: 2.8.0 + svgo: 2.8.2 imagemin-webp@6.1.0: dependencies: @@ -5045,15 +5448,15 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.16.1: + is-core-module@2.16.2: dependencies: - hasown: 2.0.2 + hasown: 2.0.3 is-cwebp-readable@3.0.0: dependencies: file-type: 10.11.0 - is-docker@2.2.1: {} + is-docker@3.0.0: {} is-extglob@2.1.1: {} @@ -5069,6 +5472,12 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-in-ssh@1.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-jpg@2.0.0: {} is-natural-number@4.0.1: {} @@ -5089,17 +5498,17 @@ snapshots: is-svg@4.4.0: dependencies: - fast-xml-parser: 4.5.3 + fast-xml-parser: 4.5.6 is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.19 + which-typed-array: 1.1.20 is-utf8@0.2.1: {} - is-wsl@2.2.0: + is-wsl@3.1.1: dependencies: - is-docker: 2.2.1 + is-inside-container: 1.0.0 isarray@1.0.0: {} @@ -5127,10 +5536,6 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 - jsesc@3.1.0: {} json-buffer@3.0.0: {} @@ -5145,7 +5550,7 @@ snapshots: json5@2.2.3: {} - jsonfile@6.2.0: + jsonfile@6.2.1: dependencies: universalify: 2.0.1 optionalDependencies: @@ -5170,6 +5575,55 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + lines-and-columns@1.2.4: {} load-json-file@1.1.0: @@ -5184,9 +5638,7 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash-es@4.17.22: {} - - lodash.merge@4.6.2: {} + lodash-es@4.18.1: {} logalot@2.1.0: dependencies: @@ -5264,7 +5716,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.54.0: {} @@ -5276,17 +5728,17 @@ snapshots: mimic-response@1.0.1: {} - minimatch@10.1.1: + minimatch@10.2.5: dependencies: - '@isaacs/brace-expansion': 5.0.0 + brace-expansion: 5.0.6 - minimatch@3.1.2: + minimatch@3.1.5: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 1.1.14 - minimatch@9.0.5: + minimatch@9.0.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.1.0 minimist@1.2.8: {} @@ -5297,7 +5749,7 @@ snapshots: ms@2.1.3: {} - nanoid@3.3.11: {} + nanoid@3.3.12: {} natural-compare@1.4.0: {} @@ -5308,12 +5760,12 @@ snapshots: css-select: 5.2.2 he: 1.2.0 - node-releases@2.0.27: {} + node-releases@2.0.44: {} normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.11 + resolve: 1.22.12 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -5350,11 +5802,14 @@ snapshots: dependencies: mimic-fn: 2.1.0 - open@8.4.2: + open@11.0.0: dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-in-ssh: 1.0.0 + is-inside-container: 1.0.0 + powershell-utils: 0.1.0 + wsl-utils: 0.3.1 optionator@0.9.4: dependencies: @@ -5432,7 +5887,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.27.1 + '@babel/code-frame': 7.29.0 error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -5467,9 +5922,9 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} + picomatch@2.3.2: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} pify@2.3.0: {} @@ -5491,13 +5946,15 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss@8.5.6: + postcss@8.5.14: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.28.2: {} + powershell-utils@0.1.0: {} + + preact@10.29.1: {} prelude-ls@1.2.1: {} @@ -5505,7 +5962,7 @@ snapshots: prepend-http@2.0.0: {} - prettier@3.7.4: {} + prettier@3.8.3: {} process-nextick-args@2.0.1: {} @@ -5519,7 +5976,7 @@ snapshots: pseudomap@1.0.2: {} - pump@3.0.3: + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 @@ -5536,55 +5993,55 @@ snapshots: rate-limiter-flexible@5.0.5: {} - react-dom@19.2.3(react@19.2.3): + react-dom@19.2.6(react@19.2.6): dependencies: - react: 19.2.3 + react: 19.2.6 scheduler: 0.27.0 - react-icons@5.5.0(react@19.2.3): + react-icons@5.6.0(react@19.2.6): dependencies: - react: 19.2.3 + react: 19.2.6 react-is@16.13.1: {} - react-is@19.2.3: {} + react-is@19.2.6: {} - react-router@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-router@7.15.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: cookie: 1.1.1 - react: 19.2.3 + react: 19.2.6 set-cookie-parser: 2.7.2 optionalDependencies: - react-dom: 19.2.3(react@19.2.3) + react-dom: 19.2.6(react@19.2.6) - react-toastify@11.0.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-toastify@11.1.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: clsx: 2.1.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - react-transition-group@4.4.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-transition-group@4.4.5(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.2 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - react-virtualized-auto-sizer@1.0.26(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-virtualized-auto-sizer@1.0.26(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - react-window@1.8.11(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-window@1.8.11(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: - '@babel/runtime': 7.28.4 + '@babel/runtime': 7.29.2 memoize-one: 5.2.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) - react@19.2.3: {} + react@19.2.6: {} read-pkg-up@1.0.1: dependencies: @@ -5622,9 +6079,10 @@ snapshots: resolve-from@4.0.0: {} - resolve@1.22.11: + resolve@1.22.12: dependencies: - is-core-module: 2.16.1 + es-errors: 1.3.0 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -5638,45 +6096,70 @@ snapshots: dependencies: glob: 7.2.3 - rollup-plugin-visualizer@6.0.5(rollup@4.55.1): + rolldown@1.0.0: dependencies: - open: 8.4.2 - picomatch: 4.0.3 - source-map: 0.7.6 - yargs: 17.7.2 + '@oxc-project/types': 0.129.0 + '@rolldown/pluginutils': 1.0.0 optionalDependencies: - rollup: 4.55.1 + '@rolldown/binding-android-arm64': 1.0.0 + '@rolldown/binding-darwin-arm64': 1.0.0 + '@rolldown/binding-darwin-x64': 1.0.0 + '@rolldown/binding-freebsd-x64': 1.0.0 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0 + '@rolldown/binding-linux-arm64-gnu': 1.0.0 + '@rolldown/binding-linux-arm64-musl': 1.0.0 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0 + '@rolldown/binding-linux-s390x-gnu': 1.0.0 + '@rolldown/binding-linux-x64-gnu': 1.0.0 + '@rolldown/binding-linux-x64-musl': 1.0.0 + '@rolldown/binding-openharmony-arm64': 1.0.0 + '@rolldown/binding-wasm32-wasi': 1.0.0 + '@rolldown/binding-win32-arm64-msvc': 1.0.0 + '@rolldown/binding-win32-x64-msvc': 1.0.0 - rollup@4.55.1: + rollup-plugin-visualizer@7.0.1(rolldown@1.0.0)(rollup@4.59.0): + dependencies: + open: 11.0.0 + picomatch: 4.0.4 + source-map: 0.7.6 + yargs: 18.0.0 + optionalDependencies: + rolldown: 1.0.0 + rollup: 4.59.0 + + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.1 - '@rollup/rollup-android-arm64': 4.55.1 - '@rollup/rollup-darwin-arm64': 4.55.1 - '@rollup/rollup-darwin-x64': 4.55.1 - '@rollup/rollup-freebsd-arm64': 4.55.1 - '@rollup/rollup-freebsd-x64': 4.55.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 - '@rollup/rollup-linux-arm-musleabihf': 4.55.1 - '@rollup/rollup-linux-arm64-gnu': 4.55.1 - '@rollup/rollup-linux-arm64-musl': 4.55.1 - '@rollup/rollup-linux-loong64-gnu': 4.55.1 - '@rollup/rollup-linux-loong64-musl': 4.55.1 - '@rollup/rollup-linux-ppc64-gnu': 4.55.1 - '@rollup/rollup-linux-ppc64-musl': 4.55.1 - '@rollup/rollup-linux-riscv64-gnu': 4.55.1 - '@rollup/rollup-linux-riscv64-musl': 4.55.1 - '@rollup/rollup-linux-s390x-gnu': 4.55.1 - '@rollup/rollup-linux-x64-gnu': 4.55.1 - '@rollup/rollup-linux-x64-musl': 4.55.1 - '@rollup/rollup-openbsd-x64': 4.55.1 - '@rollup/rollup-openharmony-arm64': 4.55.1 - '@rollup/rollup-win32-arm64-msvc': 4.55.1 - '@rollup/rollup-win32-ia32-msvc': 4.55.1 - '@rollup/rollup-win32-x64-gnu': 4.55.1 - '@rollup/rollup-win32-x64-msvc': 4.55.1 + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 + optional: true + + run-applescript@7.1.0: {} run-parallel@1.2.0: dependencies: @@ -5690,6 +6173,8 @@ snapshots: safe-buffer@5.2.1: {} + sax@1.6.0: {} + scheduler@0.27.0: {} seek-bzip@1.0.6: @@ -5706,7 +6191,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.3: {} + semver@7.8.0: {} set-cookie-parser@2.7.2: {} @@ -5769,16 +6254,16 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.22 + spdx-license-ids: 3.0.23 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.22 + spdx-license-ids: 3.0.23 - spdx-license-ids@3.0.22: {} + spdx-license-ids@3.0.23: {} squeak@1.3.0: dependencies: @@ -5788,7 +6273,7 @@ snapshots: stable@0.1.8: {} - stack-trace@1.0.0-pre2: {} + stack-trace@1.0.0: {} strict-uri-encode@1.1.0: {} @@ -5798,6 +6283,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -5810,6 +6301,10 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-bom@2.0.0: dependencies: is-utf8: 0.2.1 @@ -5826,8 +6321,6 @@ snapshots: dependencies: get-stdin: 4.0.1 - strip-json-comments@3.1.1: {} - strip-outer@1.0.1: dependencies: escape-string-regexp: 1.0.5 @@ -5848,14 +6341,14 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svgo@2.8.0: + svgo@2.8.2: dependencies: - '@trysound/sax': 0.2.0 commander: 7.2.0 css-select: 4.3.0 css-tree: 1.1.3 csso: 4.2.0 picocolors: 1.1.1 + sax: 1.6.0 stable: 0.1.8 tar-stream@1.6.2: @@ -5875,10 +6368,10 @@ snapshots: temp-dir: 1.0.0 uuid: 3.4.0 - terser@5.44.1: + terser@5.47.1: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -5886,10 +6379,10 @@ snapshots: timed-out@4.0.1: {} - tinyglobby@0.2.15: + tinyglobby@0.2.16: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 to-buffer@1.2.2: dependencies: @@ -5909,13 +6402,13 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - ts-api-utils@2.4.0(typescript@5.9.3): + ts-api-utils@2.5.0(typescript@6.0.3): dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - tsconfck@3.1.6(typescript@5.9.3): + tsconfck@3.1.6(typescript@6.0.3): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 tslib@2.8.1: {} @@ -5935,35 +6428,35 @@ snapshots: es-errors: 1.3.0 is-typed-array: 1.1.15 - typesafe-i18n@5.26.2(typescript@5.9.3): + typesafe-i18n@5.27.1(typescript@6.0.3): dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - typescript-eslint@8.52.0(eslint@9.39.2)(typescript@5.9.3): + typescript-eslint@8.59.3(eslint@10.3.0)(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/parser': 8.52.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2)(typescript@5.9.3) - eslint: 9.39.2 - typescript: 5.9.3 + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0)(typescript@6.0.3))(eslint@10.3.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.3.0)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0)(typescript@6.0.3) + eslint: 10.3.0 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - typescript@5.9.3: {} + typescript@6.0.3: {} unbzip2-stream@1.4.3: dependencies: buffer: 5.7.1 through: 2.3.8 - undici-types@7.16.0: {} + undici-types@7.21.0: {} universalify@2.0.1: {} - update-browserslist-db@1.2.3(browserslist@4.28.1): + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -5990,7 +6483,7 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite-plugin-imagemin@0.6.1(vite@7.3.1(@types/node@25.0.6)(terser@5.44.1)): + vite-plugin-imagemin@0.6.1(vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1)): dependencies: '@types/imagemin': 7.0.1 '@types/imagemin-gifsicle': 7.0.4 @@ -6015,48 +6508,47 @@ snapshots: imagemin-webp: 6.1.0 jpegtran-bin: 6.0.1 pathe: 0.2.0 - vite: 7.3.1(@types/node@25.0.6)(terser@5.44.1) + vite: 8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1) transitivePeerDependencies: - supports-color - vite-prerender-plugin@0.5.12(vite@7.3.1(@types/node@25.0.6)(terser@5.44.1)): + vite-prerender-plugin@0.5.13(vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 node-html-parser: 6.1.13 simple-code-frame: 1.3.0 source-map: 0.7.6 - stack-trace: 1.0.0-pre2 - vite: 7.3.1(@types/node@25.0.6)(terser@5.44.1) + stack-trace: 1.0.0 + vite: 8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1) - vite-tsconfig-paths@6.0.4(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.6)(terser@5.44.1)): + vite-tsconfig-paths@6.1.1(typescript@6.0.3)(vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1)): dependencies: debug: 4.4.3 globrex: 0.1.2 - tsconfck: 3.1.6(typescript@5.9.3) - optionalDependencies: - vite: 7.3.1(@types/node@25.0.6)(terser@5.44.1) + tsconfck: 3.1.6(typescript@6.0.3) + vite: 8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1) transitivePeerDependencies: - supports-color - typescript - vite@7.3.1(@types/node@25.0.6)(terser@5.44.1): + vite@8.0.12(@types/node@25.7.0)(esbuild@0.27.4)(terser@5.47.1): dependencies: - esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.55.1 - tinyglobby: 0.2.15 + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.14 + rolldown: 1.0.0 + tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.0.6 + '@types/node': 25.7.0 + esbuild: 0.27.4 fsevents: 2.3.3 - terser: 5.44.1 + terser: 5.47.1 - which-typed-array@1.1.19: + which-typed-array@1.1.20: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 + call-bind: 1.0.9 call-bound: 1.0.4 for-each: 0.3.5 get-proto: 1.0.1 @@ -6079,8 +6571,19 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrappy@1.0.2: {} + wsl-utils@0.3.1: + dependencies: + is-wsl: 3.1.1 + powershell-utils: 0.1.0 + xtend@4.0.2: {} y18n@5.0.8: {} @@ -6089,10 +6592,12 @@ snapshots: yallist@3.1.1: {} - yaml@1.10.2: {} + yaml@1.10.3: {} yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -6103,9 +6608,20 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.0.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 yocto-queue@0.1.0: {} + + zimmerframe@1.1.4: {} diff --git a/interface/progmem-generator.js b/interface/progmem-generator.js index 30fc00094..be5cead21 100644 --- a/interface/progmem-generator.js +++ b/interface/progmem-generator.js @@ -24,20 +24,26 @@ let bundleStats = { other: { count: 0, uncompressed: 0, compressed: 0 } }; -const generateWWWClass = - () => `typedef std::function RouteRegistrationHandler; -// Bundle Statistics: +// AsyncWebHandler that performs the lookup. +const generateWWWClass = () => `// Bundle Statistics: // - Total compressed size: ${(totalSize / 1000).toFixed(1)} KB // - Total uncompressed size: ${(Object.values(bundleStats).reduce((sum, stat) => sum + stat.uncompressed, 0) / 1000).toFixed(1)} KB // - Compression ratio: ${(((Object.values(bundleStats).reduce((sum, stat) => sum + stat.uncompressed, 0) - totalSize) / Object.values(bundleStats).reduce((sum, stat) => sum + stat.uncompressed, 0)) * 100).toFixed(1)}% // - Generated on: ${new Date().toISOString()} -class WWWData { -${INDENT}public: -${INDENT.repeat(2)}static void registerRoutes(RouteRegistrationHandler handler) { -${fileInfo.map((f) => `${INDENT.repeat(3)}handler("${f.uri}", "${f.mimeType}", ${f.variable}, ${f.size}, ${f.hash});`).join('\n')} -${INDENT.repeat(2)}} +struct WWWAsset { +${INDENT}const char * uri; +${INDENT}const char * contentType; +${INDENT}const uint8_t * content; +${INDENT}size_t len; +${INDENT}const char * etag; // already includes enclosing double quotes }; + +static const WWWAsset WWW_ASSETS[] = { +${fileInfo.map((f) => `${INDENT}{"${f.uri}", "${f.mimeType}", ${f.variable}, ${f.size}, "\\"${f.rawHash}\\""},`).join('\n')} +}; + +static constexpr size_t WWW_ASSETS_COUNT = sizeof(WWW_ASSETS) / sizeof(WWW_ASSETS[0]); `; const getFilesSync = (dir, files = []) => { @@ -72,6 +78,7 @@ const writeFile = (relativeFilePath, buffer) => { const zipBuffer = zlib.gzipSync(buffer, { level: 9 }); // const hash = crypto.createHash('sha256').update(zipBuffer).digest('hex'); const hash = etag(zipBuffer); // use smaller md5 instead of sha256 + const rawHash = hash.replace(/^"|"$/g, ''); zipBuffer.forEach((b) => { if (!(size % bytesPerLine)) { @@ -94,7 +101,8 @@ const writeFile = (relativeFilePath, buffer) => { mimeType, variable, size, - hash + hash, + rawHash }); totalSize += size; diff --git a/interface/src/AppRouting.tsx b/interface/src/AppRouting.tsx index 91c8f0945..aee79140d 100644 --- a/interface/src/AppRouting.tsx +++ b/interface/src/AppRouting.tsx @@ -1,19 +1,13 @@ -import { type FC, Suspense, lazy, memo, useContext, useEffect, useRef } from 'react'; +import { type FC, memo, useContext, useEffect, useRef } from 'react'; import { Navigate, Route, Routes } from 'react-router'; import { toast } from 'react-toastify'; -import { - LoadingSpinner, - RequireAuthenticated, - RequireUnauthenticated -} from 'components'; +import AuthenticatedRouting from 'AuthenticatedRouting'; +import SignIn from 'SignIn'; +import { RequireAuthenticated, RequireUnauthenticated } from 'components'; import { Authentication, AuthenticationContext } from 'contexts/authentication'; import { useI18nContext } from 'i18n/i18n-react'; -// Lazy load route components for better code splitting -const SignIn = lazy(() => import('SignIn')); -const AuthenticatedRouting = lazy(() => import('AuthenticatedRouting')); - interface SecurityRedirectProps { readonly message: string; readonly signOut?: boolean; @@ -45,34 +39,32 @@ const AppRouting: FC = memo(() => { return ( - }> - - } - /> - } - /> - - - - } - /> - - - - } - /> - - + + } + /> + } + /> + + + + } + /> + + + + } + /> + ); }); diff --git a/interface/src/AuthenticatedRouting.tsx b/interface/src/AuthenticatedRouting.tsx index 1be5b0f49..8ace232aa 100644 --- a/interface/src/AuthenticatedRouting.tsx +++ b/interface/src/AuthenticatedRouting.tsx @@ -1,86 +1,77 @@ -import { Suspense, lazy, memo, useContext } from 'react'; +import { memo, useContext } from 'react'; import { Navigate, Route, Routes } from 'react-router'; -import { Layout, LoadingSpinner } from 'components'; +import CustomEntities from 'app/main/CustomEntities'; +import Customizations from 'app/main/Customizations'; +import Dashboard from 'app/main/Dashboard'; +import Devices from 'app/main/Devices'; +import Help from 'app/main/Help'; +import Modules from 'app/main/Modules'; +import Scheduler from 'app/main/Scheduler'; +import Sensors from 'app/main/Sensors'; +import UserProfile from 'app/main/UserProfile'; +import APSettings from 'app/settings/APSettings'; +import ApplicationSettings from 'app/settings/ApplicationSettings'; +import DownloadUpload from 'app/settings/DownloadUpload'; +import MqttSettings from 'app/settings/MqttSettings'; +import NTPSettings from 'app/settings/NTPSettings'; +import Settings from 'app/settings/Settings'; +import Network from 'app/settings/network/Network'; +import Security from 'app/settings/security/Security'; +import APStatus from 'app/status/APStatus'; +import Activity from 'app/status/Activity'; +import HardwareStatus from 'app/status/HardwareStatus'; +import MqttStatus from 'app/status/MqttStatus'; +import NTPStatus from 'app/status/NTPStatus'; +import NetworkStatus from 'app/status/NetworkStatus'; +import Status from 'app/status/Status'; +import SystemLog from 'app/status/SystemLog'; +import Version from 'app/status/Version'; +import { Layout } from 'components'; import { AuthenticatedContext } from 'contexts/authentication'; -// Lazy load all route components for better code splitting -const Dashboard = lazy(() => import('app/main/Dashboard')); -const Devices = lazy(() => import('app/main/Devices')); -const Sensors = lazy(() => import('app/main/Sensors')); -const Help = lazy(() => import('app/main/Help')); -const Customizations = lazy(() => import('app/main/Customizations')); -const Scheduler = lazy(() => import('app/main/Scheduler')); -const CustomEntities = lazy(() => import('app/main/CustomEntities')); -const Modules = lazy(() => import('app/main/Modules')); -const UserProfile = lazy(() => import('app/main/UserProfile')); - -const Status = lazy(() => import('app/status/Status')); -const HardwareStatus = lazy(() => import('app/status/HardwareStatus')); -const Activity = lazy(() => import('app/status/Activity')); -const SystemLog = lazy(() => import('app/status/SystemLog')); -const MqttStatus = lazy(() => import('app/status/MqttStatus')); -const NTPStatus = lazy(() => import('app/status/NTPStatus')); -const APStatus = lazy(() => import('app/status/APStatus')); -const NetworkStatus = lazy(() => import('app/status/NetworkStatus')); -const Version = lazy(() => import('app/status/Version')); - -const Settings = lazy(() => import('app/settings/Settings')); -const ApplicationSettings = lazy(() => import('app/settings/ApplicationSettings')); -const MqttSettings = lazy(() => import('app/settings/MqttSettings')); -const NTPSettings = lazy(() => import('app/settings/NTPSettings')); -const APSettings = lazy(() => import('app/settings/APSettings')); -const DownloadUpload = lazy(() => import('app/settings/DownloadUpload')); -const Network = lazy(() => import('app/settings/network/Network')); -const Security = lazy(() => import('app/settings/security/Security')); - const AuthenticatedRouting = memo(() => { const { me } = useContext(AuthenticatedContext); return ( - }> - - } /> - } /> - } /> - } /> - } /> + + } /> + } /> + } /> + } /> + } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> - {me.admin && ( - <> - } /> - } - /> - } /> - } /> - } /> - } /> - } /> + {me.admin && ( + <> + } /> + } /> + } /> + } /> + } /> + } /> + } /> - } /> - } /> + } /> + } /> - } /> - } /> - } /> - - )} + } /> + } /> + } /> + + )} - } /> - - + } /> + ); }); diff --git a/interface/src/SignIn.tsx b/interface/src/SignIn.tsx index c113fff17..c3955d286 100644 --- a/interface/src/SignIn.tsx +++ b/interface/src/SignIn.tsx @@ -3,6 +3,7 @@ import { toast } from 'react-toastify'; import ForwardIcon from '@mui/icons-material/Forward'; import { Box, Button, Paper, Typography } from '@mui/material'; +import type { Theme } from '@mui/material/styles'; import * as AuthenticationApi from 'components/routing/authentication'; import { useRequest } from 'alova/client'; @@ -17,7 +18,7 @@ import { PROJECT_NAME } from 'env'; import { useI18nContext } from 'i18n/i18n-react'; import type { SignInRequest } from 'types'; import { onEnterCallback, updateValue } from 'utils'; -import { SIGN_IN_REQUEST_VALIDATOR, validate } from 'validators'; +import { SIGN_IN_REQUEST_VALIDATOR, ValidationError, validate } from 'validators'; const SignIn = memo(() => { const authenticationContext = useContext(AuthenticationContext); @@ -36,7 +37,7 @@ const SignIn = memo(() => { { immediate: false } - ).onSuccess((response) => { + ).onSuccess((response: { data: { access_token: string } }) => { if (response.data) { authenticationContext.signIn(response.data.access_token); } @@ -73,12 +74,11 @@ const SignIn = memo(() => { await validate(SIGN_IN_REQUEST_VALIDATOR, signInRequest); await signIn(); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); setProcessing(false); } }, [signInRequest, signIn, LL]); - // Memoize callback to prevent recreation on every render const submitOnEnter = useMemo(() => onEnterCallback(signIn), [signIn]); // get rid of scrollbar @@ -92,13 +92,15 @@ const SignIn = memo(() => { return ( theme.breakpoints.values.sm} + sx={(theme: Theme) => ({ + display: 'flex', + height: '100vh', + margin: 'auto', + padding: 2, + justifyContent: 'center', + flexDirection: 'column', + maxWidth: theme.breakpoints.values.sm + })} > ({ @@ -111,16 +113,18 @@ const SignIn = memo(() => { width: '100%' })} > - + {PROJECT_NAME} { /> )} + {ei.ram > 0 ? '' : showHex(ei.device_id as number, 2)} + {ei.ram > 0 ? '' : showHex(ei.type_id as number, 3)} + {ei.ram > 0 ? '' : ei.offset} - {ei.ram === 1 ? '' : showHex(ei.device_id as number, 2)} - - {ei.ram === 1 ? '' : showHex(ei.type_id as number, 3)} - {ei.ram === 1 ? '' : ei.offset} - - {ei.ram === 1 ? 'RAM' : DeviceValueTypeNames[ei.value_type]} + {ei.ram === 1 + ? 'RAM' + : ei.ram === 2 + ? 'NVS' + : DeviceValueTypeNames[ei.value_type]} {formatValue(ei.value, ei.uom)} @@ -341,9 +343,9 @@ const CustomEntities = () => { return ( {blocker ? : null} - - {LL.ENTITIES_HELP_1()}. - + + {LL.ENTITIES_HELP_1()}. + {renderEntity()} @@ -359,8 +361,8 @@ const CustomEntities = () => { /> )} - - + + {numChanges > 0 && ( ) : ( - - + + {numChanges !== 0 && ( - + - + ©  { return ( <> - - {LL.MODULES_DESCRIPTION()}. - + + {LL.MODULES_DESCRIPTION()}. + { )}
- - + + {numChanges !== 0 && ( + + + + ), + [confirmBackup, handleCloseBackupDialog, LL] ); const handleDownload = useCallback( (type: string) => () => { void sendExportData(type); + setConfirmBackup(false); }, [sendExportData] ); @@ -118,58 +129,57 @@ const DownloadUpload = () => { ); } - const gridButtons = downloadButtons.filter((btn) => btn.isGridButton); - const standaloneButton = downloadButtons.find((btn) => !btn.isGridButton); - return ( + {renderBackupDialog} + {LL.DOWNLOAD(0)} - - {LL.DOWNLOAD_SETTINGS_TEXT()}. - - - - {gridButtons.map((button) => ( - - - - ))} - - - - {LL.DOWNLOAD_SETTINGS_TEXT2()}. - - - {standaloneButton && ( + + + {LL.DOWNLOAD_SETTINGS_TEXT()}: + - )} + + + + + {LL.DOWNLOAD_SETTINGS_TEXT2()}: + + + {LL.UPLOAD()} - - {LL.UPLOAD_TEXT()}. - + + {LL.UPLOAD_TEXT()}: + - + ); }; diff --git a/interface/src/app/settings/MqttSettings.tsx b/interface/src/app/settings/MqttSettings.tsx index f910cadcd..417fa8190 100644 --- a/interface/src/app/settings/MqttSettings.tsx +++ b/interface/src/app/settings/MqttSettings.tsx @@ -31,7 +31,7 @@ import { import { useI18nContext } from 'i18n/i18n-react'; import type { MqttSettingsType } from 'types'; import { numberValue, updateValueDirty, useRest } from 'utils'; -import { createMqttSettingsValidator, validate } from 'validators'; +import { ValidationError, createMqttSettingsValidator, validate } from 'validators'; import { callAction } from '../../api/app'; @@ -94,7 +94,7 @@ const MqttSettings = () => { await validate(createMqttSettingsValidator(data), data); await saveData(); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [data, saveData]); @@ -129,7 +129,7 @@ const MqttSettings = () => { {blocker ? : null} <> - + { await validate(NTP_SETTINGS_VALIDATOR, data); await saveData(); } catch (error) { - setFieldErrors(error as ValidateFieldsError); + setFieldErrors((error as ValidationError).fieldErrors); } }, [data, saveData]); @@ -193,9 +193,9 @@ const NTPSettings = () => { {timeZoneItems}
- + {!data.enabled && !dirtyFlags.length && ( - + @@ -371,7 +399,9 @@ const InstallPartitionDialog = memo( {LL.INSTALL()} {LL.STORED_VERSIONS()} - {LL.INSTALL_VERSION(LL.INSTALL(), version)} + + {LL.INSTALL_VERSION(LL.INSTALL(), version)} + + {showUpgradeDialog && upgradeImportantMessageType > 0 && ( + setShowUpgradeDialog(false)} + > + + +    + {LL.UPGRADE_IMPORTANT_MESSAGES()} + + + {upgradeImportantMessageType === 2 && + LL.UPGRADE_IMPORTANT_MESSAGES_2()} + {upgradeImportantMessageType === 1 && + LL.UPGRADE_IMPORTANT_MESSAGES_1()} + + + {LL.ONLINE_HELP()} + + + + + + + + + )} )} diff --git a/interface/src/components/upload/SingleUpload.tsx b/interface/src/components/upload/SingleUpload.tsx index 5ad6941f2..0363cd445 100644 --- a/interface/src/components/upload/SingleUpload.tsx +++ b/interface/src/components/upload/SingleUpload.tsx @@ -13,11 +13,10 @@ import DragNdrop from './DragNdrop'; import { LinearProgressWithLabel } from './LinearProgressWithLabel'; interface SingleUploadProps { - text: string; doRestart: () => void; } -const SingleUpload = ({ text, doRestart }: SingleUploadProps) => { +const SingleUpload = ({ doRestart }: SingleUploadProps) => { const [md5, setMd5] = useState(); const [file, setFile] = useState(); const { LL } = useI18nContext(); @@ -58,7 +57,7 @@ const SingleUpload = ({ text, doRestart }: SingleUploadProps) => { <> {isUploading ? ( <> - + { ) : ( - + )} {md5 && ( - + {'MD5: ' + md5} )} diff --git a/interface/src/i18n/cz/index.ts b/interface/src/i18n/cz/index.ts index 27cef9a70..fbce09041 100644 --- a/interface/src/i18n/cz/index.ts +++ b/interface/src/i18n/cz/index.ts @@ -186,7 +186,8 @@ const cz: Translation = { BUFFER_SIZE: 'Maximální velikost vyrovnávací paměti', COMPACT: 'Kompaktní', DOWNLOAD_SETTINGS_TEXT: 'Vytvořte zálohu svého nastavení a konfigurace', - DOWNLOAD_SETTINGS_TEXT2: 'Exportovat všechna data', + DOWNLOAD_SETTINGS_TEXT2: 'Exportovat všechny hodnoty', + DOWNLOAD_SYSTEM_BACKUP: 'Systémová záloha', UPLOAD_TEXT: 'Nahrajte nový soubor firmwaru (.bin) nebo záložní soubor (.json)', UPLOAD_DROP_TEXT: 'Přetáhněte soubor sem nebo klikněte pro výběr', ERROR: 'Neočekávaná chyba, zkuste to prosím znovu', @@ -349,15 +350,22 @@ const cz: Translation = { NO_DATA_1: 'Nebyly nalezeny žádné oblíbené entity. Použijte modul', NO_DATA_2: 'pro jejich výběr.', NO_DATA_3: 'Pro zobrazení všech dostupných entit navštivte stránku', + NO_GPIO: 'Nebylo nalezeno žádné volné GPIO', THIS_VERSION: 'Tato verze', PLATFORM: 'Platforma', RELEASE_TYPE: 'Typ sestavení', INTERNET_CONNECTION_REQUIRED: 'Pro automatickou kontrolu a instalaci aktualizací je třeba internetové připojení', SWITCH_RELEASE_TYPE: 'Přepnout na {0} verzi', FIRMWARE_VERSION_INFO: 'Informace o verzi firmwaru', - NO_DATA: 'Žádná data', + NO_DATA: 'žádné údaje', USER_PROFILE: 'Uživatelský profil', - STORED_VERSIONS: 'Uložené verze' + STORED_VERSIONS: 'Uložené verze', + ONLINE_HELP: 'online nápověda', + UPGRADE_IMPORTANT_MESSAGES: 'Aktualizovat důležité zprávy', + UPGRADE_IMPORTANT_MESSAGES_1: 'Tato aktualizace vyžaduje obnovení továrního nastavení. Ujistěte se, že nejprve stáhnete systémovou zálohu před pokračováním a poté nahrajte tento soubor po instalaci nové verze.', + UPGRADE_IMPORTANT_MESSAGES_2: 'Aktualizujete se na novou hlavní verzi. Ujistěte se, že jste přečetli ChangeLog pro jakékoliv závažné změny.', + WARNING_SYSTEM_BACKUP: 'Toto vytvoří zálohu vašich celých systémových konfigurací a nastavení. Všechna hesla budou v zálohovém souboru čitelná. Buďte opatrní při sdílení! Opravdu chcete pokračovat?' + }; export default cz; diff --git a/interface/src/i18n/de/index.ts b/interface/src/i18n/de/index.ts index 53634bde9..3a766efb4 100644 --- a/interface/src/i18n/de/index.ts +++ b/interface/src/i18n/de/index.ts @@ -186,7 +186,8 @@ const de: Translation = { BUFFER_SIZE: 'Max. Puffergröße', COMPACT: 'Kompakte Darstellung', DOWNLOAD_SETTINGS_TEXT: 'Erstellen Sie eine Sicherung Ihrer Konfigurationen und Einstellungen', - DOWNLOAD_SETTINGS_TEXT2: 'Exportiere alle Daten', + DOWNLOAD_SETTINGS_TEXT2: 'Exportiere alle Werte', + DOWNLOAD_SYSTEM_BACKUP: 'Systemsicherung', UPLOAD_TEXT: 'Laden Sie eine neue Firmware-Datei (.bin) oder eine Sicherungsdatei (.json) hoch', UPLOAD_DROP_TEXT: 'Legen Sie eine Firmware-Datei (.bin) ab oder klicken Sie hier', ERROR: 'Unerwarteter Fehler, bitte versuchen Sie es erneut.', @@ -349,6 +350,7 @@ const de: Translation = { NO_DATA_1: 'Keine favorisierten EMS-Entitäten gefunden! Verwenden Sie das Modul', NO_DATA_2: ', um sie zu markieren.', NO_DATA_3: 'Um alle verfügbaren Entitäten anzuzeigen, gehen Sie zu', + NO_GPIO: 'Keine freien GPIO gefunden', THIS_VERSION: 'Diese Version', PLATFORM: 'Plattform', RELEASE_TYPE: 'Release Typ', @@ -357,7 +359,13 @@ const de: Translation = { FIRMWARE_VERSION_INFO: 'Firmware-Versionsinformation', NO_DATA: 'Keine Daten', USER_PROFILE: 'Benutzerprofil', - STORED_VERSIONS: 'Gespeicherte Versionen' + STORED_VERSIONS: 'Gespeicherte Versionen', + ONLINE_HELP: 'Online-Hilfe', + UPGRADE_IMPORTANT_MESSAGES: 'Wichtige Nachrichten aktualisieren', + UPGRADE_IMPORTANT_MESSAGES_1: 'Für diese Aktualisierung ist ein Werksreset erforderlich. Stellen Sie sicher, dass Sie zuerst eine Systemsicherung herunterladen, bevor Sie fortfahren, und laden Sie diese Datei dann nach der Installation der neuen Version hoch.', + UPGRADE_IMPORTANT_MESSAGES_2: 'Sie aktualisieren auf eine neue Hauptversion. Stellen Sie sicher, dass Sie den ChangeLog für alle wichtigen Änderungen gelesen haben.', + WARNING_SYSTEM_BACKUP: 'Dies wird eine Sicherung Ihrer vollständigen Systemkonfiguration und Einstellungen erstellen. Alle Passwörter werden in dieser Sicherungsdatei lesbar sein. Seien Sie vorsichtig beim Teilen! Möchten Sie fortfahren?' + }; export default de; diff --git a/interface/src/i18n/en/index.ts b/interface/src/i18n/en/index.ts index 7196fcd6e..610ed0f00 100644 --- a/interface/src/i18n/en/index.ts +++ b/interface/src/i18n/en/index.ts @@ -186,7 +186,8 @@ const en: Translation = { BUFFER_SIZE: 'Max Buffer Size', COMPACT: 'Compact', DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings', - DOWNLOAD_SETTINGS_TEXT2: 'Export all data', + DOWNLOAD_SETTINGS_TEXT2: 'Export all values', + DOWNLOAD_SYSTEM_BACKUP: 'System Backup', UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)', UPLOAD_DROP_TEXT: 'Drop a firmware .bin file or click here', ERROR: 'Unexpected Error, please try again', @@ -349,6 +350,7 @@ const en: Translation = { NO_DATA_1: 'No favorite EMS entities found yet. Use the', NO_DATA_2: 'module to mark them.', NO_DATA_3: 'To see all available entities go to', + NO_GPIO: 'No available GPIO found', THIS_VERSION: 'This Version', PLATFORM: 'Platform', RELEASE_TYPE: 'Release Type', @@ -357,7 +359,13 @@ const en: Translation = { FIRMWARE_VERSION_INFO: 'Firmware Version Information', NO_DATA: 'No data', USER_PROFILE: 'User Profile', - STORED_VERSIONS: 'Stored Versions' + STORED_VERSIONS: 'Stored Versions', + ONLINE_HELP: 'online help', + UPGRADE_IMPORTANT_MESSAGES: 'Upgrade Important Messages', + UPGRADE_IMPORTANT_MESSAGES_1: 'This upgrade requires a factory reset. Make sure you first download a System Backup before continuing, and then upload this file after the new version is installed.', + UPGRADE_IMPORTANT_MESSAGES_2: 'You are upgrading to a new major version. Make sure you have read the ChangeLog for any breaking changes.', + WARNING_SYSTEM_BACKUP: 'This will create a backup of your full system configuration and settings. All passwords will be readable in the backup file. Be careful with sharing! Do you want to continue?' + }; export default en; diff --git a/interface/src/i18n/fr/index.ts b/interface/src/i18n/fr/index.ts index 13a18327a..f1945d2ab 100644 --- a/interface/src/i18n/fr/index.ts +++ b/interface/src/i18n/fr/index.ts @@ -186,7 +186,8 @@ const fr: Translation = { BUFFER_SIZE: 'Max taille du buffer', COMPACT: 'Compact', DOWNLOAD_SETTINGS_TEXT: 'Créer une sauvegarde de vos paramètres et configurations', - DOWNLOAD_SETTINGS_TEXT2: 'Exporter toutes les données', + DOWNLOAD_SETTINGS_TEXT2: 'Exporter toutes les valeurs', + DOWNLOAD_SYSTEM_BACKUP: 'Sauvegarde système', UPLOAD_TEXT: 'Télécharger un nouveau fichier firmware (.bin) ou une sauvegarde (.json)', UPLOAD_DROP_TEXT: 'Drop a firmware .bin file or click here', ERROR: 'Erreur inattendue, veuillez réessayer', @@ -349,6 +350,7 @@ const fr: Translation = { NO_DATA_1: 'Aucune entité EMS favorite trouvée. Utilisez le', NO_DATA_2: 'module pour les marquer.', NO_DATA_3: 'Pour voir toutes les entités disponibles, aller à', + NO_GPIO: "Aucun GPIO disponible n'a été détecté", THIS_VERSION: 'Cette version', PLATFORM: 'Plateforme', RELEASE_TYPE: 'Type de version', @@ -357,7 +359,13 @@ const fr: Translation = { FIRMWARE_VERSION_INFO: 'Informations sur la version du firmware', NO_DATA: 'Aucune donnée', USER_PROFILE: 'Profil utilisateur', - STORED_VERSIONS: 'Versions stockées' + STORED_VERSIONS: 'Versions stockées', + ONLINE_HELP: 'aide en ligne', + UPGRADE_IMPORTANT_MESSAGES: 'Mettre à jour les messages importants', + UPGRADE_IMPORTANT_MESSAGES_1: 'Cette mise à jour nécessite une réinitialisation de fabrique. Assurez-vous de télécharger une sauvegarde système avant de continuer, et de la charger après l\'installation de la nouvelle version.', + UPGRADE_IMPORTANT_MESSAGES_2: 'Vous mettez à jour vers une nouvelle version majeure. Assurez-vous de lire le ChangeLog pour tout changement important.', + WARNING_SYSTEM_BACKUP: 'Cela créera une sauvegarde de votre configuration et paramètres complets. Tous les mots de passe seront lisibles dans le fichier de sauvegarde. Soyez prudent avec le partage ! Voulez-vous continuer ?' + }; export default fr; diff --git a/interface/src/i18n/it/index.ts b/interface/src/i18n/it/index.ts index 51f29f9fe..df8b4de61 100644 --- a/interface/src/i18n/it/index.ts +++ b/interface/src/i18n/it/index.ts @@ -186,7 +186,8 @@ const it: Translation = { BUFFER_SIZE: 'Max Buffer Size', COMPACT: 'Compatto', DOWNLOAD_SETTINGS_TEXT: 'Create a backup of your configuration and settings', - DOWNLOAD_SETTINGS_TEXT2: 'Esporta tutti i dati', + DOWNLOAD_SETTINGS_TEXT2: 'Esporta tutti i valori', + DOWNLOAD_SYSTEM_BACKUP: 'Backup sistema', UPLOAD_TEXT: 'Upload a new firmware file (.bin) or a backup file (.json)', UPLOAD_DROP_TEXT: 'Drop a firmware .bin file or click here', ERROR: 'Errore Inaspettato, prego tenta ancora', @@ -349,6 +350,7 @@ const it: Translation = { NO_DATA_1: 'Nessuna entità EMS preferita trovata. Usa il', NO_DATA_2: 'modulo per marcarle.', NO_DATA_3: 'Per vedere tutte le entità disponibili vai a', + NO_GPIO: 'Non è stato trovato alcun GPIO disponibile', THIS_VERSION: 'Questa versione', PLATFORM: 'Piattaforma', RELEASE_TYPE: 'Tipo di rilascio', @@ -357,7 +359,13 @@ const it: Translation = { FIRMWARE_VERSION_INFO: 'Informazioni sulla versione del firmware', NO_DATA: 'Nessun dato', USER_PROFILE: 'Profilo utente', - STORED_VERSIONS: 'Versioni memorizzate' + STORED_VERSIONS: 'Versioni memorizzate', + ONLINE_HELP: 'aiuto online', + UPGRADE_IMPORTANT_MESSAGES: 'Aggiorna Messaggi Importanti', + UPGRADE_IMPORTANT_MESSAGES_1: 'Questa aggiornamento richiede un ripristino di fabbrica. Assicurati di prima scaricare un backup del sistema prima di continuare, e poi caricare questo file dopo l\'installazione della nuova versione.', + UPGRADE_IMPORTANT_MESSAGES_2: 'Stai aggiornando a una nuova versione principale. Assicurati di aver letto il ChangeLog per qualsiasi cambiamento importante.', + WARNING_SYSTEM_BACKUP: 'Questo creerà un backup delle tue configurazioni e impostazioni complete. Tutte le password saranno leggibili nel file di backup. Sei sicuro di voler continuare?' + }; export default it; diff --git a/interface/src/i18n/nl/index.ts b/interface/src/i18n/nl/index.ts index 9463088a8..888c033d8 100644 --- a/interface/src/i18n/nl/index.ts +++ b/interface/src/i18n/nl/index.ts @@ -27,7 +27,7 @@ const nl: Translation = { REFRESH: 'Ververs', EXPORT: 'Export', FAVORITES: "Favorieten", - DEVICE_DETAILS: 'Device Gegevens', + DEVICE_DETAILS: 'Apparaat Gegevens', ID_OF: '{0} ID', DEVICE: 'Apparaat', PRODUCT: 'Product', @@ -65,7 +65,7 @@ const nl: Translation = { TEMP_SENSOR: 'Temperatuur sensor', TEMP_SENSORS: 'Temperatuur Sensoren', WRITE_CMD_SENT: 'Schrijf commando gestuurd', - EMS_BUS_WARNING: 'EMS bus niet gevonden. Als deze waarschuwing blijft staan na een paar seconden dan loop de instellingen na en in het bijzonder het apparaat type profiel na.', + EMS_BUS_WARNING: 'EMS bus niet gevonden. Als deze waarschuwing blijft staan na een paar seconden loop dan de instellingen na en in het bijzonder het apparaat type profiel.', EMS_BUS_SCANNING: 'Scannen naar EMS apparaten...', CONNECTED: 'Verbonden', TX_ISSUES: 'Tx bus probleem. Probeer een andere Tx verzendmodus', @@ -75,7 +75,7 @@ const nl: Translation = { EMS_DEVICE: 'EMS Apparaat', SUCCESS: 'SUCCESS', FAIL: 'MISLUKT', - QUALITY: 'QUALITEIT', + QUALITY: 'KWALITEIT', SCAN: 'Scan', STATUS_NAMES: [ 'EMS Telegrammen ontvangen (Rx)', @@ -120,7 +120,7 @@ const nl: Translation = { ENABLE_SHOWER_TIMER: 'Activeer Douche Timer (tijdmeting)', ENABLE_SHOWER_ALERT: 'Activeer Douchemelding', TRIGGER_TIME: 'Trigger tijd', - COLD_SHOT_DURATION: 'Tijd Shot koud water', + COLD_SHOT_DURATION: 'Lengte koud water puls', FORMATTING_OPTIONS: 'Formatteringsopties', BOOLEAN_FORMAT_DASHBOARD: 'Boolean formaat web', BOOLEAN_FORMAT_API: 'Boolean formaat API/MQTT', @@ -143,7 +143,7 @@ const nl: Translation = { CUSTOMIZATIONS_FULL: 'Te veel entiteiten geselecteerd. Sla op in delen aub', CUSTOMIZATIONS_SAVED: 'Custom aanpassingen opgeslagen', CUSTOMIZATIONS_HELP_1: 'Selecteer een apparaat en pas de entiteiten aan door middel van de opties', - CUSTOMIZATIONS_HELP_2: 'Markeer as favoriet', + CUSTOMIZATIONS_HELP_2: 'Markeer als favoriet', CUSTOMIZATIONS_HELP_3: 'Zet schrijfacties uit', CUSTOMIZATIONS_HELP_4: 'Uitsluiten van MQTT en API', CUSTOMIZATIONS_HELP_5: 'verbergen voor apparaten', @@ -186,12 +186,13 @@ const nl: Translation = { BUFFER_SIZE: 'Max buffer grootte', COMPACT: 'Compact', DOWNLOAD_SETTINGS_TEXT: 'Maak een back-up van uw configuratie en instellingen', - DOWNLOAD_SETTINGS_TEXT2: 'Exporteer alle data', + DOWNLOAD_SETTINGS_TEXT2: 'Exporteer alle waarden', + DOWNLOAD_SYSTEM_BACKUP: 'Systeem Backup', UPLOAD_TEXT: 'Upload een nieuw firmwarebestand (.bin) of een back-upbestand (.json)', UPLOAD_DROP_TEXT: 'Sleep en firmware .bin bestand hierheen of klik hier', ERROR: 'Onverwachte fout, probeer opnieuw', TIME_SET: 'Tijd ingesteld', - MANAGE_USERS: 'Beheer Gebruikers', + MANAGE_USERS: 'Gebruikersbeheer', IS_ADMIN: 'is Admin', USER_WARNING: 'U dient tenminste 1 admin gebruiker te configureren', ADD: 'Toevoegen', @@ -200,7 +201,7 @@ const nl: Translation = { GENERATING_TOKEN: 'Token aan het genereren', USER: 'Gebruiker', MODIFY: 'Aanpassen', - SU_TEXT: 'Het su (super user) wachtwoord wordt gebruikt om authorisatie tokens te signeren en ook om admin privileges te activeren in de console.', + SU_TEXT: 'Het su (super user) wachtwoord wordt gebruikt om authorisatie tokens te ondertekenen en ook om admin privileges te activeren in de console.', NOT_ENABLED: 'Niet geactiveerd', ERRORS_OF: '{0} Foutmeldingen', DISCONNECT_REASON: 'Verbinding verbroken vanwege', @@ -349,6 +350,7 @@ const nl: Translation = { NO_DATA_1: 'Er zijn nog geen favoriete EMS-entiteiten gevonden. Gebruik de', NO_DATA_2: 'module om ze te markeren.', NO_DATA_3: 'Om alle beschikbare entiteiten te zien, ga naar', + NO_GPIO: 'Er is geen beschikbare GPIO gevonden', THIS_VERSION: 'Deze Versie', PLATFORM: 'Platform', RELEASE_TYPE: 'Release Typ', @@ -357,7 +359,13 @@ const nl: Translation = { FIRMWARE_VERSION_INFO: 'Informatie over firmwareversie', NO_DATA: 'Geen data', USER_PROFILE: 'Gebruikersprofiel', - STORED_VERSIONS: 'Opgeslagen versies' + STORED_VERSIONS: 'Opgeslagen versies', + ONLINE_HELP: 'online help', + UPGRADE_IMPORTANT_MESSAGES: 'Upgrade Belangrijke Berichten', + UPGRADE_IMPORTANT_MESSAGES_1: 'Deze upgrade vereist een fabrieksinstelling. Zorg ervoor dat u eerst een Systeem Backup download voordat u doorgaat, en upload deze file na de installatie van de nieuwe versie.', + UPGRADE_IMPORTANT_MESSAGES_2: 'U updatet naar een nieuwe grote versie. Zorg ervoor dat u de ChangeLog hebt gelezen voor alle brekende wijzigingen.', + WARNING_SYSTEM_BACKUP: 'Dit zal een back-up van uw volledige systeemconfiguratie en instellingen maken. Alle wachtwoorden zijn leesbaar in het back-upbestand. Wees voorzichtig bij delen! Wilt u doorgaan?' + }; -export default nl; \ No newline at end of file +export default nl; diff --git a/interface/src/i18n/no/index.ts b/interface/src/i18n/no/index.ts index 63365268d..693ef29e8 100644 --- a/interface/src/i18n/no/index.ts +++ b/interface/src/i18n/no/index.ts @@ -186,7 +186,8 @@ const no: Translation = { BUFFER_SIZE: 'Max Buffer Størrelse', COMPACT: 'Komprimere', DOWNLOAD_SETTINGS_TEXT: 'Lag en sikkerhetskopi av dine konfigurasjon og innstillinger', - DOWNLOAD_SETTINGS_TEXT2: 'Eksporter alle data', + DOWNLOAD_SETTINGS_TEXT2: 'Eksporter alle verdier', + DOWNLOAD_SYSTEM_BACKUP: 'System Sikkerhetskopi', UPLOAD_TEXT: 'Last opp en ny firmware fil (.bin) eller en sikkerhetskopi fil (.json)', UPLOAD_DROP_TEXT: 'Dropp en firmware fil (.bin) eller klikk her', ERROR: 'Ukjent feil, prøv igjen', @@ -349,6 +350,7 @@ const no: Translation = { NO_DATA_1: 'Ingen favoritte EMS enheter funnet enda. Bruk', NO_DATA_2: 'modul for å markere dem.', NO_DATA_3: 'For å se alle tilgjengelige enheter, gå til', + NO_GPIO: 'Det ble ikke funnet noen tilgjengelige GPIO-porter', THIS_VERSION: 'Denne versjonen', PLATFORM: 'Plattform', RELEASE_TYPE: 'Utgivelses type', @@ -357,7 +359,13 @@ const no: Translation = { FIRMWARE_VERSION_INFO: 'Informasjon om firmwareversjon', NO_DATA: 'Ingen data', USER_PROFILE: 'Brukerprofil', - STORED_VERSIONS: 'Lagret versjoner' + STORED_VERSIONS: 'Lagret versjoner', + ONLINE_HELP: 'online hjelp', + UPGRADE_IMPORTANT_MESSAGES: 'Oppdater viktige meldinger', + UPGRADE_IMPORTANT_MESSAGES_1: 'Denne oppdateringen krever en fabriksinstilling. Sørg for at du først lastet ned en System Backup før du fortsetter, og last denne filen etter at den nye versjonen er installert.', + UPGRADE_IMPORTANT_MESSAGES_2: 'Du oppdaterer til en ny hovedversjon. Sørg for at du har lest ChangeLog for eventuelle bruddende endringer.', + WARNING_SYSTEM_BACKUP: 'Dette vil lage en sikkerhetskopi av din fullstendige systemkonfigurasjon og innstillinger. Alle passord vil være lesbare i sikkerhetskopien. Vær forsiktig med deling! Vil du fortsette?' + }; export default no; diff --git a/interface/src/i18n/pl/index.ts b/interface/src/i18n/pl/index.ts index 60ee8b58f..c6dd004de 100644 --- a/interface/src/i18n/pl/index.ts +++ b/interface/src/i18n/pl/index.ts @@ -186,7 +186,8 @@ const pl: BaseTranslation = { BUFFER_SIZE: 'Maksymalna pojemność bufora (ilość wpisów)', COMPACT: 'Kompaktowy', DOWNLOAD_SETTINGS_TEXT: 'Utwórz kopię swoich ustawień i konfiguracji', - DOWNLOAD_SETTINGS_TEXT2: 'Eksportuj wszystkie dane', + DOWNLOAD_SETTINGS_TEXT2: 'Eksportuj wszystkie wartości', + DOWNLOAD_SYSTEM_BACKUP: 'Kopia zapasowa systemu', UPLOAD_TEXT: 'Wgraj nowy plik firmware (.bin) lub kopię ustawień (.json)', UPLOAD_DROP_TEXT: 'Upuść plik firmware .bin lub kliknij tutaj', ERROR: 'Nieoczekiwany błąd, spróbuj ponownie!', @@ -349,6 +350,7 @@ const pl: BaseTranslation = { NO_DATA_1: 'Brak ulubionych encji EMS. Użyj', NO_DATA_2: 'moduł do ich oznaczenia.', NO_DATA_3: 'Aby zobaczyć wszystkie dostępne encje przejdź do', + NO_GPIO: 'Nie znaleziono dostępnych pinów GPIO', THIS_VERSION: 'Ta wersja', PLATFORM: 'Platforma', RELEASE_TYPE: 'Typ wydania', @@ -357,7 +359,13 @@ const pl: BaseTranslation = { FIRMWARE_VERSION_INFO: 'Informacje o wersji firmware', NO_DATA: 'Brak danych', USER_PROFILE: 'Profil użytkownika', - STORED_VERSIONS: 'Zapisane wersje' + STORED_VERSIONS: 'Zapisane wersje', + ONLINE_HELP: 'pomoc online', + UPGRADE_IMPORTANT_MESSAGES: 'Aktualizuj ważne wiadomości', + UPGRADE_IMPORTANT_MESSAGES_1: 'Ta aktualizacja wymaga resetu fabrycznego. Upewnij się, że najpierw pobierzesz kopię zapasową systemu przed kontynuowaniem, a następnie przesuń tę plik po zainstalowaniu nowej wersji.', + UPGRADE_IMPORTANT_MESSAGES_2: 'Aktualizujesz się do nowej głównej wersji. Upewnij się, że przeczytałeś ChangeLog dla wszelkich istotnych zmian.', + WARNING_SYSTEM_BACKUP: 'To spowoduje utworzenie kopii zapasowej całej konfiguracji i ustawień systemu. Wszystkie hasła będą widoczne w pliku kopii zapasowej. Bądź ostrożny przy udostępnianiu! Chcesz kontynuować?' + }; export default pl; diff --git a/interface/src/i18n/sk/index.ts b/interface/src/i18n/sk/index.ts index e74175241..5e993e998 100644 --- a/interface/src/i18n/sk/index.ts +++ b/interface/src/i18n/sk/index.ts @@ -4,7 +4,7 @@ const sk: Translation = { LANGUAGE: 'Jazyk', RETRY: 'Opakovať', LOADING: 'Načítanie', - IS_REQUIRED: '{0} je požadovaných', + IS_REQUIRED: '{0} je požadovaná', SIGN_IN: 'Prihlásiť sa', SIGN_OUT: 'Odhlásiť sa', USERNAME: 'Užívateľské meno', @@ -186,7 +186,8 @@ const sk: Translation = { BUFFER_SIZE: 'Buffer-max. veľkosť', COMPACT: 'Kompaktné', DOWNLOAD_SETTINGS_TEXT: 'Vytvorte zálohu svojej konfigurácie a nastavení', - DOWNLOAD_SETTINGS_TEXT2: 'Exportovať všetky dáta', + DOWNLOAD_SETTINGS_TEXT2: 'Exportovať všetky hodnoty', + DOWNLOAD_SYSTEM_BACKUP: 'Systémová záloha', UPLOAD_TEXT: 'Nahrajte nový súbor firmvéru (.bin) alebo súbor zálohy (.json)', UPLOAD_DROP_TEXT: 'Presuňte súbor .bin firmvéru alebo kliknite sem', ERROR: 'Neočakávaná chyba, prosím skúste to znova', @@ -275,11 +276,11 @@ const sk: Translation = { NETWORK_SUBNET: 'Maska podsiete', NETWORK_DNS: 'DNS servery', ADDRESS_OF: '{0} adresa', - ADMINISTRATOR: 'Administrator', + ADMINISTRATOR: 'Administrátor', GUEST: 'Hosť', - NEW: 'Nová', + NEW: 'Novú', NEW_NAME_OF: 'Nový názov {0}', - ENTITY: 'entita', + ENTITY: 'entitu', MIN: 'min', MAX: 'max', BLOCK_NAVIGATE_1: 'Máte neuložené zmeny', @@ -349,6 +350,7 @@ const sk: Translation = { NO_DATA_1: 'Nenašli sa žiadne obľúbené entity EMS. Použite', NO_DATA_2: 'modul na ich označenie.', NO_DATA_3: 'Ak chcete zobraziť všetky dostupné entity, prejdite na', + NO_GPIO: 'Nebol nájdený žiadny dostupný GPIO', THIS_VERSION: 'Táto verzia', PLATFORM: 'Platforma', RELEASE_TYPE: 'Typ vydania', @@ -357,7 +359,13 @@ const sk: Translation = { FIRMWARE_VERSION_INFO: 'Informácie o verzii firmware', NO_DATA: 'Žiadne dáta', USER_PROFILE: 'Profil používateľa', - STORED_VERSIONS: 'Uložené verzie' + STORED_VERSIONS: 'Uložené verzie', + ONLINE_HELP: 'online pomoc', + UPGRADE_IMPORTANT_MESSAGES: 'Aktualizovať dôležité správy', + UPGRADE_IMPORTANT_MESSAGES_1: 'Táto aktualizácia vyžaduje reštart základných nastavení. Uistite sa, že najprv stiahnete systémovú zálohu pred pokračovaním, a potom nahrajte tento súbor po instalácii novej verzie.', + UPGRADE_IMPORTANT_MESSAGES_2: 'Aktualizujete sa na novú hlavnú verziu. Uistite sa, že ste prečítali ChangeLog pre akékoľvek dôležité zmeny.', + WARNING_SYSTEM_BACKUP: 'Toto vytvorí zálohu všetkých vašich celých systémových konfigurácií a nastavení. Všetky hesla budú čitateľné v zálohovom súbore. Buďte opatrní pri zdieľaní! Chcete pokračovať?' + }; export default sk; diff --git a/interface/src/i18n/sv/index.ts b/interface/src/i18n/sv/index.ts index 7ff150a83..032eeb026 100644 --- a/interface/src/i18n/sv/index.ts +++ b/interface/src/i18n/sv/index.ts @@ -186,7 +186,8 @@ const sv: Translation = { BUFFER_SIZE: 'Max bufferstorlek', COMPACT: 'Komprimerad', DOWNLOAD_SETTINGS_TEXT: 'Skapa en säkerhetskopia av din konfiguration och inställningar', - DOWNLOAD_SETTINGS_TEXT2: 'Exportera alla data', + DOWNLOAD_SETTINGS_TEXT2: 'Exportera alla värden', + DOWNLOAD_SYSTEM_BACKUP: 'System säkerhetskopia', UPLOAD_TEXT: 'Ladda upp en ny firmwarefil (.bin) eller en säkerhetskopiafil (.json)', UPLOAD_DROP_TEXT: 'Droppa en firmware .bin fil eller klicka här', ERROR: 'Okänt fel, var god försök igen', @@ -349,6 +350,7 @@ const sv: Translation = { NO_DATA_1: 'Inga favorit EMS enheter hittade än. Använd', NO_DATA_2: 'modul för att markera dem.', NO_DATA_3: 'För att se alla tillgängliga enheter, gå till', + NO_GPIO: 'Inga tillgängliga GPIO-portar hittades', THIS_VERSION: 'Denna version', PLATFORM: 'Plattform', RELEASE_TYPE: 'Utgivelsestyp', @@ -357,7 +359,13 @@ const sv: Translation = { FIRMWARE_VERSION_INFO: 'Information om firmwareversion', NO_DATA: 'Ingen data', USER_PROFILE: 'Användarprofil', - STORED_VERSIONS: 'Lagrad versioner' + STORED_VERSIONS: 'Lagrad versioner', + ONLINE_HELP: 'online hjälp', + UPGRADE_IMPORTANT_MESSAGES: 'Uppdatera viktiga meddelanden', + UPGRADE_IMPORTANT_MESSAGES_1: 'Denna uppdatering kräver en fabriksåterställning. Se till att du först laddar ned en System Backup innan du fortsätter, och ladda upp denna fil efter att den nya versionen är installerad.', + UPGRADE_IMPORTANT_MESSAGES_2: 'Du uppdaterar till en ny huvudversion. Se till att du har läst ChangeLog för eventuella brkande ändringar.', + WARNING_SYSTEM_BACKUP: 'Detta kommer att skapa en säkerhetskopia av din fullständiga systemkonfiguration och inställningar. Alla lösenord kommer att vara läsbara i säkerhetskopien. Var försiktig med att dela! Vill du fortsätta?' + }; export default sv; diff --git a/interface/src/i18n/tr/index.ts b/interface/src/i18n/tr/index.ts index f280a7183..b6caa3238 100644 --- a/interface/src/i18n/tr/index.ts +++ b/interface/src/i18n/tr/index.ts @@ -186,7 +186,8 @@ const tr: Translation = { BUFFER_SIZE: 'En fazla bellek boyutu', COMPACT: 'Sıkışık', DOWNLOAD_SETTINGS_TEXT: 'Yapılandırma ve ayarlarınızın yedekleme yapın', - DOWNLOAD_SETTINGS_TEXT2: 'Tüm verileri dışarı al', + DOWNLOAD_SETTINGS_TEXT2: 'Tüm değerleri dışarı al', + DOWNLOAD_SYSTEM_BACKUP: 'Sistem yedekleme', UPLOAD_TEXT: 'Yeni bir firmware dosyası (.bin) veya yedek dosyası (.json) yükle', UPLOAD_DROP_TEXT: 'Bir firmware .bin dosyası veya buraya tıklayın', ERROR: 'Beklenemedik hata, lütfen tekrar deneyin.', @@ -349,6 +350,7 @@ const tr: Translation = { NO_DATA_1: 'Henüz bir favori EMS varlığı bulunamadı. Kullanın', NO_DATA_2: 'modülünü kullanın.', NO_DATA_3: 'Tüm kullanılabilir varlıkları görmek için git', + NO_GPIO: 'Kullanılabilir GPIO bulunamadı', THIS_VERSION: 'Bu Sürüm', PLATFORM: 'Platforma', RELEASE_TYPE: 'Sürüm Tipi', @@ -357,7 +359,13 @@ const tr: Translation = { FIRMWARE_VERSION_INFO: 'Firmware Sürüm Bilgisi', NO_DATA: 'Hiçbir veri yok', USER_PROFILE: 'Kullanıcı Profili', - STORED_VERSIONS: 'Kaydedilmiş Sürümler' + STORED_VERSIONS: 'Kaydedilmiş Sürümler', + ONLINE_HELP: 'online yardım', + UPGRADE_IMPORTANT_MESSAGES: 'Önemli Mesajları Güncelle', + UPGRADE_IMPORTANT_MESSAGES_1: 'Bu güncelleme továrnı ayarlarını gerektirir. Yapılandırmanızı ve ayarlarınızı önce yedekleyin ve ardından yeni sürüm yüklendikten sonra yükleyin.', + UPGRADE_IMPORTANT_MESSAGES_2: 'Yeni bir büyük sürüme yükselteceksiniz. Değişiklikleri ChangeLogı okuduğunuzdan emin olun.', + WARNING_SYSTEM_BACKUP: 'Bu, sistem yapılandırmanızı ve ayarlarınızın bir yedeklemesi oluşturacaktır. Tüm şifreler yedekleme dosyasında okunabilir olacaktır. Paylaşırken dikkatli olun! Devam etmek istediğinize emin misiniz?' + }; export default tr; diff --git a/interface/src/utils/file.ts b/interface/src/utils/file.ts index 547a30cad..3fa077c77 100644 --- a/interface/src/utils/file.ts +++ b/interface/src/utils/file.ts @@ -23,6 +23,8 @@ export const saveFile = ( }, 100); } catch (error) { console.error('Failed to save file:', error); - throw new Error(`Unable to save file: ${filename}${extension}`); + throw new Error(`Unable to save file: ${filename}${extension}`, { + cause: error + }); } }; diff --git a/interface/src/utils/useInterval.ts b/interface/src/utils/useInterval.ts index 82cbaaf1e..4ce7928da 100644 --- a/interface/src/utils/useInterval.ts +++ b/interface/src/utils/useInterval.ts @@ -1,6 +1,6 @@ import { useEffect, useRef } from 'react'; -const DEFAULT_DELAY = 3000; +const DEFAULT_DELAY = 5000; /** * Custom hook for setting up an interval with proper cleanup diff --git a/interface/src/validators/shared.ts b/interface/src/validators/shared.ts index d1132d184..a0da4beb3 100644 --- a/interface/src/validators/shared.ts +++ b/interface/src/validators/shared.ts @@ -1,6 +1,20 @@ -import type { InternalRuleItem, ValidateOption } from 'async-validator'; +import type { + InternalRuleItem, + ValidateFieldsError, + ValidateOption +} from 'async-validator'; import type Schema from 'async-validator'; +export class ValidationError extends Error { + readonly fieldErrors: ValidateFieldsError; + + constructor(fieldErrors: ValidateFieldsError) { + super('Validation failed'); + this.name = 'ValidationError'; + this.fieldErrors = fieldErrors; + } +} + export const validate = ( validator: Schema, source: Partial, @@ -8,7 +22,7 @@ export const validate = ( ): Promise => new Promise((resolve, reject) => { void validator.validate(source, options ?? {}, (errors, fieldErrors) => { - errors ? reject(fieldErrors as Error) : resolve(source as T); + errors ? reject(new ValidationError(fieldErrors)) : resolve(source as T); }); }); diff --git a/interface/vite.config.ts b/interface/vite.config.ts index 2369cc845..ff34966b7 100644 --- a/interface/vite.config.ts +++ b/interface/vite.config.ts @@ -2,9 +2,8 @@ import preact from '@preact/preset-vite'; import fs from 'fs'; import path from 'path'; import { visualizer } from 'rollup-plugin-visualizer'; -import { Plugin, defineConfig } from 'vite'; +import { Plugin, PluginOption, defineConfig } from 'vite'; import viteImagemin from 'vite-plugin-imagemin'; -import viteTsconfigPaths from 'vite-tsconfig-paths'; import zlib from 'zlib'; // @ts-expect-error - mock server doesn't have type declarations @@ -16,7 +15,7 @@ const REPEAT_CHAR = '='; const REPEAT_COUNT = 50; const DEFAULT_OUT_DIR = 'dist'; const ES_TARGET = 'es2020'; -const CHUNK_SIZE_WARNING_LIMIT = 512; +const CHUNK_SIZE_WARNING_LIMIT = 1024; const ASSETS_INLINE_LIMIT = 4096; // Common resolve aliases @@ -99,16 +98,31 @@ const createPreactPlugin = (devToolsEnabled: boolean) => prefreshEnabled: false }); +// Patch preact/compat to export stub React 19 APIs (use, useOptimistic) so that +// react-router v7 doesn't trigger IMPORT_IS_UNDEFINED warnings from Rolldown. +const preactCompatPatchPlugin = (): Plugin => ({ + name: 'preact-compat-react19-patch', + transform(code, id) { + if (id.includes('preact') && id.includes('compat.module.js')) { + return { + code: + code + + '\nexport var use = undefined;\nexport var useOptimistic = undefined;\n', + map: null + }; + } + return undefined; + } +}); + // Common base plugins const createBasePlugins = ( devToolsEnabled: boolean, includeBundleReporter = true -) => { - const plugins = [ +): PluginOption[] => { + const plugins: PluginOption[] = [ createPreactPlugin(devToolsEnabled), - viteTsconfigPaths({ - projects: ['./tsconfig.json'] - }) + preactCompatPatchPlugin() ]; if (includeBundleReporter) { plugins.push(bundleSizeReporter()); @@ -116,40 +130,9 @@ const createBasePlugins = ( return plugins; }; -// Manual chunk splitting strategy -const createManualChunks = (detailed = false) => { - return (id: string): string | undefined => { - if (id.includes('node_modules')) { - if (id.includes('preact')) return '@preact'; - if (detailed) { - if (id.includes('react-router')) return '@react-router'; - if (id.includes('@mui/material')) return '@mui-material'; - if (id.includes('@mui/icons-material')) return '@mui-icons'; - if (id.includes('alova')) return '@alova'; - if (id.includes('typesafe-i18n')) return '@i18n'; - if (id.includes('react-toastify')) return '@toastify'; - if (id.includes('@table-library')) return '@table-library'; - if (id.includes('uuid')) return '@uuid'; - if (id.includes('axios') || id.includes('fetch')) return '@http'; - if (id.includes('lodash') || id.includes('ramda')) return '@utils'; - } - return 'vendor'; - } - if (detailed) { - // Group circularly dependent modules together to avoid circular chunk warnings - // components, app, and utils are tightly coupled, so combine them - if ( - id.includes('components/') || - id.includes('app/') || - id.includes('utils/') - ) { - return 'app'; - } - // Keep api separate as it's typically more independent - if (id.includes('api/')) return 'api'; - } - return undefined; - }; +const manualChunks = (id: string): string | undefined => { + if (id.includes('node_modules')) return 'vendor'; + return undefined; }; // Common build base configuration @@ -234,7 +217,8 @@ export default defineConfig( plugins: [...createBasePlugins(true, true), mockServer()], resolve: { alias: RESOLVE_ALIASES, - extensions: RESOLVE_EXTENSIONS + extensions: RESOLVE_EXTENSIONS, + tsconfigPaths: true }, server: { open: true, @@ -263,7 +247,8 @@ export default defineConfig( plugins: createBasePlugins(false, true), resolve: { alias: RESOLVE_ALIASES, - extensions: RESOLVE_EXTENSIONS + extensions: RESOLVE_EXTENSIONS, + tsconfigPaths: true }, build: { ...createBaseBuildConfig(), @@ -274,7 +259,7 @@ export default defineConfig( moduleSideEffects: false }, output: { - manualChunks: createManualChunks(false) + manualChunks } } } @@ -297,7 +282,8 @@ export default defineConfig( ], resolve: { alias: RESOLVE_ALIASES, - extensions: RESOLVE_EXTENSIONS + extensions: RESOLVE_EXTENSIONS, + tsconfigPaths: true }, build: { ...createBaseBuildConfig(), @@ -306,15 +292,14 @@ export default defineConfig( rollupOptions: { treeshake: { moduleSideEffects: false, - propertyReadSideEffects: false, - tryCatchDeoptimization: false, + propertyReadSideEffects: false as const, unknownGlobalSideEffects: false }, output: { chunkFileNames: 'assets/[name]-[hash].js', entryFileNames: 'assets/[name]-[hash].js', assetFileNames: 'assets/[name]-[hash].[ext]', - manualChunks: createManualChunks(true), + manualChunks, sourcemap: false } } diff --git a/lib/OneWire/OneWire.h b/lib/OneWire/OneWire.h index 25618908a..7c4830afd 100644 --- a/lib/OneWire/OneWire.h +++ b/lib/OneWire/OneWire.h @@ -148,9 +148,7 @@ #elif defined(ARDUINO_ARCH_ESP32) #include #include -#if ESP_IDF_VERSION_MAJOR >= 5 #include "soc/gpio_periph.h" -#endif // ESP_IDF_VERSION_MAJOR >= 5 #define PIN_TO_BASEREG(pin) (0) #define PIN_TO_BITMASK(pin) (pin) #define IO_REG_TYPE uint32_t diff --git a/lib/esp32-psram/src/esp32-psram.h b/lib/esp32-psram/src/esp32-psram.h index a69d9f4cd..b7b6c436d 100644 --- a/lib/esp32-psram/src/esp32-psram.h +++ b/lib/esp32-psram/src/esp32-psram.h @@ -12,7 +12,9 @@ // Include all library components #include "esp32-psram/AllocatorPSRAM.h" // PSRAM-backed vector #include "esp32-psram/VectorPSRAM.h" // PSRAM-backed vector -#include "esp32-psram/VectorHIMEM.h" // HIMEM-backed vector +#if CONFIG_IDF_TARGET_ESP32 +#include "esp32-psram/VectorHIMEM.h" // HIMEM-backed vector (ESP32 only) +#endif // #include "esp32-psram/InMemoryFile.h" // File interface using vectors // #include "esp32-psram/PSRAM.h" // PSRAM file system // #include "esp32-psram/HIMEM.h" // HIMEM file system diff --git a/lib/esp32-psram/src/esp32-psram/HimemBlock.h b/lib/esp32-psram/src/esp32-psram/HimemBlock.h index c6eb7d68a..f12b28b97 100644 --- a/lib/esp32-psram/src/esp32-psram/HimemBlock.h +++ b/lib/esp32-psram/src/esp32-psram/HimemBlock.h @@ -1,5 +1,8 @@ #pragma once +// HIMEM is only available on original ESP32 +#if CONFIG_IDF_TARGET_ESP32 + #include #include #include @@ -360,3 +363,5 @@ class HimemBlock { }; } // namespace esp32_psram + +#endif // CONFIG_IDF_TARGET_ESP32 diff --git a/lib/esp32-psram/src/esp32-psram/RingBufferStream.h b/lib/esp32-psram/src/esp32-psram/RingBufferStream.h index b32046789..b2062c562 100644 --- a/lib/esp32-psram/src/esp32-psram/RingBufferStream.h +++ b/lib/esp32-psram/src/esp32-psram/RingBufferStream.h @@ -238,7 +238,9 @@ using RingBufferStreamPSRAM = RingBufferStream>; /** * @brief Type alias for a RingBufferStream that uses HIMEM-backed vector storage */ +#if CONFIG_IDF_TARGET_ESP32 using RingBufferStreamHIMEM = RingBufferStream>; +#endif /** * @brief Type alias for a RingBufferStream that uses std::vector storage diff --git a/lib/esp32-psram/src/esp32-psram/TypedRingBuffer.h b/lib/esp32-psram/src/esp32-psram/TypedRingBuffer.h index 84ec9ab21..44f5344e0 100644 --- a/lib/esp32-psram/src/esp32-psram/TypedRingBuffer.h +++ b/lib/esp32-psram/src/esp32-psram/TypedRingBuffer.h @@ -209,8 +209,10 @@ using TypedRingBufferRAM = TypedRingBuffer>; /** * @brief Type alias for a typed ring buffer that uses HIMEM-backed vector storage */ +#if CONFIG_IDF_TARGET_ESP32 template using TypedRingBufferHIMEM = TypedRingBuffer>; +#endif /** * @brief Type alias for a typed ring buffer that uses PSRAM-backed vector storage diff --git a/lib/esp32-psram/src/esp32-psram/VectorHIMEM.h b/lib/esp32-psram/src/esp32-psram/VectorHIMEM.h index ed00d27d4..e3951a087 100644 --- a/lib/esp32-psram/src/esp32-psram/VectorHIMEM.h +++ b/lib/esp32-psram/src/esp32-psram/VectorHIMEM.h @@ -1,5 +1,8 @@ #pragma once +// HIMEM is only available on original ESP32 +#if CONFIG_IDF_TARGET_ESP32 + #include "HimemBlock.h" namespace esp32_psram { @@ -526,4 +529,6 @@ void swap(VectorHIMEM& lhs, VectorHIMEM& rhs) noexcept { lhs.swap(rhs); } -} // namespace esp32_psram \ No newline at end of file +} // namespace esp32_psram + +#endif // CONFIG_IDF_TARGET_ESP32 \ No newline at end of file diff --git a/lib/semver/LICENSE b/lib/semver/LICENSE deleted file mode 100644 index 53234651b..000000000 --- a/lib/semver/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Marko Živanović - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/lib/semver/README.md b/lib/semver/README.md deleted file mode 100644 index 82c86d7d3..000000000 --- a/lib/semver/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# About - -This project is MIT-licensed, C++14 implementation of [semantic versioning](http://semver.org) parser and comparator with support for modifying parsed version strings. Semantic versioning 2.0.0 specification is supported out-of-the-box and the code should be flexible-enough to support future revisions or other similar versioning schemes. - -Copyright (c) 2015 Marko Zivanovic - -Based on https://github.com/zmarko/semver diff --git a/lib/semver/Semver200_comparator.cpp b/lib/semver/Semver200_comparator.cpp deleted file mode 100644 index 1430bd14b..000000000 --- a/lib/semver/Semver200_comparator.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2015 Marko Zivanovic - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include -#include -#include -#include "semver200.h" - -using namespace std; - -namespace version { - -namespace { - -// Compare normal version identifiers. -int compare_normal(const Version_data & l, const Version_data & r) { - if (l.major > r.major) - return 1; - if (l.major < r.major) - return -1; - if (l.minor > r.minor) - return 1; - if (l.minor < r.minor) - return -1; - if (l.patch > r.patch) - return 1; - if (l.patch < r.patch) - return -1; - return 0; -} - -// Compare alphanumeric prerelease identifiers. -inline int cmp_alnum_prerel_ids(const string & l, const string & r) { - auto cmp = l.compare(r); - if (cmp == 0) { - return cmp; - } else { - return cmp > 0 ? 1 : -1; - } -} - -// Compare numeric prerelease identifiers. -inline int cmp_num_prerel_ids(const string & l, const string & r) { - long long li = stoll(l); - long long ri = stoll(r); - if (li == ri) - return 0; - return li > ri ? 1 : -1; -} - -using Prerel_type_pair = pair; -using Prerel_id_comparator = function; -const map comparators = {{{Id_type::alnum, Id_type::alnum}, cmp_alnum_prerel_ids}, - {{Id_type::alnum, Id_type::num}, [](const string &, const string &) { return 1; }}, - {{Id_type::num, Id_type::alnum}, [](const string &, const string &) { return -1; }}, - {{Id_type::num, Id_type::num}, cmp_num_prerel_ids}}; - -// Compare prerelease identifiers based on their types. -inline int compare_prerel_identifiers(const Prerelease_identifier & l, const Prerelease_identifier & r) { - auto cmp = comparators.at({l.second, r.second}); - return cmp(l.first, r.first); -} - -inline int cmp_rel_prerel(const Prerelease_identifiers & l, const Prerelease_identifiers & r) { - if (l.empty() && !r.empty()) - return 1; - if (r.empty() && !l.empty()) - return -1; - return 0; -} -} // namespace - -int Semver200_comparator::compare(const Version_data & l, const Version_data & r) const { - // Compare normal version components. - int cmp = compare_normal(l, r); - if (cmp != 0) - return cmp; - - // Compare if one version is release and the other prerelease - release is always higher. - cmp = cmp_rel_prerel(l.prerelease_ids, r.prerelease_ids); - if (cmp != 0) - return cmp; - - // Compare prerelease by looking at each identifier: numeric ones are compared as numbers, - // alphanum as ASCII strings. - auto shorter = min(l.prerelease_ids.size(), r.prerelease_ids.size()); - for (size_t i = 0; i < shorter; i++) { - cmp = compare_prerel_identifiers(l.prerelease_ids[i], r.prerelease_ids[i]); - if (cmp != 0) - return cmp; - } - - // Prerelease identifiers are the same, to the length of the shorter version string; - // if they are the same length, then versions are equal, otherwise, longer one wins. - if (l.prerelease_ids.size() == r.prerelease_ids.size()) - return 0; - return l.prerelease_ids.size() > r.prerelease_ids.size() ? 1 : -1; -} - -} // namespace version diff --git a/lib/semver/Semver200_parser.cpp b/lib/semver/Semver200_parser.cpp deleted file mode 100644 index e5956be0e..000000000 --- a/lib/semver/Semver200_parser.cpp +++ /dev/null @@ -1,187 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2015 Marko Zivanovic - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include -#include -#include "semver200.h" - -using namespace std; - -namespace version { - -namespace { -enum class Parser_state { major, minor, patch, prerelease, build }; - -using Validator = function; -using State_transition_hook = function; -/// State transition is described by a character that triggers it, a state to transition to and -/// optional hook to be invoked on transition. -using Transition = tuple; -using Transitions = vector; -using State = tuple; -using State_machine = std::map; - -// Ranges of characters allowed in prerelease and build identifiers. -const vector> allowed_prerel_id_chars = {{'0', '9'}, {'A', 'Z'}, {'a', 'z'}, {'-', '-'}}; - -inline Transition mkx(const char c, Parser_state p, State_transition_hook pth) { - return make_tuple(c, p, pth); -} - -inline void Parse_error(const std::string & s) { - // EMSESP::logger().err("parse error: %s", s.c_str()); -} - -/// Advance parser state machine by a single step. -/** - Perform single step of parser state machine: if character matches one from transition tables - - trigger transition to next state; otherwise, validate if current token is in legal state - (throw Parse_error if not) and then add character to current token; State transition includes - preparing various vars for next state and invoking state transition hook (if specified) which is - where whole tokens are validated. - */ -inline void process_char(const char c, Parser_state & cstate, Parser_state & pstate, const Transitions & transitions, string & target, Validator validate) { - for (const auto & transition : transitions) { - if (c == get<0>(transition)) { - if (get<2>(transition)) - get<2>(transition)(target); - pstate = cstate; - cstate = get<1>(transition); - return; - } - } - validate(target, c); - target.push_back(c); -} - -/// Validate normal (major, minor, patch) version components. -inline void normal_version_validator(const string & tgt, const char c) { - if (c < '0' || c > '9') - Parse_error("invalid character encountered: " + string(1, c)); - if (tgt.compare(0, 1, "0") == 0) - Parse_error("leading 0 not allowed"); -} - -/// Validate that prerelease and build version identifiers are comprised of allowed chars only. -inline void prerelease_version_validator(const string &, const char c) { - bool res = false; - for (const auto & r : allowed_prerel_id_chars) { - res |= (c >= r.first && c <= r.second); - } - if (!res) - Parse_error("invalid character encountered: " + string(1, c)); -} - -inline bool is_identifier_numeric(const string & id) { - return id.find_first_not_of("0123456789") == string::npos; -} - -inline bool check_for_leading_0(const string & str) { - return str.length() > 1 && str[0] == '0'; -} - -/// Validate every individual prerelease identifier, determine it's type and add it to collection. -void prerelease_hook_impl(string & id, Prerelease_identifiers & prerelease) { - if (id.empty()) - Parse_error("version identifier cannot be empty"); - Id_type t = Id_type::alnum; - if (is_identifier_numeric(id)) { - t = Id_type::num; - if (check_for_leading_0(id)) { - Parse_error("numeric identifiers cannot have leading 0"); - } - } - prerelease.push_back(Prerelease_identifier(id, t)); - id.clear(); -} - -/// Validate every individual build identifier and add it to collection. -void build_hook_impl(string & id, Parser_state & pstate, Build_identifiers & build, std::string & prerelease_id, Prerelease_identifiers & prerelease) { - // process last token left from parsing prerelease data - if (pstate == Parser_state::prerelease) - prerelease_hook_impl(prerelease_id, prerelease); - if (id.empty()) - Parse_error("version identifier cannot be empty"); - build.push_back(id); - id.clear(); -} - -} // namespace - -/// Parse semver 2.0.0-compatible string to Version_data structure. -/** - Version text parser is implemented as a state machine. In each step one successive character from version - string is consumed and is either added to current token or triggers state transition. Hooks can be - injected into state transitions for validation/customization purposes. - */ -Version_data Semver200_parser::parse(const string & s) const { - string major; - string minor; - string patch; - string prerelease_id; - string build_id; - Prerelease_identifiers prerelease; - Build_identifiers build; - Parser_state cstate{Parser_state::major}; - Parser_state pstate; - - auto prerelease_hook = [&](string & id) { prerelease_hook_impl(id, prerelease); }; - - auto build_hook = [&](string & id) { build_hook_impl(id, pstate, build, prerelease_id, prerelease); }; - - // State transition tables - auto major_trans = {mkx('.', Parser_state::minor, {})}; - auto minor_trans = {mkx('.', Parser_state::patch, {})}; - auto patch_trans = {mkx('-', Parser_state::prerelease, {}), mkx('+', Parser_state::build, {})}; - auto prerelease_trans = {// When identifier separator (.) is found, stay in the same state but invoke hook - // in order to process each individual identifier separately. - mkx('.', Parser_state::prerelease, prerelease_hook), - mkx('+', Parser_state::build, {})}; - auto build_trans = {// Same stay-in-the-same-state-but-invoke-hook trick from above. - mkx('.', Parser_state::build, build_hook)}; - - State_machine state_machine = {{Parser_state::major, State{major_trans, major, normal_version_validator}}, - {Parser_state::minor, State{minor_trans, minor, normal_version_validator}}, - {Parser_state::patch, State{patch_trans, patch, normal_version_validator}}, - {Parser_state::prerelease, State{prerelease_trans, prerelease_id, prerelease_version_validator}}, - {Parser_state::build, State{build_trans, build_id, prerelease_version_validator}}}; - - // Main loop. - for (const auto & c : s) { - auto state = state_machine.at(cstate); - process_char(c, cstate, pstate, get<0>(state), get<1>(state), get<2>(state)); - } - - // Trigger appropriate hooks in order to process last token, because no state transition was - // triggered for it. - if (cstate == Parser_state::prerelease) { - prerelease_hook(prerelease_id); - } else if (cstate == Parser_state::build) { - build_hook(build_id); - } - - return Version_data{stoi(major), stoi(minor), stoi(patch), prerelease, build}; -} - -} // namespace version diff --git a/lib/semver/semver200.h b/lib/semver/semver200.h deleted file mode 100644 index 5c19f07ff..000000000 --- a/lib/semver/semver200.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2015 Marko Zivanovic - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#pragma once - -#include "version.h" - -namespace version { - -/// Parse string into Version_data structure according to semantic versioning 2.0.0 rules. -struct Semver200_parser { - Version_data parse(const std::string &) const; -}; - -/// Compare Version_data to another using semantic versioning 2.0.0 rules. -struct Semver200_comparator { - int compare(const Version_data &, const Version_data &) const; -}; - -/// Concrete version class that binds all semver 2.0.0 functionality together. -class Semver200_version : public Basic_version { - public: - Semver200_version() - : Basic_version{Semver200_parser(), Semver200_comparator()} { - } - - Semver200_version(const std::string & v) - : Basic_version{v, Semver200_parser(), Semver200_comparator()} { - } -}; - -} // namespace version \ No newline at end of file diff --git a/lib/semver/version.h b/lib/semver/version.h deleted file mode 100644 index 517d6f435..000000000 --- a/lib/semver/version.h +++ /dev/null @@ -1,149 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2015 Marko Zivanovic - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#pragma once - -#include -#include - -namespace version { - -/// Type of prerelease identifier: alphanumeric or numeric. -/** - Type of identifier affects comparison: alphanumeric identifiers are compared as ASCII strings, while - numeric identifiers are compared as numbers. - */ -enum class Id_type { - alnum, ///< Identifier is alphanumerical - num ///< Identifier is numeric -}; - -/// Container for prerelease identifier value and it's type. -/** - Prerelease version string consist of an optional series of dot-separated identifiers. - These identifiers can be either numerical or alphanumerical. - This structure describes one such identifier. - */ -using Prerelease_identifier = std::pair; - -/// Container for all prerelease identifiers for a given version string. -using Prerelease_identifiers = std::vector; - -/// Build identifier is arbitrary string with no special meaning with regards to version precedence. -using Build_identifier = std::string; - -/// Container for all build identifiers of a given version string. -using Build_identifiers = std::vector; - -/// Description of version broken into parts, as per semantic versioning specification. -struct Version_data { - Version_data(const int M, const int m, const int p, const Prerelease_identifiers & pr, const Build_identifiers & b) - : major{M} - , minor{m} - , patch{p} - , prerelease_ids{pr} - , build_ids{b} { - } - - int major; ///< Major version, change only on incompatible API modifications. - int minor; ///< Minor version, change on backwards-compatible API modifications. - int patch; ///< Patch version, change only on bugfixes. - - /// Optional series of prerelease identifiers. - Prerelease_identifiers prerelease_ids; - - /// Optional series of build identifiers. - Build_identifiers build_ids; -}; - -// Forward declaration required for operators' template declarations. -template -class Basic_version; - -/// Test if left-hand version operand is of lower precedence than the right-hand version. -template -bool operator<(const Basic_version &, const Basic_version &); - -/// Test if left-hand version operand if of equal precedence as the right-hand version. -template -bool operator==(const Basic_version &, const Basic_version &); - -/// Test if left-hand version and right-hand version are of different precedence. -template -bool operator!=(const Basic_version &, const Basic_version &); - -/// Test if left-hand version operand is of higher precedence than the right-hand version. -template -bool operator>(const Basic_version &, const Basic_version &); - -/// Test if left-hand version operand is of higher or equal precedence as the right-hand version. -template -bool operator>=(const Basic_version &, const Basic_version &); - -/// Test if left-hand version operand is of lower or equal precedence as the right-hand version. -template -bool operator<=(const Basic_version &, const Basic_version &); - -/// Base class for various version parsing, precedence ordering and data manipulation schemes. -/** - Basic_version class describes general version object without prescribing parsing, - validation, comparison and modification rules. These rules are implemented by supplied Parser, Comparator - and Modifier objects. - */ -template -class Basic_version { - public: - /// Construct Basic_version object using Parser object to parse default ("0.0.0") version string, Comparator for comparison and Modifier for modification. - Basic_version(Parser, Comparator); - - /// Construct Basic_version object using Parser to parse supplied version string, Comparator for comparison and Modifier for modification. - Basic_version(const std::string &, Parser, Comparator); - - /// Construct Basic_version object using supplied Version_data, Parser, Comparator and Modifier objects. - Basic_version(const Version_data &, Parser, Comparator); - - /// Construct Basic_version by copying data from another one. - Basic_version(const Basic_version &); - - /// Copy version data from another Basic_version to this one. - Basic_version & operator=(const Basic_version &); - - int major() const; ///< Get major version. - int minor() const; ///< Get minor version. - int patch() const; ///< Get patch version. - const std::string prerelease() const; ///< Get prerelease version string. - const std::string build() const; ///< Get build version string. - - friend bool operator< <>(const Basic_version &, const Basic_version &); - friend bool operator==<>(const Basic_version &, const Basic_version &); - - private: - Parser parser_; - Comparator comparator_; - Version_data ver_; -}; - -} // namespace version - -#include "version.inl" diff --git a/lib/semver/version.inl b/lib/semver/version.inl deleted file mode 100644 index 8de18af61..000000000 --- a/lib/semver/version.inl +++ /dev/null @@ -1,132 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2015 Marko Zivanovic - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#pragma once - -#include "version.h" - -namespace version { - -namespace { - -/// Utility function to splice all vector elements to output stream, using designated separator -/// between elements and function object for getting values from vector elements. -template -std::string & splice(std::string & ss, const std::vector & vec, const std::string & sep, F read) { - if (!vec.empty()) { - for (auto it = vec.cbegin(); it < vec.cend() - 1; ++it) { - ss += read(*it) + sep; - } - ss += read(*vec.crbegin()); - } - return ss; -} - -} // namespace - -template -Basic_version::Basic_version(Parser p, Comparator c) - : parser_(p) - , comparator_(c) - , ver_(parser_.parse("0.0.0")) { -} - -template -Basic_version::Basic_version(const std::string & v, Parser p, Comparator c) - : parser_(p) - , comparator_(c) - , ver_(parser_.parse(v)) { -} - -template -Basic_version::Basic_version(const Version_data & v, Parser p, Comparator c) - : parser_(p) - , comparator_(c) - , ver_(v) { -} - -template -Basic_version::Basic_version(const Basic_version &) = default; - -template -Basic_version & Basic_version::operator=(const Basic_version &) = default; - -template -int Basic_version::major() const { - return ver_.major; -} - -template -int Basic_version::minor() const { - return ver_.minor; -} - -template -int Basic_version::patch() const { - return ver_.patch; -} - -template -const std::string Basic_version::prerelease() const { - std::string ss; - return splice(ss, ver_.prerelease_ids, ".", [](const Prerelease_identifier & id) { return id.first; }); -} - -template -const std::string Basic_version::build() const { - std::string ss; - return splice(ss, ver_.build_ids, ".", [](const std::string & id) { return id; }); -} - -template -bool operator<(const Basic_version & l, const Basic_version & r) { - return l.comparator_.compare(l.ver_, r.ver_) == -1; -} - -template -bool operator==(const Basic_version & l, const Basic_version & r) { - return l.comparator_.compare(l.ver_, r.ver_) == 0; -} - -template -inline bool operator!=(const Basic_version & l, const Basic_version & r) { - return !(l == r); -} - -template -inline bool operator>(const Basic_version & l, const Basic_version & r) { - return r < l; -} - -template -inline bool operator>=(const Basic_version & l, const Basic_version & r) { - return !(l < r); -} - -template -inline bool operator<=(const Basic_version & l, const Basic_version & r) { - return !(l > r); -} - -} // namespace version diff --git a/lib/uuid-console/src/uuid/console.h b/lib/uuid-console/src/uuid/console.h index e8f54d79e..1730058e9 100644 --- a/lib/uuid-console/src/uuid/console.h +++ b/lib/uuid-console/src/uuid/console.h @@ -34,6 +34,7 @@ #include #include +#include #include #include @@ -1645,22 +1646,22 @@ class Shell : public std::enable_shared_from_this, public uuid::log::Hand uint8_t cursor_ = 0; /*!< cursor position from end of line */ uint8_t esc_ = 0; /*!< esc sequence running */ - Stream & stream_; /*!< Stream used for the input/output of this shell. @since 3.0.0 */ - std::shared_ptr commands_; /*!< Commands available for execution in this shell. @since 0.1.0 */ - std::deque context_; /*!< Context stack for this shell. Affects which commands are available. Should never be empty. @since 0.1.0 */ - unsigned int flags_ = 0; /*!< Current flags for this shell. Affects which commands are available. @since 0.1.0 */ + Stream & stream_; /*!< Stream used for the input/output of this shell. @since 3.0.0 */ + std::shared_ptr commands_; /*!< Commands available for execution in this shell. @since 0.1.0 */ + std::deque> context_; /*!< Context stack for this shell. Affects which commands are available. Should never be empty. @since 0.1.0 */ + unsigned int flags_ = 0; /*!< Current flags for this shell. Affects which commands are available. @since 0.1.0 */ #if UUID_CONSOLE_THREAD_SAFE mutable std::mutex mutex_; /*!< Mutex for queued log messages. @since 1.0.0 */ #endif - unsigned long log_message_id_ = 0; /*!< The next identifier to use for queued log messages. @since 0.1.0 */ - std::list log_messages_; /*!< Queued log messages, in the order they were received. @since 0.1.0 */ - size_t maximum_log_messages_ = MAX_LOG_MESSAGES; /*!< Maximum command line length in bytes. @since 0.6.0 */ - std::string line_buffer_; /*!< Command line buffer. Limited to maximum_command_line_length() bytes. @since 0.1.0 */ - size_t maximum_command_line_length_ = MAX_COMMAND_LINE_LENGTH; /*!< Maximum command line length in bytes. @since 0.6.0 */ - unsigned char previous_ = 0; /*!< Previous character that was entered on the command line. Used to detect CRLF line endings. @since 0.1.0 */ - Mode mode_ = Mode::NORMAL; /*!< Current execution mode. @since 0.1.0 */ - std::unique_ptr mode_data_ = nullptr; /*!< Data associated with the current execution mode. @since 0.1.0 */ - bool stopped_ = false; /*!< Indicates that the shell has been stopped. @since 0.1.0 */ + unsigned long log_message_id_ = 0; /*!< The next identifier to use for queued log messages. @since 0.1.0 */ + std::list> log_messages_; /*!< Queued log messages, in the order they were received. @since 0.1.0 */ + size_t maximum_log_messages_ = MAX_LOG_MESSAGES; /*!< Maximum command line length in bytes. @since 0.6.0 */ + std::string line_buffer_; /*!< Command line buffer. Limited to maximum_command_line_length() bytes. @since 0.1.0 */ + size_t maximum_command_line_length_ = MAX_COMMAND_LINE_LENGTH; /*!< Maximum command line length in bytes. @since 0.6.0 */ + unsigned char previous_ = 0; /*!< Previous character that was entered on the command line. Used to detect CRLF line endings. @since 0.1.0 */ + Mode mode_ = Mode::NORMAL; /*!< Current execution mode. @since 0.1.0 */ + std::unique_ptr mode_data_ = nullptr; /*!< Data associated with the current execution mode. @since 0.1.0 */ + bool stopped_ = false; /*!< Indicates that the shell has been stopped. @since 0.1.0 */ bool prompt_displayed_ = false; /*!< Indicates that a command prompt has been displayed, so that the output of invoke_command() is correct. @since 0.1.0 */ uint64_t idle_time_ = 0; /*!< Time the shell became idle. @since 0.7.0 */ uint64_t idle_timeout_ = 0; /*!< Idle timeout (in milliseconds). @since 0.7.0 */ @@ -1786,7 +1787,7 @@ class CommandLine { * @return A reference to the parameters. * @since 0.6.0 */ - inline std::vector & operator*() { + inline std::vector> & operator*() { return parameters_; } /** @@ -1795,7 +1796,7 @@ class CommandLine { * @return A reference to the parameters. * @since 0.6.0 */ - inline const std::vector & operator*() const { + inline const std::vector> & operator*() const { return parameters_; } /** @@ -1804,7 +1805,7 @@ class CommandLine { * @return A pointer to the parameters. * @since 0.4.0 */ - inline std::vector * operator->() { + inline std::vector> * operator->() { return ¶meters_; } /** @@ -1813,7 +1814,7 @@ class CommandLine { * @return A pointer to the parameters. * @since 0.4.0 */ - inline const std::vector * operator->() const { + inline const std::vector> * operator->() const { return ¶meters_; } @@ -1843,8 +1844,8 @@ class CommandLine { bool trailing_space = false; /*!< Command line has a trailing space. @since 0.4.0 */ private: - std::vector parameters_; /*!< Separate command line parameters. @since 0.4.0 */ - size_t escape_parameters_ = std::numeric_limits::max(); /*!< Number of initial arguments to escape in output. @since 0.5.0 */ + std::vector> parameters_; /*!< Separate command line parameters. @since 0.4.0 */ + size_t escape_parameters_ = std::numeric_limits::max(); /*!< Number of initial arguments to escape in output. @since 0.5.0 */ }; /** diff --git a/lib/uuid-log/src/log.cpp b/lib/uuid-log/src/log.cpp index b10a4ba6a..2515a8b10 100644 --- a/lib/uuid-log/src/log.cpp +++ b/lib/uuid-log/src/log.cpp @@ -232,7 +232,7 @@ void Logger::vlog(Level level, const char * format, va_list ap) const { } void Logger::vlog(Level level, Facility facility, const char * format, va_list ap) const { - std::vector text(MAX_LOG_LENGTH + 1); + std::vector> text(MAX_LOG_LENGTH + 1); if (vsnprintf(text.data(), text.size(), format, ap) <= 0) { return; @@ -241,7 +241,7 @@ void Logger::vlog(Level level, Facility facility, const char * format, va_list a dispatch(level, facility, text); } -void Logger::dispatch(Level level, Facility facility, std::vector & text) const { +void Logger::dispatch(Level level, Facility facility, std::vector> & text) const { std::shared_ptr message = std::make_shared(get_uptime_ms(), level, facility, name_, text.data()); text.resize(0); diff --git a/lib/uuid-log/src/uuid/log.h b/lib/uuid-log/src/uuid/log.h index 66e932a23..beac1b189 100644 --- a/lib/uuid-log/src/uuid/log.h +++ b/lib/uuid-log/src/uuid/log.h @@ -31,6 +31,7 @@ #include #include +#include #include #ifndef UUID_COMMON_THREAD_SAFE @@ -645,7 +646,7 @@ class Logger { * @param[in] text Log message text. * @since 1.0.0 */ - void dispatch(Level level, Facility facility, std::vector & text) const; + void dispatch(Level level, Facility facility, std::vector> & text) const; static std::atomic global_level_; /*!< Minimum global log level across all handlers. @since 3.0.0 */ #if UUID_LOG_THREAD_SAFE @@ -723,7 +724,7 @@ class PrintHandler : public uuid::log::Handler { mutable std::mutex mutex_; /*!< Mutex for configuration, state and queued log messages. @since 2.3.0 */ #endif size_t maximum_log_messages_ = MAX_LOG_MESSAGES; /*!< Maximum number of log messages to buffer before they are output. @since 2.2.0 */ - std::list> log_messages_; /*!< Queued log messages, in the order they were received. @since 2.2.0 */ + std::list, AllocatorPSRAM>> log_messages_; /*!< Queued log messages, in the order they were received. @since 2.2.0 */ }; } // namespace log diff --git a/lib/uuid-syslog/src/syslog.cpp b/lib/uuid-syslog/src/syslog.cpp index 024fa6665..4e0eac774 100644 --- a/lib/uuid-syslog/src/syslog.cpp +++ b/lib/uuid-syslog/src/syslog.cpp @@ -20,7 +20,7 @@ #include "../../src/core/emsesp.h" #ifndef UUID_SYSLOG_HAVE_GETTIMEOFDAY -#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) +#if defined(ARDUINO_ARCH_ESP8266) // time() does not return UTC on the ESP8266: https://github.com/esp8266/Arduino/issues/4637 #define UUID_SYSLOG_HAVE_GETTIMEOFDAY 1 #endif diff --git a/lib/uuid-syslog/src/uuid/syslog.h b/lib/uuid-syslog/src/uuid/syslog.h index a7f725238..58f91dae4 100644 --- a/lib/uuid-syslog/src/uuid/syslog.h +++ b/lib/uuid-syslog/src/uuid/syslog.h @@ -28,6 +28,7 @@ #include #include +#include #include #ifndef UUID_LOG_THREAD_SAFE @@ -321,7 +322,7 @@ class SyslogService : public uuid::log::Handler { #endif size_t maximum_log_messages_ = MAX_LOG_MESSAGES; /*!< Maximum number of log messages to buffer before they are output. @since 1.0.0 */ unsigned long log_message_id_ = 0; /*!< The next identifier to use for queued log messages. @since 1.0.0 */ - std::list log_messages_; /*!< Queued log messages, in the order they were received. @since 1.0.0 */ + std::list> log_messages_; /*!< Queued log messages, in the order they were received. @since 1.0.0 */ uint64_t mark_interval_ = 0; /*!< Mark interval in milliseconds. @since 2.0.0 */ uint64_t last_message_ = 0; /*!< Last message/mark time. @since 2.0.0 */ diff --git a/lib/uuid-telnet/src/stream.cpp b/lib/uuid-telnet/src/stream.cpp index adf5f16ec..c59b02787 100644 --- a/lib/uuid-telnet/src/stream.cpp +++ b/lib/uuid-telnet/src/stream.cpp @@ -249,7 +249,7 @@ size_t TelnetStream::write(uint8_t data) { } size_t TelnetStream::write(const uint8_t * buffer, size_t size) { - std::vector data; + std::vector> data; data.reserve(size); while (size-- > 0) { @@ -310,7 +310,7 @@ size_t TelnetStream::raw_write(unsigned char data) { return 1; } -size_t TelnetStream::raw_write(const std::vector & data) { +size_t TelnetStream::raw_write(const std::vector> & data) { return raw_write(reinterpret_cast(data.data()), data.size()); } diff --git a/lib/uuid-telnet/src/uuid/telnet.h b/lib/uuid-telnet/src/uuid/telnet.h index fb1245de9..a679859b7 100644 --- a/lib/uuid-telnet/src/uuid/telnet.h +++ b/lib/uuid-telnet/src/uuid/telnet.h @@ -33,6 +33,7 @@ #include #include +#include #include namespace uuid { @@ -203,7 +204,7 @@ class TelnetStream : public ::Stream { * @return The number of bytes that were output. * @since 0.1.0 */ - size_t raw_write(const std::vector & data); + size_t raw_write(const std::vector> & data); /** * Write an array of bytes directly to the output stream. * @@ -222,7 +223,7 @@ class TelnetStream : public ::Stream { unsigned char previous_in_ = 0; /*!< Previous character that was received. Used to detect CR NUL. @since 0.1.0 */ unsigned char previous_out_ = 0; /*!< Previous character that was sent. Used to insert NUL after CR without LF. @since 0.1.0 */ int peek_ = -1; /*!< Previously read data cached by peek(). @since 0.1.0 */ - std::vector output_buffer_; /*!< Buffer data to be output until a read function is called. @since 0.1.0 */ + std::vector> output_buffer_; /*!< Buffer data to be output until a read function is called. @since 0.1.0 */ }; /** @@ -425,7 +426,7 @@ class TelnetService { WiFiServer server_; /*!< TCP server. @since 0.1.0 */ size_t maximum_connections_ = MAX_CONNECTIONS; /*!< Maximum number of concurrent open connections. @since 0.1.0 */ - std::list connections_; /*!< Open connections. @since 0.1.0 */ + std::list> connections_; /*!< Open connections. @since 0.1.0 */ shell_factory_function shell_factory_; /*!< Function to create a shell. @since 0.1.0 */ unsigned long initial_idle_timeout_ = DEFAULT_IDLE_TIMEOUT; /*!< Initial idle timeout (in seconds). @since 0.1.0 */ unsigned long write_timeout_ = DEFAULT_WRITE_TIMEOUT; /*!< Write timeout (in milliseconds). @since 0.1.0 */ diff --git a/lib_standalone/Arduino.cpp b/lib_standalone/Arduino.cpp index 16b286985..cf7651354 100644 --- a/lib_standalone/Arduino.cpp +++ b/lib_standalone/Arduino.cpp @@ -145,6 +145,7 @@ double ledcSetup(uint8_t chan, double freq, uint8_t bit_num) { return 0; }; void ledcAttachPin(uint8_t pin, uint8_t chan) {}; +void ledcAttach(uint8_t pin, uint8_t chan, uint8_t bit_num) {}; void ledcWrite(uint8_t chan, uint32_t duty) {}; void neopixelWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val) {}; void rgbLedWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val) {}; diff --git a/lib_standalone/Arduino.h b/lib_standalone/Arduino.h index d13411c24..e521fa40b 100644 --- a/lib_standalone/Arduino.h +++ b/lib_standalone/Arduino.h @@ -72,6 +72,7 @@ void analogSetAttenuation(adc_attenuation_t attenuation); void dacWrite(uint8_t pin, uint8_t value); double ledcSetup(uint8_t chan, double freq, uint8_t bit_num); void ledcAttachPin(uint8_t pin, uint8_t chan); +void ledcAttach(uint8_t pin, uint8_t chan, uint8_t bit_num); void ledcWrite(uint8_t chan, uint32_t duty); void neopixelWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val); void rgbLedWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val); diff --git a/lib_standalone/ArduinoJson.h b/lib_standalone/ArduinoJson.h index 5fbf79b27..89d56dd71 100644 --- a/lib_standalone/ArduinoJson.h +++ b/lib_standalone/ArduinoJson.h @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -239,11 +239,11 @@ #define ARDUINOJSON_BIN2ALPHA_1111() P #define ARDUINOJSON_BIN2ALPHA_(A, B, C, D) ARDUINOJSON_BIN2ALPHA_##A##B##C##D() #define ARDUINOJSON_BIN2ALPHA(A, B, C, D) ARDUINOJSON_BIN2ALPHA_(A, B, C, D) -#define ARDUINOJSON_VERSION "7.4.2" +#define ARDUINOJSON_VERSION "7.4.3" #define ARDUINOJSON_VERSION_MAJOR 7 #define ARDUINOJSON_VERSION_MINOR 4 -#define ARDUINOJSON_VERSION_REVISION 2 -#define ARDUINOJSON_VERSION_MACRO V742 +#define ARDUINOJSON_VERSION_REVISION 3 +#define ARDUINOJSON_VERSION_MACRO V743 #ifndef ARDUINOJSON_VERSION_NAMESPACE #define ARDUINOJSON_VERSION_NAMESPACE \ ARDUINOJSON_CONCAT5(ARDUINOJSON_VERSION_MACRO, \ @@ -1536,11 +1536,12 @@ template struct FloatTraits {}; template struct FloatTraits { - using mantissa_type = uint64_t; - static const short mantissa_bits = 52; - static const mantissa_type mantissa_max = (mantissa_type(1) << mantissa_bits) - 1; - using exponent_type = int16_t; - static const exponent_type exponent_max = 308; + using mantissa_type = uint64_t; + static const short mantissa_bits = 52; + static const mantissa_type mantissa_max = (mantissa_type(1) << mantissa_bits) - 1; + using exponent_type = int16_t; + static const exponent_type exponent_max = 308; + static const size_t binaryPowersOfTen = 9; static pgm_ptr positiveBinaryPowersOfTen() { ARDUINOJSON_DEFINE_PROGMEM_ARRAY( // uint64_t, @@ -1601,11 +1602,12 @@ struct FloatTraits { }; template struct FloatTraits { - using mantissa_type = uint32_t; - static const short mantissa_bits = 23; - static const mantissa_type mantissa_max = (mantissa_type(1) << mantissa_bits) - 1; - using exponent_type = int8_t; - static const exponent_type exponent_max = 38; + using mantissa_type = uint32_t; + static const short mantissa_bits = 23; + static const mantissa_type mantissa_max = (mantissa_type(1) << mantissa_bits) - 1; + using exponent_type = int8_t; + static const exponent_type exponent_max = 38; + static const size_t binaryPowersOfTen = 6; static pgm_ptr positiveBinaryPowersOfTen() { ARDUINOJSON_DEFINE_PROGMEM_ARRAY(uint32_t, factors, @@ -1668,9 +1670,12 @@ template inline TFloat make_float(TFloat m, TExponent e) { using traits = FloatTraits; auto powersOfTen = e > 0 ? traits::positiveBinaryPowersOfTen() : traits::negativeBinaryPowersOfTen(); + auto count = traits::binaryPowersOfTen; if (e <= 0) e = TExponent(-e); for (uint8_t index = 0; e != 0; index++) { + if (index >= count) + return traits::nan(); if (e & 1) m *= powersOfTen[index]; e >>= 1; @@ -2422,7 +2427,7 @@ class VariantData { return; var->removeMember(key, resources); } - void reset() { + void reset() { // TODO: remove type_ = VariantType::Null; } void setBoolean(bool value) { @@ -4214,7 +4219,7 @@ template struct Comparer; template struct Comparer::value>> : ComparerBase { - T rhs; + T rhs; // TODO: store adapted string? explicit Comparer(T value) : rhs(value) { } @@ -5298,7 +5303,7 @@ class StringBuilder { append(*s++); } void append(const char * s, size_t n) { - while (n-- > 0) + while (n-- > 0) // TODO: memcpy append(*s++); } void append(char c) { diff --git a/lib_standalone/AsyncTCP.h b/lib_standalone/AsyncTCP.h index 58307baab..67d733238 100644 --- a/lib_standalone/AsyncTCP.h +++ b/lib_standalone/AsyncTCP.h @@ -19,12 +19,164 @@ class AsyncClient { class AsyncServer { public: AsyncServer(uint16_t port) - : _port(port){}; - ~AsyncServer(){}; + : _port(port) {}; + ~AsyncServer() {}; protected: uint16_t _port; }; +namespace asyncsrv { + +static constexpr const char empty[] = ""; + +static constexpr const char T__opaque[] = "\", opaque=\""; +static constexpr const char T_100_CONTINUE[] = "100-continue"; +static constexpr const char T_13[] = "13"; +static constexpr const char T_ACCEPT[] = "Accept"; +static constexpr const char T_Accept_Ranges[] = "Accept-Ranges"; +static constexpr const char T_attachment[] = "attachment; filename=\""; +static constexpr const char T_AUTH[] = "Authorization"; +static constexpr const char T_auth_nonce[] = "\", qop=\"auth\", nonce=\""; +static constexpr const char T_BASIC[] = "Basic"; +static constexpr const char T_BASIC_REALM[] = "Basic realm=\""; +static constexpr const char T_BEARER[] = "Bearer"; +static constexpr const char T_BODY[] = "body"; +static constexpr const char T_Cache_Control[] = "Cache-Control"; +static constexpr const char T_chunked[] = "chunked"; +static constexpr const char T_close[] = "close"; +static constexpr const char T_cnonce[] = "cnonce"; +static constexpr const char T_Connection[] = "Connection"; +static constexpr const char T_Content_Disposition[] = "Content-Disposition"; +static constexpr const char T_Content_Encoding[] = "Content-Encoding"; +static constexpr const char T_Content_Length[] = "Content-Length"; +static constexpr const char T_Content_Type[] = "Content-Type"; +static constexpr const char T_Content_Location[] = "Content-Location"; +static constexpr const char T_Cookie[] = "Cookie"; +static constexpr const char T_CORS_ACAC[] = "Access-Control-Allow-Credentials"; +static constexpr const char T_CORS_ACAH[] = "Access-Control-Allow-Headers"; +static constexpr const char T_CORS_ACAM[] = "Access-Control-Allow-Methods"; +static constexpr const char T_CORS_ACAO[] = "Access-Control-Allow-Origin"; +static constexpr const char T_CORS_ACMA[] = "Access-Control-Max-Age"; +static constexpr const char T_CORS_O[] = "Origin"; +static constexpr const char T_data_[] = "data: "; +static constexpr const char T_Date[] = "Date"; +static constexpr const char T_DIGEST[] = "Digest"; +static constexpr const char T_DIGEST_[] = "Digest "; +static constexpr const char T_ETag[] = "ETag"; +static constexpr const char T_event_[] = "event: "; +static constexpr const char T_EXPECT[] = "Expect"; +static constexpr const char T_FALSE[] = "false"; +static constexpr const char T_filename[] = "filename"; +static constexpr const char T_gzip[] = "gzip"; +static constexpr const char T_Host[] = "host"; +static constexpr const char T_HTTP_1_0[] = "HTTP/1.0"; +static constexpr const char T_HTTP_100_CONT[] = "HTTP/1.1 100 Continue\r\n\r\n"; +static constexpr const char T_id__[] = "id: "; +static constexpr const char T_IMS[] = "If-Modified-Since"; +static constexpr const char T_INM[] = "If-None-Match"; +static constexpr const char T_inline[] = "inline"; +static constexpr const char T_keep_alive[] = "keep-alive"; +static constexpr const char T_Last_Event_ID[] = "Last-Event-ID"; +static constexpr const char T_Last_Modified[] = "Last-Modified"; +static constexpr const char T_LOCATION[] = "Location"; +static constexpr const char T_LOGIN_REQ[] = "Login Required"; +static constexpr const char T_MULTIPART_[] = "multipart/"; +static constexpr const char T_name[] = "name"; +static constexpr const char T_nc[] = "nc"; +static constexpr const char T_no_cache[] = "no-cache"; +static constexpr const char T_nonce[] = "nonce"; +static constexpr const char T_none[] = "none"; +static constexpr const char T_opaque[] = "opaque"; +static constexpr const char T_qop[] = "qop"; +static constexpr const char T_realm[] = "realm"; +static constexpr const char T_realm__[] = "realm=\""; +static constexpr const char T_response[] = "response"; +static constexpr const char T_retry_[] = "retry: "; +static constexpr const char T_retry_after[] = "Retry-After"; +static constexpr const char T_nn[] = "\n\n"; +static constexpr const char T_rn[] = "\r\n"; +static constexpr const char T_rnrn[] = "\r\n\r\n"; +static constexpr const char T_Server[] = "Server"; +static constexpr const char T_Transfer_Encoding[] = "Transfer-Encoding"; +static constexpr const char T_TRUE[] = "true"; +static constexpr const char T_UPGRADE[] = "Upgrade"; +static constexpr const char T_uri[] = "uri"; +static constexpr const char T_username[] = "username"; +static constexpr const char T_WS[] = "websocket"; +static constexpr const char T_WWW_AUTH[] = "WWW-Authenticate"; + +// HTTP Methods +static constexpr const char T_ANY[] = "ANY"; +static constexpr const char T_GET[] = "GET"; +static constexpr const char T_POST[] = "POST"; +static constexpr const char T_PUT[] = "PUT"; +static constexpr const char T_DELETE[] = "DELETE"; +static constexpr const char T_PATCH[] = "PATCH"; +static constexpr const char T_HEAD[] = "HEAD"; +static constexpr const char T_OPTIONS[] = "OPTIONS"; +static constexpr const char T_UNKNOWN[] = "UNKNOWN"; + +// Req content types +static constexpr const char T_RCT_NOT_USED[] = "RCT_NOT_USED"; +static constexpr const char T_RCT_DEFAULT[] = "RCT_DEFAULT"; +static constexpr const char T_RCT_HTTP[] = "RCT_HTTP"; +static constexpr const char T_RCT_WS[] = "RCT_WS"; +static constexpr const char T_RCT_EVENT[] = "RCT_EVENT"; +static constexpr const char T_ERROR[] = "ERROR"; + +// extensions & MIME-Types +static constexpr const char T__avif[] = ".avif"; // AVIF: Highly compressed images. Compatible with all modern browsers. +static constexpr const char T__csv[] = ".csv"; // CSV: Data logging and configuration +static constexpr const char T__css[] = ".css"; // CSS: Styling for web interfaces +static constexpr const char T__gif[] = ".gif"; // GIF: Simple animations. Legacy support +static constexpr const char T__gz[] = ".gz"; // GZ: compressed files +static constexpr const char T__htm[] = ".htm"; // HTM: Web interface files +static constexpr const char T__html[] = ".html"; // HTML: Web interface files +static constexpr const char T__ico[] = ".ico"; // ICO: Favicons, system icons. Legacy support +static constexpr const char T__jpg[] = ".jpg"; // JPEG/JPG: Photos. Legacy support +static constexpr const char T__js[] = ".js"; // JavaScript: Interactive functionality +static constexpr const char T__json[] = ".json"; // JSON: Data exchange format +static constexpr const char T__mp4[] = ".mp4"; // MP4: Proprietary format. Worse compression than WEBM. +static constexpr const char T__mjs[] = ".mjs"; // MJS: JavaScript module format +static constexpr const char T__opus[] = ".opus"; // OPUS: High compression audio format +static constexpr const char T__pdf[] = ".pdf"; // PDF: Universal document format +static constexpr const char T__png[] = ".png"; // PNG: Icons, logos, transparency. Legacy support +static constexpr const char T__svg[] = ".svg"; // SVG: Vector graphics, icons (scalable, tiny file sizes) +static constexpr const char T__ttf[] = ".ttf"; // TTF: Font file. Legacy support +static constexpr const char T__txt[] = ".txt"; // TXT: Plain text files +static constexpr const char T__webm[] = ".webm"; // WebM: Video. Open source, optimized for web. Compatible with all modern browsers. +static constexpr const char T__webp[] = ".webp"; // WebP: Highly compressed images. Compatible with all modern browsers. +static constexpr const char T__woff[] = ".woff"; // WOFF: Font file. Legacy support +static constexpr const char T__woff2[] = ".woff2"; // WOFF2: Better compression. Compatible with all modern browsers. +static constexpr const char T__xml[] = ".xml"; // XML: Configuration and data files +static constexpr const char T_application_javascript[] = "application/javascript"; // Obsolete type for JavaScript +static constexpr const char T_application_json[] = "application/json"; +static constexpr const char T_application_msgpack[] = "application/msgpack"; +static constexpr const char T_application_octet_stream[] = "application/octet-stream"; +static constexpr const char T_application_pdf[] = "application/pdf"; +static constexpr const char T_app_xform_urlencoded[] = "application/x-www-form-urlencoded"; +static constexpr const char T_audio_opus[] = "audio/opus"; +static constexpr const char T_font_ttf[] = "font/ttf"; +static constexpr const char T_font_woff[] = "font/woff"; +static constexpr const char T_font_woff2[] = "font/woff2"; +static constexpr const char T_image_avif[] = "image/avif"; +static constexpr const char T_image_gif[] = "image/gif"; +static constexpr const char T_image_jpeg[] = "image/jpeg"; +static constexpr const char T_image_png[] = "image/png"; +static constexpr const char T_image_svg_xml[] = "image/svg+xml"; +static constexpr const char T_image_webp[] = "image/webp"; +static constexpr const char T_image_x_icon[] = "image/x-icon"; +static constexpr const char T_text_css[] = "text/css"; +static constexpr const char T_text_csv[] = "text/csv"; +static constexpr const char T_text_event_stream[] = "text/event-stream"; +static constexpr const char T_text_html[] = "text/html"; +static constexpr const char T_text_javascript[] = "text/javascript"; +static constexpr const char T_text_plain[] = "text/plain"; +static constexpr const char T_text_xml[] = "text/xml"; +static constexpr const char T_video_mp4[] = "video/mp4"; +static constexpr const char T_video_webm[] = "video/webm"; +} // namespace asyncsrv + #endif diff --git a/lib_standalone/Preferences.h b/lib_standalone/Preferences.h index 07f24e8be..c994294cf 100644 --- a/lib_standalone/Preferences.h +++ b/lib_standalone/Preferences.h @@ -67,6 +67,9 @@ class Preferences { size_t putString(const char * key, String value) { return 0; } + bool isKey(const char * key) { + return true; + } // unused.... @@ -84,7 +87,6 @@ class Preferences { // size_t putBool(const char * key, bool value); // size_t putBytes(const char * key, const void * value, size_t len); - // bool isKey(const char * key); // PreferenceType getType(const char * key); // int8_t getChar(const char * key, int8_t defaultValue = 0); // int16_t getShort(const char * key, int16_t defaultValue = 0); diff --git a/lib_standalone/emsuart_standalone.h b/lib_standalone/emsuart_standalone.h index 4a76581db..2d576ae6b 100644 --- a/lib_standalone/emsuart_standalone.h +++ b/lib_standalone/emsuart_standalone.h @@ -22,10 +22,11 @@ #include "Arduino.h" #define EMS_TXMODE_OFF 0 -#define EMS_TXMODE_DEFAULT 1 +#define EMS_TXMODE_EMS 1 #define EMS_TXMODE_EMSPLUS 2 #define EMS_TXMODE_HT3 3 #define EMS_TXMODE_HW 4 +#define EMS_TXMODE_AUTO 5 namespace emsesp { diff --git a/mock-api/package.json b/mock-api/package.json index d05239e7b..2c65bf4e7 100644 --- a/mock-api/package.json +++ b/mock-api/package.json @@ -1,6 +1,6 @@ { "name": "mock-api", - "version": "3.8.0", + "version": "3.8.2", "description": "mock api for EMS-ESP", "author": "proddy, emsesp.org", "license": "MIT", @@ -12,8 +12,8 @@ "@msgpack/msgpack": "^3.1.3", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "formidable": "^3.5.4", - "itty-router": "^5.0.22", - "prettier": "^3.7.4" + "itty-router": "^5.0.23", + "prettier": "^3.8.3" }, - "packageManager": "pnpm@10.28.0+sha512.05df71d1421f21399e053fde567cea34d446fa02c76571441bfc1c7956e98e363088982d940465fd34480d4d90a0668bc12362f8aa88000a64e83d0b0e47be48" + "packageManager": "pnpm@10.33.4+sha512.1c67b3b359b2d408119ba1ed289f34b8fc3c6873412bec6fd264fbdc82489e510fcbecb9ce9d22dae7f3b76269d8441046014bdca53b9979cd7a561ad631b800" } diff --git a/mock-api/pnpm-lock.yaml b/mock-api/pnpm-lock.yaml index 5f50a949e..1ddedb1b1 100644 --- a/mock-api/pnpm-lock.yaml +++ b/mock-api/pnpm-lock.yaml @@ -13,25 +13,25 @@ importers: version: 3.1.3 '@trivago/prettier-plugin-sort-imports': specifier: ^6.0.2 - version: 6.0.2(prettier@3.7.4) + version: 6.0.2(prettier@3.8.3) formidable: specifier: ^3.5.4 version: 3.5.4 itty-router: - specifier: ^5.0.22 - version: 5.0.22 + specifier: ^5.0.23 + version: 5.0.23 prettier: - specifier: ^3.7.4 - version: 3.7.4 + specifier: ^3.8.3 + version: 3.8.3 packages: - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.5': - resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} '@babel/helper-globals@7.28.0': @@ -46,21 +46,21 @@ packages: resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.5': - resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.5': - resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} '@jridgewell/gen-mapping@0.3.13': @@ -112,8 +112,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.1.0: + resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} @@ -131,8 +131,8 @@ packages: resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} engines: {node: '>=14.0.0'} - itty-router@5.0.22: - resolution: {integrity: sha512-9hmdGErWdYDOurGYxSbqLhy4EFReIwk71hMZTJ5b+zfa2zjMNV1ftFno2b8VjAQvX615gNB8Qxbl9JMRqHnIVA==} + itty-router@5.0.23: + resolution: {integrity: sha512-i49WU+SNPrwOZA4Z61En1RYd5h2Lcqa+5IvCpMrNi4dxymzJK15ozUUnRrWIUAv95Zamd4eJPAot2UvHRrQg7w==} javascript-natural-sort@0.7.1: resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} @@ -145,11 +145,11 @@ packages: engines: {node: '>=6'} hasBin: true - lodash-es@4.17.22: - resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} ms@2.1.3: @@ -167,8 +167,8 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - prettier@3.7.4: - resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} hasBin: true @@ -177,16 +177,16 @@ packages: snapshots: - '@babel/code-frame@7.27.1': + '@babel/code-frame@7.29.0': dependencies: '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/generator@7.28.5': + '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 @@ -197,29 +197,29 @@ snapshots: '@babel/helper-validator-identifier@7.28.5': {} - '@babel/parser@7.28.5': + '@babel/parser@7.29.3': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 - '@babel/template@7.27.2': + '@babel/template@7.28.6': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.3 + '@babel/types': 7.29.0 - '@babel/traverse@7.28.5': + '@babel/traverse@7.29.0': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.3 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.28.5': + '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 @@ -246,17 +246,17 @@ snapshots: dependencies: '@noble/hashes': 1.8.0 - '@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.7.4)': + '@trivago/prettier-plugin-sort-imports@6.0.2(prettier@3.8.3)': dependencies: - '@babel/generator': 7.28.5 - '@babel/parser': 7.28.5 - '@babel/traverse': 7.28.5 - '@babel/types': 7.28.5 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.3 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 javascript-natural-sort: 0.7.1 - lodash-es: 4.17.22 - minimatch: 9.0.5 + lodash-es: 4.18.1 + minimatch: 9.0.9 parse-imports-exports: 0.2.4 - prettier: 3.7.4 + prettier: 3.8.3 transitivePeerDependencies: - supports-color @@ -264,7 +264,7 @@ snapshots: balanced-match@1.0.2: {} - brace-expansion@2.0.2: + brace-expansion@2.1.0: dependencies: balanced-match: 1.0.2 @@ -283,7 +283,7 @@ snapshots: dezalgo: 1.0.4 once: 1.4.0 - itty-router@5.0.22: {} + itty-router@5.0.23: {} javascript-natural-sort@0.7.1: {} @@ -291,11 +291,11 @@ snapshots: jsesc@3.1.0: {} - lodash-es@4.17.22: {} + lodash-es@4.18.1: {} - minimatch@9.0.5: + minimatch@9.0.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.1.0 ms@2.1.3: {} @@ -311,6 +311,6 @@ snapshots: picocolors@1.1.1: {} - prettier@3.7.4: {} + prettier@3.8.3: {} wrappy@1.0.2: {} diff --git a/mock-api/restServer.ts b/mock-api/restServer.ts index 2c9504147..1e3a7afae 100644 --- a/mock-api/restServer.ts +++ b/mock-api/restServer.ts @@ -141,8 +141,8 @@ 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.0'; -let LATEST_DEV_VERSION = '3.8.1-dev.2'; +let LATEST_STABLE_VERSION = '3.8.2'; +let LATEST_DEV_VERSION = '3.8.3-dev.2'; // scenarios for testing versioning let version_test = 0; // on latest stable, or switch to dev @@ -363,6 +363,8 @@ function export_data(type: string) { return emsesp_modules; case 'allvalues': return emsesp_allvalues; + case 'systembackup': + return emsesp_systembackup; default: return status(404); } @@ -386,13 +388,34 @@ function custom_support() { '', "For help and questions please
contact your installer." ], - img_url: 'https://emsesp.org/_media/images/designer.png' + img_url: 'https://emsesp.org/media/images/designer.png' // img_url: 'https://picsum.photos/200/300' } }; } -// called by Action endpoint +// called by Action endpoint upgradeImportantMessages +function upgradeImportantMessages(version: string) { + // 0 is do nothing + // 1 means 3.9 and factory reset required + // 2 means a major version upgrade + let upgradeImportantMessageType_n = 0; + + // see if its a filename with a .bin extension + if (version.endsWith('.bin')) { + upgradeImportantMessageType_n = 1; // 1 means 3.9 and factory reset required + } else if (version.endsWith('.md')) { + upgradeImportantMessageType_n = 0; + } else { + // this is a version string like "3.9.0" + upgradeImportantMessageType_n = 2; + } + + console.log('upgradeImportantMessageType: ' + upgradeImportantMessageType_n); + return { upgradeImportantMessageType: upgradeImportantMessageType_n }; +} + +// called by Action endpoint checkUpgrade function check_upgrade(version: string) { let data = {}; if (version) { @@ -732,6 +755,8 @@ const emsesp_info = { ] }; +const emsesp_systembackup = {}; + const emsesp_allvalues = { 'Boiler Nefit Trendline HRC30 (DeviceID:0x08, ProductID:123, Version:06.01)': { 'force heating off': 'off', @@ -4564,7 +4589,7 @@ router let sorted_devices = [...emsesp_coredata.devices].sort((a, b) => a.t - b.t); // append emsesp_coredata to sorted_devices so Custom is always at the end of the list sorted_devices.push(emsesp_coredata_custom); - // sorted_devices = []; // uncomment if simulating no devices... + // return { connected: false, devices: [] }; // uncomment if simulating no devices... return { connected: true, devices: sorted_devices }; }) .get(EMSESP_SENSOR_DATA_ENDPOINT, () => { @@ -5166,6 +5191,9 @@ router // set partition console.log('setting partition to', content.param); return status(200); + } else if (action === 'upgradeImportantMessages') { + // check upgrade important messages + return upgradeImportantMessages(content.param); } } return status(404); // cmd not found diff --git a/pio_local.ini_example b/pio_local.ini_example index 5b976e0f8..29a40d240 100644 --- a/pio_local.ini_example +++ b/pio_local.ini_example @@ -20,7 +20,7 @@ my_build_flags = [platformio] default_envs = s_16M_P ; BBQKees E32V2 -; default_envs = build_webUI ; build the web interface only +; default_envs = build-webUI ; build the web interface only ; default_envs = s3_16M_P ; BBQKees S3 ; default_envs = s_4M ; BBQKees older S32, 4MB no psram ; default_envs = s_16M ; BBQKees newer S32 V2, 16MB no psram diff --git a/platformio.ini b/platformio.ini index 31ac85d60..241af2c71 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,15 +15,14 @@ description = EMS-ESP Firmware for the ESP32 src_dir = src lib_dir = lib boards_dir = boards -; build_cache_dir = .pio/build_cache extra_configs = factory_settings.ini pio_local.ini [common] -core_build_flags = -std=c++17 -std=gnu++17 -O3 -flto=auto -Wno-type-limits -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable -Wno-format -core_unbuild_flags = -std=gnu++11 -fno-lto +core_build_flags = -std=gnu++2a -O3 -flto=auto -Wno-type-limits -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable -Wno-format -Wno-missing-field-initializers +core_unbuild_flags = -std=gnu++11 -std=gnu++14 -std=gnu++17 -fno-lto my_build_flags = @@ -60,7 +59,7 @@ framework = arduino board_build.partitions = partitions/esp32_partition_16M.csv board_upload.flash_size = 16MB board_build.app_partition_name = app0 -platform = espressif32@6.12.0 ; Arduino Core 2.0.17 / IDF 4.4.7 +platform = espressif32@7.0.0 ; Arduino Core 2.0.17 / IDF 4.4.7 ; 32MB Flash variants [espressif32_base_32M] @@ -68,7 +67,7 @@ framework = arduino board_build.partitions = partitions/esp32_partition_32M.csv board_upload.flash_size = 32MB board_build.app_partition_name = app0 -platform = espressif32@6.12.0 ; Arduino Core 2.0.17 / IDF 4.4.7 +platform = espressif32@7.0.0 ; Arduino Core 2.0.17 / IDF 4.4.7 ; use Tasmota's library for 4MB Flash variants. ; Removes libs (like mbedtsl, so no WiFi_secure.h) to increase available heap @@ -104,14 +103,13 @@ monitor_filters = direct build_type = release board_build.filesystem = littlefs lib_deps = - bblanchon/ArduinoJson @ 7.4.2 + bblanchon/ArduinoJson @ 7.4.3 ESP32Async/AsyncTCP @ 3.4.10 - ESP32Async/ESPAsyncWebServer @ 3.9.4 - https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.8 - + ESP32Async/ESPAsyncWebServer @ 3.11.0 + ; https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.8 ; builds the web interface only, not the firmware -[env:build_webUI] +[env:build-webUI] platform = native targets = build extra_scripts = pre:scripts/build_interface.py @@ -168,19 +166,6 @@ build_flags = ${common.build_flags} -DBOARD_C3_MINI_V1 -; XIAO ESP32C - 512KB SRAM & 4MB Flash - https://wiki.seeedstudio.com/xiao_esp32c6_getting_started/ -[env:c6] -framework = arduino -board_build.partitions = partitions/esp32_partition_4M.csv -board_upload.flash_size = 4MB -board_build.app_partition_name = app0 -platform = https://github.com/pioarduino/platform-espressif32/releases/download/54.03.21-2/platform-espressif32.zip ; Arduino Release v3.2.1 based on ESP-IDF v5.4.2 -; platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.30-2/platform-espressif32.zip ; Arduino Release v3.3.0 based on ESP-IDF v5.5.0 -board = seeed_xiao_esp32c6 -build_flags = - ${common.build_flags} - -DBOARD_C6 - ; foundation for building and testing natively, standalone without an ESP32 ; use the `standalone` environment instead of `native` for testing [env:native] @@ -190,7 +175,7 @@ build_flags = build_src_flags = -DEMSESP_STANDALONE -DEMSESP_TEST -DARDUINOJSON_ENABLE_ARDUINO_STRING=1 - -std=gnu++17 -Og -ggdb + -std=gnu++2a -Og -ggdb -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-missing-braces -Wno-vla-cxx-extension -Wno-tautological-constant-out-of-range-compare @@ -199,7 +184,6 @@ build_src_flags = -I./lib/uuid-common/src -I./lib/uuid-console/src -I./lib/uuid-log/src - -I./lib/semver -I./lib/PButton -I./lib/espMqttClient/src -I./lib/espMqttClient/src/Transport @@ -212,6 +196,7 @@ build_src_filter = -<../lib/uuid-syslog> -<../lib/eModbus> -<../lib/OneWire> + -<../src/core/ModuleLibrary.cpp> lib_ldf_mode = off lib_deps = @@ -229,7 +214,7 @@ build_src_flags = -DEMSESP_UNITY -DARDUINOJSON_ENABLE_ARDUINO_STRING=1 -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32\" - -std=gnu++17 -Og -ggdb + -std=gnu++2a -Og -ggdb -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-missing-braces -Wno-vla-cxx-extension -Wno-tautological-constant-out-of-range-compare @@ -238,7 +223,6 @@ build_src_flags = -I./lib/uuid-common/src -I./lib/uuid-console/src -I./lib/uuid-log/src - -I./lib/semver -I./lib/PButton -I./lib/espMqttClient/src -I./lib/espMqttClient/src/Transport @@ -254,6 +238,7 @@ build_src_filter = -<../lib/uuid-syslog> -<../lib/eModbus> -<../lib/OneWire> + -<../src/core/ModuleLibrary.cpp> lib_ldf_mode = off lib_deps = Unity test_testing_command = diff --git a/project-words.txt b/project-words.txt index ea16610ce..7a998c037 100644 --- a/project-words.txt +++ b/project-words.txt @@ -1,76 +1,73 @@ abluft -Abluft abluftfeuchte -Abluftfeuchtefühler +abluftfeuchtefühler abluftgebläse abluftqualität -Abluftqualitätsfühler -ABRT +abluftqualitätsfühler +abrt absburnpow +ACAC +ACAH +ACAO accomodate aceotrope -ACTIVEHIGH -ACTIVELOW -Adafruit +activehigh +activelow +adafruit adde adress +ahsx +airbypass airhumidity airpurgemode airquality -Airquality -Ajcks -AKMP +ajcks +akmp aktivieren allvalues -ALLVALUES alova -Alova alphanum alse alternatingop altopprio altopprioheat +analogenabled analogsensor -ANALOGSENSOR analogsensors analyse -Anschlussvariante +anschlussvariante apicalls apifails apiflags -APIP -APIURL -APLL +apip +apiurl +apll appfree -APPSIZE +appsize appused -APSSID -APSTA -ARDUHAL +apssid +apsta +arduhal arduinojson -ARDUINOJSON -ARDUINOOTA -Arjan -Arlott -Arwed -ASSOCED -ASTATES +arduinoota +arjan +arlott +arwed +assoced +astates asym asymetric asyncesp -ASYNCEVENTSOURCE -ASYNCTCP -ASYNCWEBSERVER -ASYNCWEBSERVERHANDLERIMPL -ASYNCWEBSERVERRESPONSEIMPL -ASYNCWEBSOCKET -ASYNCWEBSYNCHRONIZATION +asynceventsource +asynctcp +asyncwebserver +asyncwebserverhandlerimpl +asyncwebserverresponseimpl +asyncwebsocket +asyncwebsynchronization atoint ausreichend -außenluft -Außenluft authmode -AUTHMODE autodst automode autoscroll @@ -79,6 +76,7 @@ auxelecheatnrgconsheating auxelecheatnrgconspool auxelecheatnrgconstotal auxheaterdelay +auxheaterlevel auxheateroff auxheateronly auxheaterstatus @@ -86,86 +84,90 @@ auxheatmix auxheatrmode auxlimitstart auxmaxlimit +außenluft avty -AWSC -Azubuike +awsc +azubuike badems basepoint -BASEREG +basereg +bblanchon bbqkees -Benoit +beddouble +bedsingle +benoit bertmelis -Bertrik +bertrik bitb bitptr bittimes bitupdate bitvalue -BLANCHON +blanchon blockend blockheader blockheadersize blocksize blocktime -Blowerspeed -Boardprofile -BOARDPROFILE +blowerspeed +boardprofile boilhystoff boilhyston boiltemp bolier +bolv boosttime bootable bootloader bottomtemp +bowlmix breakp +brotlin bssid -Bssid -BSSID buderus -Buderus -BUDERUS budrus -BUFBLOCKSIZE +bufblocksize bufferedflow burngas burnmaxpower burnminperiod burnminpower -Burnpower +burnpower burnstarts burnworkmin -Bytetime +bytetime calinttemp catagory cbuf -Cerapur +cerapur cfamily changeloglevel chargeduration chargeoptimization chargepump chargetype -Chmela +chefhat +chimneysweeper +chmela circmode circprog circpump circswitchtime +circtc cked clangtidy climatezone clockoffset clockrate -CLSD +clsd cmdfunction cmdfunctions -Codacy +codacy codeunit -COILDATA +coildata coilset coldshot -Coldshot -COLDSHOT +coldtemp collectormaxtemp collectormintemp collectorshutdown @@ -173,56 +175,58 @@ collectortemp collectortype colmax colmin -Comf +comf comfdiff comfoff comforttemp comfstop -Commpressor +commandsfunctions +commpressor compstartmod -Condens +condens configdone connack -Connack -CONNACK connectcb connectcount +constlow +constmed controlmode coolingcircuit coolingon coolingstarts +coolingtype cooloffdelay coolondelay coolstart -COOLSTART coredata -Coredump +coredump coulod cppcheck -CPPCHECK cppdefines -CPPDEFINES cpplint cprint cpsell -CSOURCES +csources cstate +ctkwh curburnpow curflow curflowtemp +currhum curroominfl currsetpoint +currsolarinfl currtemp curtemp curvebase curveend curveon customentities -CUSTOMENTITIES -CUSTOMENTITY +customentity customlist customname -CXXSOURCES +customsupport +cxxsources cylbottomtemp cylheated cylinderpumpmod @@ -232,123 +236,117 @@ cylmiddletemp cylprio cylpriority cylpumpmod +cyltoptemp dailyheating dailyheattime +dailytemp dallassensor dampedoutdoortemp dangel -Dangel -DARDUINO -DARDUINOJSON +darduino +darduinojson datafield datalast -Dauer +dauer dayhightemp daylightsaving daylow -DAYLOW daylowtemp daymid -DAYMID daymidtemp daymode daytemp -DBOARD -DCLANG -DCORE -DEFAULTIDLETIME -DEFAULTTIMEOUT +dboard +dclang +dcore +defaultidletime +defaulttimeout defterm delayboiler delimieter delt -DEMC -DEMSESP -DEPFLAGS +deltatret +demc +demsesp +depflags depower depowering derefenced designtemp desitnation -DESP -Deutsch +desp +deutsch devicedata -DEVICEDATA deviceentities -DEVICEENTITIES -DEVICEERROR +deviceerror devicename -DEVICENAME devicetype devicevalue -DEVICEVALUE devicevalues +devkitc devtype dewoffset dewpoint +dewtemp dewtemperature dhwmintemp dhwprio dhwvalve +dhwx +difftemp disassoc -DISASSOC -Disballance -DISCONN -Disconnectfn -DISCR +disballance +disconn +disconnectfn +discr disinfectday disinfecthour disinfectiontemp disinfecttime displaycode -Domoticz -DOMOTICZ -DONEWIRE +domoticz +donewire doub doublematchflow drehzahl -Drehzahlanpassung +drehzahlanpassung dscrc -Dsonar -DTASMOTA -DUARATION -Eacj -EASYCOM -Eburner +dsonar +dtasmota +duaration +eacj +easycom +eburner ecodiff -Ecomline +ecomline ecooff ecoplus -Ecoplus ecoplusdiff ecoplusoff ecoplusstop ecostop ecotemp efuse -Efuse einschlafen +eldhw elec -Elec electricfactor -ELGs +elgendhw +elgenheat +elgs +elheat elheatstep emergencyops emergencytemp -EMESESP -EMODBUS +emesesp +emodbus emsdevice -EMSDEVICE emsdevices emsdevicevalue -EMSDEVICEVALUE emsesp -EMSESP -EMSFACTORY +emsfactory emsplus -EMSPLUS emsuart -EMSUART encodestate endcond energycostratio @@ -358,45 +356,45 @@ energypriceel energypricegas energytoday energytotal -Enthalpie +enthalpie entityid entitypath enumupdate -Enviline -Equipt +enviline +equipt erct erdwärmetauscher -Erdwärmetauscher +errordisp errornumber esphome espressif -Espressif -Espressif's +espressif's esptool etharp -ETSI +etsi evenodd everslick -Ewen +ewen exhausttemp externalcyl +fanspd fanwork fastheatup fastheatupfactor -FCGENERIC -FCILLEGAL +favs +fcgeneric +fcillegal fcmap -FCUSER +fcuser fdata fernbed -Fernbed fetchblock feucht -Feuchteschutz +feuchteschutz ffunction filesiz -Filterlaufzeit -Filterwechsel +filterlaufzeit +filterwechsel fipa firstscan fixarray @@ -406,69 +404,65 @@ fixmap fixstr flamecurr floordry -Floordry floordrying floordrystatus floordrytemp floorheating flowbuffer -FLOWCTRL +flowctrl flowoffset -FLOWOFFSET flowsensor flowsettemp flowtemp -Flowtemp flowtemphc flowtempoffset -Flowtemps +flowtemps flowtempvf fnames footpoint forceheatingoff forrmat fortluft -Fortluft fossile fossilefactor fprofile -FPSTR +fpstr +français freeable freemem -Frostgrenztemperatur -Frostschutz -FSFS +frostgrenztemperatur +frostschutz +fsfs fstotal ftest +fueldhw +fuelheat fullscreen fulltopic -Funktion -Furtheron +funktion +furtheron gasmeter gasmeterheat -Genuino -Gerätetyp +genuino +gerätetyp getserver getservername ggdb gifsicle -GIQFZUG +giqfzug glbl -Gochkov +gochkov gpio -GPIO gpios -GPIOs -GPOC -Greenstar -Grokhotkov +gpoc +greenstar +grokhotkov haclimate -systemstatus -Harwerth +hardwarestatus +harwerth headersize headertemp healthcheck -HEALTHCHECK heatandcool heatassistpower heatassistvalve @@ -477,7 +471,7 @@ heatcable heatcnt heatcntflowtemp heatcntrettemp -Heatcounter +heatcounter heatdrainpan heatexchangertemp heatingactivated @@ -487,7 +481,6 @@ heatingcircuits heatingciruit heatingcurve heatingoff -HEATINGOFF heatingpid heatingpump heatingpumpmod @@ -500,29 +493,26 @@ heatmetering heatoffdelay heatondelay heatpump -Heatpump -HEATPUMP heatpumpoutput heatpumps heatrequest -Heatronic +heatronic heatsource -Heatsource -HEATSOURCE heatsources heatstarts heattemp +heattransfer heattransfersystem heatup -Heatup heatvalve heatworkmin -Heizkeis -HEXDIGIT -HEXDUMP +heizkeis +hexdigit +hexdump hextoa hextoint -Heyse +heyse +hideled highfive hinzufügen historial @@ -531,7 +521,7 @@ holidaymode holidaymodes holidaytemp homeassistant -HOMEASSISTANT +hottemp hpactivity hpbrinein hpbrineout @@ -541,6 +531,7 @@ hpcircspd hpcompon hpcompspd hpcooling +hpcurrpower hpea hphystcool hphystheat @@ -554,6 +545,7 @@ hpoperatingstate hpph hppl hppower +hppowerlimit hppumpmode hpsetdiffpress hpshutdown @@ -563,23 +555,20 @@ hptc hptl hptr hptw -Hristo -HTTPC +hristo +httpc humi -HUMI -HVAC +hvac hwaddr hwrevision hybriddhw hybridstrategy hydr -Hydr hyst -Hyst hystoff hyston ibutton -ICCARM +iccarm icondegrees iconkb iconlmin @@ -587,25 +576,26 @@ iconnum iconpercent iconua idedata -Iele +iele ignwork -Iiwi -Ijoy -Imlhd +iiwi +ijoy +imlhd inbyte inexhaust infresh inkscape -INPROGRESS +inprogress instaliert instantstart intensiv -Intensiv +intergral intoffset inttemp +intvl invers invertiert -IRAM +iram isbroadcast isglobal islinklocal @@ -613,40 +603,40 @@ isloopback ismixed ismulticast isnum -Isrc +isrc isrunning issign issitelocal isuniquelocal isvalid isystem -Italiano +italiano itty ivtclock +jtag junkersclock kamin -Kamin -Karlesky -Keelbypass +karlesky +keelbypass +keepwarm keepwarmtemp -Kees -Kernighan's +kees +kernighan's keysvalues klappe kmin -KMIN kompakt -Konfig +konfig kwertie -Kwmoar +kwmoar labellen -Larios +larios lastcode lastpayload lastresponse lasttopic -LATXCLR -LATXSET +latxclr +latxset layeredbuffer ldata ldus @@ -654,58 +644,54 @@ ledc leistung lgcov libdeps -LIBRETINY -Licence -Liligo +libretiny +licence +liligo linebuf littlefs -LITTLEFS llen +lltoa lmin -LMIN lockguard lockmq -Logamatic -Logamax -Logano -Logavent -LOGDEVICE +logamatic +logamax +logano +logatherm +logavent +logdevice logentry -Logomatic -LOGRAW +logomatic +lograw lolin -Lolin -LOLIN -Lovato +lovato lownoisemode lownoisestart lownoisestop lowpressure lowtopic -Lufqualität -Luft -Lüfterstufe +lufqualität +luft luftfeuchte -Luftfeuchte -Luftfeuchtefühler -Luftqualfühl -Lüftungsfrostschutz -Lukás +luftfeuchtefühler +luftqualfühl +lukás +lüfterstufe +lüftungsfrostschutz maintenancedate maintenancemessage maintenancetime malloc mandefrost manualtemp -Manuell -Margolis -Marko +manuell +margolis +marko masterthermostat mathieucarbou maxalloc -MAXBUFFERSIZE +maxbuffersize maxflow -MAXFLOW maxflowtemp maxheat maxheatcomp @@ -716,18 +702,17 @@ maxpower maxt maxtemp maxv -MBAP +mbap mbar -MBAR mbed mbedtsl mdio -MDNS -Melis -Mellis -MEMPOL +mdns +melis +mellis +mempol memsiz -MENUCONFIG +menuconfig messagebuffer messagetime metercomp @@ -735,12 +720,12 @@ metercool metereheat meterheat metertotal +mfgadd mheyse microcontroller -Microcontroller mindcase minexttemp -MINFLOW +minflow minflowtemp miniv minmod @@ -750,58 +735,48 @@ mintempsilent minv misa mischer -Mischer mischerposition mixertemp mixingvalves -Mjhl -Mjkz +mjhl +mjkz mlongcalls -MMIO -Mmode -MMPLUS +mmio +mmode +mmplus mockserver modbus -Modbus -MODBUS modee modetype -MODULELIBRARY -Moduline +modulelibrary +moduline mozjpeg mqtt -Mqtt -MQTT mqttclient mqttconnects mqttcount mqttfails +mqttreconnects msgpack -Msgpack msgstr msys -Msys mtext mult -Mysys +mysys nachheiz -Nachheiz nachheizreg -Nachheizregister +nachheizregister nameserver ncmd ncols -Ndrop -Nederlands +ndrop +nederlands nefit -Nefit -NEFIT negcond negheat nein -Nennvolumentstrom +nennvolumentstrom neopixel -Neopixel netcmp netflowtemp netif @@ -811,26 +786,24 @@ newpcb newrssi nightmode nighttemp -NODEMCU +nodemcu nofrost -NOFROST nofrostmode nofrosttemp nominalpower nomis nompower -NOPULL -NOREDUCE +nopull +noreduce noreducetemp -Norsk +norsk nosleep nostdinc notepack notoken -NOTOKEN -NOTRANSLATION -NOTSET -NOTYPE +notranslation +notset +notype nrgconscomp nrgconscompcooling nrgconscompheating @@ -846,32 +819,28 @@ nrgsupppool nrgsupptotal nrgtotal nrgww -NSIs +nsis ntag -NUBD +nubd nullptr numericoperator -NUMJOBS +numjobs numop -NUMOP -Nwcl -Nystrom +nwcl +nystrom odata oddparity -öffnen offsettemp offtemp oilpreheat oldoffset -Olimex -OLIMEX -OLIMEXPOE +olimex +olimexpoe +omea onchange -ONCHANGE onetimekey onewire -ONEWIRE -Ooops +ooops operatingstate opmode optipng @@ -881,46 +850,46 @@ outdoortemp outexhaust outfresh outpow -Packr +packr pacman partitionname partymode payloadbuffer pbutton -PBUTTON penv periph -PERIPH persistance physaddr -PICO +pico pinchange -PINGREQ -PINGRESP -PINGTEST -PIOENV +pingreq +pingresp +pingtest +pinout +pioarduino +pioenv plainwatermode platformio -Platformio -PLATFORMIO pngquant polltime -Polski +polski poolsettemp +poolshunt +poolshuntstatus poolstarts -PORTX +pooltemp +portx +powerreduction powervalues prerel -Prerel primepump primepumpmod printfln prioitise prioritise -PRIXPTR -PROBEREQRECVED +prixptr +probereqrecved proddy -Proddy productid proga progb @@ -929,125 +898,131 @@ progd proge progf progmem -Progmem -PROGMEM progmode +proplow psram -Psram -PSRAM pswid ptys -Puback -PUBACK -PUBACKs -Pubcomp -PUBCOMP -PUBCOMPs -Pubrec -PUBREC -PUBRECs -Pubrel -PUBREL -PUBRELs +puback +pubacks +pubcomp +pubcomps +pubrec +pubrecs +pubrel +pubrels pumpcharacter pumpdelay pumpkick pumpminmod +pumpmod pumpmode pumpmodmax pumpmodmin +pumpontemp +pumpopt pumpstatus +pumpstep pumpworktime pvcooling pvenabledhw pvlen pvlowercool +pvmaxcomp pvraiseheat pvstr -PWRCAP -PYTHONEXE -QOSRESERVED +pwrcap +pythonexe +qosreserved qtxt -Qube +qube questionmark queuecount raumluftfechte raumluftqualität rawstr -RCPLUS +rcplus readback readelf +READYCLIENT +readymail +recp recved +redtemp +redthreshold reducehours reduceminutes reducemode reducetemp -Referer +referer registercount registeroffset rego -Rego -RELNOTES -Remmerswaal's +relais +relnotes +remmerswaal's remotehum remoteseltemp -REMOTESELTEMP remotetemp reqconntype reqs +requiredtemp retheatassist rettemp returncodes reuest -RFBASE +rfbase rfds -RFSENSOR -Rinterval +rfsensor +rinterval riscv rjwats -Rlistener -RMII +rlistener +rmii roboto romminfluencefactor roomcontrol -ROOMCONTROL roomcontroller roomcontrollers -Roomctrl +roomctrl +roomdata +roomflow roomhold roominfl roominflfactor roominfluence -ROOMINFLUENCE +roomload +roomname +roomparams +roomschedule roomsensor +roomsettings roomtemp roomtempdiff roomtemperature -Roomtemperature -ROOMTHERMOSTAT -Rrts -Rserial -Rskip +roomthermostat +roomthermostats +rrts +rserial +rskip rssi -Rssi -RSSI runqueue rxfails -RXFIFO +rxfifo rxreceived rxservice -Saavedra +saavedra safebuild -SAMD +samd saveandactivate scalefactor scancnt scanretry -SCHEDULEFLAG +scheduleflag schließen -SCLK +sclk sday -SDIO +sdio selburnpow selflowtemp seltemp @@ -1062,10 +1037,10 @@ sensorname sensorreads sensortype seperator -SERVERCLASS +serverclass servicecode servicecodenumber -SERVICEKEY +servicekey setburnpow setburnpower setflowtemp @@ -1075,28 +1050,30 @@ setpower setpumppower setreturntemp settemp -Settemp settemplow settingsfiles setvalue -SHORTNAMES +shortnames +showeralert +showertimer +shuntingyard sieger -Sieger -SIEGER signon -Sikken +sikken silentfrom silentmode silentto skipchar skipt sleepmode -Slovenčina -SLTKA +slovenčina +sltka smallitoa -Smartline +smartline sntp +sofasingle solarenabled +solarinfl solarmode solarmodule solarpower @@ -1107,34 +1084,37 @@ solarpumpmode solartemp solekreispumpe soll -Speicher +speicher +spidqs +spiio squaremeters -Srts -STACONNECTED -STADISCONNECTED -STAIPASSIGNED +srts +staconnected +stadisconnected +staipassigned +startshp +starttemp starttemperature -STARTVALUE +starttls +startvalue statusbyte stickbreaker -Stickbreaker -Stoffregen +stoffregen +stoptime storagetemp -Störung -STRINGARRAY -STRINGIZE -Studt -Studt's +stringarray +stringize +studt +studt's +störung suback -Suback -SUBACK substract summermode summersetmode summertemp supchan -SUPCHAN -Svenska +suprapur +svenska svmap swapflowtemp swaprettemp @@ -1145,27 +1125,28 @@ switchoff switchonoptimization switchovertemp switchprogmode +switchprogram switchtemp switchtime +switchtimeww sycle syspress sysrettemp -Tado -TADO +systembackup +systemstatus +tado tapactivated tapwarmwater tapwater tapwateractive targetflowtemp -TARGETHOSTINTERVAL +targethostinterval tasmota -Tasmota -TASMOTA -Tasmota's +tasmota's tbreak +teddybear tele tempauto -TEMPAUTO tempautotemp tempdiffboiler tempdiffcool @@ -1174,44 +1155,47 @@ tempecoplus temperatur temperaturcorrection temperaturesensor -TEMPERATURESENSOR templevel tempok tempparmode +temprature tempsensor -TEMPSENSOR +tempstatus testtemperature thermaldisinfect thermostate -Tillotson +tillotson timeoutcnt timestr -Toastify +toastify toencode toolbelt -TOOMANY -Topline +toomany +topline totalcompstarts tpcb -TRACELOG +tracelog +transferpump +transferpumpmod transre treemap -Trendline -Trewitt +trendline +trewitt triaging -Triaging -TRISXCLR -TRISXSET +trisxclr +trisxset trivago trocken -TRUEFALSE +truefalse +tsens tseslint -Türk turnoffdiff turnondiff +txen txerror txfails -TXMODE +txmode +txpause txread txreads txservice @@ -1222,21 +1206,20 @@ typehh typeids typel typesafe -Typesafe -UART +türk +uart ubauptime ucrt ultostr -Umladesystem -UNDERCLOCK +umladesystem +underclock unflags -UNICORE -Unpackr -Unported -UNSUB -Unsuback -UNSUBACK -UPLOADCMD +unicore +unpackr +unported +unsub +unsuback +uploadcmd uptimecomp uptimecompcooling uptimecompheating @@ -1244,60 +1227,63 @@ uptimecomppool uptimecontrol uptimetotal userprogram -Uutils -VACREDUCE +uutils +vacationmode +vacreduce vacreducemode vacreducetemp validateid -VALIDATORC -VALIDATORR +validatorc +validatorr valu -VALUECONFIG +valueconfig valuename +valvereturn valvesettime valvestatus -Vander -Ventil +vander +vchip +ventil ventinspeed ventmode ventoutspeed venv verwendete -Vflag +vflag viewtopic virtaddr -Volumenstromabgleich -Voord +volumenstromabgleich +voord vorheizer vorheizreg vpcooling vrey -Vybm -Wärmetauscher +vybm +washingmachine watchid wayon wayvalve -Wconversion -Wdiv +wconversion +wdiv webui wemos -Wemos -Werror -Wextra +werror +wextra whenmodeoff -WIFICLIENT +wificlient +wifireconnects wifistrength winsock withexitstatus -Wmaybe -Worchester +wmaybe +worchester workm workmin worktime -WOULDBLOCK -Wswitch -Wtype -Wunused +wouldblock +wswitch +wtype +wunused wwactivated wwcharge wwchargeduration @@ -1313,6 +1299,7 @@ wwmodes wwonetime wwprio wwseltemp +wwstarts wwswitchtime wwtankmiddletemp wwtapactivated @@ -1320,132 +1307,27 @@ wwtemp wwtemplow wwvacations wwwhenmodeoff -Xclnt -XRTU -XTCP -XVCJ -Yerger -Yerger's +wärmetauscher +xclnt +xiao +xrtu +xtcp +xvcj +yerger +yerger's yubox -Zivanovic -Živanović -Zlcn +zadig +zivanovic +zlcn zolder -Zolder zqhi -ZSIs +zsis zuluft -Zuluft zuluftebläse zuluftgebläse zulufttemp zyxwvutsrqponmlkjihgfedcba -Omea -Bolv -hardwarestatus -hpcurrpower -hppowerlimit -CUSTOMSUPPORT -favs -Logatherm -TSENS -pumpontemp -Česky -pioarduino -switchtimeww -pvmaxcomp -powerreduction -starttemp -heattransfer -poolshunt -poolshuntstatus -pooltemp -stoptime -showertimer -showeralert -CTKWH -wifireconnects -mqttreconnects -wwstarts -auxheaterlevel -startshp -cyltoptemp -transferpump -transferpumpmod -startshp -tempstatus -difftemp -redtemp -requiredtemp -coldtemp -redtemp -hottemp -dailytemp -circtc -keepwarm -pumpmod -valvereturn -deltatret -errordisp -commandsfunctions -hideled -analogenabled -dhwx -ahsx -roomflow -roomload -intvl -Français -lltoa -redthreshold -JTAG -fuelheat -elheat -elgenheat -fueldhw -eldhw -elgendhw -solarinfl -currsolarinfl -temprature -bblanchon -vacationmode -airbypass -Suprapur -mfgadd -shuntingyard -XIAO -zadig -devkitc -Roomthermostats -Roomname -Roomsettings -Roomparams -Roomdata -Roomschedule -dewtemp -chefhat -sofasingle -bowlmix -bedsingle -beddouble -teddybear -washingmachine -switchprogram -brotlin -fanspd -currhum -pumpstep -constmed -constlow -proplow -chimneysweeper -pumpopt -intergral -vchip -SPIIO -SPIDQS -txpause -relais -pinout -TXEN \ No newline at end of file +öffnen +česky +živanović +MWDT \ No newline at end of file diff --git a/scripts/build_interface.py b/scripts/build_interface.py index 069e8c774..0be356f58 100755 --- a/scripts/build_interface.py +++ b/scripts/build_interface.py @@ -74,7 +74,7 @@ def buildWeb(): # Run pnpm commands in the interface directory commands = [ f"{pnpm_exe} install", - f"{pnpm_exe} build_webUI" + f"{pnpm_exe} build-webUI" ] for command in commands: diff --git a/scripts/update_all.sh b/scripts/update_all.sh index 31992ecd8..283e892c5 100644 --- a/scripts/update_all.sh +++ b/scripts/update_all.sh @@ -20,7 +20,7 @@ pnpm format cd .. cd interface -pnpm build_webUI +pnpm build-webUI cd .. npx cspell "**" diff --git a/sonar-project.properties b/sonar-project.properties index cee91ae32..563719c80 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,7 +1,7 @@ sonar.organization=emsesp sonar.projectKey=emsesp_EMS-ESP32 sonar.projectName=EMS-ESP32 -sonar.projectVersion=3.8.0 +sonar.projectVersion=3.8.2 sonar.sources=./src sonar.cfamily.compile-commands=bw-output/compile_commands.json sonar.sourceEncoding=UTF-8 diff --git a/src/ESP32React/APSettingsService.cpp b/src/ESP32React/APSettingsService.cpp index e26d3647d..b0e3480be 100644 --- a/src/ESP32React/APSettingsService.cpp +++ b/src/ESP32React/APSettingsService.cpp @@ -21,24 +21,24 @@ void APSettingsService::begin() { // wait 10 sec on STA disconnect before starting AP void APSettingsService::WiFiEvent(WiFiEvent_t event) { - uint8_t was_connected = _connected; + const uint8_t was_connected = _connected; switch (event) { case ARDUINO_EVENT_WIFI_STA_DISCONNECTED: - _connected &= ~1; + _connected &= ~1U; break; case ARDUINO_EVENT_ETH_DISCONNECTED: - _connected &= ~2; + _connected &= ~2U; break; case ARDUINO_EVENT_WIFI_STA_GOT_IP: case ARDUINO_EVENT_WIFI_STA_GOT_IP6: - _connected |= 1; + _connected |= 1U; break; case ARDUINO_EVENT_ETH_GOT_IP: case ARDUINO_EVENT_ETH_GOT_IP6: - _connected |= 2; + _connected |= 2U; break; default: - break; + return; } // wait 10 sec before starting AP if (was_connected && !_connected) { @@ -52,18 +52,19 @@ void APSettingsService::reconfigureAP() { } void APSettingsService::loop() { - unsigned long currentMillis = uuid::get_uptime(); - unsigned long manageElapsed = static_cast(currentMillis - _lastManaged); - if (manageElapsed >= MANAGE_NETWORK_DELAY) { + const unsigned long currentMillis = uuid::get_uptime(); + if ((currentMillis - _lastManaged) >= MANAGE_NETWORK_DELAY) { _lastManaged = currentMillis; manageAP(); } - handleDNS(); + if (_dnsServer) { + handleDNS(); + } } void APSettingsService::manageAP() { - WiFiMode_t currentWiFiMode = WiFi.getMode(); + const WiFiMode_t currentWiFiMode = WiFi.getMode(); if (_state.provisionMode == AP_MODE_ALWAYS || (_state.provisionMode == AP_MODE_DISCONNECTED && !_connected)) { if (_reconfigureAp || currentWiFiMode == WIFI_OFF || currentWiFiMode == WIFI_STA) { startAP(); @@ -87,8 +88,10 @@ void APSettingsService::startAP() { WiFi.setTxPower(WIFI_POWER_8_5dBm); // https://www.wemos.cc/en/latest/c3/c3_mini_1_0_0.html#about-wifi #endif if (!_dnsServer) { - IPAddress apIp = WiFi.softAPIP(); - emsesp::EMSESP::logger().info("Starting Access Point with captive portal on %s", apIp.toString().c_str()); + const IPAddress apIp = WiFi.softAPIP(); + char ipStr[16]; + snprintf(ipStr, sizeof(ipStr), "%u.%u.%u.%u", apIp[0], apIp[1], apIp[2], apIp[3]); + emsesp::EMSESP::logger().info("Starting Access Point with captive portal on %s", ipStr); _dnsServer = new DNSServer; _dnsServer->start(DNS_PORT, "*", apIp); } @@ -111,8 +114,8 @@ void APSettingsService::handleDNS() { } APNetworkStatus APSettingsService::getAPNetworkStatus() { - WiFiMode_t currentWiFiMode = WiFi.getMode(); - bool apActive = currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA; + const WiFiMode_t currentWiFiMode = WiFi.getMode(); + const bool apActive = (currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA); if (apActive && _state.provisionMode != AP_MODE_ALWAYS && WiFi.status() == WL_CONNECTED) { return APNetworkStatus::LINGERING; @@ -135,7 +138,7 @@ void APSettings::read(const APSettings & settings, JsonObject root) { } StateUpdateResult APSettings::update(JsonObject root, APSettings & settings) { - APSettings newSettings = {}; + APSettings newSettings{}; newSettings.provisionMode = static_cast(root["provision_mode"] | FACTORY_AP_PROVISION_MODE); switch (settings.provisionMode) { diff --git a/src/ESP32React/APSettingsService.h b/src/ESP32React/APSettingsService.h index fda384bc8..947911882 100644 --- a/src/ESP32React/APSettingsService.h +++ b/src/ESP32React/APSettingsService.h @@ -1,5 +1,5 @@ -#ifndef APSettingsConfig_h -#define APSettingsConfig_h +#ifndef APSettingsService_h +#define APSettingsService_h #include "HttpEndpoint.h" #include "FSPersistence.h" @@ -70,9 +70,9 @@ class APSettings { IPAddress subnetMask; bool operator==(const APSettings & settings) const { - return provisionMode == settings.provisionMode && ssid == settings.ssid && password == settings.password && channel == settings.channel - && ssidHidden == settings.ssidHidden && maxClients == settings.maxClients && localIP == settings.localIP && gatewayIP == settings.gatewayIP - && subnetMask == settings.subnetMask; + return provisionMode == settings.provisionMode && channel == settings.channel && ssidHidden == settings.ssidHidden && maxClients == settings.maxClients + && localIP == settings.localIP && gatewayIP == settings.gatewayIP && subnetMask == settings.subnetMask && ssid == settings.ssid + && password == settings.password; } static void read(const APSettings & settings, JsonObject root); @@ -96,8 +96,8 @@ class APSettingsService : public StatefulService { // for the management delay loop volatile unsigned long _lastManaged; - volatile boolean _reconfigureAp; - uint8_t _connected; + volatile bool _reconfigureAp; + volatile uint8_t _connected; void reconfigureAP(); void manageAP(); diff --git a/src/ESP32React/ArduinoJsonJWT.cpp b/src/ESP32React/ArduinoJsonJWT.cpp index 6f87e926c..bbc2b11ac 100644 --- a/src/ESP32React/ArduinoJsonJWT.cpp +++ b/src/ESP32React/ArduinoJsonJWT.cpp @@ -66,21 +66,16 @@ void ArduinoJsonJWT::parseJWT(String jwt, JsonDocument & jsonDocument) { } /* - * ESP32 uses mbedtls, with decent HMAC implementations supporting sha256, as well as others. - * No need to pull in additional crypto libraries - lets use what we already have. + * HMAC-SHA256 using mbedtls */ String ArduinoJsonJWT::sign(String & payload) { std::array hmacResult{}; - { - mbedtls_md_context_t ctx; - mbedtls_md_type_t md_type = MBEDTLS_MD_SHA256; - mbedtls_md_init(&ctx); - mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 1); - mbedtls_md_hmac_starts(&ctx, reinterpret_cast(_secret.c_str()), _secret.length()); - mbedtls_md_hmac_update(&ctx, reinterpret_cast(payload.c_str()), payload.length()); - mbedtls_md_hmac_finish(&ctx, hmacResult.data()); - mbedtls_md_free(&ctx); - } + mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), + reinterpret_cast(_secret.c_str()), + _secret.length(), + reinterpret_cast(payload.c_str()), + payload.length(), + hmacResult.data()); return encode(reinterpret_cast(hmacResult.data()), hmacResult.size()); } diff --git a/src/ESP32React/ESP32React.cpp b/src/ESP32React/ESP32React.cpp index 72bd28a2d..73575178c 100644 --- a/src/ESP32React/ESP32React.cpp +++ b/src/ESP32React/ESP32React.cpp @@ -2,8 +2,75 @@ #include "WWWData.h" // include auto-generated static web resources +#include + +static constexpr const char CACHE_CONTROL[] = "public,max-age=60"; + +// Single static-content handler serving all assets embedded in WWWData.h. +class StaticContentHandler : public AsyncWebHandler { + public: + bool canHandle(AsyncWebServerRequest * request) const override { + const auto method = request->method(); + return method == HTTP_GET || method == HTTP_HEAD || method == HTTP_OPTIONS; + } + + void handleRequest(AsyncWebServerRequest * request) override { + // OPTIONS is handled generically - the server-level CORS headers are + // attached via DefaultHeaders in ESP32React::begin(). + if (request->method() == HTTP_OPTIONS) { + request->send(200); + return; + } + + const char * url = request->url().c_str(); + const WWWAsset * found = lookup(url); + const WWWAsset * asset = found ? found : index_asset(); + + if (asset == nullptr) { + request->send(404); + return; + } + + // If the client already has this exact ETag, respond 304 Not Modified without sending the body. + const String & inm = request->header(asyncsrv::T_INM); + if (inm.length() != 0 && strcmp(inm.c_str(), asset->etag) == 0) { + request->send(304); + return; + } + + AsyncWebServerResponse * response = request->beginResponse(200, asset->contentType, asset->content, asset->len); + response->addHeader(asyncsrv::T_Content_Encoding, asyncsrv::T_gzip, false); + response->addHeader(asyncsrv::T_ETag, asset->etag, false); + response->addHeader(asyncsrv::T_Cache_Control, CACHE_CONTROL, false); + request->send(response); + } + + private: + // Exact-match lookup in the asset table + static const WWWAsset * lookup(const char * url) { + for (size_t i = 0; i < WWW_ASSETS_COUNT; i++) { + if (strcmp(WWW_ASSETS[i].uri, url) == 0) { + return &WWW_ASSETS[i]; + } + } + return nullptr; + } + + // Returns the /index.html asset, used as the SPA fallback for any GET + // that didn't match an embedded asset (React Router handles routing on + // the client side). + static const WWWAsset * index_asset() { + static const WWWAsset * cached = nullptr; + if (cached == nullptr) { + cached = lookup("/index.html"); + } + return cached; + } +}; + ESP32React::ESP32React(AsyncWebServer * server, FS * fs) - : _securitySettingsService(server, fs) + : _server(server) + , _securitySettingsService(server, fs) , _networkSettingsService(server, fs, &_securitySettingsService) , _wifiScanner(server, &_securitySettingsService) , _networkStatus(server, &_securitySettingsService) @@ -15,53 +82,6 @@ ESP32React::ESP32React(AsyncWebServer * server, FS * fs) , _mqttSettingsService(server, fs, &_securitySettingsService) , _mqttStatus(server, &_mqttSettingsService, &_securitySettingsService) , _authenticationService(server, &_securitySettingsService) { - // - // Serve static web resources - // - - ArRequestHandlerFunction indexHtmlHandler = nullptr; - - WWWData::registerRoutes([server, &indexHtmlHandler](const char * uri, const String & contentType, const uint8_t * content, size_t len, const String & hash) { - ArRequestHandlerFunction requestHandler = [contentType, content, len, hash](AsyncWebServerRequest * request) { - AsyncWebServerResponse * response; - - // Check if the client already has the same version and respond with a 304 (Not modified) - if (request->header("If-None-Match").equals(hash)) { - response = request->beginResponse(304); - } else { - response = request->beginResponse(200, contentType, content, len); - response->addHeader("Content-Encoding", "gzip"); // not br for brotlin only works over HTTPS - } - - // always send these headers - see https://datatracker.ietf.org/doc/html/rfc7232#section-4.1 - response->addHeader("ETag", hash); - response->addHeader("Cache-Control", "no-cache"); // Requires revalidation before using cached content (ETags enable 304 responses) - - request->send(response); - }; - - server->on(uri, HTTP_GET, requestHandler); - - // Capture index.html handler to set onNotFound once after all routes are registered - if (strcmp(uri, "/index.html") == 0) { - indexHtmlHandler = requestHandler; - } - }); - - // Set onNotFound handler once after all routes are registered - // Serving non matching get requests with "/index.html" - // OPTIONS get a straight up 200 response - if (indexHtmlHandler != nullptr) { - server->onNotFound([indexHtmlHandler](AsyncWebServerRequest * request) { - if (request->method() == HTTP_GET) { - indexHtmlHandler(request); - } else if (request->method() == HTTP_OPTIONS) { - request->send(200); - } else { - request->send(404); // not found - } - }); - } } void ESP32React::begin() { @@ -69,20 +89,21 @@ void ESP32React::begin() { _networkSettingsService.read([&](NetworkSettings & networkSettings) { DefaultHeaders & defaultHeaders = DefaultHeaders::Instance(); if (networkSettings.enableCORS) { - defaultHeaders.addHeader("Access-Control-Allow-Origin", networkSettings.CORSOrigin); - defaultHeaders.addHeader("Access-Control-Allow-Headers", "Accept, Content-Type, Authorization"); - defaultHeaders.addHeader("Access-Control-Allow-Credentials", "true"); + defaultHeaders.addHeader(asyncsrv::T_CORS_ACAO, networkSettings.CORSOrigin); + defaultHeaders.addHeader(asyncsrv::T_CORS_ACAH, "Accept, Content-Type, Authorization"); + defaultHeaders.addHeader(asyncsrv::T_CORS_ACAC, "true"); } - defaultHeaders.addHeader("Server", networkSettings.hostname); + defaultHeaders.addHeader(asyncsrv::T_Server, networkSettings.hostname); }); _apSettingsService.begin(); _ntpSettingsService.begin(); _mqttSettingsService.begin(); _securitySettingsService.begin(); + _server->addHandler(new StaticContentHandler()); } void ESP32React::loop() { _networkSettingsService.loop(); _apSettingsService.loop(); _mqttSettingsService.loop(); -} \ No newline at end of file +} diff --git a/src/ESP32React/ESP32React.h b/src/ESP32React/ESP32React.h index f5af50a8a..cbcea487e 100644 --- a/src/ESP32React/ESP32React.h +++ b/src/ESP32React/ESP32React.h @@ -68,6 +68,7 @@ class ESP32React { } private: + AsyncWebServer * _server; SecuritySettingsService _securitySettingsService; NetworkSettingsService _networkSettingsService; WiFiScanner _wifiScanner; diff --git a/src/ESP32React/JsonUtils.h b/src/ESP32React/JsonUtils.h index 0d2ff9fa5..7870f34a6 100644 --- a/src/ESP32React/JsonUtils.h +++ b/src/ESP32React/JsonUtils.h @@ -10,20 +10,23 @@ class JsonUtils { public: static void readIP(JsonObject root, const String & key, IPAddress & ip, const String & def) { - IPAddress defaultIp = {}; + IPAddress defaultIp{}; if (!defaultIp.fromString(def)) { defaultIp = INADDR_NONE; } readIP(root, key, ip, defaultIp); } static void readIP(JsonObject root, const String & key, IPAddress & ip, const IPAddress & defaultIp = INADDR_NONE) { - if (!root[key].is() || !ip.fromString(root[key].as())) { + const JsonVariant value = root[key]; + if (!value.is() || !ip.fromString(value.as())) { ip = defaultIp; } } static void writeIP(JsonObject root, const String & key, const IPAddress & ip) { if (IPUtils::isSet(ip)) { - root[key] = ip.toString(); + char ipStr[16]; + snprintf(ipStr, sizeof(ipStr), "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]); + root[key] = ipStr; } } }; diff --git a/src/ESP32React/MqttSettingsService.cpp b/src/ESP32React/MqttSettingsService.cpp index 11c84462e..400dcf6fd 100644 --- a/src/ESP32React/MqttSettingsService.cpp +++ b/src/ESP32React/MqttSettingsService.cpp @@ -185,10 +185,14 @@ bool MqttSettingsService::configureMqtt() { #ifndef TASMOTA_SDK if (_state.enableTLS) { if (_state.rootCA == "insecure") { +#if defined(EMSESP_DEBUG) emsesp::EMSESP::logger().debug("Start insecure MQTT"); +#endif static_cast(_mqttClient)->setInsecure(); } else { +#if defined(EMSESP_DEBUG) emsesp::EMSESP::logger().debug("Start secure MQTT with rootCA"); +#endif String certificate = "-----BEGIN CERTIFICATE-----\n" + _state.rootCA + "\n-----END CERTIFICATE-----\n"; static_cast(_mqttClient)->setCACert(certificate.c_str()); } @@ -255,8 +259,8 @@ void MqttSettings::read(MqttSettings & settings, JsonObject root) { } StateUpdateResult MqttSettings::update(JsonObject root, MqttSettings & settings) { - MqttSettings newSettings = {}; - bool changed = false; + MqttSettings newSettings; + bool changed = false; #ifndef TASMOTA_SDK newSettings.enableTLS = root["enableTLS"]; @@ -316,6 +320,10 @@ StateUpdateResult MqttSettings::update(JsonObject root, MqttSettings & settings) changed = true; } + if (newSettings.ha_number_mode != settings.ha_number_mode) { + changed = true; + } + if (newSettings.entity_format != settings.entity_format) { changed = true; } diff --git a/src/ESP32React/MqttSettingsService.h b/src/ESP32React/MqttSettingsService.h index 83cf751dd..36b52fa74 100644 --- a/src/ESP32React/MqttSettingsService.h +++ b/src/ESP32React/MqttSettingsService.h @@ -125,11 +125,11 @@ class MqttSettingsService : public StatefulService { FSPersistence _fsPersistence; // variable to help manage connection - bool _reconfigureMqtt; - unsigned long _disconnectedAt; + volatile bool _reconfigureMqtt; + volatile unsigned long _disconnectedAt; // connection status - espMqttClientTypes::DisconnectReason _disconnectReason; + volatile espMqttClientTypes::DisconnectReason _disconnectReason; // the MQTT client instance MqttClient * _mqttClient; diff --git a/src/ESP32React/NTPSettingsService.h b/src/ESP32React/NTPSettingsService.h index 4b3bbce69..635b68f1c 100644 --- a/src/ESP32React/NTPSettingsService.h +++ b/src/ESP32React/NTPSettingsService.h @@ -49,7 +49,7 @@ class NTPSettingsService : public StatefulService { private: HttpEndpoint _httpEndpoint; FSPersistence _fsPersistence; - bool _connected; + volatile bool _connected; void WiFiEvent(WiFiEvent_t event); void configureNTP(); diff --git a/src/ESP32React/NetworkSettingsService.h b/src/ESP32React/NetworkSettingsService.h index f35186bf6..7c1ed0ff7 100644 --- a/src/ESP32React/NetworkSettingsService.h +++ b/src/ESP32React/NetworkSettingsService.h @@ -102,10 +102,10 @@ class NetworkSettingsService : public StatefulService { HttpEndpoint _httpEndpoint; FSPersistence _fsPersistence; - unsigned long _lastConnectionAttempt; - bool _stopping; + volatile unsigned long _lastConnectionAttempt; + volatile bool _stopping; - uint16_t connectcount_ = 0; // number of wifi reconnects + volatile uint16_t connectcount_ = 0; // number of wifi reconnects void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info); void mDNS_start() const; diff --git a/src/ESP32React/UploadFileService.cpp b/src/ESP32React/UploadFileService.cpp index 4d016dce4..4d0209d1f 100644 --- a/src/ESP32React/UploadFileService.cpp +++ b/src/ESP32React/UploadFileService.cpp @@ -4,6 +4,7 @@ #include #include +// #include static String getFilenameExtension(const String & filename) { const auto pos = filename.lastIndexOf('.'); @@ -16,8 +17,8 @@ static String getFilenameExtension(const String & filename) { UploadFileService::UploadFileService(AsyncWebServer * server, SecurityManager * securityManager) : _securityManager(securityManager) , _is_firmware(false) + , _is_filesystem(false) , _md5() { - // upload a file via a form server->on( UPLOAD_FILE_PATH, HTTP_POST, @@ -41,8 +42,14 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri const String extension = getFilenameExtension(filename); const std::size_t filesize = request->contentLength(); - _is_firmware = false; - if ((extension == "bin") && (filesize > 1000000)) { + _is_firmware = false; + _is_filesystem = false; + + if (extension == "bin" && filename.endsWith("littlefs.bin")) { + // LittleFS filesystem image + _is_filesystem = true; + _md5[0] = '\0'; // clear any stale md5 so Update.end() doesn't compare against it + } else if ((extension == "bin") && (filesize > 2000000)) { _is_firmware = true; } else if (extension == "json") { _md5[0] = '\0'; // clear md5 @@ -61,28 +68,34 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri if (_is_firmware) { // Check firmware header, 0xE9 magic offset 0 indicates esp bin, chip offset 12: esp32:0, S2:2, C3:5 #if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4 - if (len > 12 && (data[0] != 0xE9 || data[12] != 0)) { + if (len > 12 && (data[0] != ESP_IMAGE_HEADER_MAGIC || data[12] != ESP_CHIP_ID_ESP32)) { handleError(request, 503); // service unavailable return; } #elif CONFIG_IDF_TARGET_ESP32S2 - if (len > 12 && (data[0] != 0xE9 || data[12] != 2)) { + if (len > 12 && (data[0] != ESP_IMAGE_HEADER_MAGIC || data[12] != ESP_CHIP_ID_ESP32S2)) { handleError(request, 503); // service unavailable return; } #elif CONFIG_IDF_TARGET_ESP32C3 - if (len > 12 && (data[0] != 0xE9 || data[12] != 5)) { + if (len > 12 && (data[0] != ESP_IMAGE_HEADER_MAGIC || data[12] != ESP_CHIP_ID_ESP32C3)) { handleError(request, 503); // service unavailable return; } #elif CONFIG_IDF_TARGET_ESP32S3 - if (len > 12 && (data[0] != 0xE9 || data[12] != 9)) { + if (len > 12 && (data[0] != ESP_IMAGE_HEADER_MAGIC || data[12] != ESP_CHIP_ID_ESP32S3)) { + handleError(request, 503); // service unavailable + return; + } +#elif CONFIG_IDF_TARGET_ESP32C6 + if (len > 12 && (data[0] != ESP_IMAGE_HEADER_MAGIC || data[12] != ESP_CHIP_ID_ESP32C6)) { handleError(request, 503); // service unavailable return; } #endif // it's firmware - initialize the ArduinoOTA updater emsesp::EMSESP::logger().info("Uploading firmware file %s (size: %d KB). Please wait...", filename.c_str(), filesize / 1024); + // turn off UART to prevent interference with the upload emsesp::EMSuart::stop(); @@ -91,28 +104,55 @@ void UploadFileService::handleUpload(AsyncWebServerRequest * request, const Stri Update.setMD5(_md5.data()); _md5.front() = '\0'; } - request->onDisconnect([this] { handleEarlyDisconnect(); }); // success, let's make sure we end the update if the client hangs up + request->onDisconnect([this] { handleDisconnect(); }); // success, let's make sure we end the update if the client hangs up } else { handleError(request, 507); // failed to begin, send an error response Insufficient Storage return; } + } else if (_is_filesystem) { + // LittleFS filesystem image - flash directly to the spiffs/littlefs partition + emsesp::EMSESP::logger().info("Uploading filesystem image %s (size: %u KB). Please wait...", filename.c_str(), static_cast(filesize / 1024)); + emsesp::EMSuart::stop(); + LittleFS.end(); // unmount LittleFS before we overwrite the partition under it + + // request->contentLength() is the multipart HTTP body size, not the file size, + // so it can exceed the partition by a few hundred bytes. Use UPDATE_SIZE_UNKNOWN + // and let the Update library size against the whole partition. + if (Update.begin(UPDATE_SIZE_UNKNOWN, U_SPIFFS)) { + // emsesp::EMSESP::logger().info("Update.begin(U_SPIFFS) ok, partition size %u bytes", static_cast(Update.size())); + request->onDisconnect([this] { handleDisconnect(); }); + } else { + emsesp::EMSESP::logger().err("Update.begin(U_SPIFFS) failed: %s", Update.errorString()); + handleError(request, 507); + return; + } } else { // its a normal file, open a new temp file to write the contents too request->_tempFile = LittleFS.open(TEMP_FILENAME_PATH, "w"); } } - if (!_is_firmware) { - if (len && len != request->_tempFile.write(data, len)) { // stream the incoming chunk to the opened file - handleError(request, 507); // 507-Insufficient Storage - } - } else if (!request->_tempObject) { // if we haven't delt with an error, continue with the firmware update - if (Update.write(data, len) != len) { - handleError(request, 500); // internal error, failed - return; - } - if (final && !Update.end(true)) { - handleError(request, 500); // internal error, failed + if (_is_firmware || _is_filesystem) { + if (!request->_tempObject) { // if we haven't delt with an error, continue with the OTA update + if (Update.write(data, len) != len) { + emsesp::EMSESP::logger().err("Update.write failed at offset %u (chunk %u): %s", + static_cast(Update.progress()), + static_cast(len), + Update.errorString()); + handleError(request, 500); // internal error, failed + return; + } + if (final) { + if (!Update.end(true)) { + emsesp::EMSESP::logger().err("Update.end failed: %s", Update.errorString()); + handleError(request, 500); + return; + } + } + } else { + if (len && len != request->_tempFile.write(data, len)) { // stream the incoming chunk to the opened file + handleError(request, 507); // 507-Insufficient Storage + } } } } @@ -130,11 +170,13 @@ void UploadFileService::uploadComplete(AsyncWebServerRequest * request) { return; } - // check if it was a firmware upgrade - // if no error, send the success response as a JSON - if (_is_firmware && !request->_tempObject) { - // set NVS to tell EMS-ESP this is a new fresh firmware on next restart - emsesp::EMSESP::nvs_.putBool(emsesp::EMSESP_NVS_BOOT_NEW_FIRMWARE, true); + // check if it was a firmware or filesystem image upgrade + // if no error, send the success response and request a restart + if ((_is_firmware || _is_filesystem) && !request->_tempObject) { + if (_is_firmware) { + // set NVS to tell EMS-ESP this is a new fresh firmware on next restart + emsesp::EMSESP::nvs_.putBool(emsesp::EMSESP_NVS_BOOT_NEW_FIRMWARE, true); + } AsyncWebServerResponse * response = request->beginResponse(200); request->send(response); @@ -173,15 +215,21 @@ void UploadFileService::handleError(AsyncWebServerRequest * request, int code) { // that is caught by the web code. Unfortunately the http error code is not sent to the client on fast network connections if (code == 406) { request->client()->close(); - _is_firmware = false; + _is_firmware = false; + _is_filesystem = false; Update.abort(); } + + // if we aborted a filesystem upload, remount LittleFS so the device keeps working + if (_is_filesystem) { + LittleFS.begin(); + } } -void UploadFileService::handleEarlyDisconnect() { - emsesp::EMSESP::logger().info("Upload ended"); +void UploadFileService::handleDisconnect() { + emsesp::EMSESP::logger().info("Upload finished"); emsesp::EMSESP::system_.uart_init(); // re-enable UART - _is_firmware = false; - Update.abort(); + _is_firmware = false; + _is_filesystem = false; } diff --git a/src/ESP32React/UploadFileService.h b/src/ESP32React/UploadFileService.h index 352342148..4c8a20dbb 100644 --- a/src/ESP32React/UploadFileService.h +++ b/src/ESP32React/UploadFileService.h @@ -22,13 +22,14 @@ class UploadFileService { private: SecurityManager * _securityManager; bool _is_firmware; + bool _is_filesystem; std::array _md5; void handleUpload(AsyncWebServerRequest * request, const String & filename, size_t index, uint8_t * data, size_t len, bool final); void uploadComplete(AsyncWebServerRequest * request); void handleError(AsyncWebServerRequest * request, int code); - void handleEarlyDisconnect(); + void handleDisconnect(); }; #endif \ No newline at end of file diff --git a/src/core/EMSESP_Version.h b/src/core/EMSESP_Version.h new file mode 100644 index 000000000..0803be2b5 --- /dev/null +++ b/src/core/EMSESP_Version.h @@ -0,0 +1,126 @@ +/* + * EMS-ESP - https://github.com/emsesp/EMS-ESP + * Copyright 2020-2026 emsesp.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef EMSESP_Version_H +#define EMSESP_Version_H + +#include +#include +#include + +// Drop-in lightweight replacement for the subset of the semver library actually used by EMS-ESP. +// The previous semver library (lib/semver) builds a std::map + std::function-based state machine on +// every parse, which fragments the internal heap on the ESP32. This replacement does no heap +// allocation beyond the std::string member for the prerelease tag, and matches the API surface +// we consume: construction from string, major()/minor()/patch()/prerelease(), and operator>/(const EMSESP_Version & a, const EMSESP_Version & b) { + return b < a; + } + + friend bool operator==(const EMSESP_Version & a, const EMSESP_Version & b) { + return a.major_ == b.major_ && a.minor_ == b.minor_ && a.patch_ == b.patch_ && a.prerelease_ == b.prerelease_; + } + + friend bool operator!=(const EMSESP_Version & a, const EMSESP_Version & b) { + return !(a == b); + } + + friend bool operator>=(const EMSESP_Version & a, const EMSESP_Version & b) { + return !(a < b); + } + + friend bool operator<=(const EMSESP_Version & a, const EMSESP_Version & b) { + return !(b < a); + } + + private: + int major_ = 0; + int minor_ = 0; + int patch_ = 0; + std::string prerelease_; + + void parse(const char * s) { + major_ = minor_ = patch_ = 0; + prerelease_.clear(); + if (s == nullptr || *s == '\0') { + return; + } + // parse numeric major.minor.patch; accept partial ("3", "3.9", "3.9.0") + sscanf(s, "%d.%d.%d", &major_, &minor_, &patch_); + // capture prerelease tag after '-' if present (stop at '+' which is build metadata) + const char * dash = strchr(s, '-'); + if (dash != nullptr) { + const char * plus = strchr(dash, '+'); + if (plus != nullptr) { + prerelease_.assign(dash + 1, plus - dash - 1); + } else { + prerelease_.assign(dash + 1); + } + } + } +}; + +} // namespace version + +#endif diff --git a/src/core/ModuleLibrary.cpp b/src/core/ModuleLibrary.cpp new file mode 100644 index 000000000..1d0bff0ea --- /dev/null +++ b/src/core/ModuleLibrary.cpp @@ -0,0 +1,31 @@ +/* + * EMS-ESP - https://github.com/emsesp/EMS-ESP + * Copyright 2020-2025 emsesp.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#include + +void ModuleLibrary::list(JsonObject output) {}; + +void ModuleLibrary::loop() {}; + +void ModuleLibrary::start(emsesp::EMSESP * emsesp_main, bool test_mode) {}; + +bool ModuleLibrary::enable(const char * key, const char * license, bool enable) { + return true; +}; diff --git a/src/core/ModuleLibrary.h b/src/core/ModuleLibrary.h new file mode 100644 index 000000000..e9d410a4d --- /dev/null +++ b/src/core/ModuleLibrary.h @@ -0,0 +1,52 @@ +/* + * EMS-ESP - https://github.com/emsesp/EMS-ESP + * Copyright 2020-2025 emsesp.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef MODULELIBRARY_H +#define MODULELIBRARY_H + +#include + +#include +#include + +#include + +class ModuleLibrary { + public: + class Modules { + public: + Modules(const char * key, std::unique_ptr module) + : key(key) + , module(std::move(module)) { + } + const char * key; + std::unique_ptr module; + }; + + void start(emsesp::EMSESP * emsesp_main, bool test_mode = false); + void loop(); + void list(JsonObject output); + bool enable(const char * key, const char * license, bool enable); + + static uuid::log::Logger logger_; + + private: + std::vector modules_; +}; + +#endif diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index 84b803679..732a1def5 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -56,6 +56,7 @@ void IRAM_ATTR AnalogSensor::freqIrq2() { #endif void AnalogSensor::start(const bool factory_settings) { + // add hardcoded sensors for BBQKees gateway boards if (factory_settings && EMSESP::system_.board_profile() == "E32V2_2") { EMSESP::webCustomizationService.update([&](WebCustomization & settings) { auto newSensor = AnalogCustomization(); @@ -286,8 +287,8 @@ void AnalogSensor::reload(bool get_nvs) { #endif } else if (sensor.type() == AnalogType::DIGITAL_IN) { LOG_DEBUG("Digital Read on GPIO %02d", sensor.gpio()); - sensor.set_value(digitalRead(sensor.gpio())); // initial value - sensor.set_uom(0); // no uom, just for safe measures + sensor.set_value(sensor.factor() == 0 ? !digitalRead(sensor.gpio()) : digitalRead(sensor.gpio())); // initial value + sensor.set_uom(0); // no uom, just for safe measures sensor.polltime_ = 0; sensor.poll_ = digitalRead(sensor.gpio()); publish_sensor(sensor); @@ -464,7 +465,7 @@ void AnalogSensor::measure() { if (uuid::get_uptime() - sensor.polltime_ >= 15 && sensor.poll_ != sensor.last_reading_) { sensor.last_reading_ = sensor.poll_; if (sensor.type() == AnalogType::DIGITAL_IN) { - sensor.set_value(sensor.poll_); + sensor.set_value(sensor.factor() == 0 ? !sensor.poll_ : sensor.poll_); } else if (!sensor.poll_) { // falling edge if (sensor.type() == AnalogType::COUNTER) { sensor.set_value(old_value + sensor.factor()); @@ -852,6 +853,15 @@ bool AnalogSensor::get_value_info(JsonObject output, const char * cmd, const int return true; } + if (!strcmp(cmd, F_(metrics))) { + std::string metrics = get_metrics_prometheus(); + if (!metrics.empty()) { + output["api_data"] = metrics; + return true; + } + return false; + } + // this is for a specific sensor, return the value const char * attribute_s = Command::get_attribute(cmd); @@ -866,6 +876,35 @@ bool AnalogSensor::get_value_info(JsonObject output, const char * cmd, const int return false; // not found } +// generate Prometheus metrics format from analog values +std::string AnalogSensor::get_metrics_prometheus() { + std::string result; + result.reserve(sensors_.size() * 140); + char val[10]; + for (auto & sensor : sensors_) { + result += (std::string) "# HELP emsesp_" + sensor.name() + " " + sensor.name(); + if (sensor.type() != AnalogType::DIGITAL_OUT && sensor.type() != AnalogType::DIGITAL_IN) { + result += (std::string) ", " + EMSdevice::uom_to_string(sensor.uom()); + } else { + result += (std::string) ", boolean"; + } + result += (std::string) ", readable, visible"; + if (sensor.type() == AnalogType::COUNTER || sensor.type() == AnalogType::RGB || sensor.type() == AnalogType::PULSE + || (sensor.type() >= AnalogType::DIGITAL_OUT && sensor.type() <= AnalogType::PWM_2) + || (sensor.type() >= AnalogType::CNT_0 && sensor.type() <= AnalogType::CNT_2)) { + result += (std::string) ", writable"; + } + result += (std::string) "\n# TYPE emsesp_" + sensor.name() + " gauge\n"; + result += (std::string) "emsesp_" + sensor.name() + " "; + if (sensor.type() != AnalogType::DIGITAL_OUT && sensor.type() != AnalogType::DIGITAL_IN) { + result += (std::string)Helpers::render_value(val, sensor.value(), 2) + "\n"; + } else { + result += (std::string)(sensor.value() == 0 ? "0\n" : "1\n"); + } + } + return result; +} + // note we don't add the device and state classes here, as we do in the custom entity service void AnalogSensor::get_value_json(JsonObject output, const Sensor & sensor) { output["name"] = (const char *)sensor.name(); diff --git a/src/core/analogsensor.h b/src/core/analogsensor.h index f466adb75..65e200662 100644 --- a/src/core/analogsensor.h +++ b/src/core/analogsensor.h @@ -177,6 +177,7 @@ class AnalogSensor { bool update(uint8_t gpio, const char * name, double offset, double factor, uint8_t uom, int8_t type, bool deleted, bool is_system); bool get_value_info(JsonObject output, const char * cmd, const int8_t id = -1); void store_counters(); + std::string get_metrics_prometheus(); static std::vector exclude_types() { return exclude_types_; } diff --git a/src/core/command.h b/src/core/command.h index 61fcb9c49..6ab6b1230 100644 --- a/src/core/command.h +++ b/src/core/command.h @@ -19,7 +19,7 @@ #ifndef EMSESP_COMMAND_H_ #define EMSESP_COMMAND_H_ -#include +#include #include "console.h" #include @@ -153,8 +153,8 @@ class Command { class SUrlParser { private: - std::unordered_map m_keysvalues; - std::vector m_folders; + std::map m_keysvalues; + std::vector m_folders; public: SUrlParser() = default; @@ -166,7 +166,7 @@ class SUrlParser { return m_folders; }; - std::unordered_map & params() { + std::map & params() { return m_keysvalues; }; diff --git a/src/core/default_settings.h b/src/core/default_settings.h index 0f5b72f9a..29aee666f 100644 --- a/src/core/default_settings.h +++ b/src/core/default_settings.h @@ -26,11 +26,11 @@ #endif #ifndef EMSESP_DEFAULT_TX_MODE -#define EMSESP_DEFAULT_TX_MODE 1 // EMS1.0 +#define EMSESP_DEFAULT_TX_MODE 5 // Auto #endif #ifndef EMSESP_DEFAULT_EMS_BUS_ID -#define EMSESP_DEFAULT_EMS_BUS_ID 0x0B // service key +#define EMSESP_DEFAULT_EMS_BUS_ID 0x49 // gateway 2 #endif #ifndef EMSESP_DEFAULT_SYSLOG_ENABLED diff --git a/src/core/emsdevice.cpp b/src/core/emsdevice.cpp index 29f0cdffb..570cb4470 100644 --- a/src/core/emsdevice.cpp +++ b/src/core/emsdevice.cpp @@ -72,6 +72,21 @@ const char * EMSdevice::tag_to_mqtt(int8_t tag) { return (DeviceValue::DeviceValueTAG_mqtt[tag > DeviceValue::NUM_TAGS ? 0 : tag]); } +uint8_t EMSdevice::tag_to_flag(const uint8_t tag) { + if (tag >= DeviceValueTAG::TAG_HC1 && tag <= DeviceValueTAG::TAG_HC8) { + return CommandFlag::CMD_FLAG_HC; + } else if (tag >= DeviceValueTAG::TAG_DHW1 && tag <= DeviceValueTAG::TAG_DHW10) { + return CommandFlag::CMD_FLAG_DHW; + } else if (tag >= DeviceValueTAG::TAG_HS1 && tag <= DeviceValueTAG::TAG_HS16) { + return CommandFlag::CMD_FLAG_HS; + } else if (tag >= DeviceValueTAG::TAG_AHS1 && tag <= DeviceValueTAG::TAG_AHS1) { + return CommandFlag::CMD_FLAG_AHS; + } else if (tag >= DeviceValueTAG::TAG_SRC1 && tag <= DeviceValueTAG::TAG_SRC16) { + return CommandFlag::CMD_FLAG_SRC; + } + return 0; +} + // convert UOM to a char string - translating only for hours/minutes/seconds const char * EMSdevice::uom_to_string(uint8_t uom) { switch (uom) { @@ -89,7 +104,10 @@ const char * EMSdevice::uom_to_string(uint8_t uom) { } } -const char * EMSdevice::brand_to_char() { +std::string EMSdevice::brand_to_char() { + if (!custom_brand().empty()) { + return custom_brand(); + } switch (brand_) { case EMSdevice::Brand::BOSCH: return F_(bosch); @@ -313,15 +331,15 @@ uint8_t EMSdevice::decode_brand(uint8_t value) { std::string EMSdevice::to_string() { // for devices that haven't been lookup yet, don't show all details if (product_id_ == 0) { - return std::string(name()) + " (DeviceID:" + Helpers::hextoa(device_id_) + ")"; + return name() + " (DeviceID:" + Helpers::hextoa(device_id_) + ")"; } - if (brand_ == Brand::NO_BRAND) { - return std::string(name()) + " (DeviceID:" + Helpers::hextoa(device_id_) + ", ProductID:" + Helpers::itoa(product_id_) + ", Version:" + version_ + ")"; + if (brand_ == Brand::NO_BRAND && custom_brand().empty()) { + return name() + " (DeviceID:" + Helpers::hextoa(device_id_) + ", ProductID:" + Helpers::itoa(product_id_) + ", Version:" + version_ + ")"; } - return std::string(brand_to_char()) + " " + name() + " (DeviceID:" + Helpers::hextoa(device_id_) + ", ProductID:" + Helpers::itoa(product_id_) - + ", Version:" + version_ + ")"; + return brand_to_char() + " " + name() + " (DeviceID:" + Helpers::hextoa(device_id_) + ", ProductID:" + Helpers::itoa(product_id_) + ", Version:" + version_ + + ")"; } // returns string of EMS device version and productID @@ -332,7 +350,7 @@ std::string EMSdevice::to_string_version() { // returns out brand + device name // translated std::string EMSdevice::to_string_short() { - if (brand_ == Brand::NO_BRAND) { + if (brand_ == Brand::NO_BRAND && custom_brand().empty()) { return std::string(device_type_2_device_name_translated()) + ": " + name(); } @@ -350,7 +368,7 @@ void EMSdevice::fetch_values() { for (const auto & tf : telegram_functions_) { if (tf.fetch_) { - read_command(tf.telegram_type_id_); + read_command(tf.telegram_type_id_, 0, tf.length_); } } } @@ -369,10 +387,10 @@ void EMSdevice::toggle_fetch(uint16_t telegram_id, bool toggle) { } // get status of automatic fetch for a telegramID -bool EMSdevice::is_fetch(uint16_t telegram_id) const { +bool EMSdevice::is_fetch(uint16_t telegram_id, uint8_t len) const { for (const auto & tf : telegram_functions_) { if (tf.telegram_type_id_ == telegram_id) { - return tf.fetch_; + return tf.fetch_ && tf.length_ >= len; } } return false; @@ -529,8 +547,8 @@ void EMSdevice::show_mqtt_handlers(uuid::console::Shell & shell) const { } // register a callback function for a specific telegram type -void EMSdevice::register_telegram_type(const uint16_t telegram_type_id, const char * telegram_type_name, bool fetch, const process_function_p f) { - telegram_functions_.emplace_back(telegram_type_id, telegram_type_name, fetch, false, f); +void EMSdevice::register_telegram_type(const uint16_t telegram_type_id, const char * telegram_type_name, bool fetch, const process_function_p f, uint8_t length) { + telegram_functions_.emplace_back(telegram_type_id, telegram_type_name, fetch, false, length, f); } // add to device value library, also know now as a "device entity" @@ -650,25 +668,21 @@ void EMSdevice::add_device_value(int8_t tag, // to b // add a new command if it has a function attached if (has_cmd) { - uint8_t flags = CommandFlag::ADMIN_ONLY; // executing commands require admin privileges - - if (tag >= DeviceValueTAG::TAG_HC1 && tag <= DeviceValueTAG::TAG_HC8) { - flags |= CommandFlag::CMD_FLAG_HC; - } else if (tag >= DeviceValueTAG::TAG_DHW1 && tag <= DeviceValueTAG::TAG_DHW10) { - flags |= CommandFlag::CMD_FLAG_DHW; - } else if (tag >= DeviceValueTAG::TAG_HS1 && tag <= DeviceValueTAG::TAG_HS16) { - flags |= CommandFlag::CMD_FLAG_HS; - } else if (tag >= DeviceValueTAG::TAG_AHS1 && tag <= DeviceValueTAG::TAG_AHS1) { - flags |= CommandFlag::CMD_FLAG_AHS; - } else if (tag >= DeviceValueTAG::TAG_SRC1 && tag <= DeviceValueTAG::TAG_SRC16) { - flags |= CommandFlag::CMD_FLAG_SRC; - } - + uint8_t flags = CommandFlag::ADMIN_ONLY | tag_to_flag(tag); // executing commands require admin privileges // add the command to our library Command::add(device_type_, device_id_, short_name, f, fullname, flags); } } +void EMSdevice::erase_device_values() { + for (auto & dv : devicevalues_) { + if (dv.has_cmd) { + Command::erase_command(device_type_, dv.short_name, tag_to_flag(dv.tag)); + } + } + devicevalues_.clear(); +} + // single list of options void EMSdevice::register_device_value(int8_t tag, void * value_p, @@ -898,7 +912,7 @@ void EMSdevice::publish_value(void * value_p) const { // looks up the UOM for a given key from the device value table std::string EMSdevice::get_value_uom(const std::string & shortname) const { for (const auto & dv : devicevalues_) { - if ((!dv.has_state(DeviceValueState::DV_WEB_EXCLUDE)) && (dv.short_name == shortname)) { + if ((!dv.has_state(DeviceValueState::DV_WEB_EXCLUDE)) && !strcmp(dv.short_name, shortname.c_str())) { // ignore TIME since "minutes" is already added to the string value if ((dv.uom == DeviceValueUOM::NONE) || (dv.uom == DeviceValueUOM::MINUTES)) { break; @@ -1268,7 +1282,7 @@ void EMSdevice::setCustomizationEntity(const std::string & entity_id) { // set the min / max dv.set_custom_minmax(); - if (Mqtt::ha_enabled() && dv.short_name == FL_(seltemp)[0] && (min != dv.min || max != dv.max)) { + if (Mqtt::ha_enabled() && dv.tag <= DeviceValueTAG::TAG_HC8 && !strcmp(dv.short_name, FL_(selRoomTemp)[0]) && (min != dv.min || max != dv.max)) { set_climate_minmax(dv.tag, dv.min, dv.max); } @@ -1720,8 +1734,8 @@ void EMSdevice::get_value_json(JsonObject json, DeviceValue & dv) { // generate Prometheus metrics format from device values std::string EMSdevice::get_metrics_prometheus(const int8_t tag) { - std::string result; - std::unordered_map seen_metrics; + std::string result; + std::map seen_metrics; // Helper function to check if a device value type is supported for Prometheus metrics auto is_supported_type = [](uint8_t type) -> bool { @@ -2106,9 +2120,8 @@ bool EMSdevice::generate_values(JsonObject output, const int8_t tag_filter, cons // create the Home Assistant configs for each device value / entity // this is called when an MQTT publish is done via an EMS Device in emsesp.cpp::publish_device_values() void EMSdevice::mqtt_ha_entity_config_create() { - bool create_device_config = !ha_config_done(); // do we need to create the main Discovery device config with this entity? - uint16_t count = 0; - const char * const ** mode_options = nullptr; + bool create_device_config = !ha_config_done(); // do we need to create the main Discovery device config with this entity? + uint16_t count = 0; // check the state of each of the device values // create the discovery topic if if hasn't already been created, not a command (like reset) and is active and visible @@ -2121,15 +2134,13 @@ void EMSdevice::mqtt_ha_entity_config_create() { bool needs_update = !has_config_created || (haclimate_value == 1 ? has_climate_no_rt : !has_climate_no_rt); if (needs_update) { - // if it's a thermostat go fetch the list of modes - if (device_type() == EMSdevice::DeviceType::THERMOSTAT) { - for (auto & dv : devicevalues_) { - // make sure it's a type DeviceValueType::ENUM - if ((dv.type == DeviceValueType::ENUM) && !strcmp(dv.short_name, FL_(mode)[0])) { - // get options - mode_options = dv.options; - break; - } + const char * const ** mode_options = nullptr; + for (const auto & d : devicevalues_) { + // make sure mode in same circuit is DeviceValueType::ENUM + if ((d.tag == dv.tag) && (d.type == DeviceValueType::ENUM) && !strcmp(d.short_name, FL_(mode)[0]) && (d.options_size > 0)) { + // get options + mode_options = d.options; + break; } } @@ -2149,24 +2160,33 @@ void EMSdevice::mqtt_ha_entity_config_create() { if (!dv.has_state(DeviceValueState::DV_HA_CONFIG_CREATED) && dv.has_state(DeviceValueState::DV_ACTIVE) && !dv.has_state(DeviceValueState::DV_API_MQTT_EXCLUDE)) { // create_device_config is only done once for the EMS device. It can added to any entity, so we take the first - if (Mqtt::publish_ha_sensor_config_dv(dv, name().c_str(), brand_to_char(), to_string_version().c_str(), false, create_device_config)) { + if (Mqtt::publish_ha_sensor_config_dv(dv, name().c_str(), brand_to_char().c_str(), to_string_version().c_str(), false, create_device_config)) { dv.add_state(DeviceValueState::DV_HA_CONFIG_CREATED); create_device_config = false; // only create the main config once count++; } - // SRC thermostats mapped to connect/src1/... + // SRC thermostats mapped to connect/src1/... always contains mode, selRoomTemp, currtemp if (dv.tag >= DeviceValueTAG::TAG_SRC1 && dv.tag <= DeviceValueTAG::TAG_SRC16 && !strcmp(dv.short_name, FL_(selRoomTemp)[0])) { - const char * icon = nullptr; - for (auto & d : devicevalues_) { - if (d.tag == dv.tag && !strcmp(d.short_name, FL_(icon)[0]) && *(uint8_t *)(d.value_p != 0)) { - icon = d.options[*(uint8_t *)(d.value_p)][0]; - break; + // add modes and icon if we have one + const char * icon = nullptr; + const char * const ** mode_options = nullptr; + for (const auto & d : devicevalues_) { + if ((d.tag != dv.tag) || (d.type != DeviceValueType::ENUM)) { + continue; + } + if (!strcmp(d.short_name, FL_(mode)[0]) && (d.options_size > 0)) { + mode_options = d.options; + } + if (!strcmp(d.short_name, FL_(icon)[0])) { + uint8_t val = *(uint8_t *)(d.value_p); + if (val != 0 && val < d.options_size) { + icon = d.options[val][0]; + } } } - // add all modes - auto, heat, off, cool - // https://github.com/emsesp/EMS-ESP32/issues/2636 - Mqtt::publish_ha_climate_config(dv, true, nullptr, false, icon); + Mqtt::publish_ha_climate_config(dv, true, mode_options, false, icon); + count++; } #ifndef EMSESP_STANDALONE diff --git a/src/core/emsdevice.h b/src/core/emsdevice.h index efd535693..793313f3d 100644 --- a/src/core/emsdevice.h +++ b/src/core/emsdevice.h @@ -26,7 +26,7 @@ #include "emsdevicevalue.h" #include -#include +#include namespace emsesp { @@ -55,6 +55,7 @@ class EMSdevice { static const char * tag_to_mqtt(int8_t tag); static uint8_t decode_brand(uint8_t value); static bool export_values(uint8_t device_type, JsonObject output, const int8_t id, const uint8_t output_target); + static uint8_t tag_to_flag(const uint8_t tag); // non static functions @@ -62,7 +63,7 @@ class EMSdevice { const char * device_type_2_device_name_translated(); // returns translated device type name bool has_tags(const int8_t tag) const; bool has_cmd(const char * cmd, const int8_t id) const; - const char * brand_to_char(); + std::string brand_to_char(); std::string to_string(); std::string to_string_short(); std::string to_string_version(); @@ -89,6 +90,10 @@ class EMSdevice { return version_; } + void version(const char * version) { + strlcpy(version_, version, sizeof(version_)); + } + uint8_t brand() const { return brand_; } @@ -124,6 +129,14 @@ class EMSdevice { return custom_name_; } + // set custom brand + void custom_brand(std::string const & custom_brand) { + custom_brand_ = custom_brand; + } + + std::string custom_brand() const { + return custom_brand_; + } // set device model void model(std::string const & model) { model_ = model; @@ -246,7 +259,7 @@ class EMSdevice { void setCustomizationEntity(const std::string & entity_id); void getCustomizationEntities(std::vector & entity_ids); - void register_telegram_type(const uint16_t telegram_type_id, const char * telegram_type_name, bool fetch, const process_function_p cb); + void register_telegram_type(const uint16_t telegram_type_id, const char * telegram_type_name, bool fetch, const process_function_p cb, uint8_t length = 0); bool handle_telegram(std::shared_ptr telegram); std::string get_value_uom(const std::string & shortname) const; @@ -282,6 +295,8 @@ class EMSdevice { int16_t min, uint32_t max); + void erase_device_values(); + void register_device_value(int8_t tag, void * value_p, uint8_t type, const char * const ** options, const char * const * name, uint8_t uom, const cmd_function_p f); @@ -347,7 +362,7 @@ class EMSdevice { const char * telegram_type_name(std::shared_ptr telegram); void fetch_values(); void toggle_fetch(uint16_t telegram_id, bool toggle); - bool is_fetch(uint16_t telegram_id) const; + bool is_fetch(uint16_t telegram_id, uint8_t len = 0) const; bool is_received(uint16_t telegram_id) const; bool has_telegram_id(uint16_t id) const; void ha_config_clear(); @@ -433,6 +448,14 @@ class EMSdevice { static constexpr uint8_t EMS_DEVICE_ID_DHW2 = 0x29; // MM100 module as water station static constexpr uint8_t EMS_DEVICE_ID_DHW8 = 0x2F; // last DHW module id? static constexpr uint8_t EMS_DEVICE_ID_IPM_DHW = 0x41; // IPM module as water station + static constexpr uint8_t EMS_DEVICE_ID_GATEWAY1 = 0x48; // KM200, MX300, MX400 + static constexpr uint8_t EMS_DEVICE_ID_GATEWAY2 = 0x49; + static constexpr uint8_t EMS_DEVICE_ID_GATEWAY3 = 0x4A; + static constexpr uint8_t EMS_DEVICE_ID_GATEWAY4 = 0x4B; + static constexpr uint8_t EMS_DEVICE_ID_GATEWAY5 = 0x4C; + static constexpr uint8_t EMS_DEVICE_ID_GATEWAY6 = 0x4D; + static constexpr uint8_t EMS_DEVICE_ID_GATEWAY7 = 0x4E; + static constexpr uint8_t EMS_DEVICE_ID_GATEWAY8 = 0x4F; // generic type IDs static constexpr uint16_t EMS_TYPE_NAME = 0x01; // device config for ems devices, name ascii on offset 27ff for ems+ @@ -524,12 +547,13 @@ class EMSdevice { uint8_t device_id_ = 0; uint8_t product_id_ = 0; char version_[6]; - const char * default_name_; // the fixed name the EMS model taken from the device library - std::string custom_name_ = ""; // custom name - std::string model_ = ""; // model, taken from the 0x01 telegram. see process_deviceName() - uint8_t flags_ = 0; - uint8_t brand_ = Brand::NO_BRAND; - bool active_ = true; + const char * default_name_; // the fixed name the EMS model taken from the device library + std::string custom_name_ = ""; // custom name + std::string custom_brand_ = ""; // custom brand + std::string model_ = ""; // model, taken from the 0x01 telegram. see process_deviceName() + uint8_t flags_ = 0; + uint8_t brand_ = Brand::NO_BRAND; + bool active_ = true; bool ha_config_done_ = false; bool has_update_ = false; @@ -539,13 +563,15 @@ class EMSdevice { const char * telegram_type_name_; // e.g. RC20Message bool fetch_; // if this type_id be queried automatically bool received_; + uint8_t length_; const process_function_p process_function_; - TelegramFunction(uint16_t telegram_type_id, const char * telegram_type_name, bool fetch, bool received, const process_function_p process_function) + TelegramFunction(uint16_t telegram_type_id, const char * telegram_type_name, bool fetch, bool received, uint8_t length, const process_function_p process_function) : telegram_type_id_(telegram_type_id) , telegram_type_name_(telegram_type_name) , fetch_(fetch) , received_(received) + , length_(length) , process_function_(process_function) { } }; diff --git a/src/core/emsesp.cpp b/src/core/emsesp.cpp index a85dedad2..dbbc79b2f 100644 --- a/src/core/emsesp.cpp +++ b/src/core/emsesp.cpp @@ -84,7 +84,7 @@ uuid::log::Logger EMSESP::logger() { RxService EMSESP::rxservice_; // incoming Telegram Rx handler TxService EMSESP::txservice_; // outgoing Telegram Tx handler Mqtt EMSESP::mqtt_; // mqtt handler -Modbus * EMSESP::modbus_; // modbus handler +Modbus * EMSESP::modbus_ = nullptr; // modbus handler System EMSESP::system_; // core system services TemperatureSensor EMSESP::temperaturesensor_; // Temperature sensors AnalogSensor EMSESP::analogsensor_; // Analog sensors @@ -1307,9 +1307,17 @@ bool EMSESP::add_device(const uint8_t device_id, const uint8_t product_id, const // first check to see if we already have it, if so update the record for (auto it = emsdevices.begin(); it != emsdevices.end(); ++it) { if ((*it) && (*it)->is_device_id(device_id)) { - if (product_id == 0 || (*it)->product_id() != 0) { // update only with valid product_id + if (product_id == 0) { // no product-id, ignore + return false; + } + if ((*it)->product_id() == product_id) { // update version if we have valid product_id + if (!strcmp((*it)->version(), "00.00")) { + (*it)->version(version); + } return true; } + // product-id has changed for this device-id, delete and re-add + (*it)->erase_device_values(); emsdevices.erase(it); // erase the old device without product_id and re detect break; } @@ -1450,6 +1458,7 @@ bool EMSESP::add_device(const uint8_t device_id, const uint8_t product_id, const if ((e.device_id == device_id) && (e.product_id == product_id)) { LOG_DEBUG("Have customizations for %s with deviceID 0x%02X productID %d", e.custom_name.c_str(), device_id, product_id); emsdevices.back()->custom_name(e.custom_name); + emsdevices.back()->custom_brand(e.custom_brand); break; } } @@ -1591,10 +1600,11 @@ void EMSESP::incoming_telegram(uint8_t * data, const uint8_t length) { wait_km_ = true; connect_time = uuid::get_uptime_sec(); } + if (poll_id == EMSbus::ems_bus_id()) { - // TODO this could also be by coincidence, so we should add a counter to the EMSbus class to check if the poll_id is the same as the EMS_BUS_ID for a certain number of times EMSbus::last_bus_activity(uuid::get_uptime()); // set the flag indication the EMS bus is active } + if (wait_km_) { if (poll_id != 0x48 && (uuid::get_uptime_sec() - connect_time) < EMS_WAIT_KM_TIMEOUT) { return; @@ -1700,6 +1710,16 @@ void EMSESP::start() { bool factory_settings = false; #endif +#if defined(EMSESP_DEBUG) + // LOG_DEBUG("Listing root directory before:"); + // system_.listDir("/", 3); // show the contents of the root directory +#endif + + // start NVS storage + if (!nvs_.begin("ems-esp", false, "nvs1")) { // try bigger nvs partition on 16M flash first + nvs_.begin("ems-esp", false, "nvs"); // fallback to small nvs + } + // set valid GPIOs list based on ESP32 chip/platform type system_.set_valid_system_gpios(); @@ -1709,6 +1729,11 @@ void EMSESP::start() { // loads core system services settings (network, mqtt, ap, ntp etc) esp32React.begin(); +#if defined(EMSESP_DEBUG) + // LOG_DEBUG("Listing root directory before:"); + // system_.listDir("/", 3); // show the contents of the root directory +#endif + #ifndef EMSESP_STANDALONE if (factory_settings) { LOG_WARNING("No settings found on filesystem. Using factory settings."); @@ -1748,7 +1773,7 @@ void EMSESP::start() { LOG_INFO("Last system reset reason Core0: %s, Core1: %s", system_.reset_reason(0).c_str(), system_.reset_reason(1).c_str()); #endif -// see if we're restoring a settings file + // see if we're restoring a settings file #ifndef EMSESP_STANDALONE if (system_.check_restore()) { LOG_WARNING("EMS-ESP will restart to apply new settings. Please wait."); @@ -1756,11 +1781,7 @@ void EMSESP::start() { }; #endif - if (!nvs_.begin("ems-esp", false, "nvs1")) { // try bigger nvs partition on 16M flash first - nvs_.begin("ems-esp", false, "nvs"); // fallback to small nvs - } - - LOG_DEBUG("NVS device information: %s", system_.getBBQKeesGatewayDetails().isEmpty() ? "not set" : system_.getBBQKeesGatewayDetails().c_str()); + LOG_DEBUG("eFuse device information: %s", system_.getBBQKeesGatewayDetails().isEmpty() ? "not set" : system_.getBBQKeesGatewayDetails().c_str()); webSettingsService.begin(); // load EMS-ESP Application settings @@ -1793,12 +1814,6 @@ void EMSESP::start() { #endif } - // start services - if (system_.modbus_enabled()) { - modbus_ = new Modbus; - modbus_->start(1, system_.modbus_port(), system_.modbus_max_clients(), system_.modbus_timeout() * 1000); - } - mqtt_.start(); // mqtt init system_.start(); // starts commands, led, adc, button, network (sets hostname), syslog & uart shower_.start(); // initialize shower timer and shower alert @@ -1845,7 +1860,7 @@ void EMSESP::loop() { return; // LED flashing is active, skip the rest of the loop } - esp32React.loop(); // web services like network, AP, MQTT + esp32React.loop(); // core services: Network, AP, MQTT and NTP webLogService.loop(); // log in Web UI // run the loop, unless we're in the middle of an OTA upload diff --git a/src/core/emsesp.h b/src/core/emsesp.h index b3ed04267..416c1bea7 100644 --- a/src/core/emsesp.h +++ b/src/core/emsesp.h @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/core/common.h b/src/core/emsesp_common.h similarity index 95% rename from src/core/common.h rename to src/core/emsesp_common.h index a9ca215f5..09d8ecc1a 100644 --- a/src/core/common.h +++ b/src/core/emsesp_common.h @@ -86,6 +86,6 @@ using string_vector = std::vector; // Translation count - dynamically calculated at compile-time enum { EMSESP_TRANSLATION_COUNT_END = __COUNTER__ }; -static constexpr uint16_t EMSESP_TRANSLATION_COUNT = EMSESP_TRANSLATION_COUNT_END - EMSESP_TRANSLATION_COUNT_START - 1; +static constexpr uint16_t EMSESP_TRANSLATION_COUNT = static_cast(EMSESP_TRANSLATION_COUNT_END) - static_cast(EMSESP_TRANSLATION_COUNT_START) - 1; #endif diff --git a/src/core/emsfactory.h b/src/core/emsfactory.h index d2ac63707..3be963be0 100644 --- a/src/core/emsfactory.h +++ b/src/core/emsfactory.h @@ -19,14 +19,16 @@ #ifndef EMSESP_EMSFACTORY_H_ #define EMSESP_EMSFACTORY_H_ -#include +#include #include // for unique_ptr +#include -#include "emsdevice.h" +// Forward declaration +namespace emsesp { +class EMSdevice; +} // Macro for class registration -// Anonymous namespace is used to make the definitions here private to the current -// compilation unit (current file). It is equivalent to the old C static keyword. #define REGISTER_FACTORY(derivedClass, device_type) \ namespace { \ auto registry_##derivedClass = ConcreteEMSFactory(device_type); \ @@ -34,30 +36,29 @@ namespace emsesp { -class EMSdevice; // forward declaration, for gcc linking - class EMSFactory { public: virtual ~EMSFactory() = default; - // Register factory object of derived class - // using the device_type as the unique identifier - static auto registerFactory(const uint8_t device_type, EMSFactory * factory) -> void { - auto & reg = EMSFactory::getRegister(); - reg[device_type] = factory; - } - using FactoryMap = std::map; + // Register factory object of derived class using the device_type as the unique identifier + static inline auto registerFactory(const uint8_t device_type, EMSFactory * factory) -> void { + getRegister()[device_type] = factory; + } + // returns all registered classes (really only for debugging) - static auto device_handlers() -> FactoryMap { - return EMSFactory::getRegister(); + static inline auto device_handlers() -> const FactoryMap & { + return getRegister(); } // Construct derived class returning an unique ptr static auto add(const uint8_t device_type, uint8_t device_id, uint8_t product_id, const char * version, const char * default_name, uint8_t flags, uint8_t brand) -> std::unique_ptr { - return std::unique_ptr(EMSFactory::makeRaw(device_type, device_id, product_id, version, default_name, flags, brand)); + if (auto * ptr = makeRaw(device_type, device_id, product_id, version, default_name, flags, brand)) { + return std::unique_ptr(ptr); + } + return nullptr; } virtual auto construct(uint8_t device_type, uint8_t device_id, uint8_t product_id, const char * version, const char * name, uint8_t flags, uint8_t brand) const @@ -65,7 +66,7 @@ class EMSFactory { private: // Force global variable to be initialized, thus it avoids the "initialization order fiasco" - static auto getRegister() -> FactoryMap & { + static inline auto getRegister() -> FactoryMap & { static FactoryMap classRegister{}; return classRegister; } @@ -74,11 +75,9 @@ class EMSFactory { // find which EMS device it is and use that class static auto makeRaw(const uint8_t device_type, uint8_t device_id, uint8_t product_id, const char * version, const char * name, uint8_t flags, uint8_t brand) -> EMSdevice * { - auto it = EMSFactory::getRegister().find(device_type); - if (it != EMSFactory::getRegister().end()) { - return it->second->construct(device_type, device_id, product_id, version, name, flags, brand); - } - return nullptr; + const auto & reg = getRegister(); + const auto it = reg.find(device_type); + return (it != reg.end()) ? it->second->construct(device_type, device_id, product_id, version, name, flags, brand) : nullptr; } }; @@ -86,7 +85,7 @@ template class ConcreteEMSFactory : EMSFactory { public: // Register this global object on the EMSFactory register - ConcreteEMSFactory(const uint8_t device_type) { + explicit ConcreteEMSFactory(const uint8_t device_type) { EMSFactory::registerFactory(device_type, this); } diff --git a/src/core/helpers.h b/src/core/helpers.h index 20f8fa122..5758b08b8 100644 --- a/src/core/helpers.h +++ b/src/core/helpers.h @@ -20,7 +20,7 @@ #define EMSESP_HELPERS_H #include "telegram.h" // for EMS_VALUE_* settings -#include "common.h" +#include "emsesp_common.h" namespace emsesp { diff --git a/src/core/locale_common.h b/src/core/locale_common.h index 2b9222f69..d5b88c789 100644 --- a/src/core/locale_common.h +++ b/src/core/locale_common.h @@ -47,6 +47,7 @@ MAKE_WORD(raw) MAKE_WORD(watch) MAKE_WORD(syslog) MAKE_WORD(send) +MAKE_WORD(sendmail) MAKE_WORD(telegram) MAKE_WORD(bus_id) MAKE_WORD(tx_mode) @@ -303,7 +304,7 @@ MAKE_ENUM(enum_comfort, FL_(hot), FL_(eco), FL_(intelligent)) MAKE_ENUM(enum_comfort1, FL_(high_comfort), FL_(eco)) MAKE_ENUM(enum_comfort2, FL_(eco), FL_(high_comfort)) MAKE_ENUM(enum_flow, FL_(off), FL_(flow), FL_(bufferedflow), FL_(buffer), FL_(layeredbuffer)) -MAKE_ENUM(enum_reset, FL_(dash), FL_(maintenance), FL_(error), FL_(history), FL_(message)) +MAKE_ENUM(enum_reset, FL_(dash), FL_(maintenance), FL_(error), FL_(history), FL_(message), FL_(hp_error), FL_(burn_starts), FL_(factory)) MAKE_ENUM(enum_maxHeat, FL_(0kW), FL_(2kW), FL_(3kW), FL_(4kW), FL_(6kW), FL_(9kW)) MAKE_ENUM(enum_maxHeat1, FL_(0kW), FL_(3kW), FL_(6kW), FL_(9kW)) MAKE_ENUM(enum_maxHeat2, FL_(3kW), FL_(6kW), FL_(9kW)) diff --git a/src/core/locale_translations.h b/src/core/locale_translations.h index d1116e7e9..110238bfc 100644 --- a/src/core/locale_translations.h +++ b/src/core/locale_translations.h @@ -32,10 +32,10 @@ #define EMSESP_LOCALE_SK "sk" #define EMSESP_LOCALE_CZ "cz" -// IMPORTANT! translations are in the order:,en, de, nl, sv, pl, no, fr, tr, it, sk, cz +// IMPORTANT! translations are in the order: en, de, nl, sv, pl, no, fr, tr, it, sk, cz // // if there is no translation, it will default to en -// + // device types, as display in Web and Console MAKE_WORD_TRANSLATION(boiler_hp_device, "Boiler/HP", "Kessel/WP", "CV ketel/WP", "Värmepanna/VP", "Kocioł/PC", "Varmekjele/VP", "Chaudière/PC", "Kazan/IP", "Caldaia/PC", "Kotol/TČ", "Kotel/TČ") MAKE_WORD_TRANSLATION(boiler_device, "Boiler", "Kessel", "CV ketel", "Värmepanna", "Kocioł", "Varmekjele", "Chaudière", "Kazan", "Caldaia", "Kotol", "Kotel") @@ -65,6 +65,7 @@ MAKE_WORD_TRANSLATION(commands_cmd, "list all commands", "Liste aller Kommandos" MAKE_WORD_TRANSLATION(entities_cmd, "list all entities", "Liste aller Entitäten", "lijst van alle entiteiten", "lista all entiteter", "wyświetl wszsytkie encje", "Viser alle enheter", "lister toutes les entités", "Tüm varlıkları listele", "elenca tutte le entità", "zobraziť všetky entity", "vypsat všechny entity") MAKE_WORD_TRANSLATION(metrics_cmd, "list all prometheus metrics", "Liste aller Prometheus Metriken", "lijst van alle Prometheus metriken", "lista alla Prometheus metriker", "wyświetl wszystkie Prometheus metryki", "Viser alle Prometheus metrikker", "lister toutes les métriques Prometheus", "Tüm Prometheus metriklerini listele", "elenca tutte le metriche Prometheus", "zobraziť všetky Prometheus metriky", "vypsat všechny Prometheus metriky") MAKE_WORD_TRANSLATION(send_cmd, "send a telegram", "Sende EMS-Telegramm", "stuur een telegram", "skicka ett telegram", "wyślij telegram", "send et telegram", "envoyer un télégramme", "Bir telegram gönder", "invia un telegramma", "poslať telegram", "odeslat telegram") +MAKE_WORD_TRANSLATION(sendmail_cmd, "send email", "Sende eMail", "stuur email", "skicka email", "wyślij email", "send e-post", "envoyer un email", "email gönder", "invia email", "poslať email", "odeslat email") MAKE_WORD_TRANSLATION(read_cmd, "send read request", "Sende Leseanfrage", "stuur leesaanvraag", "skicka en läsförfrågan", "wyślij żądanie odczytu", "send leseforespørsel", "envoyer une demande de lecture", "okuma isteği gönder", "invia richiesta di lettura", "odoslať žiadosť o prečítanie", "odeslat požadavek na čtení") MAKE_WORD_TRANSLATION(setiovalue_cmd, "set I/O value", "Setze Werte E/A", "instellen standaardwaarde", "sätt ett I/O-värde", "ustaw wartość", "sett en io verdi", "définir valeur E/S", "Giriş/Çıkış değerlerini ayarla", "imposta valore io", "nastaviť hodnotu io", "nastavit hodnotu I/O") MAKE_WORD_TRANSLATION(changeloglevel_cmd, "change log level", "Ändere Protokollebene", "aanpassen log niveau", "ändra logg-nivå", "zmień poziom log-u", "endre loggnivå", "changer le niveau de journal", "Kayıt seviyesini değiştir", "cambia livello registrazione", "zmeniť úroveň protokolu", "změnit úroveň protokolování") @@ -104,6 +105,7 @@ MAKE_WORD_TRANSLATION(tag_dhw7, "dhw7", "WWK7", "dhw7", "VVK7", "CWU7", "dhw7", MAKE_WORD_TRANSLATION(tag_dhw8, "dhw8", "WWK8", "dhw8", "VVK8", "CWU8", "dhw8", "ecs8", "SKS8", "dhw8", "TÚV8", "TUV8") MAKE_WORD_TRANSLATION(tag_dhw9, "dhw9", "WWK9", "dhw9", "VVK9", "CWU9", "dhw9", "ecs9", "SKS9", "dhw9", "TÚV9", "TUV9") MAKE_WORD_TRANSLATION(tag_dhw10, "dhw10", "WWK10", "dhw10", "VVK10", "CWU10", "dhw10", "ecs10", "SKS10", "dhw10", "TÚV10", "TUV10") + // heatingsources MAKE_WORD_TRANSLATION(tag_ahs1, "ahs1", "AHQ1", "ahs1", "AVK1", "AŹC1", "ahs1", "ahs1", "ahs1", "ahs1", "ahs1", "ahs1") MAKE_WORD_TRANSLATION(tag_hs1, "hs1", "HQ1", "hs1", "VK1", "ŹC1", "hs1", "hs1", "hs1", "hs1", "hs1", "hs1") @@ -122,6 +124,7 @@ MAKE_WORD_TRANSLATION(tag_hs13, "hs13", "HQ13", "hs13", "VK13", "ŹC13", "hs13", MAKE_WORD_TRANSLATION(tag_hs14, "hs14", "HQ14", "hs14", "VK14", "ŹC14", "hs14", "hs14", "hs14", "hs14", "hs14", "hs14") MAKE_WORD_TRANSLATION(tag_hs15, "hs15", "HQ15", "hs15", "VK15", "ŹC15", "hs15", "hs15", "hs15", "hs15", "hs15", "hs15") MAKE_WORD_TRANSLATION(tag_hs16, "hs16", "HQ16", "hs16", "VK16", "ŹC16", "hs16", "hs16", "hs16", "hs16", "hs16", "hs16") + // single room thermostats MAKE_WORD_TRANSLATION(tag_src1, "src1", "SRC1") MAKE_WORD_TRANSLATION(tag_src2, "src2", "SRC2") @@ -197,6 +200,9 @@ MAKE_WORD_TRANSLATION(lower, "lower", "niedriger", "lager", "lägre", "mniejszy" MAKE_WORD_TRANSLATION(error, "error", "Fehler", "error", "Fel", "błąd", "feil", "erreur", "Hata", "errore", "error", "chyba") MAKE_WORD_TRANSLATION(history, "history", "Fehlerspeicher", "geschiedenis", "historik", "historia", "historikk", "historique", "geçmiş", "storico", "história", "historie") MAKE_WORD_TRANSLATION(message, "message", "Meldung", "melding", "meddelande", "komunikat", "melding", "message", "mesajı", "messaggio", "správa", "zpráva") +MAKE_WORD_TRANSLATION(hp_error, "hp error", "WP Fehler", "hp error", "hp Fel", "hp błąd", "hp feil", "hp erreur", "hp Hata", "hp errore", "hp error", "hp chyba") +MAKE_WORD_TRANSLATION(factory, "factory", "werkseinst.", "", "", "", "", "", "", "", "nastavenie z výroby", "nastavení z výroby") +MAKE_WORD_TRANSLATION(burn_starts, "burner starts", "Brennerstarts", "", "", "", "", "", "", "", "štarty horáka", "") MAKE_WORD_TRANSLATION(na, "n/a", "n/a", "n/a", "n/a", "nd.", "n/a", "n/c", "mevcut değil", "n/a", "n/a", "n/a") MAKE_WORD_TRANSLATION(inverted, "inverted", "invertiert", "omgekeerd", "inverterad", "odwrócony", "invertert", "inversé", "ters", "invertito", "invertovaný", "invertovaný") @@ -423,7 +429,9 @@ MAKE_TRANSLATION(pumpCharacter, "pumpcharacter", "boiler pump characteristic", " MAKE_TRANSLATION(pumpOnTemp, "pumpontemp", "pump logic temperature", "Pumpenlogiktemperatur", "pomplogica temperatuur", "Pumplogiktemperatur", "temperatura logiki pompy", "pumpelogikktemperatur", "température logique pompe", "pompa mantık sıcaklığı", "temperatura logica pompa", "teplota logiky čerpadla", "teplota logiky čerpadla") MAKE_TRANSLATION(headertemp, "headertemp", "low loss header", "Hydr. Weiche", "open verdeler", "Fördelare", "sprzęgło hydrauliczne", "lav tap header", "bouteille de déc. hydr.", "isı bloğu gidiş suyu sıc.", "comp. idr.", "nízkostratová hlavica", "hydraulický oddělovač") MAKE_TRANSLATION(heatblock, "heatblock", "heating block", "Wärmezelle", "Aanvoertemp. warmtecel", "Värmeblock", "blok grzewczy", "varmeblokk", "départ corps de chauffe", "Hid.denge kabı sıcaklığı", "mandata scamb. pr.", "vykurovací blok", "blok topení") - +MAKE_TRANSLATION(pumpKickHour, "pumpkickhour", "pump kick hour", "Stunde Pumpkick") +MAKE_TRANSLATION(pumpKickDay, "pumpkickday", "pump kick day", "Tag Pumpkick") +MAKE_TRANSLATION(pumpKickDelay, "pumpkickdelay", "pump kick delay", "Pause vor Pumpkick") MAKE_TRANSLATION(curveOn, "curveon", "heatingcurve on", "Heizkurve an", "stookkromme aan", "Värmekurva På", "krzywa grzewcza włączona", "varmekurve på", "courbe de chauffage activée", "ısıtma eğrisi açık", "curva di riscaldamento attiva", "vykurovacia krivka zapnutá", "topná křivka zapnutá") MAKE_TRANSLATION(curveBase, "curvebase", "heatingcurve base", "Heizkurve Basis", "stookkromme basis", "Värmekurva Bas", "podstawa krzywej grzewczej", "varmekurve basis", "base de courbe de chauffage", "ısıtma eğrisi tabanı", "base curva di riscaldamento", "základňa vykurovacej krivky", "základ topné křivky") MAKE_TRANSLATION(curveEnd, "curveend", "heatingcurve end", "Heizkurve Ende", "stookkromme einde", "Värmekurva Slut", "koniec krzywej grzewczej", "varmekurve slutt", "fin de courbe de chauffage", "ısıtma eğrisi sonu", "fine curva di riscaldamento", "koniec vykurovacej krivky", "konec topné křivky") @@ -471,7 +479,6 @@ MAKE_TRANSLATION(hpActivity, "hpactivity", "compressor activity", "Kompressorakt MAKE_TRANSLATION(hpTargetSpd, "hptargetspd", "compressor target speed", "Kompressorsolldrehzahl", "", "", "", "", "", "", "", "kompresor cieľové otáčky", "cílová rychlost kompresoru") MAKE_TRANSLATION(receiverValveVr0, "recvalve", "receiver valve VR0", "Eingangsventil VR0", "", "", "", "", "", "", "", "prijímač ventil VR0", "přijímací ventil VR0") MAKE_TRANSLATION(expansionValveVr1, "expvalve", "expansion valve VR1", "Ausdehnungsventil VR1", "", "", "", "", "", "", "", "prijímač ventil VR1", "přijímací ventil VR1") - MAKE_TRANSLATION(hpMaxPower, "hpmaxpower", "compressor max power", "max. Kompressorleistung", "", "Max. Kompressoreffekt", "maksymalna wydajność sprężarki", "", "", "", "", "max výkon kompresora", "maximální výkon kompresoru") MAKE_TRANSLATION(pvMaxComp, "pvmaxcomp", "pv compressor max power", "PV max. Kompressorleistung", "", "PV Max. Kompressoreffekt", "maksymalna wydajność sprężarki", "", "", "", "", "pv max výkon kompresora", "maximální výkon PV kompresoru") MAKE_TRANSLATION(hpPower, "hppower", "compressor power output", "Kompressorleistung", "Compressorvermogen", "Kompressoreffekt", "moc wyjściowa sprężarki", "kompressoreffekt", "puissance de sortie compresseur", "ısı pompası güç çıkışı", "potenza uscita compressore", "výkon kompresora", "výstupní výkon kompresoru") @@ -489,7 +496,6 @@ MAKE_TRANSLATION(hpPl1, "hppl1", "low pressure side temperature (PL1)", "Niederd MAKE_TRANSLATION(hpPh1, "hpph1", "high pressure side temperature (PH1)", "Hochdrucktemperatur (PH1)", "Temperatuur hoge drukzijde (PH1)", "Temperatur Högtryckssidan (PH1)", "temperatura po stronie wysokiego ciśnienia (PH1)", "Temperatur Høytrykksiden (PH1)", "température côté bhauteasse pression (PH1)", "yüksek basınç tarafı sıcaklığı (PH1)", "temperatura lato alta pressione (PH1)", "teplota na strane vysokého tlaku (PH1)", "teplota na vysokotlaké straně (PH1)") MAKE_TRANSLATION(hpTa4, "hpta4", "drain pan temp (TA4)", "Kondensatorwanne (TA4)", "Temperatuur condensorafvoerbak (TA4)", " (TA4)", "temperatura ociekacza (TA4)", "kondenstråg temperatur (TA4)", " (TA4)", "tahliye sıcaklığı (TA4)", "temperatura condensatore (TA4)", "teplota vypúšťacej misky (TA4)", "teplota odvodňovací vany (TA4)") MAKE_TRANSLATION(hpTw1, "hptw1", "reservoir temp (TW1)", "DHW Reservoir (TW1)", "(TW1)", "Varmvattentank Temperatur (TW1)", "temperatura zbiornika (TW1)", "(TW1)", "(TW1)", "(TW1)", "(TW1)", "teplota zásobníka (TW1)", "teplota v nádrži (TW1)") - MAKE_TRANSLATION(hpInput1, "hpin1", "input 1 state", "Status Eingang 1", "Status input 1", "Status Ingång 1", "stan wejścia 1", "status inggang 1", "état entrée 1", "giriş 1 durumu", "stato ingresso 1", "stav vstupu 1", "stav vstupu 1") MAKE_TRANSLATION(hpInput2, "hpin2", "input 2 state", "Status Eingang 2", "Status input 2", "Status Ingång 2", "stan wejścia 2", "status inggang 2", "état entrée 2", "giriş 2 durumu", "stato ingresso 2", "stav vstupu 2", "stav vstupu 2") MAKE_TRANSLATION(hpInput3, "hpin3", "input 3 state", "Status Eingang 3", "Status input 3", "Status Ingång 3", "stan wejścia 3", "status inggang 3", "état entrée 3", "giriş 3 durumu", "stato ingresso 3", "stav vstupu 3", "stav vstupu 3") @@ -501,7 +507,6 @@ MAKE_TRANSLATION(hpIn4Opt, "hpin4opt", "input 4 options", "Einstellung Eingang 4 MAKE_TRANSLATION(maxHeatComp, "maxheatcomp", "heat limit compressor", "Heizstab Limit mit Kompressor", "heat limit compressor", "Max. Värmegräns Kompressor", "ograniczenie mocy sprężarki", "max varmegrense kompressor", "limite chaleur compresseur", "ısı pompası ısıtma sınırı", "limite riscaldamento compressore", "tepelný limit kompresora", "tepelný limit kompresoru") MAKE_TRANSLATION(maxHeatHeat, "maxheatheat", "heat limit heating", "Heizstab Limit Leistung", "Max, Värmegräns Uppvärmning", "heat limit heating", "ograniczenie mocy w trybie ogrzewania", "maks varmegrense oppvarming", "limite chaleur chauffage", "ısınma ısıtma sınırı", "limite calore riscaldamento", "vyhrievanie limitu tepla", "tepelný limit topení") MAKE_TRANSLATION(maxHeatDhw, "maxheat", "heat limit", "Heizstab Limit für WW", "heat limit", "Max. Värmegräns Varmvatten", "ograniczenie mocy w trybie c.w.u.", "varmegrense", "limite chaleur", "sıcak kullanım suyu ısınma sınırı", "limite calore", "tepelný limit", "tepelný limit") - MAKE_TRANSLATION(auxHeaterOff, "auxheateroff", "disable aux heater", "Zusatzheizer deaktivieren", "Bijverwarming uitsc", "Blockera eltillskott", "wyłącz dogrzewacz", "deaktiver tilleggsvarme", "Désactiver chauff. d'app", "ilave ısıtıcıyı kapat", "disattivare i riscaldatori addizionali", "vypnúť pomocný ohrievač", "zakázat pomocné topení") MAKE_TRANSLATION(auxHeaterStatus, "auxheaterstatus", "aux heater status", "Zusatzheizerstatus", "Bijverwarming", "Eltillskott Status", "status dogrzewacza", "status el. tillegsvarme", "Chauffage auxiliaire", "ilave ısıtıcı durumu", "stato riscaldatori addizionali", "stav pomocného ohrievača", "stav pomocného topení") MAKE_TRANSLATION(auxHeaterLevel, "auxheaterlevel", "aux heater level", "Zusatzheizer", "Bijverwarming", "Eltillskott", "dogrzewacza", "el. tillegsvarme", "Chauffage auxiliaire", "ilave ısıtıcı durumu", "riscaldatori addizionali", "pomocného ohrievača", "pomocného topení") @@ -518,7 +523,6 @@ MAKE_TRANSLATION(tempDiffHeat, "tempdiffheat", "temp diff TC3/TC0 heat", "Temp.d MAKE_TRANSLATION(tempDiffCool, "tempdiffcool", "temp diff TC3/TC0 cool", "Temp.diff. TC3/TC0 Kühlen", "Temp.vers. TC3/TC0 koel.", "Temperaturskillnad TC3/TC0 Kyla", "różnica temperatur TC3/TC0 w trakcie chłodzenia", "temp. diff. TC3/TC0 kjøling", "Delta T TC3/TC0 Refroid.", "TC3-TC0 soğutma sıcaklık farkı", "Delta T raffreddamento TC3/TC0", "teplotný rozdiel TC3/TC0 chladenie", "rozdíl teplot TC3/TC0 pro chlazení") MAKE_TRANSLATION(silentFrom, "silentfrom", "silent mode from", "Silentmodus Start", "Start stille modus", "Tyst drift starttid", "początek trybu cichego", "stillemodus starter", "", "sessiz mod başlangıcı", "avvio della modalità silenziosa", "tichý režim od", "tichý režim od") MAKE_TRANSLATION(silentTo, "silentto", "silent mode to", "Silentmodus Ende", "Einde stille modus", "Tyst drift stopptid", "koniec trybu cichego", "komfortmodus av", "", "sessiz mod bitişi", "spegnere modalità silenziosa", "tichý režim do", "tichý režim do") - MAKE_TRANSLATION(wwComfOffTemp, "comfoff", "comfort switch off", "Komfort Ausschalttemp.", "Comfort Uitschakeltemp.", "Komfort frånkopplingstemperatur", "temperatura wyłączania w trybie komfort", "eco modus utkoblingstem", "Confort Temp. d'arrêt", "konfor kapalı", "spegnimento modalità comfort", "komfortné vypnutie", "komfortní vypnutí") MAKE_TRANSLATION(wwEcoOffTemp, "ecooff", "eco switch off", "ECO Ausschalttemp.", "Eco Uitschakeltemp.", "Eko frånkopplingstemperatur", "temperatura wyłączania w trybie eko", "Øko avstengningstemp.", "Eco Temp. d'arrêt", "eko kapalı", "spegnimento modalità ECO", "eko vypínač", "eko vypnutí") MAKE_TRANSLATION(wwEcoPlusOffTemp, "ecoplusoff", "eco+ switch off", "ECO+ Ausschalttemp.", "Eco+ Uitschakeltemp.", "Eko+ frånkopplingstemperatur", "temperatura wyłączania w trybie eko+", "Øko+ avstengningstemp.", "Eco+ Temp. d'arrêt", "eko+ kapalı", "spegnimento modalità ECO+", "eko+ vypnutie", "eko+ vypnutí") @@ -528,7 +532,6 @@ MAKE_TRANSLATION(wwEcoPlusDiffTemp, "ecoplusdiff", "eco+ diff", "ECO+ Differenzt MAKE_TRANSLATION(wwComfStopTemp, "comfstop", "comfort stop temp", "Komfort Stopptemp.", "", "Komfort stopptemperatur", "", "", "", "", "", "komfortná stop teplota", "komfortní teplota vypnutí") MAKE_TRANSLATION(wwEcoStopTemp, "ecostop", "eco stop temp", "ECO Stopptemp.", "", "Eko stopptemperatur", "", "", "", "", "", "ECO stop teplota", "eko teplota vypnutí") MAKE_TRANSLATION(wwEcoPlusStopTemp, "ecoplusstop", "eco+ stop temp", "ECO+ Stopptemp.", "", "Eko+ stopptemperatur", "", "", "", "", "", "ECO+ stop teplota", "eko+ teplota vypnutí") - MAKE_TRANSLATION(auxHeatMode, "auxheatrmode", "aux heater mode", "Zusatzheizungsmodus", "Modus bijverwarmer", "Eltillskott Läge", "tryb pracy dogrzewacza po blokadzie z Zakładu Energetycznego", "tilleggsvarmer modus", "", "ilave ısıtıcı modu", "modalità riscaldatore addizionale", "režim pomocného ohrievača", "režim pomocného topení") MAKE_TRANSLATION(auxMaxLimit, "auxmaxlimit", "aux heater max limit", "Zusatzheizer max. Grenze", "Bijverwarmer grensinstelling maximaal", "Eltillskott max begränsning", "dogrzewacz, maksymalny limit", "tillegsvarme maksgrense", "ilave ısıtıcı maks limit", "limite massimo riscaldatore addizionale", "maximálny limit pomocného ohrievača", "maximální limit pomocného topení") MAKE_TRANSLATION(auxLimitStart, "auxlimitstart", "aux heater limit start", "Zusatzheizer Grenze Start", "Bijverwarmer grens voor start", "Eltillskott begränsningsstart", "dogrzewacz, początek ograniczenia", "tillegsvarme startgrense", "ilave ısıtıcı limir başlangıcı", "avvio limite massimo riscaldatore addizionale", "spustenie limitu pomocného ohrievača", "startovací limit pomocného topení") @@ -754,6 +757,8 @@ MAKE_TRANSLATION(roomTemp, "currtemp", "current room temperature", "aktuelle Rau MAKE_TRANSLATION(mode, "mode", "operating mode", "Betriebsart", "Modus", "Läge", "sposób sterowania", "modus", "mode", "mod", "modalità", "režim", "provozní režim") MAKE_TRANSLATION(modetype, "modetype", "mode type", "Modustyp", "Type modus", "Typ av läge", "aktualny tryb pracy", "modusrype", "type mode", "mod tipi", "tipo di modalita", "typ režimu", "typ režimu") MAKE_TRANSLATION(fastheatup, "fastheatup", "fast heatup", "schnelles Aufheizen", "Snel opwarmen", "Snabb Uppvärmning", "szybkie nagrzewanie", "rask oppvarming", "chauffage rapide", "hızlı ısıtma", "riscaldamento rapido", "rýchle zahriatie", "rychlé předehřátí") +MAKE_TRANSLATION(comfortPointTemp, "comftemp", "comfort point temperature", "Komfortpunkt Temperatur", "", "", "", "", "", "", "", "teplota bodu komfortu", "") +MAKE_TRANSLATION(comfortPointOffset, "comfoffset", "comfort point offset", "Komfortpunkt Anhebung", "", "", "", "", "", "", "", "posun bodu komfortu", "") MAKE_TRANSLATION(heatup, "heatup", "heatup", "Aufheizen", "opwarmen", "Uppvärmning", "nagrzewanie", "oppvarming", "chauffage", "hızlı", "riscaldamento", "rýchle zahriatie", "předehřev") MAKE_TRANSLATION(daytemp, "daytemp", "day temperature", "Tagestemperatur", "temperatuur dag", "Dagstemperatur", "temperatura w dzień", "dagtemperatur", "température jour", "gündüz sıcaklığı", "temperatura giornaliera", "denná teplota", "denní teplota") MAKE_TRANSLATION(daylowtemp, "daytemp2", "day temperature T2", "Tagestemperatur T2", "Temperatuur dag T2", "Dagstemperatur T2", "temperatura w dzień T2", "dagtemperatur T2", "température jour T2", "gündüz sıcaklığı T2", "temperatura giornaliera T2", "denná teplota T2", "denní teplota T2") @@ -771,6 +776,7 @@ MAKE_TRANSLATION(comforttemp, "comforttemp", "comfort temperature", "Komforttemp MAKE_TRANSLATION(summertemp, "summertemp", "summer temperature", "Sommertemperatur", "Zomertemperatuur", "Sommartemperatur", "temperatura przełączania lato/zima", "Sommertemperatur", "température été", "yaz sıcaklığı", "temperatura estiva", "letná teplota", "letní teplota") MAKE_TRANSLATION(designtemp, "designtemp", "design temperature", "Auslegungstemperatur", "Ontwerptemperatuur", "Design-temperatur", "temperatura projektowa", "designtemperatur", "température conception", "özel sıcaklık", "temperatura predefinita", "návrhová teplota", "dimenzovaná teplota") MAKE_TRANSLATION(offsettemp, "offsettemp", "offset temperature", "Temperaturanhebung", "Temperatuur offset", "Temperaturkorrigering", "korekta temperatury", "temperaturkorrigering", "température offset", "artış sıcaklığı", "aumento della temperatura", "offsetová teplota", "offset teploty") +MAKE_TRANSLATION(baseflowtemp, "baseflowtemp", "base flow temperature", "Basis Vorlauftemperatur") // ToDo translate MAKE_TRANSLATION(minflowtemp, "minflowtemp", "min flow temperature", "min. Vorlauftemperatur", "Minimale aanvoertemperatuur", "Min. Flödestemperatur", "minimalna temperatura zasilania", "min. turtemperatur", "température min. flux", "minimun akış sıcaklığı", "temperatura minima di mandata", "min. výstupná teplota", "vytápění minimální teplota") MAKE_TRANSLATION(maxflowtemp, "maxflowtemp", "max flow temperature", "max. Vorlauftemperatur", "Maximale aanvoertemperatuur", "Max. Flödestemperatur", "maksymalna temperatura zasilania", "maks turtemperatur", "température max flux", "maksimum akış sıcaklığı", "temperatura massima di mandata", "maximálna teplota prívodu", "vytápění maximální teplota") MAKE_TRANSLATION(roominfluence, "roominfluence", "room influence", "Raumeinfluss", "Ruimteinvloed", "Rumspåverkan", "wpływ pomieszczenia", "rominnflytelse", "influence pièce", "oda etkisi", "influenza della camera", "vplyv miestnosti", "vliv prostoru") @@ -822,7 +828,6 @@ MAKE_TRANSLATION(absent, "absent", "absent", "Abwesend", "", "Frånvarande", "", MAKE_TRANSLATION(redthreshold, "redthreshold", "reduction threshold", "Absenkschwelle", "", "Tröskel för sänkning", "", "", "", "", "", "zníženie tresholdu", "práh snížení") MAKE_TRANSLATION(solarinfl, "solarinfl", "solar influence", "Solareinfluß", "", "", "", "", "", "", "", "slnečný vplyv", "sluneční vliv") MAKE_TRANSLATION(currsolarinfl, "currsolarinfl", "current solar influence", "akt. Solareinfluß", "", "", "", "", "", "", "", "aktuálny slnečný vplyv", "aktuální sluneční vliv") - MAKE_TRANSLATION(hpmode, "hpmode", "HP Mode", "WP-Modus", "Modus warmtepomp", "Värmepumpsläge", "tryb pracy pompy ciepła", "", "", "yüksek güç modu", "Modalità Termopompa", "Režim TČ", "režim tepelného čerpadla") MAKE_TRANSLATION(dewoffset, "dewoffset", "dew point offset", "Taupunktdifferenz", "Offset dauwpunt", "Daggpunktsförskjutning", "przesunięcie punktu rosy", "", "", "çiğ noktası göreli", "differenza del punto di rugiada", "posun rosného bodu", "offset rosného bodu") MAKE_TRANSLATION(roomtempdiff, "roomtempdiff", "room temp difference", "Raumtemperaturdifferenz", "Verschiltemperatuur kamertemp", "Rumstemperaturskillnad", "różnica temp. pomieszczenia", "", "", "oda sıcaklığı farkı", "differenza temperatura ambiente", "rozdiel izbovej teploty", "rozdíl teploty místnosti") @@ -855,8 +860,9 @@ MAKE_TRANSLATION(poolShunt, "poolshunt", "pool shunt open/close (0% = pool / 100 MAKE_TRANSLATION(hydrTemp, "hydrTemp", "hydraulic header temperature", "Verteilertemperatur", "Temperatuur open verdeler", "Fördelartemperatur", "temperatura kolektora hydraulicznego", "Fordelertemperatur", "température collecteur hydraulique", "hidrolik başlık sıcaklığı", "temperatura del collettore", "teplota hydraulickej hlavice", "teplota hydraulické hlavice") // solar -MAKE_TRANSLATION(cylMiddleTemp, "cylmiddletemp", "cylinder middle temperature (TS3)", "Speichertemperatur Mitte (TS3)", "Zonneboilertemperatuur midden (TS3)", "Cylindertemperatur Mitten (TS3)", "temperatura w środku zasobnika (TS3)", "beredertemperatur i midten (TS3)", "température moyenne cylindre (TS3)", "orta depolama sıcaklığı (TS3)", "temperatura di conservazione media accumulo (TS3)", "stredná teplota valca (TS3)", "teplota středu válce (TS3)") +MAKE_TRANSLATION(cylMiddleTemp, "cylmiddletemp", "cylinder middle temperature (TS14)", "Speichertemperatur Mitte (TS14)", "Zonneboilertemperatuur midden (TS14)", "Cylindertemperatur Mitten (TS14)", "temperatura w środku zasobnika (TS14)", "beredertemperatur i midten (TS14)", "température moyenne cylindre (TS14)", "orta depolama sıcaklığı (TS14)", "temperatura di conservazione media accumulo (TS14)", "stredná teplota valca (TS14)", "teplota středu válce (TS14)") MAKE_TRANSLATION(retHeatAssist, "retheatassist", "return temperature heat assistance (TS4)", "Anhebung Rücklauftemp. (TS4)", "Retourtemperatuur verwarmingsassistentie (TS4)", "Returtemperatur värmestöd (TS4)", "temperatura powrotu wspomagania grzania (TS4)", "returtemperatur varmestøtte (TS4)", "température retour de assistance thermique (TS4)", "geri dönüş sıcaklığı artışı (TS4)", "temperatura ritorno scambiatore (TS4)", "pomoc pri teplote spiatočky (TS4)", "teplota zpátečky pomocného topení (TS4)") +MAKE_TRANSLATION(ts3, "ts3", "cylinder middle temperature (TS3)", "Speichertemperatur Mitte (TS3)", "Zonneboilertemperatuur midden (TS3)", "Cylindertemperatur Mitten (TS3)", "temperatura w środku zasobnika (TS3)", "beredertemperatur i midten (TS3)", "température moyenne cylindre (TS3)", "orta depolama sıcaklığı (TS3)", "temperatura di conservazione media accumulo (TS3)", "stredná teplota valca (TS3)", "teplota středu válce (TS3)") MAKE_TRANSLATION(ts8, "ts8", "(TS8)", "(TS8)") MAKE_TRANSLATION(ts16, "ts16", "(TS16)","(TS16)") MAKE_TRANSLATION(m1Valve, "heatassistvalve", "heat assistance valve (M1)", "Ventil Heizungsunterstützung (M1)", "Klep verwarmingsassistentie (M1)", "Uppvärmningsstöd Ventil (M1)", "zawór wspomagania grzania (M1)", "varmehjelpsventil (M1)", "vanne assistance thermique (M1)", "ısıtma yardım vanası (M1)", "valvola scambiatore (M1)", "tepelný asistenčný ventil (M1)", "ventil pomocného topení (M1)") diff --git a/src/core/modbus.cpp b/src/core/modbus.cpp index 803ab80d4..bec679a22 100644 --- a/src/core/modbus.cpp +++ b/src/core/modbus.cpp @@ -52,7 +52,7 @@ void Modbus::stop() { #ifndef EMSESP_STANDALONE modbusServer_->stop(); // virtual ~ModbusServerTCPasync() = default; - // delete modbusServer_; + delete modbusServer_; modbusServer_ = nullptr; #endif } diff --git a/src/core/modbus_entity_parameters.hpp b/src/core/modbus_entity_parameters.hpp index fc7500569..63755c639 100644 --- a/src/core/modbus_entity_parameters.hpp +++ b/src/core/modbus_entity_parameters.hpp @@ -60,144 +60,147 @@ const std::initializer_list Modbus::modbus_register_ma REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(pc1Flow), 81, 1), // pc1flow REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(pc1On), 82, 1), // pc1on REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(pc1Rate), 83, 1), // pc1rate - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(manDefrost), 84, 1), // mandefrost - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgTotal), 85, 2), // nrgtotal - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgHeat), 87, 2), // nrgheat - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgCool), 89, 2), // nrgcool - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(meterTotal), 91, 2), // metertotal - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(meterComp), 93, 2), // metercomp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(meterEHeat), 95, 2), // metereheat - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(meterHeat), 97, 2), // meterheat - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(meterCool), 99, 2), // metercool - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(upTimeTotal), 101, 2), // uptimetotal - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(upTimeControl), 103, 2), // uptimecontrol - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(upTimeCompHeating), 105, 2), // uptimecompheating - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(upTimeCompCooling), 107, 2), // uptimecompcooling - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(upTimeCompPool), 109, 2), // uptimecomppool - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(totalCompStarts), 111, 2), // totalcompstarts - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(heatingStarts), 113, 2), // heatingstarts - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(coolingStarts), 115, 2), // coolingstarts - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(poolStarts), 117, 2), // poolstarts - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgConsTotal), 119, 2), // nrgconstotal - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgConsCompTotal), 121, 2), // nrgconscomptotal - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgConsCompHeating), 123, 2), // nrgconscompheating - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgConsCompCooling), 125, 2), // nrgconscompcooling - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgConsCompPool), 127, 2), // nrgconscomppool - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxElecHeatNrgConsTotal), 129, 2), // auxelecheatnrgconstotal - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxElecHeatNrgConsHeating), 131, 2), // auxelecheatnrgconsheating - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxElecHeatNrgConsPool), 133, 2), // auxelecheatnrgconspool - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgSuppTotal), 135, 2), // nrgsupptotal - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgSuppHeating), 137, 2), // nrgsuppheating - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgSuppCooling), 139, 2), // nrgsuppcooling - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgSuppPool), 141, 2), // nrgsupppool - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpPower), 143, 1), // hppower - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpMaxPower), 144, 1), // hpmaxpower - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(pvMaxComp), 145, 1), // pvmaxcomp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(powerReduction), 146, 1), // powerreduction - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpSetDiffPress), 147, 1), // hpsetdiffpress - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpCompOn), 148, 1), // hpcompon - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpActivity), 149, 1), // hpactivity - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpBrinePumpSpd), 150, 1), // hpbrinepumpspd - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpSwitchValve), 151, 1), // hpswitchvalve - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpCompSpd), 152, 1), // hpcompspd - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTargetSpd), 153, 1), // hptargetspd - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpCircSpd), 154, 1), // hpcircspd - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(receiverValveVr0), 155, 1), // recvalve - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(expansionValveVr1), 156, 1), // expvalve - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpBrineIn), 157, 1), // hpbrinein - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpBrineOut), 158, 1), // hpbrineout - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTc0), 159, 1), // hptc0 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTc1), 160, 1), // hptc1 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTc3), 161, 1), // hptc3 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr1), 162, 1), // hptr1 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr3), 163, 1), // hptr3 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr4), 164, 1), // hptr4 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr5), 165, 1), // hptr5 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr6), 166, 1), // hptr6 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr7), 167, 1), // hptr7 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTl2), 168, 1), // hptl2 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpPl1), 169, 1), // hppl1 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpPh1), 170, 1), // hpph1 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTa4), 171, 1), // hpta4 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTw1), 172, 1), // hptw1 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(poolSetTemp), 173, 1), // poolsettemp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpInput1), 174, 1), // hpin1 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpIn1Opt), 175, 8), // hpin1opt - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpInput2), 183, 1), // hpin2 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpIn2Opt), 184, 8), // hpin2opt - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpInput3), 192, 1), // hpin3 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpIn3Opt), 193, 8), // hpin3opt - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpInput4), 201, 1), // hpin4 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpIn4Opt), 202, 8), // hpin4opt - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(maxHeatComp), 210, 1), // maxheatcomp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(maxHeatHeat), 211, 1), // maxheatheat - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterSource), 212, 1), // auxheatersource - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(pvCooling), 213, 1), // pvcooling - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterOnly), 214, 1), // auxheateronly - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterOff), 215, 1), // auxheateroff - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterStatus), 216, 1), // auxheaterstatus - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterLevel), 217, 1), // auxheaterlevel - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterDelay), 218, 1), // auxheaterdelay - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxMaxLimit), 219, 1), // auxmaxlimit - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxLimitStart), 220, 1), // auxlimitstart - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeatMode), 221, 1), // auxheatrmode - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpHystHeat), 222, 1), // hphystheat - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpHystCool), 223, 1), // hphystcool - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpHystPool), 224, 1), // hphystpool - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(silentMode), 225, 1), // silentmode - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(silentFrom), 226, 1), // silentfrom - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(silentTo), 227, 1), // silentto - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(minTempSilent), 228, 1), // mintempsilent - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(tempParMode), 229, 1), // tempparmode - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeatMixValve), 230, 1), // auxheatmix - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(tempDiffHeat), 231, 1), // tempdiffheat - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(tempDiffCool), 232, 1), // tempdiffcool - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(vp_cooling), 233, 1), // vpcooling - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(heatCable), 234, 1), // heatcable - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(VC0valve), 235, 1), // vc0valve - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(primePump), 236, 1), // primepump - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(primePumpMod), 237, 1), // primepumpmod - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hp3wayValve), 238, 1), // hp3way - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(elHeatStep1), 239, 1), // elheatstep1 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(elHeatStep2), 240, 1), // elheatstep2 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(elHeatStep3), 241, 1), // elheatstep3 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpEA0), 242, 1), // hpea0 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpPumpMode), 243, 1), // hppumpmode - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpFan), 244, 1), // fan - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(fanSpd), 245, 1), // fanspd - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpShutdown), 246, 1), // shutdown - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpCurrPower), 247, 1), // hpcurrpower - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpPowerLimit), 248, 1), // hppowerlimit - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(exhaustTemp), 249, 1), // exhausttemp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(burnGas), 250, 1), // burngas - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(burnGas2), 251, 1), // burngas2 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(flameCurr), 252, 1), // flamecurr - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(fanWork), 253, 1), // fanwork - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(ignWork), 254, 1), // ignwork - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(oilPreHeat), 255, 1), // oilpreheat - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(burnMinPower), 256, 1), // burnminpower - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(burnMaxPower), 257, 1), // burnmaxpower - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(burnMinPeriod), 258, 1), // burnminperiod - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(absBurnPow), 259, 1), // absburnpow - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(heatblock), 260, 1), // heatblock - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(boilHystOn), 261, 1), // boilhyston - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(boilHystOff), 262, 1), // boilhystoff - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(boil2HystOn), 263, 1), // boil2hyston - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(boil2HystOff), 264, 1), // boil2hystoff - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(curveOn), 265, 1), // curveon - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(curveBase), 266, 1), // curvebase - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(curveEnd), 267, 1), // curveend - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(summertemp), 268, 1), // summertemp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nofrostmode), 269, 1), // nofrostmode - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nofrosttemp), 270, 1), // nofrosttemp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(gasMeterHeat), 271, 2), // gasmeterheat - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgHeat2), 273, 2), // nrgheat2 - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nomPower), 275, 1), // nompower - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(netFlowTemp), 276, 1), // netflowtemp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(heatValve), 277, 1), // heatvalve - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(keepWarmTemp), 278, 1), // keepwarmtemp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(setReturnTemp), 279, 1), // setreturntemp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(heatingOn), 280, 1), // heating + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(pumpKickHour), 84, 1), // pumpkickhour + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(pumpKickDay), 85, 1), // pumpkickday + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(pumpKickDelay), 86, 1), // pumpkickdelay + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(manDefrost), 87, 1), // mandefrost + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgTotal), 88, 2), // nrgtotal + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgHeat), 90, 2), // nrgheat + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgCool), 92, 2), // nrgcool + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(meterTotal), 94, 2), // metertotal + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(meterComp), 96, 2), // metercomp + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(meterEHeat), 98, 2), // metereheat + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(meterHeat), 100, 2), // meterheat + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(meterCool), 102, 2), // metercool + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(upTimeTotal), 104, 2), // uptimetotal + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(upTimeControl), 106, 2), // uptimecontrol + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(upTimeCompHeating), 108, 2), // uptimecompheating + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(upTimeCompCooling), 110, 2), // uptimecompcooling + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(upTimeCompPool), 112, 2), // uptimecomppool + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(totalCompStarts), 114, 2), // totalcompstarts + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(heatingStarts), 116, 2), // heatingstarts + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(coolingStarts), 118, 2), // coolingstarts + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(poolStarts), 120, 2), // poolstarts + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgConsTotal), 122, 2), // nrgconstotal + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgConsCompTotal), 124, 2), // nrgconscomptotal + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgConsCompHeating), 126, 2), // nrgconscompheating + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgConsCompCooling), 128, 2), // nrgconscompcooling + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgConsCompPool), 130, 2), // nrgconscomppool + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxElecHeatNrgConsTotal), 132, 2), // auxelecheatnrgconstotal + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxElecHeatNrgConsHeating), 134, 2), // auxelecheatnrgconsheating + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxElecHeatNrgConsPool), 136, 2), // auxelecheatnrgconspool + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgSuppTotal), 138, 2), // nrgsupptotal + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgSuppHeating), 140, 2), // nrgsuppheating + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgSuppCooling), 142, 2), // nrgsuppcooling + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgSuppPool), 144, 2), // nrgsupppool + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpPower), 146, 1), // hppower + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpMaxPower), 147, 1), // hpmaxpower + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(pvMaxComp), 148, 1), // pvmaxcomp + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(powerReduction), 149, 1), // powerreduction + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpSetDiffPress), 150, 1), // hpsetdiffpress + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpCompOn), 151, 1), // hpcompon + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpActivity), 152, 1), // hpactivity + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpBrinePumpSpd), 153, 1), // hpbrinepumpspd + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpSwitchValve), 154, 1), // hpswitchvalve + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpCompSpd), 155, 1), // hpcompspd + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTargetSpd), 156, 1), // hptargetspd + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpCircSpd), 157, 1), // hpcircspd + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(receiverValveVr0), 158, 1), // recvalve + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(expansionValveVr1), 159, 1), // expvalve + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpBrineIn), 160, 1), // hpbrinein + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpBrineOut), 161, 1), // hpbrineout + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTc0), 162, 1), // hptc0 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTc1), 163, 1), // hptc1 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTc3), 164, 1), // hptc3 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr1), 165, 1), // hptr1 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr3), 166, 1), // hptr3 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr4), 167, 1), // hptr4 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr5), 168, 1), // hptr5 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr6), 169, 1), // hptr6 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTr7), 170, 1), // hptr7 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTl2), 171, 1), // hptl2 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpPl1), 172, 1), // hppl1 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpPh1), 173, 1), // hpph1 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTa4), 174, 1), // hpta4 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpTw1), 175, 1), // hptw1 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(poolSetTemp), 176, 1), // poolsettemp + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hp4wayValve), 177, 1), // hp4way + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpInput1), 178, 1), // hpin1 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpIn1Opt), 179, 8), // hpin1opt + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpInput2), 187, 1), // hpin2 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpIn2Opt), 188, 8), // hpin2opt + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpInput3), 196, 1), // hpin3 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpIn3Opt), 197, 8), // hpin3opt + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpInput4), 205, 1), // hpin4 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpIn4Opt), 206, 8), // hpin4opt + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(maxHeatComp), 214, 1), // maxheatcomp + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(maxHeatHeat), 215, 1), // maxheatheat + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterSource), 216, 1), // auxheatersource + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(pvCooling), 217, 1), // pvcooling + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterOnly), 218, 1), // auxheateronly + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterOff), 219, 1), // auxheateroff + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterStatus), 220, 1), // auxheaterstatus + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterLevel), 221, 1), // auxheaterlevel + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeaterDelay), 222, 1), // auxheaterdelay + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxMaxLimit), 223, 1), // auxmaxlimit + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxLimitStart), 224, 1), // auxlimitstart + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeatMode), 225, 1), // auxheatrmode + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpHystHeat), 226, 1), // hphystheat + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpHystCool), 227, 1), // hphystcool + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpHystPool), 228, 1), // hphystpool + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(silentMode), 229, 1), // silentmode + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(silentFrom), 230, 1), // silentfrom + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(silentTo), 231, 1), // silentto + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(minTempSilent), 232, 1), // mintempsilent + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(tempParMode), 233, 1), // tempparmode + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(auxHeatMixValve), 234, 1), // auxheatmix + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(tempDiffHeat), 235, 1), // tempdiffheat + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(tempDiffCool), 236, 1), // tempdiffcool + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(vp_cooling), 237, 1), // vpcooling + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(heatCable), 238, 1), // heatcable + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(VC0valve), 239, 1), // vc0valve + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(primePump), 240, 1), // primepump + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(primePumpMod), 241, 1), // primepumpmod + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hp3wayValve), 242, 1), // hp3way + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(elHeatStep1), 243, 1), // elheatstep1 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(elHeatStep2), 244, 1), // elheatstep2 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(elHeatStep3), 245, 1), // elheatstep3 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpEA0), 246, 1), // hpea0 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpPumpMode), 247, 1), // hppumpmode + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpFan), 248, 1), // fan + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(fanSpd), 249, 1), // fanspd + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpShutdown), 250, 1), // shutdown + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpCurrPower), 251, 1), // hpcurrpower + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(hpPowerLimit), 252, 1), // hppowerlimit + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(exhaustTemp), 253, 1), // exhausttemp + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(burnGas), 254, 1), // burngas + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(burnGas2), 255, 1), // burngas2 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(flameCurr), 256, 1), // flamecurr + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(fanWork), 257, 1), // fanwork + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(ignWork), 258, 1), // ignwork + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(oilPreHeat), 259, 1), // oilpreheat + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(burnMaxPower), 260, 1), // burnmaxpower + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(burnMinPeriod), 261, 1), // burnminperiod + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(absBurnPow), 262, 1), // absburnpow + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(heatblock), 263, 1), // heatblock + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(boilHystOn), 264, 1), // boilhyston + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(boilHystOff), 265, 1), // boilhystoff + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(boil2HystOn), 266, 1), // boil2hyston + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(boil2HystOff), 267, 1), // boil2hystoff + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(curveOn), 268, 1), // curveon + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(curveBase), 269, 1), // curvebase + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(curveEnd), 270, 1), // curveend + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(summertemp), 271, 1), // summertemp + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nofrostmode), 272, 1), // nofrostmode + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nofrosttemp), 273, 1), // nofrosttemp + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(gasMeterHeat), 274, 2), // gasmeterheat + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nrgHeat2), 276, 2), // nrgheat2 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(nomPower), 278, 1), // nompower + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(netFlowTemp), 279, 1), // netflowtemp + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(heatValve), 280, 1), // heatvalve + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(keepWarmTemp), 281, 1), // keepwarmtemp + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(setReturnTemp), 282, 1), // setreturntemp + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DEVICE_DATA, FL_(heatingOn), 283, 1), // heating REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(nrgWw), 0, 2), // nrg REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(meterWw), 2, 2), // meter REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(upTimeCompWw), 4, 2), // uptimecomp @@ -308,85 +311,88 @@ const std::initializer_list Modbus::modbus_register_ma REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(summertemp), 8, 1), // summertemp REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(designtemp), 9, 1), // designtemp REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(offsettemp), 10, 1), // offsettemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(minflowtemp), 11, 1), // minflowtemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(maxflowtemp), 12, 1), // maxflowtemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(roominfluence), 13, 1), // roominfluence - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(roominfl_factor), 14, 1), // roominflfactor - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(curroominfl), 15, 1), // curroominfl - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(nofrostmode), 16, 1), // nofrostmode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(nofrosttemp), 17, 1), // nofrosttemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(targetflowtemp), 18, 1), // targetflowtemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heatingtype), 19, 1), // heatingtype - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(summersetmode), 20, 1), // summersetmode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(hpoperatingmode), 21, 1), // hpoperatingmode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(summermode), 22, 1), // summermode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(hpoperatingstate), 23, 1), // hpoperatingstate - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacationmode), 24, 1), // vacationmode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(controlmode), 25, 1), // controlmode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(program), 26, 1), // program - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(tempautotemp), 27, 1), // tempautotemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(cooltemp), 28, 1), // cooltemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(fastheatup), 29, 1), // fastheatup - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(switchonoptimization), 30, 1), // switchonoptimization - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(reducemode), 31, 1), // reducemode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(noreducetemp), 32, 1), // noreducetemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(reducetemp), 33, 1), // reducetemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(wwprio), 34, 1), // dhwprio - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(hpcooling), 35, 1), // hpcooling - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(coolingOn), 36, 1), // coolingon - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(hpmode), 37, 1), // hpmode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(dewoffset), 38, 1), // dewoffset - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(roomtempdiff), 39, 1), // roomtempdiff - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(hpminflowtemp), 40, 1), // hpminflowtemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(control), 41, 1), // control - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(remotetemp), 42, 1), // remotetemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(remotehum), 43, 1), // remotehum - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heatondelay), 44, 1), // heatondelay - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heatoffdelay), 45, 1), // heatoffdelay - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(instantstart), 46, 1), // instantstart - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(boost), 47, 1), // boost - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(boosttime), 48, 1), // boosttime - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(coolstart), 49, 1), // coolstart - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(coolondelay), 50, 1), // coolondelay - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(cooloffdelay), 51, 1), // cooloffdelay - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(switchProgMode), 52, 1), // switchprogmode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(redthreshold), 53, 1), // redthreshold - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(solarinfl), 54, 1), // solarinfl - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(currsolarinfl), 55, 1), // currsolarinfl - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heatingPID), 56, 1), // heatingpid - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(pumpopt), 57, 1), // pumpopt - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(inttimefloor), 58, 1), // inttimefloor - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(inttime), 59, 1), // inttime - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(daytemp), 60, 1), // daytemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(nighttemp2), 61, 1), // nighttemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(holidaytemp), 62, 1), // holidaytemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(holidaymode), 63, 1), // holidaymode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(flowtempoffset), 64, 1), // flowtempoffset - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(holidays), 65, 13), // holidays - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations), 78, 13), // vacations - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(pause), 91, 1), // pause - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(party), 92, 1), // party - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacreducetemp), 93, 1), // vacreducetemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacreducemode), 94, 1), // vacreducemode - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(switchtime1), 95, 8), // switchtime1 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(switchtime2), 103, 8), // switchtime2 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(offtemp), 111, 1), // offtemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(daylowtemp), 112, 1), // daytemp2 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(daymidtemp), 113, 1), // daytemp3 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(dayhightemp), 114, 1), // daytemp4 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(switchtime), 115, 8), // switchtime - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations1), 123, 11), // vacations1 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations2), 134, 11), // vacations2 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations3), 145, 11), // vacations3 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations4), 156, 11), // vacations4 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations5), 167, 11), // vacations5 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations6), 178, 11), // vacations6 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations7), 189, 11), // vacations7 - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(reducehours), 200, 1), // reducehours - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(reduceminutes), 201, 1), // reduceminutes - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heattemp), 202, 1), // heattemp - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(roomsensor), 203, 1), // roomsensor - REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heatup), 204, 1), // heatup + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(baseflowtemp), 11, 1), // baseflowtemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(minflowtemp), 12, 1), // minflowtemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(maxflowtemp), 13, 1), // maxflowtemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(roominfluence), 14, 1), // roominfluence + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(roominfl_factor), 15, 1), // roominflfactor + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(curroominfl), 16, 1), // curroominfl + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(nofrostmode), 17, 1), // nofrostmode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(nofrosttemp), 18, 1), // nofrosttemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(targetflowtemp), 19, 1), // targetflowtemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heatingtype), 20, 1), // heatingtype + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(summersetmode), 21, 1), // summersetmode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(hpoperatingmode), 22, 1), // hpoperatingmode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(summermode), 23, 1), // summermode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(hpoperatingstate), 24, 1), // hpoperatingstate + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacationmode), 25, 1), // vacationmode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(controlmode), 26, 1), // controlmode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(program), 27, 1), // program + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(tempautotemp), 28, 1), // tempautotemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(cooltemp), 29, 1), // cooltemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(fastheatup), 30, 1), // fastheatup + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(comfortPointOffset), 31, 1), // comfoffset + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(comfortPointTemp), 32, 1), // comftemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(switchonoptimization), 33, 1), // switchonoptimization + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(reducemode), 34, 1), // reducemode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(noreducetemp), 35, 1), // noreducetemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(reducetemp), 36, 1), // reducetemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(wwprio), 37, 1), // dhwprio + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(hpcooling), 38, 1), // hpcooling + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(coolingOn), 39, 1), // coolingon + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(hpmode), 40, 1), // hpmode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(dewoffset), 41, 1), // dewoffset + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(roomtempdiff), 42, 1), // roomtempdiff + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(hpminflowtemp), 43, 1), // hpminflowtemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(control), 44, 1), // control + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(remotetemp), 45, 1), // remotetemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(remotehum), 46, 1), // remotehum + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heatondelay), 47, 1), // heatondelay + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heatoffdelay), 48, 1), // heatoffdelay + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(instantstart), 49, 1), // instantstart + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(boost), 50, 1), // boost + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(boosttime), 51, 1), // boosttime + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(coolstart), 52, 1), // coolstart + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(coolondelay), 53, 1), // coolondelay + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(cooloffdelay), 54, 1), // cooloffdelay + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(switchProgMode), 55, 1), // switchprogmode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(redthreshold), 56, 1), // redthreshold + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(solarinfl), 57, 1), // solarinfl + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(currsolarinfl), 58, 1), // currsolarinfl + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heatingPID), 59, 1), // heatingpid + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(pumpopt), 60, 1), // pumpopt + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(inttimefloor), 61, 1), // inttimefloor + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(inttime), 62, 1), // inttime + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(daytemp), 63, 1), // daytemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(nighttemp2), 64, 1), // nighttemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(holidaytemp), 65, 1), // holidaytemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(holidaymode), 66, 1), // holidaymode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(flowtempoffset), 67, 1), // flowtempoffset + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(holidays), 68, 13), // holidays + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations), 81, 13), // vacations + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(pause), 94, 1), // pause + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(party), 95, 1), // party + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacreducetemp), 96, 1), // vacreducetemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacreducemode), 97, 1), // vacreducemode + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(switchtime1), 98, 8), // switchtime1 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(switchtime2), 106, 8), // switchtime2 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(offtemp), 114, 1), // offtemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(daylowtemp), 115, 1), // daytemp2 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(daymidtemp), 116, 1), // daytemp3 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(dayhightemp), 117, 1), // daytemp4 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(switchtime), 118, 8), // switchtime + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations1), 126, 11), // vacations1 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations2), 137, 11), // vacations2 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations3), 148, 11), // vacations3 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations4), 159, 11), // vacations4 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations5), 170, 11), // vacations5 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations6), 181, 11), // vacations6 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(vacations7), 192, 11), // vacations7 + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(reducehours), 203, 1), // reducehours + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(reduceminutes), 204, 1), // reduceminutes + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heattemp), 205, 1), // heattemp + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(roomsensor), 206, 1), // roomsensor + REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_HC, FL_(heatup), 207, 1), // heatup REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_DHW, FL_(mode), 0, 1), // mode REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_DHW, FL_(modetype), 1, 1), // modetype REGISTER_MAPPING(dt::THERMOSTAT, TAG_TYPE_DHW, FL_(wwSetTemp), 2, 1), // settemp @@ -440,53 +446,54 @@ const std::initializer_list Modbus::modbus_register_ma REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(retHeatAssist), 18, 1), // retheatassist REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(m1Valve), 19, 1), // heatassistvalve REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collector2Temp), 20, 1), // collector2temp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(ts8), 21, 1), // ts8 - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(ts16), 22, 1), // ts16 - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(m1Power), 23, 1), // heatassistpower - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPump2), 24, 1), // solarpump2 - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPump2Mod), 25, 1), // solarpump2mod - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(cyl2BottomTemp), 26, 1), // cyl2bottomtemp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(cyl3BottomTemp), 27, 1), // cyl3bottomtemp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(cylTopTemp), 28, 1), // cyltoptemp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatExchangerTemp), 29, 1), // heatexchangertemp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(cylPumpMod), 30, 1), // cylpumpmod - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(valveStatus), 31, 1), // valvestatus - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(vs1Status), 32, 1), // vs1status - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(vs3Status), 33, 1), // vs3status - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(transferPump), 34, 1), // transferpump - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(transferPumpMod), 35, 1), // transferpumpmod - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collectorMaxTemp), 36, 1), // collectormaxtemp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collectorMinTemp), 37, 1), // collectormintemp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(energyToday), 38, 2), // energytoday - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(energyTotal), 40, 2), // energytotal - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(pump2WorkTime), 42, 2), // pump2worktime - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(m1WorkTime), 44, 2), // m1worktime - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatTransferSystem), 46, 1), // heattransfersystem - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(externalCyl), 47, 1), // externalcyl - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(thermalDisinfect), 48, 1), // thermaldisinfect - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatMetering), 49, 1), // heatmetering - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(activated), 50, 1), // activated - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPumpMode), 51, 1), // solarpumpmode - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPumpKick), 52, 1), // solarpumpkick - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(plainWaterMode), 53, 1), // plainwatermode - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(doubleMatchFlow), 54, 1), // doublematchflow - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(pump2MinMod), 55, 1), // pump2minmod - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPump2TurnonDiff), 56, 1), // turnondiff2 - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPump2TurnoffDiff), 57, 1), // turnoffdiff2 - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPump2Kick), 58, 1), // pump2kick - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(climateZone), 59, 1), // climatezone - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collector1Area), 60, 1), // collector1area - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collector1Type), 61, 1), // collector1type - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collector2Area), 62, 1), // collector2area - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collector2Type), 63, 1), // collector2type - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(cylPriority), 64, 1), // cylpriority - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatCntFlowTemp), 65, 1), // heatcntflowtemp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatCntRetTemp), 66, 1), // heatcntrettemp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatCnt), 67, 1), // heatcnt - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(swapFlowTemp), 68, 1), // swapflowtemp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(swapRetTemp), 69, 1), // swaprettemp - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatAssistOn), 70, 1), // heatassiston - REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatAssistOff), 71, 1), // heatassistoff + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(ts3), 21, 1), // ts3 + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(ts8), 22, 1), // ts8 + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(ts16), 23, 1), // ts16 + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(m1Power), 24, 1), // heatassistpower + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPump2), 25, 1), // solarpump2 + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPump2Mod), 26, 1), // solarpump2mod + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(cyl2BottomTemp), 27, 1), // cyl2bottomtemp + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(cyl3BottomTemp), 28, 1), // cyl3bottomtemp + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(cylTopTemp), 29, 1), // cyltoptemp + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatExchangerTemp), 30, 1), // heatexchangertemp + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(cylPumpMod), 31, 1), // cylpumpmod + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(valveStatus), 32, 1), // valvestatus + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(vs1Status), 33, 1), // vs1status + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(vs3Status), 34, 1), // vs3status + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(transferPump), 35, 1), // transferpump + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(transferPumpMod), 36, 1), // transferpumpmod + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collectorMaxTemp), 37, 1), // collectormaxtemp + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collectorMinTemp), 38, 1), // collectormintemp + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(energyToday), 39, 2), // energytoday + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(energyTotal), 41, 2), // energytotal + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(pump2WorkTime), 43, 2), // pump2worktime + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(m1WorkTime), 45, 2), // m1worktime + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatTransferSystem), 47, 1), // heattransfersystem + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(externalCyl), 48, 1), // externalcyl + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(thermalDisinfect), 49, 1), // thermaldisinfect + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatMetering), 50, 1), // heatmetering + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(activated), 51, 1), // activated + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPumpMode), 52, 1), // solarpumpmode + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPumpKick), 53, 1), // solarpumpkick + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(plainWaterMode), 54, 1), // plainwatermode + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(doubleMatchFlow), 55, 1), // doublematchflow + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(pump2MinMod), 56, 1), // pump2minmod + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPump2TurnonDiff), 57, 1), // turnondiff2 + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPump2TurnoffDiff), 58, 1), // turnoffdiff2 + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(solarPump2Kick), 59, 1), // pump2kick + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(climateZone), 60, 1), // climatezone + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collector1Area), 61, 1), // collector1area + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collector1Type), 62, 1), // collector1type + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collector2Area), 63, 1), // collector2area + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(collector2Type), 64, 1), // collector2type + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(cylPriority), 65, 1), // cylpriority + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatCntFlowTemp), 66, 1), // heatcntflowtemp + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatCntRetTemp), 67, 1), // heatcntrettemp + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatCnt), 68, 1), // heatcnt + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(swapFlowTemp), 69, 1), // swapflowtemp + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(swapRetTemp), 70, 1), // swaprettemp + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatAssistOn), 71, 1), // heatassiston + REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DEVICE_DATA, FL_(heatAssistOff), 72, 1), // heatassistoff REGISTER_MAPPING(dt::SOLAR, TAG_TYPE_DHW, FL_(wwMinTemp), 0, 1), // mintemp REGISTER_MAPPING(dt::HEATPUMP, TAG_TYPE_DEVICE_DATA, FL_(airHumidity), 0, 1), // airhumidity REGISTER_MAPPING(dt::HEATPUMP, TAG_TYPE_DEVICE_DATA, FL_(dewTemperature), 1, 1), // dewtemperature diff --git a/src/core/mqtt.cpp b/src/core/mqtt.cpp index 4868084fd..7c63923f3 100644 --- a/src/core/mqtt.cpp +++ b/src/core/mqtt.cpp @@ -1184,14 +1184,19 @@ void Mqtt::add_ha_classes(JsonObject doc, const uint8_t device_type, const uint8 doc[sc_ha] = sc_ha_measurement; doc[dc_ha] = "temperature"; // override uom if fahrenheit - doc[uom_ha] = EMSESP::system_.fahrenheit() ? DeviceValue::DeviceValueUOM_s[DeviceValueUOM::FAHRENHEIT] : DeviceValue::DeviceValueUOM_s[uom]; + doc[uom_ha] = EMSESP::system_.fahrenheit() && uom != DeviceValueUOM::K ? DeviceValue::DeviceValueUOM_s[DeviceValueUOM::FAHRENHEIT] + : DeviceValue::DeviceValueUOM_s[uom]; break; case DeviceValueUOM::PERCENT: if (display_only) { doc[ic_ha] = F_(iconpercent); // set icon } doc[sc_ha] = sc_ha_measurement; - doc[dc_ha] = "power_factor"; + if (entity == FL_(airHumidity)[0] || entity == FL_(remotehum)[0]) { + doc[dc_ha] = "humidity"; + } else if (entity == FL_(battery)[0]) { + doc[dc_ha] = "battery"; + } break; case DeviceValueUOM::SECONDS: case DeviceValueUOM::MINUTES: @@ -1377,15 +1382,20 @@ bool Mqtt::publish_ha_climate_config(const DeviceValue & dv, const bool has_room snprintf(mode_str_tpl, sizeof(mode_str_tpl), - "{%%if %s%%}off{%%elif %s=='%s'%%}heat{%%elif %s=='%s'%%}heat{%%elif %s=='%s'%%}off{%%elif %s=='%s'%%}off{%%else%%}auto{%%endif%%}", + "{%%if %s%%}off{%%elif %s=='%s'%%}heat{%%elif %s=='%s'%%}heat{%%elif %s=='%s'%%}heat{%%elif %s=='%s'%%}off{%%elif %s=='%s'%%}off{%%elif " + "%s=='%s'%%}off{%%else%%}auto{%%endif%%}", hc_mode_cond, hc_mode_s, Helpers::translated_word(FL_(manual)), hc_mode_s, Helpers::translated_word(FL_(day)), hc_mode_s, + Helpers::translated_word(FL_(heat)), + hc_mode_s, Helpers::translated_word(FL_(night)), hc_mode_s, + Helpers::translated_word(FL_(eco)), + hc_mode_s, Helpers::translated_word(FL_(off))); snprintf(name_s, sizeof(name_s), "%s%d", tagname, hc_num); @@ -1446,7 +1456,7 @@ bool Mqtt::publish_ha_climate_config(const DeviceValue & dv, const bool has_room found_auto = true; } else if (!strcmp(mode, FL_(heat)[0]) || !strcmp(mode, FL_(day)[0]) || !strcmp(mode, FL_(manual)[0])) { found_heat = true; // we map day and manual to heat - } else if (!strcmp(mode, FL_(off)[0])) { + } else if (!strcmp(mode, FL_(off)[0]) || !strcmp(mode, FL_(night)[0]) || !strcmp(mode, FL_(eco)[0])) { found_off = true; } else if (!strcmp(mode, FL_(cool)[0])) { found_cool = true; @@ -1539,10 +1549,8 @@ void Mqtt::add_ha_dev_section(JsonObject doc, const char * name, const bool crea } // add mf (manufacturer/brand), mdl (model), sw (software version) and via_device - dev_json["mf"] = brand != nullptr ? brand : "EMS-ESP"; - if (model != nullptr) { - dev_json["mdl"] = model; - } + dev_json["mf"] = brand != nullptr ? brand : "EMS-ESP"; + dev_json["mdl"] = model != nullptr ? model : "EMS-ESP"; dev_json["sw"] = version != nullptr ? version : "v" + std::string(EMSESP_APP_VERSION); dev_json["via_device"] = Mqtt::basename(); } diff --git a/src/core/shuntingYard.cpp b/src/core/shuntingYard.cpp index 62e738bfb..0e8da02c2 100644 --- a/src/core/shuntingYard.cpp +++ b/src/core/shuntingYard.cpp @@ -344,8 +344,12 @@ bool isnum(const std::string & s) { std::string commands(std::string & expr, bool quotes) { auto expr_new = Helpers::toLower(expr); for (uint8_t device = 0; device < EMSdevice::DeviceType::UNKNOWN; device++) { - std::string d = (std::string)EMSdevice::device_type_2_device_name(device) + "/"; - auto f = expr_new.find(d); + // Optimized: build string with reserve to avoid temporary allocations + std::string d; + d.reserve(32); // typical device name length + "/" + d = EMSdevice::device_type_2_device_name(device); + d += "/"; + auto f = expr_new.find(d); while (f != std::string::npos) { // entity names are alphanumeric or _ auto e = expr_new.find_first_not_of("/._abcdefghijklmnopqrstuvwxyz0123456789", f); @@ -367,9 +371,11 @@ std::string commands(std::string & expr, bool quotes) { JsonDocument doc_in; JsonObject output = doc_out.to(); JsonObject input = doc_in.to(); - std::string cmd_s = "api/" + std::string(cmd); + // Optimized: use stack buffer for small strings to avoid heap allocation + char cmd_s[COMMAND_MAX_LENGTH + 5]; // "api/" prefix + cmd + snprintf(cmd_s, sizeof(cmd_s), "api/%s", cmd); - auto return_code = Command::process(cmd_s.c_str(), true, input, output); + auto return_code = Command::process(cmd_s, true, input, output); // check for no value (entity is valid but has no value set) if (return_code != CommandRet::OK && return_code != CommandRet::NO_VALUE) { return expr = ""; @@ -694,8 +700,8 @@ std::string compute(const std::string & expr) { std::string cmd = expr_new.substr(f, e - f).c_str(); JsonDocument doc; if (DeserializationError::Ok == deserializeJson(doc, cmd)) { - HTTPClient http; - std::string url, header_s, value_s, method_s, key_s, keys_s; + HTTPClient * http = new HTTPClient; + std::string url, header_s, value_s, method_s, key_s, keys_s; // search keys lower case for (JsonPair p : doc.as()) { if (Helpers::toLower(p.key().c_str()) == "url") { @@ -714,10 +720,10 @@ std::string compute(const std::string & expr) { keys_s = p.key().c_str(); } } - if (http.begin(url.c_str())) { + if (http->begin(url.c_str())) { int httpResult = 0; for (JsonPair p : doc[header_s].as()) { - http.addHeader(p.key().c_str(), p.value().as().c_str()); + http->addHeader(p.key().c_str(), p.value().as().c_str()); } std::string value = doc[value_s] | ""; std::string method = doc[method_s] | "get"; @@ -725,15 +731,15 @@ std::string compute(const std::string & expr) { // if there is data, force a POST if (value.length() || Helpers::toLower(method) == "post") { if (value.find_first_of('{') != std::string::npos) { - http.addHeader("Content-Type", "application/json"); // auto-set to JSON + http->addHeader(asyncsrv::T_Content_Type, asyncsrv::T_application_json, false); // auto-set to JSON } - httpResult = http.POST(value.c_str()); + httpResult = http->POST(value.c_str()); } else { - httpResult = http.GET(); // normal GET + httpResult = http->GET(); // normal GET } if (httpResult > 0) { - std::string result = http.getString().c_str(); + std::string result = http->getString().c_str(); std::string key = doc[key_s] | ""; JsonDocument keys_doc; // JsonDocument to hold "keys" after doc is parsed with HTTP body if (doc[keys_s].is()) { @@ -763,7 +769,8 @@ std::string compute(const std::string & expr) { } expr_new.replace(f, e - f, result.c_str()); } - http.end(); + http->end(); + delete http; } } f = expr_new.find_first_of('{', e); diff --git a/src/core/system.cpp b/src/core/system.cpp index d031a05f2..f27ba427a 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -20,42 +20,23 @@ #include "emsesp.h" // for send_raw_telegram() command #ifndef EMSESP_STANDALONE +#include "esp_image_format.h" #include "esp_ota_ops.h" #include "esp_partition.h" +#include +#include "esp_efuse.h" +#include #endif #include #include -#include +#include "EMSESP_Version.h" #if defined(EMSESP_TEST) #include "../test/test.h" #endif -#ifndef EMSESP_STANDALONE -#ifdef ESP_IDF_VERSION_MAJOR // IDF 4+ -#if CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4 -#include "../esp32/rom/rtc.h" -#elif CONFIG_IDF_TARGET_ESP32S2 -#include "../esp32s2/rom/rtc.h" -#elif CONFIG_IDF_TARGET_ESP32C3 -#include "../esp32c3/rom/rtc.h" -#elif CONFIG_IDF_TARGET_ESP32S3 -#include "../esp32s3/rom/rtc.h" -#else -#error Target CONFIG_IDF_TARGET is not supported -#endif -#else // ESP32 Before IDF 4.0 -#include "../rom/rtc.h" -#endif -#include -#endif - -#ifndef EMSESP_STANDALONE -#include "esp_efuse.h" -#endif - namespace emsesp { // Languages supported. Note: the order is important @@ -307,11 +288,11 @@ void System::get_partition_info() { partition_info_.clear(); // clear existing data #ifdef EMSESP_STANDALONE - // dummy data for standalone mode - version, size, install_date - partition_info_["app0"] = {EMSESP_APP_VERSION, 0, ""}; - partition_info_["app1"] = {"", 0, ""}; - partition_info_["factory"] = {"", 0, ""}; - partition_info_["boot"] = {"", 0, ""}; + // dummy data for standalone mode - version, size, install_date in UTC epoch + partition_info_["app0"] = {EMSESP_APP_VERSION, 0, 0}; + partition_info_["app1"] = {"", 0, 0}; + partition_info_["factory"] = {"", 0, 0}; + partition_info_["boot"] = {"", 0, 0}; #else auto current_partition = (const char *)esp_ota_get_running_partition()->label; @@ -351,14 +332,19 @@ void System::get_partition_info() { p_info.version = EMSESP::nvs_.getString(part->label, "").c_str(); char c[20]; snprintf(c, sizeof(c), "d_%s", (const char *)part->label); - time_t d = EMSESP::nvs_.getULong(c, 0); - char time_string[25]; - strftime(time_string, sizeof(time_string), "%FT%T", localtime(&d)); - p_info.install_date = d > 1500000000L ? time_string : ""; + time_t d = EMSESP::nvs_.getULong(c, 0); + p_info.install_date = d > 1500000000L ? d : 0; // store UTC epoch; formatted to local time at render - p_info.size = part->size / 1024; // set size in KB - - partition_info_[part->label] = p_info; + if (!p_info.version.empty()) { + esp_image_metadata_t meta = {}; + esp_partition_pos_t part_pos = {.offset = part->address, .size = part->size}; + if (esp_image_verify(ESP_IMAGE_VERIFY_SILENT, &part_pos, &meta) == ESP_OK) { + p_info.size = meta.image_len / 1024; // actual firmware size in KB + } else { + p_info.size = 0; + } + partition_info_[part->label] = p_info; + } } it = esp_partition_next(it); // loop to next partition @@ -367,7 +353,7 @@ void System::get_partition_info() { #endif } -// set NTP install time/date for the current partition +// set install time/date for the current partition, in UTC // assumes NTP is connected and working void System::set_partition_install_date() { #ifndef EMSESP_STANDALONE @@ -380,7 +366,7 @@ void System::set_partition_install_date() { snprintf(c, sizeof(c), "d_%s", current_partition); time_t d = EMSESP::nvs_.getULong(c, 0); if (d < 1500000000L) { - LOG_INFO("Firmware is fresh, setting the new install date in partition %s", current_partition); + LOG_DEBUG("Setting the install date in partition %s", current_partition); auto t = time(nullptr) - uuid::get_uptime_sec(); EMSESP::nvs_.putULong(c, t); } @@ -424,9 +410,9 @@ bool System::set_partition(const char * partitionname) { // restart EMS-ESP // app0 or app1, or boot/factory on 16MB boards void System::system_restart(const char * partitionname) { -#ifndef EMSESP_STANDALONE // see if we are forcing a partition to use if (partitionname != nullptr) { +#ifndef EMSESP_STANDALONE // Factory partition - label will be "factory" const esp_partition_t * partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL); if (partition && !strcmp(partition->label, partitionname)) { @@ -457,27 +443,28 @@ void System::system_restart(const char * partitionname) { // set the boot partition esp_ota_set_boot_partition(partition); } +#endif LOG_INFO("Restarting EMS-ESP from %s partition", partitionname); } else { LOG_INFO("Restarting EMS-ESP..."); } - // make sure it's only executed once - EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_NORMAL); - store_nvs_values(); // save any NVS values - Shell::loop_all(); // flush log to output + + // flush all the log + EMSESP::webLogService.loop(); // dump all to web log + for (int i = 0; i < 10; i++) { + Shell::loop_all(); + delay(10); // give telnet TCP stack time to transmit + } + Serial.flush(); // wait for hardware TX buffer to drain + Mqtt::disconnect(); // gracefully disconnect MQTT, needed for QOS1 EMSuart::stop(); // stop UART so there is no interference - delay(1000); // wait 1 second - ESP.restart(); // ka-boom! -#else - EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_NORMAL); - if (partitionname != nullptr) { - LOG_INFO("Restarting EMS-ESP from %s partition", partitionname); - } else { - LOG_INFO("Restarting EMS-ESP..."); - } + +#ifndef EMSESP_STANDALONE + delay(1000); // wait 1 second + ESP.restart(); // ka-boom! - this is the only place where the ESP32 restart is called #endif } @@ -539,6 +526,29 @@ void System::syslog_init() { #endif } +// start or reconfigure modbus +void System::modbus_init() { + EMSESP::webSettingsService.read([&](WebSettings & settings) { + if (settings.modbus_enabled) { + if (EMSESP::modbus_ == nullptr) { + EMSESP::modbus_ = new Modbus; + EMSESP::modbus_->start(1, settings.modbus_port, settings.modbus_max_clients, settings.modbus_timeout * 1000); + } else if (settings.modbus_port != modbus_port_ || settings.modbus_max_clients != modbus_max_clients_ || settings.modbus_timeout != modbus_timeout_) { + EMSESP::modbus_->stop(); + EMSESP::modbus_->start(1, settings.modbus_port, settings.modbus_max_clients, settings.modbus_timeout * 1000); + } + } else if (EMSESP::modbus_ != nullptr) { + EMSESP::modbus_->stop(); + delete EMSESP::modbus_; + EMSESP::modbus_ = nullptr; + } + modbus_enabled_ = settings.modbus_enabled; + modbus_port_ = settings.modbus_port; + modbus_max_clients_ = settings.modbus_max_clients; + modbus_timeout_ = settings.modbus_timeout; + }); +} + // read specific major system settings to store locally for faster access void System::store_settings(WebSettings & settings) { version_ = settings.version; @@ -556,11 +566,6 @@ void System::store_settings(WebSettings & settings) { board_profile_ = settings.board_profile; telnet_enabled_ = settings.telnet_enabled; - modbus_enabled_ = settings.modbus_enabled; - modbus_port_ = settings.modbus_port; - modbus_max_clients_ = settings.modbus_max_clients; - modbus_timeout_ = settings.modbus_timeout; - tx_mode_ = settings.tx_mode; syslog_enabled_ = settings.syslog_enabled; syslog_level_ = settings.syslog_level; @@ -630,17 +635,16 @@ void System::start() { network_init(); // network uart_init(); // start UART syslog_init(); // start syslog + modbus_init(); // start modbus } // button single click void System::button_OnClick(PButton & b) { LOG_NOTICE("Button pressed - single click"); -#if defined(EMSESP_TEST) #ifndef EMSESP_STANDALONE // show filesystem - Test::listDir(LittleFS, "/", 3); -#endif + listDir("/", 3); #endif } @@ -1213,9 +1217,16 @@ void System::show_system(uuid::console::Shell & shell) { } // GPIOs shell.println(" GPIOs:"); + shell.printf(" allowed:"); + for (const auto & gpio : valid_system_gpios_) { + shell.printf(" %d", gpio); + } + shell.printfln(" [total %d]", valid_system_gpios_.size()); shell.printf(" in use:"); - for (const auto & usage : used_gpios_) { - shell.printf(" %d(%s)", usage.pin, usage.source.c_str()); + auto sorted_gpios = used_gpios_; + std::sort(sorted_gpios.begin(), sorted_gpios.end(), [](const GpioUsage & a, const GpioUsage & b) { return a.pin < b.pin; }); + for (const auto & gpio : sorted_gpios) { + shell.printf(" %d(%s)", gpio.pin, gpio.source.c_str()); } shell.printfln(" [total %d]", used_gpios_.size()); auto available = available_gpios(); @@ -1230,11 +1241,18 @@ void System::show_system(uuid::console::Shell & shell) { if (partition.second.version.empty()) { continue; // no version, empty string } + std::string installed; + if (partition.second.install_date > 0) { + char time_string[25]; + time_t d = partition.second.install_date; + strftime(time_string, sizeof(time_string), "%FT%T", localtime(&d)); + installed = std::string(", installed on ") + time_string; + } shell.printfln(" %s: v%s (%d KB%s) %s", partition.first.c_str(), partition.second.version.c_str(), partition.second.size, - partition.second.install_date.empty() ? "" : (std::string(", installed ") + partition.second.install_date).c_str(), + installed.c_str(), (strcmp(esp_ota_get_running_partition()->label, partition.first.c_str()) == 0) ? "** active **" : ""); } @@ -1353,23 +1371,134 @@ bool System::check_restore() { JsonObject input = jsonDocument.as(); // see what type of file it is, either settings or customization. anything else is ignored std::string settings_type = input["type"]; - if (settings_type == "settings") { - // It's a settings file. Parse each section separately. If it's system related it will require a reboot - reboot_required = saveSettings(NETWORK_SETTINGS_FILE, "Network", input); - reboot_required |= saveSettings(AP_SETTINGS_FILE, "AP", input); - reboot_required |= saveSettings(MQTT_SETTINGS_FILE, "MQTT", input); - reboot_required |= saveSettings(NTP_SETTINGS_FILE, "NTP", input); - reboot_required |= saveSettings(SECURITY_SETTINGS_FILE, "Security", input); - reboot_required |= saveSettings(EMSESP_SETTINGS_FILE, "Settings", input); + LOG_INFO("Restoring '%s' settings...", settings_type.c_str()); + + // system backup, which is a consolidated json object with all the settings files + if (settings_type == "systembackup") { + reboot_required = true; + JsonArray sections = input["systembackup"].as(); + for (JsonObject section : sections) { + std::string section_type = section["type"]; + LOG_DEBUG("Restoring '%s' section...", section_type.c_str()); + if (section_type == "settings") { + saveSettings(NETWORK_SETTINGS_FILE, section); + saveSettings(AP_SETTINGS_FILE, section); + saveSettings(MQTT_SETTINGS_FILE, section); + saveSettings(NTP_SETTINGS_FILE, section); + saveSettings(SECURITY_SETTINGS_FILE, section); + saveSettings(EMSESP_SETTINGS_FILE, section); + } + if (section_type == "schedule") { + saveSettings(EMSESP_SCHEDULER_FILE, section); + } + if (section_type == "customizations") { + saveSettings(EMSESP_CUSTOMIZATION_FILE, section); + } + if (section_type == "entities") { + saveSettings(EMSESP_CUSTOMENTITY_FILE, section); + } + if (section_type == "modules") { + saveSettings(EMSESP_MODULES_FILE, section); + } + if (section_type == "customSupport") { + // it's a custom support, extract json and write to /config/customSupport.json file + File customSupportFile = LittleFS.open(EMSESP_CUSTOMSUPPORT_FILE, "w"); + if (customSupportFile) { + serializeJson(section, customSupportFile); + customSupportFile.close(); + LOG_INFO("Custom support file updated"); + } else { + LOG_ERROR("Failed to save custom support file"); + } + } + + if (section_type == "nvs") { + // Restore NVS values + JsonArray nvs_entries = section["nvs"].as(); + for (JsonObject entry : nvs_entries) { + std::string key = entry["key"] | ""; + int type = entry["type"] | NVS_TYPE_ANY; + + switch (type) { + case NVS_TYPE_I8: + if (entry["value"].is()) { + int8_t v = entry["value"]; + EMSESP::nvs_.putChar(key.c_str(), v); + LOG_DEBUG("Restored NVS value: %s = %d", key.c_str(), v); + } + break; + case NVS_TYPE_U8: + if (entry["value"].is()) { + uint8_t v = entry["value"]; + EMSESP::nvs_.putUChar(key.c_str(), v); + LOG_DEBUG("Restored NVS value: %s = %d", key.c_str(), v); + } + break; + case NVS_TYPE_I32: + if (entry["value"].is()) { + int32_t v = entry["value"]; + EMSESP::nvs_.putInt(key.c_str(), v); + LOG_DEBUG("Restored NVS value: %s = %d", key.c_str(), v); + } + break; + case NVS_TYPE_U32: + if (entry["value"].is()) { + uint32_t v = entry["value"]; + EMSESP::nvs_.putUInt(key.c_str(), v); + LOG_DEBUG("Restored NVS value: %s = %d", key.c_str(), v); + } + break; + case NVS_TYPE_I64: + if (entry["value"].is()) { + int64_t v = entry["value"]; + EMSESP::nvs_.putLong64(key.c_str(), v); + LOG_DEBUG("Restored NVS value: %s = %d", key.c_str(), v); + } + break; + case NVS_TYPE_U64: + if (entry["value"].is()) { + uint64_t v = entry["value"]; + EMSESP::nvs_.putULong64(key.c_str(), v); + LOG_DEBUG("Restored NVS value: %s = %d", key.c_str(), v); + } + break; + case NVS_TYPE_BLOB: + // used for double values + if (entry["value"].is()) { + double v = entry["value"]; + EMSESP::nvs_.putDouble(key.c_str(), v); + LOG_DEBUG("Restored NVS value: %s = %d", key.c_str(), v); + } + break; + case NVS_TYPE_STR: + case NVS_TYPE_ANY: + default: + if (entry["value"].is()) { + std::string v = entry["value"]; + EMSESP::nvs_.putString(key.c_str(), v.c_str()); + LOG_DEBUG("Restored NVS value: %s = %s", key.c_str(), v.c_str()); + } + break; + } + } + } + } + } + + // It's a single settings file. Parse each section separately. If it's system related it will require a reboot + else if (settings_type == "settings") { + reboot_required = saveSettings(NETWORK_SETTINGS_FILE, input); + reboot_required |= saveSettings(AP_SETTINGS_FILE, input); + reboot_required |= saveSettings(MQTT_SETTINGS_FILE, input); + reboot_required |= saveSettings(NTP_SETTINGS_FILE, input); + reboot_required |= saveSettings(SECURITY_SETTINGS_FILE, input); + reboot_required |= saveSettings(EMSESP_SETTINGS_FILE, input); } else if (settings_type == "customizations") { - // it's a customization file, just replace it and there's no need to reboot - saveSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", input); + saveSettings(EMSESP_CUSTOMIZATION_FILE, input); } else if (settings_type == "schedule") { - // it's a schedule file, just replace it and there's no need to reboot - saveSettings(EMSESP_SCHEDULER_FILE, "Schedule", input); + saveSettings(EMSESP_SCHEDULER_FILE, input); } else if (settings_type == "entities") { - // it's a entity file, just replace it and there's no need to reboot - saveSettings(EMSESP_CUSTOMENTITY_FILE, "Entities", input); + saveSettings(EMSESP_CUSTOMENTITY_FILE, input); } else if (settings_type == "customSupport") { // it's a custom support file - save it to /config new_file.close(); @@ -1412,8 +1541,8 @@ bool System::check_upgrade() { settingsVersion = "3.5.0"; // this was the last stable version without version info } - version::Semver200_version settings_version(settingsVersion); - version::Semver200_version this_version(EMSESP_APP_VERSION); + version::EMSESP_Version settings_version(settingsVersion); + version::EMSESP_Version this_version(EMSESP_APP_VERSION); std::string settings_version_type = settings_version.prerelease().empty() ? "" : ("-" + settings_version.prerelease()); std::string this_version_type = this_version.prerelease().empty() ? "" : ("-" + this_version.prerelease()); @@ -1527,39 +1656,219 @@ bool System::check_upgrade() { return false; // no reboot required } -// convert settings file into json object -void System::extractSettings(const char * filename, const char * section, JsonObject output) { +// map each config filename to its human-readable section key #ifndef EMSESP_STANDALONE - File settingsFile = LittleFS.open(filename); - if (settingsFile) { - JsonDocument jsonDocument; - DeserializationError error = deserializeJson(jsonDocument, settingsFile); - if (error == DeserializationError::Ok && jsonDocument.is()) { - JsonObject jsonObject = jsonDocument.as(); - JsonObject node = output[section].to(); - for (JsonPair kvp : jsonObject) { - node[kvp.key()] = kvp.value(); - } +static const std::pair SECTION_MAP[] = { + {NETWORK_SETTINGS_FILE, "Network"}, + {AP_SETTINGS_FILE, "AP"}, + {MQTT_SETTINGS_FILE, "MQTT"}, + {NTP_SETTINGS_FILE, "NTP"}, + {SECURITY_SETTINGS_FILE, "Security"}, + {EMSESP_SETTINGS_FILE, "Settings"}, + {EMSESP_SCHEDULER_FILE, "Schedule"}, + {EMSESP_CUSTOMIZATION_FILE, "Customizations"}, + {EMSESP_CUSTOMENTITY_FILE, "Entities"}, + {EMSESP_MODULES_FILE, "Modules"}, +}; +#endif + +// convert a single config file into a section of the output json object +void System::exportSettings(const std::string & type, const char * filename, JsonObject output) { + if (type != "settings") { + output["type"] = type; // add the type to the output, not for settings as it's already added because its grouped + } + +#ifndef EMSESP_STANDALONE + const char * section = nullptr; + for (const auto & [f, label] : SECTION_MAP) { + if (strcmp(f, filename) == 0) { + section = label; + break; } } - settingsFile.close(); + + if (!section) { + return; + } + + File settingsFile = LittleFS.open(filename); + if (settingsFile) { + { + JsonDocument jsonDocument; + DeserializationError error = deserializeJson(jsonDocument, settingsFile); + settingsFile.close(); // close early, we no longer need the file + if (error || !jsonDocument.is()) { + LOG_ERROR("Failed to deserialize settings file %s", filename); + return; + } + output[section].set(jsonDocument.as()); + } + LOG_DEBUG("Exported %s settings from file %s", section, filename); + } else { + LOG_ERROR("No settings file for %s found", filename); + } #endif } -// save settings file using input from a json object -bool System::saveSettings(const char * filename, const char * section, JsonObject input) { +// full system backup of all settings files +void System::exportSystemBackup(JsonObject output) { + output["type"] = "systembackup"; // add the type to the output + output["version"] = EMSESP_APP_VERSION; // add the version to the output + #ifndef EMSESP_STANDALONE + // add date/time if NTP enabled and active + if ((esp_sntp_enabled()) && (EMSESP::system_.ntp_connected())) { + time_t now = time(nullptr); + if (now > 1500000000L) { + char t[25]; + strftime(t, sizeof(t), "%FT%T", localtime(&now)); + output["date"] = t; + } + } +#endif + + // create an array of objects for each settings file + JsonArray nodes = output["systembackup"].to(); + + // start with settings by grouping them together + JsonObject node = nodes.add(); + node["type"] = "settings"; // add type once for this group + exportSettings("settings", NETWORK_SETTINGS_FILE, node); + exportSettings("settings", AP_SETTINGS_FILE, node); + exportSettings("settings", MQTT_SETTINGS_FILE, node); + exportSettings("settings", NTP_SETTINGS_FILE, node); + exportSettings("settings", SECURITY_SETTINGS_FILE, node); + exportSettings("settings", EMSESP_SETTINGS_FILE, node); + + node = nodes.add(); + exportSettings("schedule", EMSESP_SCHEDULER_FILE, node); + node = nodes.add(); + exportSettings("customizations", EMSESP_CUSTOMIZATION_FILE, node); + node = nodes.add(); + exportSettings("entities", EMSESP_CUSTOMENTITY_FILE, node); + node = nodes.add(); + exportSettings("modules", EMSESP_MODULES_FILE, node); + +#ifndef EMSESP_STANDALONE + // special case for custom support + File file = LittleFS.open(EMSESP_CUSTOMSUPPORT_FILE, "r"); + if (file) { + JsonDocument jsonDocument; + DeserializationError error = deserializeJson(jsonDocument, file); + file.close(); // close early, we no longer need the file + if (!error && jsonDocument.is()) { + JsonObject support_node = nodes.add(); + support_node["type"] = "customSupport"; + support_node["data"].set(jsonDocument.as()); + LOG_DEBUG("Exported custom support file %s", EMSESP_CUSTOMSUPPORT_FILE); + } else { + LOG_ERROR("Failed to deserialize custom support file"); + } + } + + // Backup NVS values + node = nodes.add(); + node["type"] = "nvs"; + + const char * nvs_part = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_NVS, "nvs1") ? "nvs1" : "nvs"; // nvs1 is on 16MBs + nvs_iterator_t it = nullptr; +#if ESP_IDF_VERSION_MAJOR < 5 + it = nvs_entry_find(nvs_part, "ems-esp", NVS_TYPE_ANY); + if (it == nullptr) { +#else + esp_err_t err = nvs_entry_find(nvs_part, "ems-esp", NVS_TYPE_ANY, &it); + if (err != ESP_OK) { +#endif + LOG_ERROR("Failed to find NVS entry for %s", nvs_part); + return; + } + + JsonArray entries = node["nvs"].to(); +#if ESP_IDF_VERSION_MAJOR < 5 + while (it != nullptr) { + nvs_entry_info_t info; + nvs_entry_info(it, &info); +#else + while (err == ESP_OK) { + nvs_entry_info_t info; + nvs_entry_info(it, &info); +#endif + JsonObject entry = entries.add(); + entry["type"] = info.type; + entry["key"] = info.key; + + LOG_DEBUG("Exporting NVS value: %s = %d", info.key, info.type); + + switch (info.type) { + case NVS_TYPE_I8: + entry["value"] = EMSESP::nvs_.getChar(info.key); + break; + case NVS_TYPE_U8: + entry["value"] = EMSESP::nvs_.getUChar(info.key); + break; + case NVS_TYPE_I32: + entry["value"] = EMSESP::nvs_.getInt(info.key); + break; + case NVS_TYPE_U32: + entry["value"] = EMSESP::nvs_.getUInt(info.key); + break; + case NVS_TYPE_I64: + entry["value"] = EMSESP::nvs_.getLong64(info.key); + break; + case NVS_TYPE_U64: + entry["value"] = EMSESP::nvs_.getULong64(info.key); + break; + case NVS_TYPE_BLOB: + entry["value"] = EMSESP::nvs_.getDouble(info.key); // bytes used for double values + break; + case NVS_TYPE_STR: + case NVS_TYPE_ANY: + default: + entry["value"] = EMSESP::nvs_.getString(info.key); + break; + } + +#if ESP_IDF_VERSION_MAJOR < 5 + it = nvs_entry_next(it); + } +#else + err = nvs_entry_next(&it); + } +#endif + + if (it != nullptr) { + nvs_release_iterator(it); + } +#endif +} + +// write a settings file using input from a json object, called from upload/restore +bool System::saveSettings(const char * filename, JsonObject input) { +#ifndef EMSESP_STANDALONE + const char * section = nullptr; + for (const auto & [f, label] : SECTION_MAP) { + if (strcmp(f, filename) == 0) { + section = label; + break; + } + } + + if (!section) { + return false; + } + JsonObject section_json = input[section]; if (section_json) { File section_file = LittleFS.open(filename, "w"); if (section_file) { - LOG_INFO("Applying new uploaded %s data", section); + LOG_DEBUG("Applying new uploaded %s data", section); serializeJson(section_json, section_file); section_file.close(); return true; // reboot required } } #endif + return false; // not found } @@ -1761,8 +2070,8 @@ void System::get_value_json(JsonObject output, const std::string & circuit, cons // generate Prometheus metrics format from system values std::string System::get_metrics_prometheus() { - std::string result; - std::unordered_map seen_metrics; + std::string result; + std::map seen_metrics; result.reserve(16000); @@ -2065,17 +2374,28 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output node["txpause"] = EMSbus::tx_mode() == EMS_TXMODE_OFF; // GPIO information + std::string gpios_allowed_str; + for (const auto & gpio : valid_system_gpios_) { + if (!gpios_allowed_str.empty()) { + gpios_allowed_str += ", "; + } + gpios_allowed_str += Helpers::itoa(gpio); + } + node["gpios_allowed"] = gpios_allowed_str; + std::string gpios_in_use_str; - for (const auto & usage : EMSESP::system_.used_gpios_) { + auto sorted_gpios = used_gpios_; + std::sort(sorted_gpios.begin(), sorted_gpios.end(), [](const GpioUsage & a, const GpioUsage & b) { return a.pin < b.pin; }); + for (const auto & gpio : sorted_gpios) { if (!gpios_in_use_str.empty()) { gpios_in_use_str += ", "; } - gpios_in_use_str += Helpers::itoa(usage.pin); + gpios_in_use_str += Helpers::itoa(gpio.pin); } node["gpios_in_use"] = gpios_in_use_str; std::string gpios_available_str; - for (const auto & gpio : EMSESP::system_.available_gpios()) { + for (const auto & gpio : available_gpios()) { if (!gpios_available_str.empty()) { gpios_available_str += ", "; } @@ -2211,6 +2531,15 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output } #endif + // Modbus Status + node = output["modbus"].to(); + node["enabled"] = EMSESP::system_.modbus_enabled_; + if (EMSESP::system_.modbus_enabled_) { + node["maxClients"] = EMSESP::system_.modbus_max_clients_; + node["port"] = EMSESP::system_.modbus_port_; + node["timeout"] = EMSESP::system_.modbus_timeout_; + } + // Sensor Status node = output["sensor"].to(); if (EMSESP::sensor_enabled()) { @@ -2218,6 +2547,10 @@ bool System::command_info(const char * value, const int8_t id, JsonObject output node["temperatureSensorReads"] = EMSESP::temperaturesensor_.reads(); node["temperatureSensorFails"] = EMSESP::temperaturesensor_.fails(); } + + // Analog Status + node = output["analog"].to(); + node["enabled"] = EMSESP::analog_enabled(); if (EMSESP::analog_enabled()) { node["analogSensors"] = EMSESP::analogsensor_.count_entities(); node["analogSensorReads"] = EMSESP::analogsensor_.reads(); @@ -2534,37 +2867,38 @@ bool System::command_restart(const char * value, const int8_t id) { std::string System::reset_reason(uint8_t cpu) const { #ifndef EMSESP_STANDALONE - switch (rtc_get_reset_reason(cpu)) { - case 1: + switch (esp_rom_get_reset_reason(cpu)) { + case RESET_REASON_CHIP_POWER_ON: return ("Power on reset"); - // case 2 :reset pin not on esp32 - case 3: + case 2: // not on esp32 + return ("reset pin"); + case RESET_REASON_CORE_SW: return ("Software reset"); case 4: // not on S2, C3 return ("Legacy watch dog reset"); - case 5: + case RESET_REASON_CORE_DEEP_SLEEP: return ("Deep sleep reset"); - case 6: // not on S2, C3 + case 6: // RESET_REASON_CORE_SDIO: // not on S2, S3, C3 return ("Reset by SDIO"); - case 7: + case RESET_REASON_CORE_MWDT0: return ("Timer group0 watch dog reset"); - case 8: + case RESET_REASON_CORE_MWDT1: return ("Timer group1 watch dog reset"); - case 9: + case RESET_REASON_CORE_RTC_WDT: return ("RTC watch dog reset"); case 10: return ("Intrusion reset CPU"); - case 11: + case RESET_REASON_CPU0_MWDT0: return ("Timer group reset CPU"); - case 12: + case RESET_REASON_CPU0_SW: return ("Software reset CPU"); - case 13: + case RESET_REASON_CPU0_RTC_WDT: return ("RTC watch dog reset: CPU"); - case 14: // not on S2, C3 + case 14: // RESET_REASON_CPU1_CPU0: // not on S2, S3, C3 return ("APP CPU reset by PRO CPU"); - case 15: + case RESET_REASON_SYS_BROWN_OUT: return ("Brownout reset"); - case 16: + case RESET_REASON_SYS_RTC_WDT: return ("RTC watch dog reset: CPU+RTC"); default: break; @@ -2599,7 +2933,7 @@ bool System::ntp_connected() { return ntp_connected_; } -// see if its a BBQKees Gateway by checking the nvs values +// see if its a BBQKees Gateway by checking the eFuse values String System::getBBQKeesGatewayDetails(uint8_t detail) { #ifndef EMSESP_STANDALONE union { @@ -2952,7 +3286,6 @@ void System::set_valid_system_gpios() { // excluded: // GPIO3, GPIO45 - GPIO46 = strapping pins // GPIO26 - GPIO32 = SPI flash and PSRAM and not recommended - // GPIO33 - GPIO37 = Octal flash/PSRAM // GPIO19 - GPIO20 = USB-JTAG // GPIO22 - GPIO25 = don't exist // @@ -2960,7 +3293,12 @@ void System::set_valid_system_gpios() { // GPIO11 - GPIO19 = ADC analog input only pins // GPIO47 - GPIO48 = valid on a Wemos S3 // GPIO8 = used by Liligo S3 board profile for Rx - valid_system_gpios_ = string_range_to_vector("0-48", "3, 45-46, 26-32, 33-37, 19-20, 22-25"); + if (ESP.getPsramSize() > 0) { + // GPIO33 - GPIO37 = Octal flash/PSRAM + valid_system_gpios_ = string_range_to_vector("0-48", "3, 45-46, 26-32, 33-37, 19-20, 22-25"); + } else { + valid_system_gpios_ = string_range_to_vector("0-48", "3, 45-46, 26-32, 19-20, 22-25"); + } #elif CONFIG_IDF_TARGET_ESP32 // https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/gpio.html @@ -3043,6 +3381,24 @@ void System::remove_gpio(uint8_t pin, bool also_system) { } } +// remove a gpio that has 0 for disable +void System::remove_optional_gpio(uint8_t pin) { + if (pin) { + remove_gpio(pin, false); + } +} + +// set unused gpios to default state input high-Z +void System::reset_unused_gpios() { + for (const auto & pin : valid_system_gpios_) { + auto it = std::find_if(used_gpios_.begin(), used_gpios_.end(), [pin](const GpioUsage & usage) { return usage.pin == pin; }); + if (it == used_gpios_.end()) { + LOG_DEBUG("reset pin %d", pin); + pinMode(pin, INPUT); + } + } +} + // return a list of GPIO's available for use std::vector System::available_gpios() { std::vector gpios; @@ -3077,4 +3433,39 @@ void System::restore_snapshot_gpios(std::vector & u_gpios, std::vector available_gpios(); @@ -375,6 +379,8 @@ class System { #endif static void remove_gpio(uint8_t pin, bool also_system = false); // remove a gpio from both valid (optional) and used lists + static void remove_optional_gpio(uint8_t pin); + static void reset_unused_gpios(); // Partition info map: partition name -> {version, size, install_date} std::map, AllocatorPSRAM>> partition_info_; diff --git a/src/core/telegram.cpp b/src/core/telegram.cpp index 67d4bc4ad..9317882c9 100644 --- a/src/core/telegram.cpp +++ b/src/core/telegram.cpp @@ -43,6 +43,7 @@ uint8_t EMSbus::ems_mask_ = EMS_MASK_UNSET; // unset so its triggered uint8_t EMSbus::ems_bus_id_ = EMSESP_DEFAULT_EMS_BUS_ID; uint8_t EMSbus::tx_mode_ = EMSESP_DEFAULT_TX_MODE; uint8_t EMSbus::tx_state_ = Telegram::Operation::NONE; +bool EMSbus::isEMS2_ = false; uuid::log::Logger EMSbus::logger_{F_(telegram), uuid::log::Facility::CONSOLE}; @@ -206,7 +207,9 @@ void RxService::add(uint8_t * data, uint8_t length) { message_data = data + 6; message_length = length - 7; } - + if (type_id > 0x0FF && message_length > 1) { // used for auto tx_mode + set_ems2(); + } // if we're watching and "raw" print out actual telegram as bytes to the console // including the CRC at the end if (EMSESP::watch() == EMSESP::Watch::WATCH_RAW) { diff --git a/src/core/telegram.h b/src/core/telegram.h index afebb5e23..2dc7b5aab 100644 --- a/src/core/telegram.h +++ b/src/core/telegram.h @@ -168,6 +168,15 @@ class EMSbus { return (ems_mask_ == EMS_MASK_HT3); } + static bool is_ems2() { + return isEMS2_; + } + + static void set_ems2() { + isEMS2_ = true; + ; + } + static uint8_t ems_mask() { return ems_mask_; } @@ -242,6 +251,7 @@ class EMSbus { static uint8_t ems_bus_id_; // the bus id, which configurable and stored in settings static uint8_t tx_mode_; // local copy of the tx mode static uint8_t tx_state_; // state of the Tx line (NONE or waiting on a TX_READ or TX_WRITE) + static bool isEMS2_; }; class RxService : public EMSbus { diff --git a/src/core/temperaturesensor.cpp b/src/core/temperaturesensor.cpp index 83624450b..086582292 100644 --- a/src/core/temperaturesensor.cpp +++ b/src/core/temperaturesensor.cpp @@ -21,12 +21,6 @@ #include "temperaturesensor.h" #include "emsesp.h" -#ifdef ESP32 -#define YIELD -#else -#define YIELD yield() -#endif - namespace emsesp { uuid::log::Logger TemperatureSensor::logger_{F_(temperaturesensor), uuid::log::Facility::DAEMON}; @@ -81,7 +75,6 @@ void TemperatureSensor::loop() { LOG_DEBUG("Read sensor temperature"); #endif if (bus_.reset() || parasite_) { - YIELD; bus_.skip(); bus_.write(CMD_CONVERT_TEMP, parasite_ ? 1 : 0); state_ = State::READING; @@ -260,19 +253,16 @@ int16_t TemperatureSensor::get_temperature_c(const uint8_t addr[]) { LOG_ERROR("Bus reset failed before reading scratchpad from %s", Sensor(addr).id()); return EMS_VALUE_INT16_NOTSET; } - YIELD; uint8_t scratchpad[SCRATCHPAD_LEN] = {0}; bus_.select(addr); bus_.write(CMD_READ_SCRATCHPAD); bus_.read_bytes(scratchpad, SCRATCHPAD_LEN); - YIELD; if (!bus_.reset()) { LOG_ERROR("Bus reset failed after reading scratchpad from %s", Sensor(addr).id()); return EMS_VALUE_INT16_NOTSET; } - YIELD; if (bus_.crc8(scratchpad, SCRATCHPAD_LEN - 1) != scratchpad[SCRATCHPAD_LEN - 1]) { LOG_WARNING("Invalid scratchpad CRC: %02X%02X%02X%02X%02X%02X%02X%02X%02X from sensor %s", @@ -400,6 +390,15 @@ bool TemperatureSensor::get_value_info(JsonObject output, const char * cmd, cons return true; } + if (!strcmp(cmd, F_(metrics))) { + std::string metrics = get_metrics_prometheus(); + if (!metrics.empty()) { + output["api_data"] = metrics; + return true; + } + return false; + } + // this is for a specific sensor const char * attribute_s = Command::get_attribute(cmd); @@ -414,6 +413,21 @@ bool TemperatureSensor::get_value_info(JsonObject output, const char * cmd, cons return false; // not found } +// generate Prometheus metrics format from temperature values +std::string TemperatureSensor::get_metrics_prometheus() { + std::string result; + result.reserve(sensors_.size() * 120); + char val[10]; + for (auto & sensor : sensors_) { + result += (std::string) "# HELP emsesp_" + sensor.name() + " " + sensor.name() + ", " + + EMSdevice::uom_to_string(EMSESP::system_.fahrenheit() ? DeviceValueUOM::FAHRENHEIT : DeviceValueUOM::DEGREES) + ", readable, visible\n"; + result += (std::string) "# TYPE emsesp_" + sensor.name() + " gauge\n"; + result += + (std::string) "emsesp_" + sensor.name() + " " + Helpers::render_value(val, sensor.temperature_c, 10, EMSESP::system_.fahrenheit() ? 2 : 0) + "\n"; + } + return result; +} + // note we don't add the device and state classes here, as we do in the custom entity service void TemperatureSensor::get_value_json(JsonObject output, const Sensor & sensor) { output["id"] = sensor.id(); diff --git a/src/core/temperaturesensor.h b/src/core/temperaturesensor.h index 14c53a5e5..a4aa63dfe 100644 --- a/src/core/temperaturesensor.h +++ b/src/core/temperaturesensor.h @@ -96,6 +96,8 @@ class TemperatureSensor { bool updated_values(); bool get_value_info(JsonObject output, const char * cmd, const int8_t id = -1); + std::string get_metrics_prometheus(); + // return back reference to the sensor list, used by other classes std::vector> sensors() const { return sensors_; diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 4af5dd1f0..1c40b9ff3 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -35,7 +35,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_telegram_type(0x11, "UBAErrorMessage2", false, MAKE_PF_CB(process_UBAErrorMessage)); register_telegram_type(0xC2, "UBAErrorMessage3", false, MAKE_PF_CB(process_UBAErrorMessage2)); register_telegram_type(0xC6, "UBAErrorMessage3", false, MAKE_PF_CB(process_UBAErrorMessage3)); - register_telegram_type(0x14, "UBATotalUptime", true, MAKE_PF_CB(process_UBATotalUptime)); + register_telegram_type(0x14, "UBATotalUptime", true, MAKE_PF_CB(process_UBATotalUptime), 3); register_telegram_type(0x15, "UBAMaintenanceData", false, MAKE_PF_CB(process_UBAMaintenanceData)); register_telegram_type(0x1C, "UBAMaintenanceStatus", false, MAKE_PF_CB(process_UBAMaintenanceStatus)); @@ -46,13 +46,13 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_telegram_type(0x35, "UBAFlags", false, MAKE_PF_CB(process_UBAFlags)); // only EMS 1.0 - register_telegram_type(0x16, "UBAParameters", true, MAKE_PF_CB(process_UBAParameters)); - register_telegram_type(0x33, "UBAParameterWW", true, MAKE_PF_CB(process_UBAParameterWW)); + register_telegram_type(0x16, "UBAParameters", true, MAKE_PF_CB(process_UBAParameters), 27); + register_telegram_type(0x33, "UBAParameterWW", true, MAKE_PF_CB(process_UBAParameterWW), 11); register_telegram_type(0x34, "UBAMonitorWW", false, MAKE_PF_CB(process_UBAMonitorWW)); // not ems1.0, but HT3 if (model() != EMSdevice::EMS_DEVICE_FLAG_EMS) { - register_telegram_type(0x27, "UBASettingsWW", true, MAKE_PF_CB(process_UBASettingsWW)); + register_telegram_type(0x27, "UBASettingsWW", true, MAKE_PF_CB(process_UBASettingsWW), 11); register_telegram_type(0x2A, "MC110Status", false, MAKE_PF_CB(process_MC110Status)); } @@ -62,38 +62,39 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_telegram_type(0xE3, "UBAMonitorSlowPlus2", false, MAKE_PF_CB(process_UBAMonitorSlowPlus2)); register_telegram_type(0xE4, "UBAMonitorFastPlus", false, MAKE_PF_CB(process_UBAMonitorFastPlus)); register_telegram_type(0xE5, "UBAMonitorSlowPlus", false, MAKE_PF_CB(process_UBAMonitorSlowPlus)); - register_telegram_type(0xE6, "UBAParametersPlus", true, MAKE_PF_CB(process_UBAParametersPlus)); + register_telegram_type(0xE6, "UBAParametersPlus", true, MAKE_PF_CB(process_UBAParametersPlus), 25); register_telegram_type(0xE9, "UBAMonitorWWPlus", false, MAKE_PF_CB(process_UBAMonitorWWPlus)); - register_telegram_type(0xEA, "UBAParameterWWPlus", true, MAKE_PF_CB(process_UBAParameterWWPlus)); - register_telegram_type(0x28, "WeatherComp", true, MAKE_PF_CB(process_WeatherComp)); + register_telegram_type(0xEA, "UBAParameterWWPlus", true, MAKE_PF_CB(process_UBAParameterWWPlus), 28); + register_telegram_type(0xEB, "PumpKick", true, MAKE_PF_CB(process_PumpKick), 4); + register_telegram_type(0x28, "WeatherComp", true, MAKE_PF_CB(process_WeatherComp), 6); register_telegram_type(0x2E0, "UBASetPoints", false, MAKE_PF_CB(process_UBASetPoints2)); - register_telegram_type(0x2CC, "HPPressure", true, MAKE_PF_CB(process_HpPressure)); + register_telegram_type(0x2CC, "HPPressure", true, MAKE_PF_CB(process_HpPressure), 10); } if (isHeatPump()) { register_telegram_type(0x494, "UBAEnergySupplied", false, MAKE_PF_CB(process_UBAEnergySupplied)); register_telegram_type(0x495, "UBAInformation", false, MAKE_PF_CB(process_UBAInformation)); - register_telegram_type(0x48D, "HpPower", true, MAKE_PF_CB(process_HpPower)); + register_telegram_type(0x48D, "HpPower", true, MAKE_PF_CB(process_HpPower), 20); register_telegram_type(0x48F, "HpTemperatures", false, MAKE_PF_CB(process_HpTemperatures)); - register_telegram_type(0x48A, "HpPool", true, MAKE_PF_CB(process_HpPool)); + register_telegram_type(0x48A, "HpPool", true, MAKE_PF_CB(process_HpPool), 2); register_telegram_type(0x4A2, "HpInput", true, MAKE_PF_CB(process_HpInput)); - register_telegram_type(0x485, "HpCooling", true, MAKE_PF_CB(process_HpCooling)); - register_telegram_type(0x486, "HpInConfig", true, MAKE_PF_CB(process_HpInConfig)); + register_telegram_type(0x485, "HpCooling", true, MAKE_PF_CB(process_HpCooling), 22); + register_telegram_type(0x486, "HpInConfig", true, MAKE_PF_CB(process_HpInConfig), 53); - register_telegram_type(0x492, "HpHeaterConfig", true, MAKE_PF_CB(process_HpHeaterConfig)); - register_telegram_type(0x488, "HPValve", true, MAKE_PF_CB(process_HpValve)); - register_telegram_type(0x484, "HPSilentMode", true, MAKE_PF_CB(process_HpSilentMode)); - register_telegram_type(0x48B, "HPPumps", true, MAKE_PF_CB(process_HpPumps)); - register_telegram_type(0x491, "HPAdditionalHeater", true, MAKE_PF_CB(process_HpAdditionalHeater)); - register_telegram_type(0x499, "HPDhwSettings", true, MAKE_PF_CB(process_HpDhwSettings)); - register_telegram_type(0x49C, "HPSettings2", true, MAKE_PF_CB(process_HpSettings2)); - register_telegram_type(0x49D, "HPSettings3", true, MAKE_PF_CB(process_HpSettings3)); - register_telegram_type(0x4AE, "HPEnergy", true, MAKE_PF_CB(process_HpEnergy)); - register_telegram_type(0x4AF, "HPMeters", true, MAKE_PF_CB(process_HpMeters)); - register_telegram_type(0x4A5, "HPFan", true, MAKE_PF_CB(process_HpFan)); - register_telegram_type(0x4AA, "HPPower2", true, MAKE_PF_CB(process_HpPower2)); - register_telegram_type(0x4A7, "HPPowerLimit", true, MAKE_PF_CB(process_HpPowerLimit)); - register_telegram_type(0x2D6, "HPPump2", true, MAKE_PF_CB(process_HpPump2)); + register_telegram_type(0x492, "HpHeaterConfig", true, MAKE_PF_CB(process_HpHeaterConfig), 5); + register_telegram_type(0x488, "HPValve", true, MAKE_PF_CB(process_HpValve), 14); + register_telegram_type(0x484, "HPSilentMode", true, MAKE_PF_CB(process_HpSilentMode), 65); + register_telegram_type(0x48B, "HPPumps", true, MAKE_PF_CB(process_HpPumps), 19); + register_telegram_type(0x491, "HPAdditionalHeater", true, MAKE_PF_CB(process_HpAdditionalHeater), 18); + register_telegram_type(0x499, "HPDhwSettings", true, MAKE_PF_CB(process_HpDhwSettings), 15); + register_telegram_type(0x49C, "HPSettings2", true, MAKE_PF_CB(process_HpSettings2), 4); + register_telegram_type(0x49D, "HPSettings3", true, MAKE_PF_CB(process_HpSettings3), 12); + register_telegram_type(0x4AE, "HPEnergy", true, MAKE_PF_CB(process_HpEnergy), 32); + register_telegram_type(0x4AF, "HPMeters", true, MAKE_PF_CB(process_HpMeters), 56); + register_telegram_type(0x4A5, "HPFan", true, MAKE_PF_CB(process_HpFan), 15); + register_telegram_type(0x4AA, "HPPower2", true, MAKE_PF_CB(process_HpPower2), 2); + register_telegram_type(0x4A7, "HPPowerLimit", true, MAKE_PF_CB(process_HpPowerLimit), 2); + register_telegram_type(0x2D6, "HPPump2", true, MAKE_PF_CB(process_HpPump2), 11); } // some gas boilers, see #1701 @@ -213,12 +214,13 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &fanWork_, DeviceValueType::BOOL, FL_(fanWork), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ignWork_, DeviceValueType::BOOL, FL_(ignWork), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &oilPreHeat_, DeviceValueType::BOOL, FL_(oilPreHeat), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, - &burnMinPower_, - DeviceValueType::UINT8, - FL_(burnMinPower), - DeviceValueUOM::PERCENT, - MAKE_CF_CB(set_min_power)); + // remove burnMinPower, #2918 + // register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + // &burnMinPower_, + // DeviceValueType::UINT8, + // FL_(burnMinPower), + // DeviceValueUOM::PERCENT, + // MAKE_CF_CB(set_min_power)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burnMaxPower_, DeviceValueType::UINT8, @@ -354,6 +356,24 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &pc1On_, DeviceValueType::BOOL, FL_(pc1On), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &pc1Rate_, DeviceValueType::UINT8, FL_(pc1Rate), DeviceValueUOM::PERCENT); + register_device_value( + DeviceValueTAG::TAG_DEVICE_DATA, &pumpKickHour_, DeviceValueType::UINT8, FL_(pumpKickHour), DeviceValueUOM::HOURS, MAKE_CF_CB(set_pumpKickHour), 0, 23); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &pumpKickDay_, + DeviceValueType::ENUM, + FL_(enum_dayOfWeek), + FL_(pumpKickDay), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_pumpKickDay)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &pumpKickDelay_, + DeviceValueType::UINT16, + FL_(pumpKickDelay), + DeviceValueUOM::MINUTES, + MAKE_CF_CB(set_pumpKickDelay), + 0, + 32767); + /* * Hybrid heatpump with telegram 0xBB is readable and writeable in boiler and thermostat * thermostat always overwrites settings in boiler @@ -646,6 +666,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const DeviceValueUOM::DEGREES, MAKE_CF_CB(set_pool_temp)); // register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hp4wayValve_, DeviceValueType::ENUM, FL_(enum_4way), FL_(hp4wayValve), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hp4wayValve_, DeviceValueType::BOOL, FL_(hp4wayValve), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpInput[0].state, DeviceValueType::BOOL, FL_(hpInput1), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hpInput[0].option, @@ -1118,7 +1139,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const if (!isHeatPump() && model() != EMSdevice::EMS_DEVICE_FLAG_HIU) { - register_telegram_type(0x04, "UBAFactory", true, MAKE_PF_CB(process_UBAFactory)); + register_telegram_type(0x04, "UBAFactory", true, MAKE_PF_CB(process_UBAFactory), 21); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nomPower_, DeviceValueType::UINT8, FL_(nomPower), DeviceValueUOM::KW, MAKE_CF_CB(set_nomPower)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgTotal_, @@ -1290,7 +1311,7 @@ void Boiler::process_UBAFactory(std::shared_ptr telegram) { has_update(nomPower_, nomPower); } if (min <= max) { - set_minmax(&burnMinPower_, 0, max); + // set_minmax(&burnMinPower_, 0, max); // removed #2918 set_minmax(&burnMaxPower_, min, max); set_minmax(&wwMaxPower_, min, max); set_minmax(&selBurnPow_, 0, max); @@ -1376,7 +1397,7 @@ void Boiler::process_UBAParameters(std::shared_ptr telegram) { has_update(telegram, heatingActivated_, 0); has_update(telegram, heatingTemp_, 1); has_update(telegram, burnMaxPower_, 2); - has_update(telegram, burnMinPower_, 3); + // has_update(telegram, burnMinPower_, 3); // removed #2918 has_update(telegram, boilHystOff_, 4); has_update(telegram, boilHystOn_, 5); has_update(telegram, burnMinPeriod_, 6); @@ -1595,7 +1616,7 @@ void Boiler::process_UBAParametersPlus(std::shared_ptr telegram) has_update(telegram, heatingActivated_, 0); has_update(telegram, heatingTemp_, 1); has_update(telegram, burnMaxPower_, 4); - has_update(telegram, burnMinPower_, 5); + // has_update(telegram, burnMinPower_, 5); // removed #2918 has_update(telegram, boilHystOff_, 8); has_update(telegram, boilHystOn_, 9); has_update(telegram, burnMinPeriod_, 10); @@ -1730,7 +1751,9 @@ void Boiler::process_HpPower(std::shared_ptr telegram) { has_bitupdate(telegram, hp3wayValve_, 0, 6); // has_bitupdate(telegram, heating_, 0, 0); // heating on? https://github.com/emsesp/EMS-ESP32/discussions/1898 has_bitupdate(telegram, hpSwitchValve_, 0, 4); - + if (coolingType_ == 3) { + has_bitupdate(telegram, hp4wayValve_, 0, 3); // https://github.com/emsesp/EMS-ESP32/issues/2844#issuecomment-3869770845 + } has_bitupdate(telegram, elHeatStep1_, 3, 0); has_bitupdate(telegram, elHeatStep2_, 3, 1); has_bitupdate(telegram, elHeatStep3_, 3, 2); @@ -1830,6 +1853,8 @@ void Boiler::process_HpInConfig(std::shared_ptr telegram) { // Boiler(0x08) -W-> Me(0x0B), HpHeaterConfig(0x0485) void Boiler::process_HpCooling(std::shared_ptr telegram) { + // coolingtype to set 4wayvalve (0x48D), type not published yet, https://github.com/emsesp/EMS-ESP32/issues/2844#issuecomment-3869770845 + has_update(telegram, coolingType_, 0); // none = 0, passive cooling box = 1, active cooling box = 2, 4-way valve = 3, active and passive cooling box = 4. has_update(telegram, pvCooling_, 21); } @@ -2240,6 +2265,13 @@ void Boiler::process_HpPowerLimit(std::shared_ptr telegram) { has_update(telegram, hpPowerLimit_, 0); } +// 0x0EB +void Boiler::process_PumpKick(std::shared_ptr telegram) { + has_update(telegram, pumpKickHour_, 0); + has_enumupdate(telegram, pumpKickDay_, 1, 1); // 1-mo, ... + has_update(telegram, pumpKickDelay_, 2); +} + // Boiler(0x08) -B-> All(0x00), ?(0x2E), data: 00 00 1C CE 00 00 05 E8 00 00 00 18 00 00 00 02 void Boiler::process_Meters(std::shared_ptr telegram) { has_update(telegram, gasMeterHeat_, 0); @@ -2973,25 +3005,26 @@ bool Boiler::set_reset(const char * value, const int8_t id) { } if (num == 0) { - return true; // dash - } else if (num == 1) { - // LOG_INFO("Reset boiler maintenance message"); + return true; // dash + } else if (num == 1) { // Reset boiler maintenance message; write_command(0x05, 8, 0xFF, 0x1C); return true; - } else if (num == 2) { - // LOG_INFO("Reset boiler error message"); - write_command(0x05, 0, 0x5A); // error reset + } else if (num == 2) { // Reset boiler error message; + write_command(0x05, 0, 0x5A); return true; - } else if (num == 3) { - // LOG_INFO("Reset boiler history"); - write_command(0x05, 42, 0x01); // clear history + } else if (num == 3) { // Reset boiler history + write_command(0x05, 42, 0x01); return true; } else if (num == 4) { - // LOG_INFO("Reset boiler message"); - write_command(0x05, 8, 0xFF); // same as maintenance + write_command(0x05, 8, 0xFF); // reset messages, same as maintenance reset (1) return true; - } else if (num == 5) { - // LOG_INFO("Factory Reset"); + } else if (num == 5) { // reset Heatpump errors + write_command(0x05, 50, 0xFF); + return true; + } else if (num == 6) { // reset burner starts + write_command(0x05, 2, 165); + return true; + } else if (num == 7) { // factory reset write_command(0x05, 6, 154); return true; } @@ -3622,4 +3655,32 @@ bool Boiler::set_shutdown(const char * value, const int8_t id) { return false; } +bool Boiler::set_pumpKickHour(const char * value, const int8_t id) { + int v; + if (Helpers::value2number(value, v, 0, 23)) { + write_command(0xEB, 0, v, 0xEB); + return true; + } + return false; +} + +bool Boiler::set_pumpKickDay(const char * value, const int8_t id) { + uint8_t v; + if (Helpers::value2enum(value, v, FL_(enum_dayOfWeek))) { + write_command(0xEB, 1, v + 1, 0xEB); + return true; + } + return false; +} + +bool Boiler::set_pumpKickDelay(const char * value, const int8_t id) { + int v; + if (Helpers::value2number(value, v, 0, 32767)) { + uint8_t data[2] = {(uint8_t)(v >> 8), (uint8_t)v}; + write_command(0xEB, 2, data, 2, 0xEB); + return true; + } + return false; +} + } // namespace emsesp diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 3de7aec72..c0b7dab9b 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -270,6 +270,7 @@ class Boiler : public EMSdevice { uint8_t powerReduction_; uint8_t pvCooling_; + uint8_t coolingType_; uint8_t auxHeatMode_; uint8_t auxMaxLimit_; uint8_t auxLimitStart_; @@ -318,6 +319,9 @@ class Boiler : public EMSdevice { int16_t pc1Flow_; uint8_t pc1Rate_; uint8_t pc1On_; + uint8_t pumpKickHour_; // hour + uint8_t pumpKickDay_; // day 1=mo + uint16_t pumpKickDelay_; // delay minutes after pump running // HIU // uint16_t cwFlowRate_; // cold water flow rate *10 @@ -396,6 +400,7 @@ class Boiler : public EMSdevice { void process_HpFan(std::shared_ptr telegram); void process_HpPower2(std::shared_ptr telegram); void process_HpPowerLimit(std::shared_ptr telegram); + void process_PumpKick(std::shared_ptr telegram); void process_Meters(std::shared_ptr telegram); void process_Energy(std::shared_ptr telegram); @@ -601,6 +606,10 @@ class Boiler : public EMSdevice { bool set_nrgHeat(const char * value, const int8_t id); bool set_nrgWw(const char * value, const int8_t id); bool set_nomPower(const char * value, const int8_t id); + + bool set_pumpKickHour(const char * value, const int8_t id); + bool set_pumpKickDay(const char * value, const int8_t id); + bool set_pumpKickDelay(const char * value, const int8_t id); }; } // namespace emsesp diff --git a/src/devices/connect.cpp b/src/devices/connect.cpp index 4a96c0700..1b87a695e 100644 --- a/src/devices/connect.cpp +++ b/src/devices/connect.cpp @@ -39,11 +39,11 @@ Connect::Connect(uint8_t device_type, uint8_t device_id, uint8_t product_id, con DeviceValueUOM::DEGREES); // Roomthermostats for (uint8_t i = 0; i < 16; i++) { - register_telegram_type(0x0BDD + i, "Room", false, MAKE_PF_CB(process_roomThermostat)); // broadcasted - register_telegram_type(0x0B3D + i, "Roomname", false, MAKE_PF_CB(process_roomThermostatName)); // fetch for active circuits - register_telegram_type(0x0BB5 + i, "Roomsettings", false, MAKE_PF_CB(process_roomThermostatSettings)); // fetch for active circuits - register_telegram_type(0x1230 + i, "Roomparams", false, MAKE_PF_CB(process_roomThermostatParam)); // fetch for active circuits - register_telegram_type(0x1244 + i, "Roomdata", false, MAKE_PF_CB(process_roomThermostatData)); // broadcasted + register_telegram_type(0x0BDD + i, "Room", false, MAKE_PF_CB(process_roomThermostat)); // broadcasted + register_telegram_type(0x0B3D + i, "Roomname", false, MAKE_PF_CB(process_roomThermostatName), 100); // fetch for active circuits + register_telegram_type(0x0BB5 + i, "Roomsettings", false, MAKE_PF_CB(process_roomThermostatSettings), 8); // fetch for active circuits + register_telegram_type(0x1230 + i, "Roomparams", false, MAKE_PF_CB(process_roomThermostatParam)); // fetch for active circuits + register_telegram_type(0x1244 + i, "Roomdata", false, MAKE_PF_CB(process_roomThermostatData)); // broadcasted } register_telegram_type(0xDB65, "Roomschedule", true, MAKE_PF_CB(process_roomSchedule)); // 0x2040, broadcast 36 bytes: @@ -129,15 +129,20 @@ void Connect::process_roomThermostat(std::shared_ptr telegram) { } has_update(telegram, rc->temp_, 0); has_update(telegram, rc->humidity_, 2); // could show -3 if not set - has_update(telegram, rc->seltemp_, 3); + // make sure we have read mode and icon, needed for ha climate + if (!Mqtt::ha_enabled() || (Helpers::hasValue(rc->mode_) && Helpers::hasValue(rc->icon_))) { + has_update(telegram, rc->seltemp_, 3); + } // calculate dew temperature - const float k2 = 17.62; - const float k3 = 243.12; - const float t = (float)rc->temp_ / 10; - const float h = (float)rc->humidity_ / 100; - int16_t dt = (10 * k3 * (((k2 * t) / (k3 + t)) + log(h)) / (((k2 * k3) / (k3 + t)) - log(h))); - has_update(rc->dewtemp_, dt); + if (rc->humidity_ >= 0 && rc->humidity_ <= 100) { + const float k2 = 17.62; + const float k3 = 243.12; + const float t = (float)rc->temp_ / 10; + const float h = (float)rc->humidity_ / 100; + int16_t dt = (10 * k3 * (((k2 * t) / (k3 + t)) + log(h)) / (((k2 * k3) / (k3 + t)) - log(h))); + has_update(rc->dewtemp_, dt); + } } // gateway(0x48) W gateway(0x50), ?(0x0B42), data: 01 // icon in offset 0 @@ -206,12 +211,13 @@ bool Connect::set_mode(const char * value, const int8_t id) { return false; } uint8_t v; - if (Helpers::value2enum(value, v, FL_(enum_mode2), {3, 1, 0})) { - // if (Helpers::value2enum(value, v, FL_(enum_mode8))) { - write_command(0xBB5 + rc->room(), 0, v); // no validate, mode change is broadcasted - return true; + if (!Helpers::value2enum(value, v, FL_(enum_mode2), {3, 1, 0})) { + if (!Helpers::value2enum(value, v, FL_(enum_mode_ha), {3, 1, 0})) { + return false; + } } - return false; + write_command(0xBB5 + rc->room(), 0, v); // no validate, mode change is broadcasted + return true; } bool Connect::set_seltemp(const char * value, const int8_t id) { @@ -221,8 +227,9 @@ bool Connect::set_seltemp(const char * value, const int8_t id) { } float v; if (Helpers::value2float(value, v)) { - // write_command(0xBB5 + rc->room(), rc->mode_ == 2 ? 1 : 3, v == -1 ? 0xFF : uint8_t(v * 2)); - write_command(0xBB5 + rc->room(), rc->mode_ == 0 ? 1 : 3, v == -1 ? 0xFF : uint8_t(v * 2)); + // depends on mode, auto (2 for enum_mode2, 0 for enum_mode8) set in offset 1 + write_command(0xBB5 + rc->room(), rc->mode_ == 2 ? 1 : 3, v == -1 ? 0xFF : uint8_t(v * 2)); + // write_command(0xBB5 + rc->room(), rc->mode_ == 0 ? 1 : 3, v == -1 ? 0xFF : uint8_t(v * 2)); return true; } return false; diff --git a/src/devices/connect.h b/src/devices/connect.h index ea846c2b8..bbe647119 100644 --- a/src/devices/connect.h +++ b/src/devices/connect.h @@ -68,7 +68,7 @@ class Connect : public EMSdevice { bool set_childlock(const char * value, const int8_t id); bool set_icon(const char * value, const int8_t id); - std::vector> room_circuits_; + std::vector, AllocatorPSRAM>> room_circuits_; void process_OutdoorTemp(std::shared_ptr telegram); void process_RCTime(std::shared_ptr telegram); diff --git a/src/devices/extension.cpp b/src/devices/extension.cpp index f3475759b..be0f0c2e6 100644 --- a/src/devices/extension.cpp +++ b/src/devices/extension.cpp @@ -29,7 +29,7 @@ Extension::Extension(uint8_t device_type, uint8_t device_id, uint8_t product_id, return; } // Extension module EM100 device_id 0x12 - register_telegram_type(0x935, "EM100SetMessage", true, MAKE_PF_CB(process_EM100SetMessage)); + register_telegram_type(0x935, "EM100SetMessage", true, MAKE_PF_CB(process_EM100SetMessage), 5); register_telegram_type(0x936, "EM100OutMessage", false, MAKE_PF_CB(process_EM100OutMessage)); register_telegram_type(0x937, "EM100TempMessage", false, MAKE_PF_CB(process_EM100TempMessage)); register_telegram_type(0x938, "EM100InputMessage", false, MAKE_PF_CB(process_EM100InputMessage)); diff --git a/src/devices/heatpump.cpp b/src/devices/heatpump.cpp index 76dc4c1be..aa59ff97a 100644 --- a/src/devices/heatpump.cpp +++ b/src/devices/heatpump.cpp @@ -28,13 +28,13 @@ Heatpump::Heatpump(uint8_t device_type, uint8_t device_id, uint8_t product_id, c // register_telegram_type(0x042B, "HP1", false, MAKE_PF_CB(process_HPMonitor1)); register_telegram_type(0x047B, "HP2", false, MAKE_PF_CB(process_HPMonitor2)); - register_telegram_type(0x998, "HPSettings", true, MAKE_PF_CB(process_HPSettings)); - register_telegram_type(0x999, "HPFunctionTest", true, MAKE_PF_CB(process_HPFunctionTest)); + register_telegram_type(0x998, "HPSettings", true, MAKE_PF_CB(process_HPSettings), 20); + register_telegram_type(0x999, "HPFunctionTest", true, MAKE_PF_CB(process_HPFunctionTest), 11); register_telegram_type(0x9A0, "HPTemperature", false, MAKE_PF_CB(process_HPTemperature)); register_telegram_type(0x99B, "HPFlowTemp", false, MAKE_PF_CB(process_HPFlowTemp)); register_telegram_type(0x99C, "HPComp", false, MAKE_PF_CB(process_HPComp)); - register_telegram_type(0x4AE, "HPEnergy", true, MAKE_PF_CB(process_HpEnergy)); - register_telegram_type(0x4AF, "HPMeters", true, MAKE_PF_CB(process_HpMeters)); + register_telegram_type(0x4AE, "HPEnergy", true, MAKE_PF_CB(process_HpEnergy), 32); + register_telegram_type(0x4AF, "HPMeters", true, MAKE_PF_CB(process_HpMeters), 56); register_telegram_type(0x99A, "HPStarts", false, MAKE_PF_CB(process_HpStarts)); register_telegram_type(0x12E, "HPEnergy1", false, MAKE_PF_CB(process_HpEnergy1)); register_telegram_type(0x13B, "HPEnergy2", false, MAKE_PF_CB(process_HpEnergy2)); diff --git a/src/devices/heatsource.cpp b/src/devices/heatsource.cpp index 292846da3..1487b5406 100644 --- a/src/devices/heatsource.cpp +++ b/src/devices/heatsource.cpp @@ -33,7 +33,7 @@ Heatsource::Heatsource(uint8_t device_type, uint8_t device_id, uint8_t product_i register_telegram_type(0x54E, "AmStatus", false, MAKE_PF_CB(process_amStatusMessage)); register_telegram_type(0x54F, "AmCommand", false, MAKE_PF_CB(process_amCommandMessage)); // not broadcasted, but actually not used register_telegram_type(0x550, "AmExtra", false, MAKE_PF_CB(process_amExtraMessage)); - register_telegram_type(0x54C, "AmSettings", true, MAKE_PF_CB(process_amSettingMessage)); // not broadcasted + register_telegram_type(0x54C, "AmSettings", true, MAKE_PF_CB(process_amSettingMessage), 23); // not broadcasted register_device_value(tag, &curFlowTemp_, DeviceValueType::INT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(sysFlowTemp), DeviceValueUOM::DEGREES); register_device_value(tag, &retTemp_, DeviceValueType::INT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(sysRetTemp), DeviceValueUOM::DEGREES); diff --git a/src/devices/mixer.cpp b/src/devices/mixer.cpp index 4dccb32c8..4d521f90b 100644 --- a/src/devices/mixer.cpp +++ b/src/devices/mixer.cpp @@ -56,7 +56,7 @@ Mixer::Mixer(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c // EMS 1.0 if (flags == EMSdevice::EMS_DEVICE_FLAG_MM10) { - register_telegram_type(0x00AA, "MMConfigMessage", true, MAKE_PF_CB(process_MMConfigMessage)); + register_telegram_type(0x00AA, "MMConfigMessage", true, MAKE_PF_CB(process_MMConfigMessage), 10); register_telegram_type(0x00AB, "MMStatusMessage", false, MAKE_PF_CB(process_MMStatusMessage)); register_telegram_type(0x00AC, "MMSetMessage", false, MAKE_PF_CB(process_MMSetMessage)); register_device_value(tag, &flowTempHc_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(flowTempHc), DeviceValueUOM::DEGREES); diff --git a/src/devices/pool.cpp b/src/devices/pool.cpp index 0cfc559fb..f3dc95e17 100644 --- a/src/devices/pool.cpp +++ b/src/devices/pool.cpp @@ -27,7 +27,7 @@ uuid::log::Logger Pool::logger_{F_(pool), uuid::log::Facility::CONSOLE}; Pool::Pool(uint8_t device_type, uint8_t device_id, uint8_t product_id, const char * version, const char * name, uint8_t flags, uint8_t brand) : EMSdevice(device_type, device_id, product_id, version, name, flags, brand) { // Pool module - register_telegram_type(0x5BA, "HpPoolStatus", true, MAKE_PF_CB(process_HpPoolStatus)); + register_telegram_type(0x5BA, "HpPoolStatus", true, MAKE_PF_CB(process_HpPoolStatus), 4); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &poolTemp_, DeviceValueType::INT16, diff --git a/src/devices/solar.cpp b/src/devices/solar.cpp index 2aa874869..8d40ca5ed 100644 --- a/src/devices/solar.cpp +++ b/src/devices/solar.cpp @@ -29,32 +29,32 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c // telegram handlers if (flags == EMSdevice::EMS_DEVICE_FLAG_SM10) { register_telegram_type(0x97, "SM10Monitor", false, MAKE_PF_CB(process_SM10Monitor)); - register_telegram_type(0x96, "SM10Config", true, MAKE_PF_CB(process_SM10Config)); + register_telegram_type(0x96, "SM10Config", true, MAKE_PF_CB(process_SM10Config), 15); EMSESP::send_read_request(0x97, device_id); } if (flags == EMSdevice::EMS_DEVICE_FLAG_SM100) { // F9 is not a telegram type, it's a flag for configure // register_telegram_type(0xF9, "ParamCfg", false, MAKE_PF_CB(process_SM100ParamCfg)); - register_telegram_type(0x0358, "SM100SystemConfig", true, MAKE_PF_CB(process_SM100SystemConfig)); - register_telegram_type(0x035A, "SM100CircuitConfig", true, MAKE_PF_CB(process_SM100CircuitConfig)); - register_telegram_type(0x035D, "SM100Circuit2Config", true, MAKE_PF_CB(process_SM100Circuit2Config)); + register_telegram_type(0x0358, "SM100SystemConfig", true, MAKE_PF_CB(process_SM100SystemConfig), 32); + register_telegram_type(0x035A, "SM100CircuitConfig", true, MAKE_PF_CB(process_SM100CircuitConfig), 14); + register_telegram_type(0x035D, "SM100Circuit2Config", true, MAKE_PF_CB(process_SM100Circuit2Config), 12); register_telegram_type(0x0362, "SM100Monitor", false, MAKE_PF_CB(process_SM100Monitor)); register_telegram_type(0x0363, "SM100Monitor2", false, MAKE_PF_CB(process_SM100Monitor2)); register_telegram_type(0x0366, "SM100Config", false, MAKE_PF_CB(process_SM100Config)); register_telegram_type(0x0364, "SM100Status", false, MAKE_PF_CB(process_SM100Status)); register_telegram_type(0x036A, "SM100Status2", false, MAKE_PF_CB(process_SM100Status2)); - register_telegram_type(0x0380, "SM100CollectorConfig", true, MAKE_PF_CB(process_SM100CollectorConfig)); - register_telegram_type(0x038E, "SM100Energy", true, MAKE_PF_CB(process_SM100Energy)); - register_telegram_type(0x0391, "SM100Time", true, MAKE_PF_CB(process_SM100Time)); - register_telegram_type(0x035F, "SM100Config1", true, MAKE_PF_CB(process_SM100Config1)); - register_telegram_type(0x035C, "SM100HeatAssist", true, MAKE_PF_CB(process_SM100HeatAssist)); - register_telegram_type(0x0361, "SM100Differential", true, MAKE_PF_CB(process_SM100Differential)); + register_telegram_type(0x0380, "SM100CollectorConfig", true, MAKE_PF_CB(process_SM100CollectorConfig), 9); + register_telegram_type(0x038E, "SM100Energy", true, MAKE_PF_CB(process_SM100Energy), 12); + register_telegram_type(0x0391, "SM100Time", true, MAKE_PF_CB(process_SM100Time), 48); + register_telegram_type(0x035F, "SM100Config1", true, MAKE_PF_CB(process_SM100Config1), 11); + register_telegram_type(0x035C, "SM100HeatAssist", true, MAKE_PF_CB(process_SM100HeatAssist), 2); + register_telegram_type(0x0361, "SM100Differential", true, MAKE_PF_CB(process_SM100Differential), 1); } if (flags == EMSdevice::EMS_DEVICE_FLAG_ISM) { - register_telegram_type(0x0103, "ISM1StatusMessage", true, MAKE_PF_CB(process_ISM1StatusMessage)); - register_telegram_type(0x0101, "ISM1Set", true, MAKE_PF_CB(process_ISM1Set)); + register_telegram_type(0x0103, "ISM1StatusMessage", true, MAKE_PF_CB(process_ISM1StatusMessage), 14); + register_telegram_type(0x0101, "ISM1Set", true, MAKE_PF_CB(process_ISM1Set), 7); register_telegram_type(0x0104, "ISM2StatusMessage", false, MAKE_PF_CB(process_ISM2StatusMessage)); } @@ -190,6 +190,7 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c DeviceValueNumOp::DV_NUMOP_DIV10, FL_(cylMiddleTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ts3_, DeviceValueType::INT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(ts3), DeviceValueUOM::DEGREES); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &retHeatAssist_, DeviceValueType::INT16, @@ -613,6 +614,7 @@ void Solar::process_SM100Monitor(std::shared_ptr telegram) { has_update(telegram, collector2Temp_, 6); // is *10 - TS7: Temperature sensor for collector array 2 has_update(telegram, cylMiddleTemp_, 8); // is *10 - TS14: cylinder middle temperature has_update(telegram, retHeatAssist_, 10); // is *10 - TS15: return temperature heating assistance + has_update(telegram, ts3_, 14); // is *10 - TS3: cylinder middle temperature, see discord has_update(telegram, ts8_, 22); // is *10 - TS8: ? has_update(telegram, cylBottomTemp3_, 24); // is *10 - TS5: Temperature sensor cylinder 3, bottom } diff --git a/src/devices/solar.h b/src/devices/solar.h index 39617655a..0fc30918b 100644 --- a/src/devices/solar.h +++ b/src/devices/solar.h @@ -37,6 +37,7 @@ class Solar : public EMSdevice { int16_t cylTopTemp_; // TS10: Temperature sensor 1 cylinder, Top int16_t heatExchangerTemp_; // TS6: Heat exchanger temperature sensor int16_t collector2Temp_; // TS7: Temperature sensor for collector array 2 + int16_t ts3_; // TS3: Temperature sensor cylinder middle int16_t ts8_; // TS8: Temperature sensor for ? int16_t ts16_; // TS16: Temperature sensor for ? int16_t cylMiddleTemp_; // TS14: Cylinder middle temp diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index bbefe086b..824897496 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -36,11 +36,11 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i register_telegram_type(0x042B + device_id - 0x38, "RemoteTemp", false, MAKE_PF_CB(process_RemoteTemp)); if (product_id != Roomctrl::RC200) { register_telegram_type(0x047B + device_id - 0x38, "RemoteHumidity", false, MAKE_PF_CB(process_RemoteHumidity)); - register_telegram_type(0x0273 + device_id - 0x38, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection)); - register_telegram_type(0x0A6A + device_id - 0x38, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery)); + register_telegram_type(0x0273 + device_id - 0x38, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection), 1); + register_telegram_type(0x0A6A + device_id - 0x38, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery), 2); // maybe fixed type for these telegrams? - // register_telegram_type(0x0273, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection)); - // register_telegram_type(0x0A6B, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery)); + // register_telegram_type(0x0273, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection), 1); + // register_telegram_type(0x0A6B, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery), 2); } register_device_values(); // register device values for common values (not heating circuit) return; // no values to add @@ -57,42 +57,45 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i // RC10 if (model == EMSdevice::EMS_DEVICE_FLAG_RC10) { - monitor_typeids = {0xB1}; - set_typeids = {0xB0}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { + monitor_typeids = {0xB1}; + set_typeids = {0xB0}; + const size_t size = monitor_typeids.size(); + for (uint8_t i = 0; i < size; i++) { register_telegram_type(monitor_typeids[i], "RC10Monitor", false, MAKE_PF_CB(process_RC10Monitor)); register_telegram_type(set_typeids[i], "RC10Set", false, MAKE_PF_CB(process_RC10Set)); } // RC35 } else if ((model == EMSdevice::EMS_DEVICE_FLAG_RC35) || (model == EMSdevice::EMS_DEVICE_FLAG_RC30_N)) { - monitor_typeids = {0x3E, 0x48, 0x52, 0x5C}; - set_typeids = {0x3D, 0x47, 0x51, 0x5B}; - timer_typeids = {0x3F, 0x49, 0x53, 0x5D}; - timer2_typeids = {0x42, 0x4C, 0x56, 0x60}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(monitor_typeids[i], "RC35Monitor", false, MAKE_PF_CB(process_RC35Monitor)); - register_telegram_type(set_typeids[i], "RC35Set", false, MAKE_PF_CB(process_RC35Set)); - register_telegram_type(timer_typeids[i], "RC35Timer", false, MAKE_PF_CB(process_RC35Timer)); - register_telegram_type(timer2_typeids[i], "RC35Timer2", false, MAKE_PF_CB(process_RC35Timer)); + monitor_typeids = {0x3E, 0x48, 0x52, 0x5C}; + set_typeids = {0x3D, 0x47, 0x51, 0x5B}; + timer_typeids = {0x3F, 0x49, 0x53, 0x5D}; + timer2_typeids = {0x42, 0x4C, 0x56, 0x60}; + const size_t size = monitor_typeids.size(); + for (uint8_t i = 0; i < size; i++) { + register_telegram_type(monitor_typeids[i], "RC35Monitor", false, MAKE_PF_CB(process_RC35Monitor), 15); + register_telegram_type(set_typeids[i], "RC35Set", false, MAKE_PF_CB(process_RC35Set), 42); + register_telegram_type(timer_typeids[i], "RC35Timer", false, MAKE_PF_CB(process_RC35Timer), 99); + register_telegram_type(timer2_typeids[i], "RC35Timer2", false, MAKE_PF_CB(process_RC35Timer), 99); } - register_telegram_type(EMS_TYPE_IBASettings, "IBASettings", true, MAKE_PF_CB(process_IBASettings)); - register_telegram_type(EMS_TYPE_wwSettings, "WWSettings", true, MAKE_PF_CB(process_RC35wwSettings)); - register_telegram_type(0x38, "WWTimer", true, MAKE_PF_CB(process_RC35wwTimer)); - register_telegram_type(0x39, "WWCircTimer", true, MAKE_PF_CB(process_RC35wwTimer)); + register_telegram_type(EMS_TYPE_IBASettings, "IBASettings", true, MAKE_PF_CB(process_IBASettings), 22); + register_telegram_type(EMS_TYPE_wwSettings, "WWSettings", true, MAKE_PF_CB(process_RC35wwSettings), 10); + register_telegram_type(0x38, "WWTimer", true, MAKE_PF_CB(process_RC35wwTimer), 99); + register_telegram_type(0x39, "WWCircTimer", true, MAKE_PF_CB(process_RC35wwTimer), 99); // RC20 } else if (model == EMSdevice::EMS_DEVICE_FLAG_RC20) { if (device_id == 0x17) { // master - monitor_typeids = {0x91}; - set_typeids = {0xA8}; - curve_typeids = {0x90}; - timer_typeids = {0x8F}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(monitor_typeids[i], "RC20Monitor", false, MAKE_PF_CB(process_RC20Monitor)); - register_telegram_type(set_typeids[i], "RC20Set", false, MAKE_PF_CB(process_RC20Set)); - register_telegram_type(curve_typeids[i], "RC20Temp", false, MAKE_PF_CB(process_RC20Temp)); - register_telegram_type(timer_typeids[i], "RC20Timer", false, MAKE_PF_CB(process_RC20Timer)); + monitor_typeids = {0x91}; + set_typeids = {0xA8}; + curve_typeids = {0x90}; + timer_typeids = {0x8F}; + const size_t size = monitor_typeids.size(); + for (uint8_t i = 0; i < size; i++) { + register_telegram_type(monitor_typeids[i], "RC20Monitor", false, MAKE_PF_CB(process_RC20Monitor), 14); + register_telegram_type(set_typeids[i], "RC20Set", false, MAKE_PF_CB(process_RC20Set), 30); + register_telegram_type(curve_typeids[i], "RC20Temp", false, MAKE_PF_CB(process_RC20Temp), 7); + register_telegram_type(timer_typeids[i], "RC20Timer", false, MAKE_PF_CB(process_RC20Timer), 99); } } else { // remote thermostat uses only 0xAF @@ -101,11 +104,12 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i // RC20 newer } else if ((model == EMSdevice::EMS_DEVICE_FLAG_RC20_N) || (model == EMSdevice::EMS_DEVICE_FLAG_RC25)) { if (device_id == 0x17) { // master - monitor_typeids = {0xAE}; - set_typeids = {0xAD}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(monitor_typeids[i], "RC20Monitor", false, MAKE_PF_CB(process_RC20Monitor_2)); - register_telegram_type(set_typeids[i], "RC20Set", false, MAKE_PF_CB(process_RC20Set_2)); + monitor_typeids = {0xAE}; + set_typeids = {0xAD}; + const size_t size = monitor_typeids.size(); + for (uint8_t i = 0; i < size; i++) { + register_telegram_type(monitor_typeids[i], "RC20Monitor", false, MAKE_PF_CB(process_RC20Monitor_2), 8); + register_telegram_type(set_typeids[i], "RC20Set", false, MAKE_PF_CB(process_RC20Set_2), 22); } } else { // remote thermostat uses only 0xAF @@ -113,43 +117,45 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i } // RC30 } else if (model == EMSdevice::EMS_DEVICE_FLAG_RC30) { - monitor_typeids = {0x41}; - set_typeids = {0xA7}; - curve_typeids = {0x40}; - timer_typeids = {0x3F}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(monitor_typeids[i], "RC30Monitor", false, MAKE_PF_CB(process_RC30Monitor)); - register_telegram_type(set_typeids[i], "RC30Set", false, MAKE_PF_CB(process_RC30Set)); - register_telegram_type(curve_typeids[i], "RC30Temp", false, MAKE_PF_CB(process_RC30Temp)); - register_telegram_type(timer_typeids[i], "RC30Timer", false, MAKE_PF_CB(process_RC35Timer)); + monitor_typeids = {0x41}; + set_typeids = {0xA7}; + curve_typeids = {0x40}; + timer_typeids = {0x3F}; + const size_t size = monitor_typeids.size(); + for (uint8_t i = 0; i < size; i++) { + register_telegram_type(monitor_typeids[i], "RC30Monitor", false, MAKE_PF_CB(process_RC30Monitor), 14); + register_telegram_type(set_typeids[i], "RC30Set", false, MAKE_PF_CB(process_RC30Set), 31); + register_telegram_type(curve_typeids[i], "RC30Temp", false, MAKE_PF_CB(process_RC30Temp), 25); + register_telegram_type(timer_typeids[i], "RC30Timer", false, MAKE_PF_CB(process_RC35Timer), 99); } - register_telegram_type(0xA9, "RC30Vacation", true, MAKE_PF_CB(process_RC30Vacation)); - register_telegram_type(EMS_TYPE_RC30wwSettings, "RC30WWSettings", true, MAKE_PF_CB(process_RC30wwSettings)); - register_telegram_type(0x38, "WWTimer", true, MAKE_PF_CB(process_RC35wwTimer)); - register_telegram_type(0x39, "WWCircTimer", true, MAKE_PF_CB(process_RC35wwTimer)); + register_telegram_type(0xA9, "RC30Vacation", true, MAKE_PF_CB(process_RC30Vacation), 57); + register_telegram_type(EMS_TYPE_RC30wwSettings, "RC30WWSettings", true, MAKE_PF_CB(process_RC30wwSettings), 5); + register_telegram_type(0x38, "WWTimer", true, MAKE_PF_CB(process_RC35wwTimer), 99); + register_telegram_type(0x39, "WWCircTimer", true, MAKE_PF_CB(process_RC35wwTimer), 99); // EASY } else if (model == EMSdevice::EMS_DEVICE_FLAG_EASY) { monitor_typeids = {0x0A}; - set_typeids = {}; - register_telegram_type(monitor_typeids[0], "EasyMonitor", true, MAKE_PF_CB(process_EasyMonitor)); - register_telegram_type(0x02A5, "EasyMonitor", false, MAKE_PF_CB(process_EasyMonitor)); + set_typeids.clear(); + register_telegram_type(monitor_typeids[0], "EasyMonitor", true, MAKE_PF_CB(process_EasyMonitor), 12); + register_telegram_type(0x02A5, "EasyMonitor", false, MAKE_PF_CB(process_EasyMonitor), 7); // CRF } else if (model == EMSdevice::EMS_DEVICE_FLAG_CRF) { monitor_typeids = {0x02A5, 0x02A6, 0x02A7, 0x02A8}; - set_typeids = {}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(monitor_typeids[i], "CRFMonitor", false, MAKE_PF_CB(process_CRFMonitor)); + set_typeids.clear(); + const size_t size = monitor_typeids.size(); + for (uint8_t i = 0; i < size; i++) { + register_telegram_type(monitor_typeids[i], "CRFMonitor", false, MAKE_PF_CB(process_CRFMonitor), 7); } } else if (model == EMSdevice::EMS_DEVICE_FLAG_CR11) { monitor_typeids = {0x02A5}; set_typeids = {0x02B9}; curve_typeids = {0x029B}; - register_telegram_type(monitor_typeids[0], "RC300Monitor", true, MAKE_PF_CB(process_CR11Monitor)); - register_telegram_type(set_typeids[0], "RC300Set", false, MAKE_PF_CB(process_RC300Set)); - register_telegram_type(curve_typeids[0], "RC300Curves", true, MAKE_PF_CB(process_RC300Curve)); + register_telegram_type(monitor_typeids[0], "RC300Monitor", true, MAKE_PF_CB(process_CR11Monitor), 7); + register_telegram_type(set_typeids[0], "RC300Set", false, MAKE_PF_CB(process_RC300Set), 29); + register_telegram_type(curve_typeids[0], "RC300Curves", true, MAKE_PF_CB(process_RC300Curve), 9); // RC300/RC100 variants } else if (isRC300() || (model == EMSdevice::EMS_DEVICE_FLAG_RC100)) { @@ -157,48 +163,51 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i set_typeids = {0x02B9, 0x02BA, 0x02BB, 0x02BC, 0x02BD, 0x02BE, 0x02BF, 0x02C0}; // 0x2CC is setting command to boiler, 0x2CD..0x2D4 is setting command to mixers, not a thermostat value, but also stored in thermostat // set2_typeids = {0x02CC, 0x02CE, 0x02D0, 0x02D2}; // max. 4 heating circuits supported ny RC310 - set2_typeids = {0x0421, 0x0422, 0x0423, 0x0424}; - summer_typeids = {0x02AF, 0x02B0, 0x02B1, 0x02B2, 0x02B3, 0x02B4, 0x02B5, 0x02B6}; - curve_typeids = {0x029B, 0x029C, 0x029D, 0x029E, 0x029F, 0x02A0, 0x02A1, 0x02A2}; - summer2_typeids = {0x0471, 0x0472, 0x0473, 0x0474, 0x0475, 0x0476, 0x0477, 0x0478}; - hp_typeids = {0x0467, 0x0468, 0x0469, 0x046A}; - hpmode_typeids = {0x0291, 0x0292, 0x0293, 0x0294}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(monitor_typeids[i], "RC300Monitor", false, MAKE_PF_CB(process_RC300Monitor)); - register_telegram_type(set_typeids[i], "RC300Set", false, MAKE_PF_CB(process_RC300Set)); - register_telegram_type(summer_typeids[i], "RC300Summer", false, MAKE_PF_CB(process_RC300Summer)); - register_telegram_type(curve_typeids[i], "RC300Curves", false, MAKE_PF_CB(process_RC300Curve)); - register_telegram_type(summer2_typeids[i], "RC300Summer2", false, MAKE_PF_CB(process_RC300Summer2)); + set2_typeids = {0x0421, 0x0422, 0x0423, 0x0424}; + summer_typeids = {0x02AF, 0x02B0, 0x02B1, 0x02B2, 0x02B3, 0x02B4, 0x02B5, 0x02B6}; + curve_typeids = {0x029B, 0x029C, 0x029D, 0x029E, 0x029F, 0x02A0, 0x02A1, 0x02A2}; + summer2_typeids = {0x0471, 0x0472, 0x0473, 0x0474, 0x0475, 0x0476, 0x0477, 0x0478}; + hp_typeids = {0x0467, 0x0468, 0x0469, 0x046A}; + hpmode_typeids = {0x0291, 0x0292, 0x0293, 0x0294}; + const size_t monitor_size = monitor_typeids.size(); + for (uint8_t i = 0; i < monitor_size; i++) { + register_telegram_type(monitor_typeids[i], "RC300Monitor", false, MAKE_PF_CB(process_RC300Monitor), 33); + register_telegram_type(set_typeids[i], "RC300Set", false, MAKE_PF_CB(process_RC300Set), 29); + register_telegram_type(summer_typeids[i], "RC300Summer", false, MAKE_PF_CB(process_RC300Summer), 14); + register_telegram_type(curve_typeids[i], "RC300Curves", false, MAKE_PF_CB(process_RC300Curve), 9); + register_telegram_type(summer2_typeids[i], "RC300Summer2", false, MAKE_PF_CB(process_RC300Summer2), 8); } - for (uint8_t i = 0; i < set2_typeids.size(); i++) { + const size_t set2_size = set2_typeids.size(); + for (uint8_t i = 0; i < set2_size; i++) { // register_telegram_type(set2_typeids[i], "RC300Set2", false, MAKE_PF_CB(process_RC300Set2)); - register_telegram_type(set2_typeids[i], "RC300Set2", false, MAKE_PF_CB(process_PID)); - register_telegram_type(hp_typeids[i], "HPSet", false, MAKE_PF_CB(process_HPSet)); - register_telegram_type(hpmode_typeids[i], "HPMode", true, MAKE_PF_CB(process_HPMode)); + register_telegram_type(set2_typeids[i], "RC300Set2", false, MAKE_PF_CB(process_PID), 4); + register_telegram_type(hp_typeids[i], "HPSet", false, MAKE_PF_CB(process_HPSet), 5); + register_telegram_type(hpmode_typeids[i], "HPMode", true, MAKE_PF_CB(process_HPMode), 6); } - register_telegram_type(0x2F5, "RC300WWmode", true, MAKE_PF_CB(process_RC300WWmode)); - register_telegram_type(0x2F6, "RC300WW2mode", true, MAKE_PF_CB(process_RC300WWmode)); - register_telegram_type(0x31B, "RC300WWtemp", true, MAKE_PF_CB(process_RC300WWtemp)); - register_telegram_type(0x31D, "RC300WWmode2", false, MAKE_PF_CB(process_RC300WWmode2)); - register_telegram_type(0x31E, "RC300WWmode2", false, MAKE_PF_CB(process_RC300WWmode2)); - register_telegram_type(0x23A, "RC300OutdoorTemp", true, MAKE_PF_CB(process_RC300OutdoorTemp)); - register_telegram_type(0x267, "RC300Floordry", false, MAKE_PF_CB(process_RC300Floordry)); + register_telegram_type(0x2F5, "RC300WWmode", true, MAKE_PF_CB(process_RC300WWmode), 21); + register_telegram_type(0x2F6, "RC300WW2mode", true, MAKE_PF_CB(process_RC300WWmode), 21); + register_telegram_type(0x31B, "RC300WWtemp", true, MAKE_PF_CB(process_RC300WWtemp), 2); + register_telegram_type(0x31D, "RC300WWmode2", false, MAKE_PF_CB(process_RC300WWmode2), 9); + register_telegram_type(0x31E, "RC300WWmode2", false, MAKE_PF_CB(process_RC300WWmode2), 9); + register_telegram_type(0x23A, "RC300OutdoorTemp", true, MAKE_PF_CB(process_RC300OutdoorTemp), 2); + register_telegram_type(0x267, "RC300Floordry", false, MAKE_PF_CB(process_RC300Floordry), 2); if (model == EMSdevice::EMS_DEVICE_FLAG_RC100) { - register_telegram_type(0x241, "RC300Settings", true, MAKE_PF_CB(process_RC300Settings)); + register_telegram_type(0x241, "RC300Settings", true, MAKE_PF_CB(process_RC300Settings), 23); } else { - register_telegram_type(0x240, "RC300Settings", true, MAKE_PF_CB(process_RC300Settings)); + register_telegram_type(0x240, "RC300Settings", true, MAKE_PF_CB(process_RC300Settings), 23); } - register_telegram_type(0xBB, "HybridSettings", true, MAKE_PF_CB(process_HybridSettings)); - register_telegram_type(0x23E, "PVSettings", true, MAKE_PF_CB(process_PVSettings)); + register_telegram_type(0xBB, "HybridSettings", true, MAKE_PF_CB(process_HybridSettings), 20); + register_telegram_type(0x23E, "PVSettings", true, MAKE_PF_CB(process_PVSettings), 6); if (model == EMSdevice::EMS_DEVICE_FLAG_RC100) { - register_telegram_type(0x43F, "CRHolidays", true, MAKE_PF_CB(process_RC300Holiday)); + register_telegram_type(0x43F, "CRHolidays", true, MAKE_PF_CB(process_RC300Holiday), 6); } else { - register_telegram_type(0x269, "RC300Holiday", true, MAKE_PF_CB(process_RC300Holiday)); + register_telegram_type(0x269, "RC300Holiday", true, MAKE_PF_CB(process_RC300Holiday), 18); } - register_telegram_type(0x16E, "Absent", true, MAKE_PF_CB(process_Absent)); + register_telegram_type(0x16E, "Absent", true, MAKE_PF_CB(process_Absent), 1); register_telegram_type(0xBF, "ErrorMessage", false, MAKE_PF_CB(process_ErrorMessageBF)); register_telegram_type(0xC0, "RCErrorMessage", false, MAKE_PF_CB(process_RCErrorMessage2)); + register_telegram_type(0x470, "RC300Summer2", true, MAKE_PF_CB(process_RC300Summer2), 8); EMSESP::send_read_request(0xC0, device_id, 0, 20); // read last errorcode on start (only published on errors) // JUNKERS/HT3 @@ -209,27 +218,28 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i // return; // no values to add } - monitor_typeids = {0x016F, 0x0170, 0x0171, 0x0172}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(monitor_typeids[i], "JunkersMonitor", false, MAKE_PF_CB(process_JunkersMonitor)); + monitor_typeids = {0x016F, 0x0170, 0x0171, 0x0172}; + const size_t junkers_size = monitor_typeids.size(); + for (uint8_t i = 0; i < junkers_size; i++) { + register_telegram_type(monitor_typeids[i], "JunkersMonitor", false, MAKE_PF_CB(process_JunkersMonitor), 8); } if (has_flags(EMSdevice::EMS_DEVICE_FLAG_JUNKERS_OLD)) { // FR120, FR100 set_typeids = {0x0179, 0x017A, 0x017B, 0x017C}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(set_typeids[i], "JunkersSet", false, MAKE_PF_CB(process_JunkersSet2)); + for (uint8_t i = 0; i < junkers_size; i++) { + register_telegram_type(set_typeids[i], "JunkersSet", false, MAKE_PF_CB(process_JunkersSet2), 11); } } else { set_typeids = {0x0165, 0x0166, 0x0167, 0x0168}; - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { - register_telegram_type(set_typeids[i], "JunkersSet", false, MAKE_PF_CB(process_JunkersSet)); + for (uint8_t i = 0; i < junkers_size; i++) { + register_telegram_type(set_typeids[i], "JunkersSet", false, MAKE_PF_CB(process_JunkersSet), 20); } } - register_telegram_type(0xBB, "HybridSettings", true, MAKE_PF_CB(process_HybridSettings)); - register_telegram_type(0x23, "JunkersSetMixer", true, MAKE_PF_CB(process_JunkersSetMixer)); - register_telegram_type(0x1D3, "JunkersDhw", true, MAKE_PF_CB(process_JunkersWW)); - register_telegram_type(0x11E, "JunkersDisp", true, MAKE_PF_CB(process_JunkersDisp)); + register_telegram_type(0xBB, "HybridSettings", true, MAKE_PF_CB(process_HybridSettings), 20); + register_telegram_type(0x23, "JunkersSetMixer", true, MAKE_PF_CB(process_JunkersSetMixer), 1); + register_telegram_type(0x1D3, "JunkersDhw", true, MAKE_PF_CB(process_JunkersWW), 3); + register_telegram_type(0x11E, "JunkersDisp", true, MAKE_PF_CB(process_JunkersDisp), 18); } // register device values for common values (not heating circuit) @@ -237,10 +247,12 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i // query all the heating circuits. This is only done once. // The automatic fetch will from now on only update the active heating circuits - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { + const size_t monitor_size_final = monitor_typeids.size(); + for (uint8_t i = 0; i < monitor_size_final; i++) { EMSESP::send_read_request(monitor_typeids[i], device_id); } - for (uint8_t i = 0; i < set_typeids.size(); i++) { + const size_t set_size = set_typeids.size(); + for (uint8_t i = 0; i < set_size; i++) { EMSESP::send_read_request(set_typeids[i], device_id); } @@ -293,7 +305,8 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // not found, search monitor message types if (hc_num == 0) { - for (uint8_t i = 0; i < monitor_typeids.size(); i++) { + const size_t monitor_size = monitor_typeids.size(); + for (uint8_t i = 0; i < monitor_size; i++) { if (monitor_typeids[i] == telegram->type_id) { hc_num = i + 1; toggle_ = true; @@ -304,7 +317,8 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // not found, search status message/set types if (hc_num == 0) { - for (uint8_t i = 0; i < set_typeids.size(); i++) { + const size_t set_size = set_typeids.size(); + for (uint8_t i = 0; i < set_size; i++) { if (set_typeids[i] == telegram->type_id) { hc_num = i + 1; break; @@ -314,7 +328,8 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // not found, search set2 types if (hc_num == 0) { - for (uint8_t i = 0; i < set2_typeids.size(); i++) { + const size_t set2_size = set2_typeids.size(); + for (uint8_t i = 0; i < set2_size; i++) { if (set2_typeids[i] == telegram->type_id) { hc_num = i + 1; break; @@ -324,7 +339,8 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // not found, search summer message types if (hc_num == 0) { - for (uint8_t i = 0; i < summer_typeids.size(); i++) { + const size_t summer_size = summer_typeids.size(); + for (uint8_t i = 0; i < summer_size; i++) { if (summer_typeids[i] == telegram->type_id) { hc_num = i + 1; break; @@ -334,7 +350,8 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // not found, search summer message types if (hc_num == 0) { - for (uint8_t i = 0; i < summer2_typeids.size(); i++) { + const size_t summer2_size = summer2_typeids.size(); + for (uint8_t i = 0; i < summer2_size; i++) { if (summer2_typeids[i] == telegram->type_id) { hc_num = i + 1; break; @@ -344,7 +361,8 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // not found, search heating_curve message types if (hc_num == 0) { - for (uint8_t i = 0; i < curve_typeids.size(); i++) { + const size_t curve_size = curve_typeids.size(); + for (uint8_t i = 0; i < curve_size; i++) { if (curve_typeids[i] == telegram->type_id) { hc_num = i + 1; break; @@ -354,7 +372,8 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // not found, search timer message types if (hc_num == 0) { - for (uint8_t i = 0; i < timer_typeids.size(); i++) { + const size_t timer_size = timer_typeids.size(); + for (uint8_t i = 0; i < timer_size; i++) { if (timer_typeids[i] == telegram->type_id) { hc_num = i + 1; break; @@ -364,7 +383,8 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // not found, search timer message types if (hc_num == 0) { - for (uint8_t i = 0; i < timer2_typeids.size(); i++) { + const size_t timer2_size = timer2_typeids.size(); + for (uint8_t i = 0; i < timer2_size; i++) { if (timer2_typeids[i] == telegram->type_id) { hc_num = i + 1; break; @@ -374,7 +394,8 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // not found, search heatpump message types if (hc_num == 0) { - for (uint8_t i = 0; i < hp_typeids.size(); i++) { + const size_t hp_size = hp_typeids.size(); + for (uint8_t i = 0; i < hp_size; i++) { if (hp_typeids[i] == telegram->type_id) { hc_num = i + 1; break; @@ -383,7 +404,8 @@ std::shared_ptr Thermostat::heating_circuit(std::sha } if (hc_num == 0) { - for (uint8_t i = 0; i < hpmode_typeids.size(); i++) { + const size_t hpmode_size = hpmode_typeids.size(); + for (uint8_t i = 0; i < hpmode_size; i++) { if (hpmode_typeids[i] == telegram->type_id) { hc_num = i + 1; break; @@ -476,7 +498,8 @@ void Thermostat::add_ha_climate(std::shared_ptr hc) const { return; } - if (Helpers::hasValue(hc->selTemp) && is_readable(&hc->selTemp)) { + // create climate only if we have modes + if (Helpers::hasValue(hc->mode) && Helpers::hasValue(hc->selTemp) && is_readable(&hc->selTemp)) { if (Helpers::hasValue(hc->roomTemp) && is_readable(&hc->roomTemp)) { hc->climate = 1; // use roomTemp as we have a sensor } else { @@ -1079,6 +1102,8 @@ void Thermostat::process_JunkersWW(std::shared_ptr telegram) { void Thermostat::process_JunkersDisp(std::shared_ptr telegram) { has_enumupdate(telegram, ibaMainDisplay_, 1, 1); has_update(telegram, ibaLanguage_, 3); + has_update(telegram, ibaMinExtTemperature_, 16); + has_update(telegram, ibaBuildingType_, 17); // percent /10 } // type 0x02A5 - data from Worchester CRF200 @@ -1228,13 +1253,15 @@ void Thermostat::process_RC300Summer(std::shared_ptr telegram) { if (hc->heatingtype != 3) { has_update(telegram, hc->designtemp, 4); - has_update(telegram, hc->minflowtemp, model() == EMSdevice::EMS_DEVICE_FLAG_BC400 ? 13 : 8); } else { has_update(telegram, hc->designtemp, 5); - has_update(telegram, hc->minflowtemp, 8); } - + // minflowtemp could be in 8 or 13 #2969 + has_update(telegram, hc->minflowtemp, 13); + has_update(telegram, hc->baseflowtemp, 8); has_update(telegram, hc->fastHeatup, 10); + has_update(telegram, hc->comfortPointOffset, 11); + has_update(telegram, hc->comfortPointTemp, 12); } // types 0x471 ff summer2_typeids @@ -1242,7 +1269,13 @@ void Thermostat::process_RC300Summer(std::shared_ptr telegram) { void Thermostat::process_RC300Summer2(std::shared_ptr telegram) { auto hc = heating_circuit(telegram); if (hc == nullptr) { - return; + // telegram 0x470 see https://github.com/emsesp/EMS-ESP32/issues/2686 + if (telegram->type_id == 0x470 && telegram->message_length > 2) { + hc = heating_circuit(1); + summer2_typeids[0] = 0x470; + } else { + return; + } } if (hc->statusbyte & 1) { has_update(telegram, hc->summersetmode, 0); @@ -1733,8 +1766,12 @@ void Thermostat::process_RCTime(std::shared_ptr telegram) { ttime = mktime(tm_); // thermostat time } struct timeval newnow = {.tv_sec = ttime, .tv_usec = 0}; +#if CONFIG_IDF_TARGET_ESP32C3 + // unknown how to set time on C3 +#else settimeofday(&newnow, nullptr); LOG_INFO("ems-esp time set from thermostat"); +#endif } #endif } @@ -2001,6 +2038,8 @@ bool Thermostat::set_minexttemp(const char * value, const int8_t id) { write_command(0x241, 10, mt, 0x241); } else if (isRC300()) { write_command(0x240, 10, mt, 0x240); + } else if (model() == EMSdevice::EMS_DEVICE_FLAG_JUNKERS) { + write_command(0x110, 16, mt, 0x110); } else { write_command(EMS_TYPE_IBASettings, 5, mt, EMS_TYPE_IBASettings); } @@ -2157,6 +2196,14 @@ bool Thermostat::set_remotehum(const char * value, const int8_t id) { // 0xA5/0xA7 - Set the building settings bool Thermostat::set_building(const char * value, const int8_t id) { + if (model() == EMSdevice::EMS_DEVICE_FLAG_JUNKERS) { + int i; + if (Helpers::value2number(value, i, 0, 100)) { + write_command(0x110, 17, i / 10, 0x110); + return true; + } + return false; + } uint8_t bd; if (!Helpers::value2enum(value, bd, FL_(enum_ibaBuildingType))) { return false; @@ -2302,6 +2349,7 @@ bool Thermostat::set_control(const char * value, const int8_t id) { // 1-FB10, 2-FB100 if (model() == EMSdevice::EMS_DEVICE_FLAG_JUNKERS && !has_flags(EMSdevice::EMS_DEVICE_FLAG_JUNKERS_OLD)) { if (Helpers::value2enum(value, ctrl, FL_(enum_j_control))) { + hc->control = ctrl; // set in advance, dont wait for verify write_command(set_typeids[hc->hc()], 1, ctrl); return true; } @@ -2350,6 +2398,7 @@ bool Thermostat::set_control(const char * value, const int8_t id) { } } else if (Helpers::value2enum(value, ctrl, FL_(enum_control))) { write_command(set_typeids[hc->hc()], EMS_OFFSET_RC35Set_control, ctrl); + hc->control = ctrl; // set in advance, dont wait for verify return true; } @@ -3326,6 +3375,33 @@ bool Thermostat::set_fastheatup(const char * value, const int8_t id) { return true; } +// https://github.com/emsesp/EMS-ESP32/issues/2935 +bool Thermostat::set_comfortPointTemp(const char * value, const int8_t id) { + auto hc = heating_circuit(id); + if (hc == nullptr) { + return false; + } + int set; + if (!Helpers::value2temperature(value, set)) { + return false; + } + write_command(summer_typeids[hc->hc()], 12, set, summer_typeids[hc->hc()]); + return true; +} + +bool Thermostat::set_comfortPointOffset(const char * value, const int8_t id) { + auto hc = heating_circuit(id); + if (hc == nullptr) { + return false; + } + int set; + if (!Helpers::value2temperature(value, set, true)) { + return false; + } + write_command(summer_typeids[hc->hc()], 11, set, summer_typeids[hc->hc()]); + return true; +} + // Set holidaymode Junkers bool Thermostat::set_holidaymode(const char * value, const int8_t id) { auto hc = heating_circuit(id); @@ -4023,10 +4099,16 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co } factor = 1; break; + case HeatingCircuit::Mode::BASEFLOW: + set_typeid = summer_typeids[hc->hc()]; + validate_typeid = set_typeid; + offset = 8; + factor = 1; + break; case HeatingCircuit::Mode::MINFLOW: set_typeid = summer_typeids[hc->hc()]; validate_typeid = set_typeid; - offset = hc->heatingtype != 3 && model == EMS_DEVICE_FLAG_BC400 ? 13 : 8; + offset = 13; factor = 1; break; case HeatingCircuit::Mode::MAXFLOW: @@ -4679,6 +4761,19 @@ void Thermostat::register_device_values() { DeviceValueUOM::NONE, MAKE_CF_CB(set_language)); } + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &ibaBuildingType_, + DeviceValueType::UINT8, + DeviceValueNumOp::DV_NUMOP_MUL10, + FL_(ibaBuildingType), + DeviceValueUOM::PERCENT, + MAKE_CF_CB(set_building)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &ibaMinExtTemperature_, + DeviceValueType::INT8, + FL_(ibaMinExtTemperature), + DeviceValueUOM::DEGREES, + MAKE_CF_CB(set_minexttemp)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &hybridStrategy_, DeviceValueType::ENUM, @@ -4829,6 +4924,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrsummertemp, DeviceValueType::UINT8, FL_(summertemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_summertemp), 10, 30); register_device_value(tag, &hc->designtemp, DeviceValueType::UINT8, FL_(designtemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_designtemp)); register_device_value(tag, &hc->offsettemp, DeviceValueType::INT8, FL_(offsettemp), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_offsettemp)); + register_device_value(tag, &hc->baseflowtemp, DeviceValueType::UINT8, FL_(baseflowtemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_baseflowtemp)); register_device_value(tag, &hc->minflowtemp, DeviceValueType::UINT8, FL_(minflowtemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_minflowtemp)); register_device_value(tag, &hc->maxflowtemp, DeviceValueType::UINT8, FL_(maxflowtemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_maxflowtemp)); register_device_value(tag, &hc->roominfluence, DeviceValueType::UINT8, FL_(roominfluence), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_roominfluence)); @@ -4878,6 +4974,10 @@ void Thermostat::register_device_values_hc(std::shared_ptrcooltemp, DeviceValueType::INT8, DeviceValueNumOp::DV_NUMOP_DIV2, FL_(cooltemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_cooltemp), -1, 30); register_device_value(tag, &hc->fastHeatup, DeviceValueType::UINT8, FL_(fastheatup), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_fastheatup)); + register_device_value( + tag, &hc->comfortPointOffset, DeviceValueType::UINT8, FL_(comfortPointOffset), DeviceValueUOM::DEGREES_R, MAKE_CF_CB(set_comfortPointOffset), 0, 10); + register_device_value( + tag, &hc->comfortPointTemp, DeviceValueType::INT8, FL_(comfortPointTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_comfortPointTemp), -5, 15); register_device_value(tag, &hc->switchonoptimization, DeviceValueType::BOOL, diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index 2bc1e18fc..4c33b78b9 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -50,7 +50,7 @@ class Thermostat : public EMSdevice { uint8_t daymidtemp; uint8_t nighttemp; uint8_t holidaytemp; - uint8_t heatingtype; // type of heating: 1 radiator, 2 convectors, 3 floors, 4 room supply + uint8_t heatingtype; // type of heating: 1 radiator, 2 convectors, 3 floor, 4 room supply uint8_t targetflowtemp; uint8_t summertemp; int8_t nofrosttemp; // signed -20°C to +10°C @@ -65,6 +65,7 @@ class Thermostat : public EMSdevice { int16_t curroominfl; uint8_t flowtempoffset; uint8_t minflowtemp; + uint8_t baseflowtemp; uint8_t maxflowtemp; uint8_t reducemode; uint8_t nofrostmode; @@ -89,6 +90,9 @@ class Thermostat : public EMSdevice { uint8_t statusbyte; // from RC300monitor uint8_t switchProgMode; int8_t redThreshold; + // BC400 + int8_t comfortPointTemp; // -5-15° C - in BC400 + uint8_t comfortPointOffset; // 0-10° K - in BC400 // RC 10 uint8_t reducehours; // night reduce duration uint16_t reduceminutes; // remaining minutes to night->day @@ -166,6 +170,7 @@ class Thermostat : public EMSdevice { DAYMID, COOLTEMP, COOLSTART, + BASEFLOW, UNKNOWN }; @@ -244,16 +249,16 @@ class Thermostat : public EMSdevice { } // each thermostat has a list of heating controller type IDs for reading and writing - std::vector monitor_typeids; - std::vector set_typeids; - std::vector set2_typeids; - std::vector timer_typeids; - std::vector timer2_typeids; - std::vector summer_typeids; - std::vector summer2_typeids; - std::vector curve_typeids; - std::vector hp_typeids; - std::vector hpmode_typeids; + std::vector> monitor_typeids; + std::vector> set_typeids; + std::vector> set2_typeids; + std::vector> timer_typeids; + std::vector> timer2_typeids; + std::vector> summer_typeids; + std::vector> summer2_typeids; + std::vector> curve_typeids; + std::vector> hp_typeids; + std::vector> hpmode_typeids; // standard for all thermostats char status_[20]; // online or offline @@ -305,8 +310,8 @@ class Thermostat : public EMSdevice { uint8_t pvRaiseHeat_; uint8_t pvLowerCool_; - std::vector> heating_circuits_; // each thermostat can have multiple heating circuits - std::vector> dhw_circuits_; // each thermostat can have multiple dhw circuits + std::vector, AllocatorPSRAM>> heating_circuits_; // each thermostat can have multiple heating circuits + std::vector, AllocatorPSRAM>> dhw_circuits_; // each thermostat can have multiple dhw circuits // Generic Types static constexpr uint16_t EMS_TYPE_RCTime = 0x06; // time @@ -505,6 +510,8 @@ class Thermostat : public EMSdevice { bool set_controlmode(const char * value, const int8_t id); bool set_wwprio(const char * value, const int8_t id); bool set_fastheatup(const char * value, const int8_t id); + bool set_comfortPointTemp(const char * value, const int8_t id); + bool set_comfortPointOffset(const char * value, const int8_t id); bool set_switchonoptimization(const char * value, const int8_t id); bool set_heatondelay(const char * value, const int8_t id); bool set_heatoffdelay(const char * value, const int8_t id); @@ -578,6 +585,9 @@ class Thermostat : public EMSdevice { inline bool set_minflowtemp(const char * value, const int8_t id) { return set_temperature_value(value, id, HeatingCircuit::Mode::MINFLOW); } + inline bool set_baseflowtemp(const char * value, const int8_t id) { + return set_temperature_value(value, id, HeatingCircuit::Mode::BASEFLOW); + } inline bool set_roominfluence(const char * value, const int8_t id) { return set_temperature_value(value, id, HeatingCircuit::Mode::ROOMINFLUENCE, true); } diff --git a/src/devices/ventilation.cpp b/src/devices/ventilation.cpp index 9d3a142da..8473b123d 100644 --- a/src/devices/ventilation.cpp +++ b/src/devices/ventilation.cpp @@ -25,12 +25,12 @@ REGISTER_FACTORY(Ventilation, EMSdevice::DeviceType::VENTILATION); Ventilation::Ventilation(uint8_t device_type, uint8_t device_id, uint8_t product_id, const char * version, const char * name, uint8_t flags, uint8_t brand) : EMSdevice(device_type, device_id, product_id, version, name, flags, brand) { // HRV176 module, device_id 0x51 - register_telegram_type(0x56B, "VentilationMode", true, MAKE_PF_CB(process_ModeMessage)); + register_telegram_type(0x56B, "VentilationMode", true, MAKE_PF_CB(process_ModeMessage), 1); register_telegram_type(0x585, "Blowerspeed", false, MAKE_PF_CB(process_BlowerMessage)); register_telegram_type(0x583, "VentilationMonitor", false, MAKE_PF_CB(process_MonitorMessage)); register_telegram_type(0x5D9, "Airquality", false, MAKE_PF_CB(process_VOCMessage)); register_telegram_type(0x587, "Bypass", false, MAKE_PF_CB(process_BypassMessage)); - register_telegram_type(0x55C, "VentilationSet", true, MAKE_PF_CB(process_SetMessage)); + register_telegram_type(0x55C, "VentilationSet", true, MAKE_PF_CB(process_SetMessage), 2); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &outFresh_, diff --git a/src/devices/water.cpp b/src/devices/water.cpp index 94a8c9cf2..17bcdf75f 100644 --- a/src/devices/water.cpp +++ b/src/devices/water.cpp @@ -29,16 +29,21 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c dhw_ = device_id - EMSdevice::EMS_DEVICE_ID_DHW1; int8_t tag = DeviceValueTAG::TAG_DHW1 + dhw_; if (flags == EMSdevice::EMS_DEVICE_FLAG_SM100) { // device_id 0x2A, DHW3 + // telegram handlers - register_telegram_type(0x07D6, "SM100wwTemperature", false, MAKE_PF_CB(process_SM100wwTemperature)); - register_telegram_type(0x07AA, "SM100wwStatus", false, MAKE_PF_CB(process_SM100wwStatus)); - register_telegram_type(0x07AB, "SM100wwCommand", false, MAKE_PF_CB(process_SM100wwCommand)); - register_telegram_type(0x07AC, "SM100wwParam1", false, MAKE_PF_CB(process_SM100wwParam2)); - register_telegram_type(0x07A5, "SM100wwCirc", true, MAKE_PF_CB(process_SM100wwCirc)); - register_telegram_type(0x07A6, "SM100wwParam", true, MAKE_PF_CB(process_SM100wwParam)); - register_telegram_type(0x07AE, "SM100wwKeepWarm", true, MAKE_PF_CB(process_SM100wwKeepWarm)); - register_telegram_type(0x07E0, "SM100wwStatus2", true, MAKE_PF_CB(process_SM100wwStatus2)); - register_telegram_type(0x07AD, "SM100ValveStatus", false, MAKE_PF_CB(process_SM100ValveStatus)); + register_telegram_type(0x07D6 + dhw_ - 2, "SM100wwTemperature", false, MAKE_PF_CB(process_SM100wwTemperature)); + register_telegram_type(0x07E0 + dhw_ - 2, "SM100wwStatus2", true, MAKE_PF_CB(process_SM100wwStatus2), 10); + register_telegram_type(0x07A6, "SM100wwParam", true, MAKE_PF_CB(process_SM100wwParam), 20); // same telegram for all circuits + if (tag == DeviceValueTAG::TAG_DHW3) { + register_telegram_type(0x07AA, "SM100wwStatus", false, MAKE_PF_CB(process_SM100wwStatus)); + register_telegram_type(0x07AC, "SM100wwParam1", false, MAKE_PF_CB(process_SM100wwParam2)); + register_telegram_type(0x07A5, "SM100wwCirc", true, MAKE_PF_CB(process_SM100wwCirc), 5); + register_telegram_type(0x07AE, "SM100wwKeepWarm", true, MAKE_PF_CB(process_SM100wwKeepWarm), 1); + register_telegram_type(0x07AD, "SM100ValveStatus", false, MAKE_PF_CB(process_SM100ValveStatus)); + register_telegram_type(0x07AB, "SM100wwCommand", false, MAKE_PF_CB(process_SM100wwCommand)); // command from thermostat + } else if (tag == DeviceValueTAG::TAG_DHW4) { + register_telegram_type(0x07C3, "SM100wwCommand", false, MAKE_PF_CB(process_SM100wwCommand)); // command from dhw3->dhw4 + } // device values... register_device_value(tag, &wwTemp_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(wwTemp), DeviceValueUOM::DEGREES); register_device_value(tag, &wwTemp2_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(wwStorageTemp1), DeviceValueUOM::DEGREES); @@ -65,7 +70,7 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c } else if (flags == EMSdevice::EMS_DEVICE_FLAG_MMPLUS) { // dhw1 and dhw 2 register_telegram_type(0x331 + dhw_, "MMPLUSStatusMessage_WWC", false, MAKE_PF_CB(process_MMPLUSStatusMessage_WWC)); - register_telegram_type(0x313 + dhw_, "MMPLUSConfigMessage_WWC", true, MAKE_PF_CB(process_MMPLUSConfigMessage_WWC)); + register_telegram_type(0x313 + dhw_, "MMPLUSConfigMessage_WWC", true, MAKE_PF_CB(process_MMPLUSConfigMessage_WWC), 11); // register_telegram_type(0x33B + type_offset, "MMPLUSSetMessage_WWC", true, MAKE_PF_CB(process_MMPLUSSetMessage_WWC)); // device values... register_device_value(tag, &wwTemp_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(wwTemp), DeviceValueUOM::DEGREES); @@ -83,7 +88,7 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c tag = DeviceValueTAG::TAG_DHW1; register_telegram_type(0x34, "UBAMonitorWW", false, MAKE_PF_CB(process_IPMMonitorWW)); register_telegram_type(0x1E, "HydrTemp", false, MAKE_PF_CB(process_IPMHydrTemp)); - register_telegram_type(0x33, "UBAParameterWW", true, MAKE_PF_CB(process_IPMParameterWW)); + register_telegram_type(0x33, "UBAParameterWW", true, MAKE_PF_CB(process_IPMParameterWW), 12); // register_telegram_type(0x10D, "wwNTCStatus", false, MAKE_PF_CB(process_wwNTCStatus)); // device values... register_device_value(tag, &wwSelTemp_, DeviceValueType::UINT8, FL_(wwSelTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_wwSelTemp)); @@ -100,7 +105,7 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c } } -// SM100wwTemperature - 0x07D6 +// SM100wwTemperature - 0x07D6, dhw4: 0x07D7 // Solar Module(0x2A) -> (0x00), (0x7D6), data: 01 C1 00 00 02 5B 01 AF 01 AD 80 00 01 90 void Water::process_SM100wwTemperature(std::shared_ptr telegram) { has_update(telegram, wwTemp_, 0); // is *10 TS17 @@ -156,12 +161,10 @@ void Water::process_SM100ValveStatus(std::shared_ptr telegram) { has_update(telegram, wwRetValve_, 1); } -/* -// SM100ww? - 0x7E0, some kind of status +// SM100ww? - 0x7E0, some kind of status, dhw4: 0x7E1 // data: 00 00 46 00 00 01 06 0E 06 0E 00 00 00 00 00 03 03 03 03 // publishes single values offset 1/2(16bit), offset 5, offset 6, offset 7, offset 8, offset 9, // status2 = 03:"no heat", 06:"heat request", 08:"disinfecting", 09:"hold" -*/ void Water::process_SM100wwStatus2(std::shared_ptr telegram) { // has_update(telegram, wwFlow_, 7); // single byte, wrong see #1387 has_update(telegram, wwStatus2_, 8); @@ -170,6 +173,7 @@ void Water::process_SM100wwStatus2(std::shared_ptr telegram) { // SM100wwCommand - 0x07AB // Thermostat(0x10) -> Solar Module(0x2A), (0x7AB), data: 01 00 01 +// or dhw3 module (0x2A) -> dhw4 module(0x2B), (0x7C3), data: 01 01 00 void Water::process_SM100wwCommand(std::shared_ptr telegram) { // not implemented yet } diff --git a/src/emsesp_version.h b/src/emsesp_version.h index 910a87b46..32029cf85 100644 --- a/src/emsesp_version.h +++ b/src/emsesp_version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.8.1" +#define EMSESP_APP_VERSION "3.8.2" diff --git a/src/test/test.cpp b/src/test/test.cpp index 4a7181893..f6870b2fd 100644 --- a/src/test/test.cpp +++ b/src/test/test.cpp @@ -68,7 +68,7 @@ bool Test::test(const std::string & cmd, int8_t id1, int8_t id2) { uart_telegram({0x08, 0x98, 0x33, 0x00, 0x23, 0x24}); // Boiler -> Me, UBAParameterWW(0x33), telegram: 08 0B 33 00 08 FF 34 FB 00 28 00 00 46 00 FF FF 00 (#data=13) - uart_telegram({0x08, 0x0B, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); + uart_telegram({0x08, 0x49, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); // Thermostat RCPLUSStatusMessage_HC1(0x01A5) uart_telegram({0x98, 0x00, 0xFF, 0x00, 0x01, 0xA5, 0x00, 0xCF, 0x21, 0x2E, 0x00, 0x00, 0x2E, 0x24, @@ -89,7 +89,7 @@ bool Test::test(const std::string & cmd, int8_t id1, int8_t id2) { add_device(0x08, 219); // Greenstar HIU/Logamax kompakt WS170 - // [emsesp] boiler(0x08) -W-> Me(0x0B), UBAMonitorFastPlus(0xE4), data: 00 01 35 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 80 00 (offset 6) + // [emsesp] boiler(0x08) -W-> Me(0x49), UBAMonitorFastPlus(0xE4), data: 00 01 35 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 80 00 (offset 6) uart_telegram({0x08, 0x00, 0xE4, 0x00, // 00, 01, 0x35, 00, 00, 00, 00, 00, 00, 00, 00, 0x80, 00, 00, 00, 00, 00, 00, 00, 0x80, 00}); @@ -112,7 +112,7 @@ bool Test::test(const std::string & cmd, int8_t id1, int8_t id2) { uart_telegram({0x08, 0x90, 0x33, 0x00, 0x23, 0x24}); // Boiler -> Me, UBAParameterWW(0x33), telegram: 08 0B 33 00 08 FF 34 FB 00 28 00 00 46 00 FF FF 00 (#data=13) - uart_telegram({0x08, 0x0B, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); + uart_telegram({0x08, 0x49, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); // Thermostat 0x2A5 for HC1 uart_telegram({0x10, 00, 0xFF, 00, 01, 0xA5, 0x80, 00, 01, 0x30, 0x28, 00, 0x30, 0x28, 01, 0x54, @@ -144,7 +144,7 @@ bool Test::test(const std::string & cmd, int8_t id1, int8_t id2) { uart_telegram({0x08, 0x90, 0x33, 0x00, 0x23, 0x24}); // Boiler -> Me, UBAParameterWW(0x33), telegram: 08 0B 33 00 08 FF 34 FB 00 28 00 00 46 00 FF FF 00 (#data=13) - uart_telegram({0x08, 0x0B, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); + uart_telegram({0x08, 0x49, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); // Thermostat 0x2A5 for HC1 uart_telegram({0x10, 00, 0xFF, 00, 01, 0xA5, 0x80, 00, 01, 0x30, 0x28, 00, 0x30, 0x28, 01, 0x54, @@ -160,7 +160,7 @@ bool Test::test(const std::string & cmd, int8_t id1, int8_t id2) { EMSESP::logger().notice("Adding a Gateway..."); // add 0x48 KM200, via a version command - rx_telegram({0x48, 0x0B, 0x02, 0x00, 0xBD, 0x04, 0x06, 00, 00, 00, 00, 00, 00, 00}); + rx_telegram({0x48, 0x49, 0x02, 0x00, 0xBD, 0x04, 0x06, 00, 00, 00, 00, 00, 00, 00}); // Boiler(0x08) -> All(0x00), UBADevices(0x07), data: 09 01 00 00 00 00 00 00 01 00 00 00 00 // check: make sure 0x48 is not detected again ! @@ -203,14 +203,14 @@ bool Test::test(const std::string & cmd, int8_t id1, int8_t id2) { add_device(0x08, 123); // Nefit Trendline // UBAuptime - uart_telegram({0x08, 0x0B, 0x14, 00, 0x3C, 0x1F, 0xAC, 0x70}); + uart_telegram({0x08, 0x49, 0x14, 00, 0x3C, 0x1F, 0xAC, 0x70}); // Boiler -> Me, UBAMonitorFast(0x18), telegram: 08 00 18 00 00 02 5A 73 3D 0A 10 65 40 02 1A 80 00 01 E1 01 76 0E 3D 48 00 C9 44 02 00 (#data=25) uart_telegram({0x08, 0x00, 0x18, 0x00, 0x00, 0x02, 0x5A, 0x73, 0x3D, 0x0A, 0x10, 0x65, 0x40, 0x02, 0x1A, 0x80, 0x00, 0x01, 0xE1, 0x01, 0x76, 0x0E, 0x3D, 0x48, 0x00, 0xC9, 0x44, 0x02, 0x00}); // Boiler -> Me, UBAParameterWW(0x33), telegram: 08 0B 33 00 08 FF 34 FB 00 28 00 00 46 00 FF FF 00 (#data=13) - uart_telegram({0x08, 0x0B, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); + uart_telegram({0x08, 0x49, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); return true; } @@ -234,10 +234,10 @@ bool Test::test(const std::string & cmd, int8_t id1, int8_t id2) { add_device(0x30, 163); // SM100 // SM100Monitor - type 0x0362 EMS+ - for SM100 and SM200 - uart_telegram({0xB0, 0x0B, 0xFF, 00, 0x02, 0x62, 00, 0x44, 0x02, 0x7A, 0x80, 00, 0x80, 0x00, 0x80, 00, + uart_telegram({0xB0, 0x49, 0xFF, 00, 0x02, 0x62, 00, 0x44, 0x02, 0x7A, 0x80, 00, 0x80, 0x00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 00, 0x7C, 0x80, 00, 0x80, 00, 0x80, 00, 0x80}); - uart_telegram({0xB0, 0x0B, 0xFF, 0x00, 0x02, 0x62, 0x01, 0x44, 0x03, 0x30, 0x80, 00, 0x80, 00, 0x80, 00, + uart_telegram({0xB0, 0x49, 0xFF, 0x00, 0x02, 0x62, 0x01, 0x44, 0x03, 0x30, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 0x33}); uart_telegram({0xB0, 00, 0xFF, 0x18, 02, 0x62, 0x80, 00, 0xB8}); @@ -450,7 +450,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const // THESE ONLY WORK WITH AN ESP32, not in standalone/native mode #ifndef EMSESP_STANDALONE if (command == "ls") { - listDir(LittleFS, "/", 3); + System::listDir("/", 3); ok = true; } @@ -580,7 +580,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const add_device(0x09, 206); // Nefit Excellent HR30 Controller // UBAuptime - uart_telegram({0x08, 0x0B, 0x14, 00, 0x3C, 0x1F, 0xAC, 0x70}); + uart_telegram({0x08, 0x49, 0x14, 00, 0x3C, 0x1F, 0xAC, 0x70}); ok = true; } @@ -588,10 +588,10 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const EMSESP::logger().notice("Testing 620..."); // Version Controller - uart_telegram({0x09, 0x0B, 0x02, 0x00, 0x5F, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}); + uart_telegram({0x09, 0x49, 0x02, 0x00, 0x5F, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}); // Version Boiler - uart_telegram({0x08, 0x0B, 0x02, 0x00, 0x5F, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}); + uart_telegram({0x08, 0x49, 0x02, 0x00, 0x5F, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}); ok = true; } @@ -607,7 +607,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const // simulate getting version information back from an unknown device // note there is no brand (byte 9) - rx_telegram({0x09, 0x0B, 0x02, 0x00, 0x59, 0x09, 0x0a}); + rx_telegram({0x09, 0x49, 0x02, 0x00, 0x59, 0x09, 0x0a}); shell.invoke_command("show devices"); shell.invoke_command("call system report"); @@ -618,7 +618,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const shell.printfln("Testing unknown2..."); // simulate getting version information back from an unknown device - rx_telegram({0x09, 0x0B, 0x02, 0x00, 0x5A, 0x01, 0x02}); // productID is 90 which doesn't exist + rx_telegram({0x09, 0x49, 0x02, 0x00, 0x5A, 0x01, 0x02}); // productID is 90 which doesn't exist ok = true; } @@ -815,9 +815,9 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const // test("thermostat"); // 0xC2 - // [emsesp] Boiler(0x08) -> Me(0x0B), UBAErrorMessage3(0xC2), data: 08 AC 00 10 31 48 30 31 15 80 95 0B 0E 10 38 00 7F FF FF FF 08 AC 00 10 09 41 30 + // [emsesp] Boiler(0x08) -> Me(0x49), UBAErrorMessage3(0xC2), data: 08 AC 00 10 31 48 30 31 15 80 95 0B 0E 10 38 00 7F FF FF FF 08 AC 00 10 09 41 30 uart_telegram( - {0x08, 0x0B, 0xC2, 0, 0x08, 0xAC, 00, 0x10, 0x31, 0x48, 0x30, 0x31, 0x15, 0x80, 0x95, 0x0B, 0x0E, 0x10, 0x38, 00, 0x7F, 0xFF, 0xFF, 0xFF}); + {0x08, 0x49, 0xC2, 0, 0x08, 0xAC, 00, 0x10, 0x31, 0x48, 0x30, 0x31, 0x15, 0x80, 0x95, 0x0B, 0x0E, 0x10, 0x38, 00, 0x7F, 0xFF, 0xFF, 0xFF}); // shell.invoke_command("show values"); @@ -1042,7 +1042,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const // Boiler -> Me, UBAParameterWW(0x33) // wwseltemp = goes from 52 degrees (0x34) to void (0xFF) // it should delete the HA config topic homeassistant/sensor/ems-esp/boiler_wwseltemp/config - uart_telegram({0x08, 0x0B, 0x33, 0x00, 0x08, 0xFF, 0xFF, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); + uart_telegram({0x08, 0x49, 0x33, 0x00, 0x08, 0xFF, 0xFF, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); shell.invoke_command("call boiler wwseltemp"); shell.invoke_command("call system publish"); @@ -1795,7 +1795,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const add_device(0x18, 202); // Bosch TC100 - https://github.com/emsesp/EMS-ESP/issues/474 // 0x0A - uart_telegram({0x98, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + uart_telegram({0x98, 0x49, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}); ok = true; } @@ -1829,10 +1829,10 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const // SM100Monitor - type 0x0362 EMS+ - for SM100 and SM200 // B0 0B FF 00 02 62 00 44 02 7A 80 00 80 00 80 00 80 00 80 00 80 00 00 7C 80 00 80 00 80 00 80 - rx_telegram({0xB0, 0x0B, 0xFF, 00, 0x02, 0x62, 00, 0x44, 0x02, 0x7A, 0x80, 00, 0x80, 0x00, 0x80, 00, + rx_telegram({0xB0, 0x49, 0xFF, 00, 0x02, 0x62, 00, 0x44, 0x02, 0x7A, 0x80, 00, 0x80, 0x00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 00, 0x7C, 0x80, 00, 0x80, 00, 0x80, 00, 0x80}); - rx_telegram({0xB0, 0x0B, 0xFF, 0x00, 0x02, 0x62, 0x01, 0x44, 0x03, 0x30, 0x80, 00, 0x80, 00, 0x80, 00, + rx_telegram({0xB0, 0x49, 0xFF, 0x00, 0x02, 0x62, 0x01, 0x44, 0x03, 0x30, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 0x33}); rx_telegram({0xB0, 00, 0xFF, 0x18, 02, 0x62, 0x80, 00, 0xB8}); @@ -1936,7 +1936,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const if (command == "rx2") { shell.printfln("Testing Rx2..."); for (uint8_t i = 0; i < 30; i++) { - uart_telegram({0x08, 0x0B, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); + uart_telegram({0x08, 0x49, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); ok = true; } } @@ -1953,23 +1953,23 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const uart_telegram({0x08, 0x97, 0x33, 0x00, 0x23, 0x24}); // Boiler -> Me, UBAParameterWW(0x33), telegram: 08 0B 33 00 08 FF 34 FB 00 28 00 00 46 00 FF FF 00 (#data=13) - uart_telegram({0x08, 0x0B, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); + uart_telegram({0x08, 0x49, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); // Thermostat -> Me, RC20StatusMessage(0x91), telegram: 17 0B 91 05 44 45 46 47 (#data=4) - uart_telegram({0x17, 0x0B, 0x91, 0x05, 0x44, 0x45, 0x46, 0x47}); + uart_telegram({0x17, 0x49, 0x91, 0x05, 0x44, 0x45, 0x46, 0x47}); // bad CRC - corrupt telegram - CRC should be 0x8E - uint8_t t5[] = {0x17, 0x0B, 0x91, 0x05, 0x44, 0x45, 0x46, 0x47, 0x99}; + uint8_t t5[] = {0x17, 0x49, 0x91, 0x05, 0x44, 0x45, 0x46, 0x47, 0x99}; EMSESP::rxservice_.add(t5, sizeof(t5)); // simulating a Tx record - uart_telegram({0x0B, 0x88, 0x07, 0x00, 0x20}); + uart_telegram({0x49, 0x88, 0x07, 0x00, 0x20}); // Version Boiler - uart_telegram({0x08, 0x0B, 0x02, 0x00, 0x7B, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04}); + uart_telegram({0x08, 0x49, 0x02, 0x00, 0x7B, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04}); // Version Thermostat, device_id 0x11 - uart_telegram({0x11, 0x0B, 0x02, 0x00, 0x4D, 0x03, 0x03}); + uart_telegram({0x11, 0x49, 0x02, 0x00, 0x4D, 0x03, 0x03}); // Thermostat -> all, telegram: 10 00 FF 00 01 A5 00 D7 21 00 00 00 00 30 01 84 01 01 03 01 84 01 F1 00 00 11 01 00 08 63 00 // 0x1A5 test ems+ @@ -1987,7 +1987,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const uart_telegram({0x17, 0x08, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00}); // Thermostat -> Me, RC20Set(0xA8), telegram: 17 0B A8 00 01 00 FF F6 01 06 00 01 0D 01 00 FF FF 01 02 02 02 00 00 05 1F 05 1F 02 0E 00 FF (#data=27) - uart_telegram({0x17, 0x0B, 0xA8, 0x00, 0x01, 0x00, 0xFF, 0xF6, 0x01, 0x06, 0x00, 0x01, 0x0D, 0x01, 0x00, 0xFF, + uart_telegram({0x17, 0x49, 0xA8, 0x00, 0x01, 0x00, 0xFF, 0xF6, 0x01, 0x06, 0x00, 0x01, 0x0D, 0x01, 0x00, 0xFF, 0xFF, 0x01, 0x02, 0x02, 0x02, 0x00, 0x00, 0x05, 0x1F, 0x05, 0x1F, 0x02, 0x0E, 0x00, 0xFF}); // Boiler(0x08) -> All(0x00), UBAMonitorWW(0x34), data: 36 01 A5 80 00 21 00 00 01 00 01 3E 8D 03 77 91 00 80 00 @@ -2021,7 +2021,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const EMSESP::send_write_request(0x91, 0x17, 0x00, t18, sizeof(t18), 0x00); // TX - send EMS+ - const uint8_t t13[] = {0x90, 0x0B, 0xFF, 00, 01, 0xBA, 00, 0x2E, 0x2A, 0x26, 0x1E, 0x03, + const uint8_t t13[] = {0x90, 0x49, 0xFF, 00, 01, 0xBA, 00, 0x2E, 0x2A, 0x26, 0x1E, 0x03, 00, 0xFF, 0xFF, 05, 0x2A, 01, 0xE1, 0x20, 0x01, 0x0F, 05, 0x2A}; EMSESP::txservice_.add(Telegram::Operation::TX_RAW, t13, sizeof(t13), 0); @@ -2145,7 +2145,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const uart_telegram({0x08, 0x98, 0x33, 0x00, 0x23, 0x24}); // Boiler -> Me, UBAParameterWW(0x33), telegram: 08 0B 33 00 08 FF 34 FB 00 28 00 00 46 00 FF FF 00 (#data=13) - uart_telegram({0x08, 0x0B, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); + uart_telegram({0x08, 0x49, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); // add a thermostat add_device(0x18, 157); // Bosch CR100 @@ -2487,7 +2487,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const if (command == "rx3") { shell.printfln("Testing rx3..."); - uart_telegram({0x21, 0x0B, 0xFF, 0x00}); + uart_telegram({0x21, 0x49, 0xFF, 0x00}); ok = true; } @@ -2495,7 +2495,7 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const if (command == "tx2") { shell.printfln("Testing tx2..."); - uint8_t t[] = {0x0B, 0x88, 0x18, 0x00, 0x20, 0xD4}; // including CRC + uint8_t t[] = {0x49, 0x88, 0x18, 0x00, 0x20, 0xD4}; // including CRC EMSuart::transmit(t, sizeof(t)); ok = true; } @@ -2676,45 +2676,6 @@ void Test::add_device(uint8_t device_id, uint8_t product_id) { uart_telegram({device_id, EMSESP_DEFAULT_EMS_BUS_ID, EMSdevice::EMS_TYPE_VERSION, 0, product_id, 1, 0}); } -#ifdef EMSESP_TEST -#ifndef EMSESP_STANDALONE -void Test::listDir(fs::FS & fs, const char * dirname, uint8_t levels) { - Serial.println(); - Serial.printf("%s\r\n", dirname); - - File root = fs.open(dirname); - if (!root) { - Serial.println("- failed to open directory"); - return; - } - if (!root.isDirectory()) { - Serial.println(" - not a directory"); - return; - } - - File file = root.openNextFile(); - while (file) { - if (file.isDirectory()) { - Serial.print(file.name()); - Serial.println("/"); - if (levels) { - // prefix a / to the name to make it a full path - listDir(fs, ("/" + String(file.name())).c_str(), levels - 1); - } - Serial.println(); - } else { - Serial.print(" "); - Serial.print(file.name()); - Serial.print(" ("); - Serial.print(file.size()); - Serial.println(" bytes)"); - } - file = root.openNextFile(); - } -} -#endif -#endif - } // namespace emsesp #endif diff --git a/src/test/test.h b/src/test/test.h index 8c13d45a1..0c8c24582 100644 --- a/src/test/test.h +++ b/src/test/test.h @@ -80,7 +80,6 @@ class Test { static void uart_telegram_withCRC(const char * rx_data); static void add_device(uint8_t device_id, uint8_t product_id); static void refresh(); - static void listDir(fs::FS & fs, const char * dirname, uint8_t levels); }; } // namespace emsesp diff --git a/src/uart/emsuart_esp32.cpp b/src/uart/emsuart_esp32.cpp index 3e141f084..8c22f8919 100644 --- a/src/uart/emsuart_esp32.cpp +++ b/src/uart/emsuart_esp32.cpp @@ -39,21 +39,19 @@ uint32_t inverse_mask = 0; // receive task, wait for break and call incoming_telegram void EMSuart::uart_event_task(void * pvParameters) { uart_event_t event; - uint8_t telegram[EMS_MAXBUFFERSIZE]; + uint8_t telegram[UART_FIFO_LEN + 1]; // same size as in driver_install uint8_t length = 0; while (1) { - //Waiting for UART event. + // Waiting for UART event. if (xQueueReceive(uart_queue, (void *)&event, portMAX_DELAY)) { if (event.type == UART_DATA) { length += event.size; } else if (event.type == UART_BREAK) { + // read buffer up to break + uart_read_bytes(EMSUART_NUM, telegram, length, portMAX_DELAY); if (length == 2 || (length >= 6 && length <= EMS_MAXBUFFERSIZE)) { - uart_read_bytes(EMSUART_NUM, telegram, length, portMAX_DELAY); EMSESP::incoming_telegram(telegram, (uint8_t)(length - 1)); - } else { // flush buffer up to break - uint8_t buf[UART_FIFO_LEN]; - uart_read_bytes(EMSUART_NUM, buf, length, portMAX_DELAY); } length = 0; } else if (event.type == UART_BUFFER_FULL) { @@ -77,7 +75,7 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t .source_clk = UART_SCLK_APB #if ESP_ARDUINO_VERSION_MAJOR >= 3 , - .flags = {0, 0} + .flags = {0} #endif }; #if defined(EMSUART_RX_INVERT) @@ -89,7 +87,7 @@ void EMSuart::start(const uint8_t tx_mode, const uint8_t rx_gpio, const uint8_t uart_param_config(EMSUART_NUM, &uart_config); uart_set_pin(EMSUART_NUM, tx_gpio, rx_gpio, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); uart_set_line_inverse(EMSUART_NUM, inverse_mask); - uart_driver_install(EMSUART_NUM, UART_FIFO_LEN + 1, 0, (EMS_MAXBUFFERSIZE + 1) * 2, &uart_queue, 0); // buffer must be > fifo + uart_driver_install(EMSUART_NUM, UART_FIFO_LEN + 1, 0, UART_FIFO_LEN + 3, &uart_queue, 0); // buffer must be > fifo, queue can hold data+break+overflow message uart_set_rx_full_threshold(EMSUART_NUM, 1); uart_set_rx_timeout(EMSUART_NUM, 0); // disable @@ -151,8 +149,10 @@ uint8_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) { return EMS_TX_STATUS_OK; } + auto tx_mode = tx_mode_ != EMS_TXMODE_AUTO ? tx_mode_ : EMSbus::is_ht3() ? EMS_TXMODE_HT3 : EMSbus::is_ems2() ? EMS_TXMODE_EMSPLUS : EMS_TXMODE_EMS; + // TXMODE is EMS+ with long delay - if (tx_mode_ == EMS_TXMODE_EMSPLUS) { + if (tx_mode == EMS_TXMODE_EMSPLUS) { for (uint8_t i = 0; i < len; i++) { uart_write_bytes(EMSUART_NUM, &buf[i], 1); delayMicroseconds(EMSUART_TX_WAIT_PLUS); @@ -162,7 +162,7 @@ uint8_t EMSuart::transmit(const uint8_t * buf, const uint8_t len) { } // TXMODE is HT3 with 7 bittimes delay - if (tx_mode_ == EMS_TXMODE_HT3) { + if (tx_mode == EMS_TXMODE_HT3) { for (uint8_t i = 0; i < len; i++) { uart_write_bytes(EMSUART_NUM, &buf[i], 1); delayMicroseconds(EMSUART_TX_WAIT_HT3); diff --git a/src/uart/emsuart_esp32.h b/src/uart/emsuart_esp32.h index fbf011943..70498f080 100644 --- a/src/uart/emsuart_esp32.h +++ b/src/uart/emsuart_esp32.h @@ -42,10 +42,11 @@ #define EMS_TXMODE_INIT 0xFF #define EMS_TXMODE_OFF 0 -#define EMS_TXMODE_DEFAULT 1 +#define EMS_TXMODE_EMS 1 #define EMS_TXMODE_EMSPLUS 2 #define EMS_TXMODE_HT3 3 #define EMS_TXMODE_HW 4 +#define EMS_TXMODE_AUTO 5 // LEGACY #define EMSUART_TX_BIT_TIME 104 // bit time @9600 baud diff --git a/src/web/WebCustomEntityService.cpp b/src/web/WebCustomEntityService.cpp index 184085e56..94c9bb024 100644 --- a/src/web/WebCustomEntityService.cpp +++ b/src/web/WebCustomEntityService.cpp @@ -74,6 +74,11 @@ StateUpdateResult WebCustomEntity::update(JsonObject root, WebCustomEntity & web if (entityItem.raw) { delete[] entityItem.raw; } + if (entityItem.ram == 2) { // NVS + char key[sizeof(entityItem.name) + 2]; + snprintf(key, sizeof(key), "c:%s", entityItem.name); + EMSESP::nvs_.remove(key); + } if (entityItem.ram) { // save name/value pairs for change checking doc[entityItem.name] = entityItem.value; } @@ -95,9 +100,9 @@ StateUpdateResult WebCustomEntity::update(JsonObject root, WebCustomEntity & web entityItem.value_type = ei["value_type"]; entityItem.writeable = ei["writeable"]; entityItem.hide = ei["hide"] | false; - entityItem.data = ei["value"].as(); + entityItem.data = ei["value"].as().c_str(); strlcpy(entityItem.name, ei["name"].as(), sizeof(entityItem.name)); - if (entityItem.ram == 1) { + if (entityItem.ram > 0) { entityItem.device_id = 0; entityItem.type_id = 0; entityItem.value_type = DeviceValueType::STRING; @@ -127,7 +132,13 @@ StateUpdateResult WebCustomEntity::update(JsonObject root, WebCustomEntity & web if (entityItem.factor == 0) { entityItem.factor = 1; } - + if (entityItem.ram == 2) { // NVS + char key[sizeof(entityItem.name) + 2]; + snprintf(key, sizeof(key), "c:%s", entityItem.name); + if (EMSESP::nvs_.isKey(key)) { + entityItem.data = EMSESP::nvs_.getString(key).c_str(); + } + } webCustomEntity.customEntityItems.push_back(entityItem); // add to list if (entityItem.writeable && entityItem.name[0] != '\0') { @@ -155,14 +166,26 @@ StateUpdateResult WebCustomEntity::update(JsonObject root, WebCustomEntity & web bool WebCustomEntityService::command_setvalue(const char * value, const int8_t id, const char * name) { // don't write if there is no value, to prevent setting an empty value by mistake when parsing attributes if (!strlen(value)) { +#if defined(EMSESP_DEBUG) EMSESP::logger().debug("can't set empty value!"); +#endif return false; } for (CustomEntityItem & entityItem : *customEntityItems_) { if (Helpers::toLower(entityItem.name) == Helpers::toLower(name)) { + if (entityItem.data == value) { + return true; // no change + } if (entityItem.ram == 1) { entityItem.data = value; + } else if (entityItem.ram == 2) { // NVS + entityItem.data = value; + char key[sizeof(entityItem.name) + 2]; + snprintf(key, sizeof(key), "c:%s", entityItem.name); + if (!EMSESP::nvs_.isKey(key) || EMSESP::nvs_.getString(key) != entityItem.data.c_str()) { + EMSESP::nvs_.putString(key, entityItem.data.c_str()); + } } else if (entityItem.value_type == DeviceValueType::STRING) { auto telegram = strdup(value); uint8_t length = strlen(telegram) / 3 + 1; @@ -184,13 +207,15 @@ bool WebCustomEntityService::command_setvalue(const char * value, const int8_t i dat += len; } delete[] data; + // validate telegram + EMSESP::send_read_request(entityItem.type_id, entityItem.device_id, entityItem.offset, length); return true; } else if (entityItem.value_type == DeviceValueType::BOOL) { bool v; if (!Helpers::value2bool(value, v)) { return false; } - EMSESP::send_write_request(entityItem.type_id, entityItem.device_id, entityItem.offset, v ? (uint8_t)entityItem.factor : 0, 0); + EMSESP::send_write_request(entityItem.type_id, entityItem.device_id, entityItem.offset, v ? (uint8_t)entityItem.factor : 0, entityItem.type_id); } else { float f; if (!Helpers::value2float(value, f)) { @@ -198,13 +223,13 @@ bool WebCustomEntityService::command_setvalue(const char * value, const int8_t i } int v = (f / entityItem.factor + 0.5); if (entityItem.value_type == DeviceValueType::UINT8 || entityItem.value_type == DeviceValueType::INT8) { - EMSESP::send_write_request(entityItem.type_id, entityItem.device_id, entityItem.offset, v, 0); + EMSESP::send_write_request(entityItem.type_id, entityItem.device_id, entityItem.offset, v, entityItem.type_id); } else if (entityItem.value_type == DeviceValueType::UINT16 || entityItem.value_type == DeviceValueType::INT16) { uint8_t v1[2] = {(uint8_t)(v >> 8), (uint8_t)(v & 0xFF)}; - EMSESP::send_write_request(entityItem.type_id, entityItem.device_id, entityItem.offset, v1, 2, 0); + EMSESP::send_write_request(entityItem.type_id, entityItem.device_id, entityItem.offset, v1, 2, entityItem.type_id); } else { uint8_t v1[3] = {(uint8_t)(v >> 16), (uint8_t)((v & 0xFF00) >> 8), (uint8_t)(v & 0xFF)}; - EMSESP::send_write_request(entityItem.type_id, entityItem.device_id, entityItem.offset, v1, 3, 0); + EMSESP::send_write_request(entityItem.type_id, entityItem.device_id, entityItem.offset, v1, 3, entityItem.type_id); } } @@ -320,6 +345,15 @@ bool WebCustomEntityService::get_value_info(JsonObject output, const char * cmd) return true; } + if (!strcmp(cmd, F_(metrics))) { + std::string metrics = get_metrics_prometheus(); + if (!metrics.empty()) { + output["api_data"] = metrics; + return true; + } + return false; + } + // specific value info const char * attribute_s = Command::get_attribute(cmd); for (auto const & entity : *customEntityItems_) { @@ -331,11 +365,59 @@ bool WebCustomEntityService::get_value_info(JsonObject output, const char * cmd) return false; // not found } +// generate Prometheus metrics format from custom entities +std::string WebCustomEntityService::get_metrics_prometheus() { + std::string result; + result.reserve(customEntityItems_->size() * 140); + char val[10]; + for (CustomEntityItem & entity : *customEntityItems_) { + if (entity.hide || entity.name[0] == '\0') { + continue; + } + result += (std::string) "# HELP emsesp_" + entity.name + " " + entity.name; + if (entity.uom != 0) { + result += (std::string) ", " + EMSdevice::uom_to_string(entity.uom); + } + result += (std::string) ", readable, visible" + (entity.writeable ? ", writable\n" : "\n"); + result += (std::string) "# TYPE emsesp_" + entity.name + " gauge\n"; + result += (std::string) "emsesp_" + entity.name + " "; + switch (entity.value_type) { + case DeviceValueType::BOOL: + result += (std::string)(entity.value == 0 ? "0" : "1"); + break; + case DeviceValueType::INT8: + result += (std::string)Helpers::render_value(val, entity.factor * (int8_t)entity.value, 2); + break; + case DeviceValueType::UINT8: + result += (std::string)Helpers::render_value(val, entity.factor * (uint8_t)entity.value, 2); + break; + case DeviceValueType::INT16: + result += (std::string)Helpers::render_value(val, entity.factor * (int16_t)entity.value, 2); + break; + case DeviceValueType::UINT16: + result += (std::string)Helpers::render_value(val, entity.factor * (uint16_t)entity.value, 2); + break; + case DeviceValueType::UINT24: + case DeviceValueType::TIME: + case DeviceValueType::UINT32: + result += (std::string)Helpers::render_value(val, entity.factor * entity.value, 2); + break; + default: + if (entity.data.length() > 0) { + result += entity.data; + } + break; + } + result += (std::string) "\n"; + } + return result; +} + // 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 ? "ram" : "ems"; + 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; @@ -606,7 +688,7 @@ void WebCustomEntityService::fetch() { uint8_t stop = (entity.offset + len[entity.value_type]) % fetchblock; bool is_fetched = start < fetchblock && stop < fetchblock; // make sure the complete value is a a fetched block for (const auto & emsdevice : EMSESP::emsdevices) { - if (emsdevice->is_device_id(entity.device_id) && emsdevice->is_fetch(entity.type_id) + if (emsdevice->is_device_id(entity.device_id) && emsdevice->is_fetch(entity.type_id, entity.offset + len[entity.value_type]) && (is_fetched || entity.value_type == DeviceValueType::STRING)) { needFetch = false; break; diff --git a/src/web/WebCustomEntityService.h b/src/web/WebCustomEntityService.h index d96254846..4cfec1ac4 100644 --- a/src/web/WebCustomEntityService.h +++ b/src/web/WebCustomEntityService.h @@ -68,6 +68,8 @@ class WebCustomEntityService : public StatefulService { void show_values(JsonObject output); void generate_value_web(JsonObject output, const bool is_dashboard = false); + std::string get_metrics_prometheus(); + uint8_t count_entities(); void ha_reset() { ha_configdone_ = false; diff --git a/src/web/WebCustomizationService.cpp b/src/web/WebCustomizationService.cpp index d974c979d..537a7ba09 100644 --- a/src/web/WebCustomizationService.cpp +++ b/src/web/WebCustomizationService.cpp @@ -76,10 +76,11 @@ void WebCustomization::read(WebCustomization & customizations, JsonObject root) // Masked entities customization and custom device name (optional) JsonArray masked_entitiesJson = root["masked_entities"].to(); for (const EntityCustomization & entityCustomization : customizations.entityCustomizations) { - JsonObject entityJson = masked_entitiesJson.add(); - entityJson["product_id"] = entityCustomization.product_id; - entityJson["device_id"] = entityCustomization.device_id; - entityJson["custom_name"] = entityCustomization.custom_name; + JsonObject entityJson = masked_entitiesJson.add(); + entityJson["product_id"] = entityCustomization.product_id; + entityJson["device_id"] = entityCustomization.device_id; + entityJson["custom_name"] = entityCustomization.custom_name; + entityJson["custom_brand"] = entityCustomization.custom_brand; // entries are in the form [optional customname] e.g "08heatingactive|heating is on" JsonArray masked_entityJson = entityJson["entity_ids"].to(); @@ -134,7 +135,7 @@ StateUpdateResult WebCustomization::update(JsonObject root, WebCustomization & c analog.type = analogJson["type"]; analog.is_system = analogJson["is_system"] | false; if (_start && analog.type == EMSESP::analogsensor_.AnalogType::DIGITAL_OUT && analog.uom > DeviceValue::DeviceValueUOM::NONE) { - analog.offset = analog.uom - 1; + analog.offset = analog.uom > 1 ? 1 : 0; } customizations.analogCustomizations.push_back(analog); // add to list } @@ -146,10 +147,11 @@ StateUpdateResult WebCustomization::update(JsonObject root, WebCustomization & c if (root["masked_entities"].is()) { auto masked_entities = root["masked_entities"].as(); for (const JsonObject masked_entity : masked_entities) { - auto emsEntity = EntityCustomization(); - emsEntity.product_id = masked_entity["product_id"]; - emsEntity.device_id = masked_entity["device_id"]; - emsEntity.custom_name = masked_entity["custom_name"] | ""; + auto emsEntity = EntityCustomization(); + emsEntity.product_id = masked_entity["product_id"]; + emsEntity.device_id = masked_entity["device_id"]; + emsEntity.custom_name = masked_entity["custom_name"] | ""; + emsEntity.custom_brand = masked_entity["custom_brand"] | ""; auto masked_entity_ids = masked_entity["entity_ids"].as(); for (const JsonVariant masked_entity_id : masked_entity_ids) { @@ -242,17 +244,19 @@ void WebCustomizationService::writeDeviceName(AsyncWebServerRequest * request, J uint8_t unique_device_id = json["id"]; // find product id and device id using the unique id if (emsdevice->unique_id() == unique_device_id) { - uint8_t product_id = emsdevice->product_id(); - uint8_t device_id = emsdevice->device_id(); - auto custom_name = json["name"].as(); + uint8_t product_id = emsdevice->product_id(); + uint8_t device_id = emsdevice->device_id(); + std::string custom_name = json["name"] | ""; + std::string custom_brand = json["brand"] | ""; // updates current record or creates a new one bool entry_exists = false; update([&](WebCustomization & settings) { for (auto it = settings.entityCustomizations.begin(); it != settings.entityCustomizations.end();) { if ((*it).product_id == product_id && (*it).device_id == device_id) { - (*it).custom_name = custom_name; - entry_exists = true; + (*it).custom_name = custom_name; + (*it).custom_brand = custom_brand; + entry_exists = true; break; } else { ++it; @@ -262,9 +266,10 @@ void WebCustomizationService::writeDeviceName(AsyncWebServerRequest * request, J // if we don't have any customization for this device, create a new entry if (!entry_exists) { EntityCustomization new_entry; - new_entry.product_id = product_id; - new_entry.device_id = device_id; - new_entry.custom_name = custom_name; + new_entry.product_id = product_id; + new_entry.device_id = device_id; + new_entry.custom_name = custom_name; + new_entry.custom_brand = custom_brand; settings.entityCustomizations.push_back(new_entry); } @@ -273,6 +278,7 @@ void WebCustomizationService::writeDeviceName(AsyncWebServerRequest * request, J // update the EMS Device record real-time emsdevice->custom_name(custom_name); + emsdevice->custom_brand(custom_brand); } } } @@ -459,10 +465,11 @@ void WebCustomizationService::load_test_data() { // EMS entities, mark some as favorites webCustomization.entityCustomizations.clear(); - auto emsEntity = EntityCustomization(); - emsEntity.product_id = 123; - emsEntity.device_id = 8; - emsEntity.custom_name = "My Custom Boiler"; + auto emsEntity = EntityCustomization(); + emsEntity.product_id = 123; + emsEntity.device_id = 8; + emsEntity.custom_name = "My Custom Boiler"; + emsEntity.custom_brand = ""; emsEntity.entity_ids.push_back("08heatingactive|is my heating on?"); emsEntity.entity_ids.push_back("08tapwateractive"); emsEntity.entity_ids.push_back("08selflowtemp|<90"); @@ -472,6 +479,7 @@ void WebCustomizationService::load_test_data() { for (const auto & emsdevice : EMSESP::emsdevices) { if (emsdevice->is_device_id(emsEntity.device_id)) { emsdevice->custom_name(emsEntity.custom_name); + emsdevice->custom_brand(emsEntity.custom_brand); break; } } diff --git a/src/web/WebCustomizationService.h b/src/web/WebCustomizationService.h index a8369d091..e8aab9c0f 100644 --- a/src/web/WebCustomizationService.h +++ b/src/web/WebCustomizationService.h @@ -63,10 +63,11 @@ class AnalogCustomization { // we use product_id and device_id to make the device unique class EntityCustomization { public: - uint8_t product_id; // device's product id - uint8_t device_id; // device's device id - std::string custom_name; // custom device name - std::vector entity_ids; // array of entity ids with masks and optional custom fullname + uint8_t product_id; // device's product id + uint8_t device_id; // device's device id + std::string custom_name; // custom device name + std::string custom_brand; // custom brand name + std::vector entity_ids; // array of entity ids with masks and optional custom fullname }; class WebCustomization { diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index 943d30b21..3ab7900ee 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -73,6 +73,11 @@ void WebScheduler::read(WebScheduler & webScheduler, JsonObject root) { StateUpdateResult WebScheduler::update(JsonObject root, WebScheduler & webScheduler) { // reset the list Command::erase_device_commands(EMSdevice::DeviceType::SCHEDULER); + for (ScheduleItem & scheduleItem : webScheduler.scheduleItems) { + char key[sizeof(scheduleItem.name) + 2]; + snprintf(key, sizeof(key), "s:%s", scheduleItem.name); + EMSESP::nvs_.remove(key); + } webScheduler.scheduleItems.clear(); EMSESP::webSchedulerService.ha_reset(); @@ -95,6 +100,11 @@ StateUpdateResult WebScheduler::update(JsonObject root, WebScheduler & webSchedu webScheduler.scheduleItems.push_back(si); // add to list if (webScheduler.scheduleItems.back().name[0] != '\0') { + char key[sizeof(webScheduler.scheduleItems.back().name) + 2]; + snprintf(key, sizeof(key), "s:%s", webScheduler.scheduleItems.back().name); + if (EMSESP::nvs_.isKey(key) && webScheduler.scheduleItems.back().flags != SCHEDULEFLAG_SCHEDULE_IMMEDIATE) { + webScheduler.scheduleItems.back().active = EMSESP::nvs_.getBool(key); + } Command::add( EMSdevice::DeviceType::SCHEDULER, webScheduler.scheduleItems.back().name, @@ -127,7 +137,12 @@ bool WebSchedulerService::command_setvalue(const char * value, const int8_t id, if (EMSESP::mqtt_.get_publish_onchange(0)) { publish(); } - + // save new state to nvs #2946 + if (scheduleItem.flags != SCHEDULEFLAG_SCHEDULE_IMMEDIATE) { + char key[sizeof(scheduleItem.name) + 2]; + snprintf(key, sizeof(key), "s:%s", scheduleItem.name); + EMSESP::nvs_.putBool(key, scheduleItem.active); + } return true; } } @@ -160,6 +175,15 @@ bool WebSchedulerService::get_value_info(JsonObject output, const char * cmd) { return true; } + if (!strcmp(cmd, F_(metrics))) { + std::string metrics = get_metrics_prometheus(); + if (!metrics.empty()) { + output["api_data"] = metrics; + return true; + } + return false; + } + const char * attribute_s = Command::get_attribute(cmd); for (const ScheduleItem & scheduleItem : *scheduleItems_) { if (Helpers::toLower(scheduleItem.name) == cmd) { @@ -171,6 +195,21 @@ bool WebSchedulerService::get_value_info(JsonObject output, const char * cmd) { return false; // not found } +// generate Prometheus metrics format from scheduler values +std::string WebSchedulerService::get_metrics_prometheus() { + std::string result; + result.reserve(scheduleItems_->size() * 140); + for (const ScheduleItem & scheduleItem : *scheduleItems_) { + if (scheduleItem.name[0] == '\0') { + continue; + } + result += (std::string) "# HELP emsesp_" + scheduleItem.name + " " + scheduleItem.name + ", boolean, readable, visible, writable\n"; + result += (std::string) "# TYPE emsesp_" + scheduleItem.name + " gauge\n"; + result += (std::string) "emsesp_" + scheduleItem.name + " " + (scheduleItem.active ? "1\n" : "0\n"); + } + return result; +} + // build the json for specific entity void WebSchedulerService::get_value_json(JsonObject output, const ScheduleItem & scheduleItem) { output["name"] = (const char *)scheduleItem.name; @@ -248,18 +287,24 @@ void WebSchedulerService::publish(const bool force) { snprintf(val_obj, sizeof(val_obj), "value_json['%s']", scheduleItem.name); snprintf(val_cond, sizeof(val_cond), "%s is defined", val_obj); + // Optimized: use stack buffer instead of string concatenation to avoid heap allocations + char val_tpl[150]; if (Mqtt::discovery_type() == Mqtt::discoveryType::HOMEASSISTANT) { - config["val_tpl"] = (std::string) "{{" + val_obj + " if " + val_cond + "}}"; + snprintf(val_tpl, sizeof(val_tpl), "{{%s if %s}}", val_obj, val_cond); } else { - config["val_tpl"] = (std::string) "{{" + val_obj + "}}"; // omit value conditional Jinja2 template code + snprintf(val_tpl, sizeof(val_tpl), "{{%s}}", val_obj); // omit value conditional Jinja2 template code } + config["val_tpl"] = val_tpl; char uniq_s[70]; snprintf(uniq_s, sizeof(uniq_s), "%s_%s", F_(scheduler), scheduleItem.name); - config["uniq_id"] = uniq_s; - config["name"] = (const char *)scheduleItem.name; - config["def_ent_id"] = std::string("switch.") + uniq_s; + config["uniq_id"] = uniq_s; + config["name"] = (const char *)scheduleItem.name; + // Optimized: use stack buffer instead of string concatenation + char def_ent_id[80]; + snprintf(def_ent_id, sizeof(def_ent_id), "switch.%s", uniq_s); + config["def_ent_id"] = def_ent_id; char topic[Mqtt::MQTT_TOPIC_MAX_SIZE]; char command_topic[Mqtt::MQTT_TOPIC_MAX_SIZE]; @@ -307,8 +352,8 @@ bool WebSchedulerService::command(const char * name, const std::string & command // parse json JsonDocument doc; if (deserializeJson(doc, cmd) == DeserializationError::Ok) { - HTTPClient http; - std::string url = doc["url"] | ""; + HTTPClient * http = new HTTPClient; + std::string url = doc["url"] | ""; // for a GET with parameters replace commands with values // don't search the complete url, it may contain a devicename in path auto q = url.find_first_of('?'); @@ -318,10 +363,10 @@ bool WebSchedulerService::command(const char * name, const std::string & command commands(s, false); url.replace(q + 1, l, s); } - if (http.begin(url.c_str())) { + if (http->begin(url.c_str())) { // add any given headers for (JsonPair p : doc["header"].as()) { - http.addHeader(p.key().c_str(), p.value().as().c_str()); + http->addHeader(p.key().c_str(), p.value().as().c_str()); } std::string value = doc["value"] | data.c_str(); // extract value if its in the command, or take the data std::string method = doc["method"] | "GET"; // default GET @@ -331,14 +376,15 @@ bool WebSchedulerService::command(const char * name, const std::string & command int httpResult = 0; if (value.length() || method == "post") { // we have all lowercase if (value.find_first_of('{') != std::string::npos) { - http.addHeader("Content-Type", "application/json"); // auto-set to JSON + http->addHeader(asyncsrv::T_Content_Type, asyncsrv::T_application_json, false); // auto-set to JSON } - httpResult = http.POST(value.c_str()); + httpResult = http->POST(value.c_str()); } else { - httpResult = http.GET(); // normal GET + httpResult = http->GET(); // normal GET } - http.end(); + http->end(); + delete http; // check HTTP return code if (httpResult != 200) { @@ -419,7 +465,9 @@ void WebSchedulerService::condition() { } else if (match.length() == 1 && match[0] == '0' && scheduleItem.retry_cnt == 1) { scheduleItem.retry_cnt = 0xFF; } else if (match.length() != 1) { // the match is not boolean +#if defined(EMSESP_DEBUG) EMSESP::logger().debug("condition result: %s", match.c_str()); +#endif } } } @@ -453,6 +501,10 @@ void WebSchedulerService::loop() { if (scheduleItem.active && scheduleItem.flags == SCHEDULEFLAG_SCHEDULE_IMMEDIATE) { command(scheduleItem.name, scheduleItem.cmd.c_str(), compute(scheduleItem.value.c_str())); scheduleItem.active = false; + publish_single(scheduleItem.name, false); + if (EMSESP::mqtt_.get_publish_onchange(0)) { + publish(); + } } } diff --git a/src/web/WebSchedulerService.h b/src/web/WebSchedulerService.h index 8a1bbbf55..0d1ad2fa6 100644 --- a/src/web/WebSchedulerService.h +++ b/src/web/WebSchedulerService.h @@ -88,6 +88,8 @@ class WebSchedulerService : public StatefulService { uint8_t count_entities(bool cmd_only = false); bool onChange(const char * cmd); + std::string get_metrics_prometheus(); + std::string raw_value; std::string computed_value; diff --git a/src/web/WebSettingsService.cpp b/src/web/WebSettingsService.cpp index 5d2dc0354..dead86c43 100644 --- a/src/web/WebSettingsService.cpp +++ b/src/web/WebSettingsService.cpp @@ -20,7 +20,7 @@ namespace emsesp { -uint8_t WebSettings::flags_ = 0; +uint16_t WebSettings::flags_ = 0; WebSettingsService::WebSettingsService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager) : _httpEndpoint(WebSettings::read, WebSettings::update, this, server, EMSESP_SETTINGS_SERVICE_PATH, securityManager) @@ -114,11 +114,11 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) { reset_flags(); // before loading new board profile free old gpios from used list to allow remapping - EMSESP::system_.remove_gpio(original_settings.led_gpio); - EMSESP::system_.remove_gpio(original_settings.dallas_gpio); + EMSESP::system_.remove_optional_gpio(original_settings.led_gpio); + EMSESP::system_.remove_optional_gpio(original_settings.dallas_gpio); EMSESP::system_.remove_gpio(original_settings.pbutton_gpio); - EMSESP::system_.remove_gpio(original_settings.rx_gpio); - EMSESP::system_.remove_gpio(original_settings.tx_gpio); + EMSESP::system_.remove_optional_gpio(original_settings.rx_gpio); + EMSESP::system_.remove_optional_gpio(original_settings.tx_gpio); // see if the user has changed the board profile // this will set: led_gpio, dallas_gpio, rx_gpio, tx_gpio, pbutton_gpio, phy_type, eth_power, eth_phy_addr, eth_clock_mode, led_type @@ -243,13 +243,13 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) { // Modbus settings settings.modbus_enabled = root["modbus_enabled"] | EMSESP_DEFAULT_MODBUS_ENABLED; - check_flag(original_settings.modbus_enabled, settings.modbus_enabled, ChangeFlags::RESTART); + check_flag(original_settings.modbus_enabled, settings.modbus_enabled, ChangeFlags::MODBUS); settings.modbus_port = root["modbus_port"] | EMSESP_DEFAULT_MODBUS_PORT; - check_flag(original_settings.modbus_port, settings.modbus_port, ChangeFlags::RESTART); + check_flag(original_settings.modbus_port, settings.modbus_port, ChangeFlags::MODBUS); settings.modbus_max_clients = root["modbus_max_clients"] | EMSESP_DEFAULT_MODBUS_MAX_CLIENTS; - check_flag(original_settings.modbus_max_clients, settings.modbus_max_clients, ChangeFlags::RESTART); + check_flag(original_settings.modbus_max_clients, settings.modbus_max_clients, ChangeFlags::MODBUS); settings.modbus_timeout = root["modbus_timeout"] | EMSESP_DEFAULT_MODBUS_TIMEOUT; - check_flag(original_settings.modbus_timeout, settings.modbus_timeout, ChangeFlags::RESTART); + check_flag(original_settings.modbus_timeout, settings.modbus_timeout, ChangeFlags::MODBUS); // // these may need mqtt restart to rebuild HA discovery topics @@ -372,7 +372,11 @@ void WebSettingsService::onUpdate() { Mqtt::reset_mqtt(); // reload MQTT, init HA etc } + if (WebSettings::has_flags(WebSettings::ChangeFlags::MODBUS)) { + EMSESP::system_.modbus_init(); + } WebSettings::reset_flags(); + EMSESP::system_.reset_unused_gpios(); } void WebSettingsService::begin() { @@ -491,12 +495,22 @@ void WebSettings::set_board_profile(WebSettings & settings) { settings.board_profile = "S2MINI"; #elif CONFIG_IDF_TARGET_ESP32S3 settings.board_profile = "S32S3"; // BBQKees Gateway S3 +#elif CONFIG_IDF_TARGET_ESP32C6 + settings.board_profile = "CUSTOM"; #endif // apply the new board profile setting System::load_board_profile(data, settings.board_profile.c_str()); } - EMSESP::logger().info("Loaded board profile %s", settings.board_profile.c_str()); +// log board profile and PSRAM info +#ifndef EMSESP_STANDALONE + uint32_t psram_size = ESP.getPsramSize() / 1024; // in KB + if (psram_size > 0) { + EMSESP::logger().info("Loaded board profile %s (PSRAM: %lu KB)", settings.board_profile.c_str(), psram_size); + } else { + EMSESP::logger().info("Loaded board profile %s (PSRAM: not available)", settings.board_profile.c_str()); + } +#endif // apply the new board profile settings // 0=led, 1=dallas, 2=rx, 3=tx, 4=button, 5=phy_type, 6=eth_power, 7=eth_phy_addr, 8=eth_clock_mode, 9=led_type @@ -513,7 +527,7 @@ void WebSettings::set_board_profile(WebSettings & settings) { } // returns true if the value was changed -bool WebSettings::check_flag(int prev_v, int new_v, uint8_t flag) { +bool WebSettings::check_flag(int prev_v, int new_v, uint16_t flag) { if (prev_v != new_v) { add_flags(flag); #if defined(EMSESP_DEBUG) @@ -524,11 +538,11 @@ bool WebSettings::check_flag(int prev_v, int new_v, uint8_t flag) { return false; } -void WebSettings::add_flags(uint8_t flags) { +void WebSettings::add_flags(uint16_t flags) { flags_ |= flags; } -bool WebSettings::has_flags(uint8_t flags) { +bool WebSettings::has_flags(uint16_t flags) { return (flags_ & flags) == flags; } @@ -536,7 +550,7 @@ void WebSettings::reset_flags() { flags_ = ChangeFlags::NONE; } -uint8_t WebSettings::get_flags() { +uint16_t WebSettings::get_flags() { return flags_; } diff --git a/src/web/WebSettingsService.h b/src/web/WebSettingsService.h index 54f740de8..f778c7203 100644 --- a/src/web/WebSettingsService.h +++ b/src/web/WebSettingsService.h @@ -67,9 +67,9 @@ class WebSettings { uint8_t bool_dashboard; uint8_t enum_format; - int8_t weblog_level; - uint8_t weblog_buffer; - bool weblog_compact; + int8_t weblog_level; + uint16_t weblog_buffer; + bool weblog_compact; bool fahrenheit; @@ -88,7 +88,7 @@ class WebSettings { static void read(WebSettings & settings, JsonObject root); static StateUpdateResult update(JsonObject root, WebSettings & settings); - enum ChangeFlags : uint8_t { + enum ChangeFlags : uint16_t { NONE = 0, UART = (1 << 0), // 1 - uart SYSLOG = (1 << 1), // 2 - syslog @@ -98,19 +98,20 @@ class WebSettings { LED = (1 << 5), // 32 - led BUTTON = (1 << 6), // 64 - button MQTT = (1 << 7), // 128 - mqtt - RESTART = 0xFF // 255 - restart request (all changes) + MODBUS = (1 << 8), // 256 - modbus + RESTART = 0xFFFF // restart request (all changes) }; - static bool check_flag(int prev_v, int new_v, uint8_t flag); - static void add_flags(uint8_t flags); - static bool has_flags(uint8_t flags); - static void reset_flags(); - static uint8_t get_flags(); + static bool check_flag(int prev_v, int new_v, uint16_t flag); + static void add_flags(uint16_t flags); + static bool has_flags(uint16_t flags); + static void reset_flags(); + static uint16_t get_flags(); private: static void set_board_profile(WebSettings & settings); - static uint8_t flags_; + static uint16_t flags_; }; class WebSettingsService : public StatefulService { diff --git a/src/web/WebStatusService.cpp b/src/web/WebStatusService.cpp index 4cb923348..d97c4d4e8 100644 --- a/src/web/WebStatusService.cpp +++ b/src/web/WebStatusService.cpp @@ -146,18 +146,27 @@ void WebStatusService::systemStatus(AsyncWebServerRequest * request) { } // get the partition info for each partition, including the running one - // the partition data is done once in System::start() and stored in partition_info_ + // the partition data is gathered once in System::start() and stored in partition_info_ + // install_date is stored as a UTC epoch and formatted to local time here so it honors + // the current TZ (which may not have been set yet when System::start() ran). JsonArray partitions = root["partitions"].to(); for (const auto & partition : EMSESP::system_.partition_info_) { // Skip partition if it has no version, or it's size is 0 if (partition.second.version.empty() || partition.second.size == 0) { continue; } - JsonObject part = partitions.add(); - part["partition"] = partition.first; - part["version"] = partition.second.version; - part["size"] = partition.second.size; - part["install_date"] = partition.second.install_date; + JsonObject part = partitions.add(); + part["partition"] = partition.first; + part["version"] = partition.second.version; + part["size"] = partition.second.size; + if (partition.second.install_date > 0) { + char time_string[25]; + time_t d = partition.second.install_date; + strftime(time_string, sizeof(time_string), "%FT%T", localtime(&d)); + part["install_date"] = time_string; + } else { + part["install_date"] = ""; + } } root["developer_mode"] = EMSESP::system_.developer_mode(); @@ -216,6 +225,9 @@ void WebStatusService::action(AsyncWebServerRequest * request, JsonVariant json) } else if (action == "resetMQTT" && is_admin) { EMSESP::mqtt_.reset_mqtt(); ok = true; + } else if (action == "upgradeImportantMessages") { + root["upgradeImportantMessageType"] = upgradeImportantMessages(param); + ok = true; } #if defined(EMSESP_STANDALONE) && !defined(EMSESP_UNITY) @@ -237,13 +249,75 @@ void WebStatusService::action(AsyncWebServerRequest * request, JsonVariant json) request->send(response); } +// action = upgradeImportantMessages +// returns the type of upgrade important message to display in the UI +// 0 = no message (if just a minor version upgrade) +// 1 = going from <= 3.8 to 3.9 (has new partition layout) +// 2 = major version upgrade +// version can be like 3.8.2 or a filename like EMS-ESP-3_8_2-dev_13-ESP32-16MB+.bin +uint8_t WebStatusService::upgradeImportantMessages(std::string & version) { + if (version.empty()) { + return 0; + } + + // it's a filename with a .bin or .md extension, try and extract the version from it + // e.g. EMS-ESP-3_8_2-dev_13-ESP32-16MB+.bin -> major=3 minor=8 patch=2 + version::EMSESP_Version latest_version; + if ((version.find(".bin") != std::string::npos) || (version.find(".md") != std::string::npos)) { + std::string filename = version; + auto pos = filename.find("EMS-ESP-"); + if (pos == std::string::npos) { + EMSESP::logger().err("Invalid version string: %s", version.c_str()); + return 0; + } + + pos += 8; // skip past "EMS-ESP-" + auto underscore1 = filename.find('_', pos); + auto underscore2 = filename.find('_', underscore1 + 1); + auto dash = filename.find('-', underscore2 + 1); + if (underscore1 == std::string::npos || underscore2 == std::string::npos || dash == std::string::npos) { + EMSESP::logger().err("Invalid version string: %s", version.c_str()); + return 0; + } + + std::string major_version = filename.substr(pos, underscore1 - pos); + std::string minor_version = filename.substr(underscore1 + 1, underscore2 - underscore1 - 1); + std::string patch_version = filename.substr(underscore2 + 1, dash - underscore2 - 1); + latest_version = version::EMSESP_Version(major_version + "." + minor_version + "." + patch_version); + } else { + // if it's .json file exit + if (version.find(".json") != std::string::npos) { + return 0; + } else { + // treat it like a version string like "3.9.0" + latest_version = version::EMSESP_Version(version); + } + } + + version::EMSESP_Version current_version(current_version_s); // get current version + + if ((current_version.major() <= 3 && current_version.minor() <= 8) && (latest_version.major() == 3 && latest_version.minor() == 9)) { + return 1; // if moving from below 3.8.x to 3.9.x return 1 + } + + if (latest_version > current_version && current_version.major() < latest_version.major()) { + return 2; // if it's a major version upgrade return 2 + } + + if (latest_version > current_version && current_version.minor() < latest_version.minor()) { + return 0; // if it's just a minor version upgrade return 0 + } + + return 0; // if it's not a valid version upgrade return 0 +} + // action = checkUpgrade // versions holds the latest development version and stable version in one string, comma separated -bool WebStatusService::checkUpgrade(JsonObject root, std::string & versions) { - if (!versions.empty()) { - version::Semver200_version current_version(current_version_s); - version::Semver200_version latest_dev_version(versions.substr(0, versions.find(','))); - version::Semver200_version latest_stable_version(versions.substr(versions.find(',') + 1)); +bool WebStatusService::checkUpgrade(JsonObject root, std::string & version) { + if (!version.empty()) { + version::EMSESP_Version current_version(current_version_s); + version::EMSESP_Version latest_dev_version(version.substr(0, version.find(','))); + version::EMSESP_Version latest_stable_version(version.substr(version.find(',') + 1)); bool dev_upgradeable = latest_dev_version > current_version; bool stable_upgradeable = latest_stable_version > current_version; @@ -310,26 +384,24 @@ void WebStatusService::allvalues(JsonObject output) { // action = export // returns data for a specific feature/settings as a json object bool WebStatusService::exportData(JsonObject root, std::string & type) { - root["type"] = type; - if (type == "settings") { - JsonObject node = root["System"].to(); - node["version"] = EMSESP_APP_VERSION; - System::extractSettings(NETWORK_SETTINGS_FILE, "Network", root); - System::extractSettings(AP_SETTINGS_FILE, "AP", root); - System::extractSettings(MQTT_SETTINGS_FILE, "MQTT", root); - System::extractSettings(NTP_SETTINGS_FILE, "NTP", root); - System::extractSettings(SECURITY_SETTINGS_FILE, "Security", root); - System::extractSettings(EMSESP_SETTINGS_FILE, "Settings", root); + root["type"] = type; // add settings as a group + System::exportSettings(type, NETWORK_SETTINGS_FILE, root); + System::exportSettings(type, AP_SETTINGS_FILE, root); + System::exportSettings(type, MQTT_SETTINGS_FILE, root); + System::exportSettings(type, NTP_SETTINGS_FILE, root); + System::exportSettings(type, SECURITY_SETTINGS_FILE, root); + System::exportSettings(type, EMSESP_SETTINGS_FILE, root); } else if (type == "schedule") { - System::extractSettings(EMSESP_SCHEDULER_FILE, "Schedule", root); + System::exportSettings(type, EMSESP_SCHEDULER_FILE, root); } else if (type == "customizations") { - System::extractSettings(EMSESP_CUSTOMIZATION_FILE, "Customizations", root); + System::exportSettings(type, EMSESP_CUSTOMIZATION_FILE, root); } else if (type == "entities") { - System::extractSettings(EMSESP_CUSTOMENTITY_FILE, "Entities", root); + System::exportSettings(type, EMSESP_CUSTOMENTITY_FILE, root); } else if (type == "allvalues") { - root.clear(); // don't need the "type" key added to the output allvalues(root); + } else if (type == "systembackup") { + System::exportSystemBackup(root); } else { return false; // error } @@ -344,7 +416,7 @@ bool WebStatusService::getCustomSupport(JsonObject root) { #if defined(EMSESP_STANDALONE) // dummy test data for "test api3" - deserializeJson(doc, "{\"type\":\"customSupport\",\"Support\":{\"html\":[\"html code\",\"here\"], \"img_url\": \"https://emsesp.org/_media/images/designer.png\"}"); + deserializeJson(doc, "{\"type\":\"customSupport\",\"Support\":{\"html\":[\"html code\",\"here\"], \"img_url\": \"https://emsesp.org/media/images/designer.png\"}"); #else // check if we have custom support file uploaded File file = LittleFS.open(EMSESP_CUSTOMSUPPORT_FILE, "r"); @@ -367,7 +439,7 @@ bool WebStatusService::getCustomSupport(JsonObject root) { #endif #if defined(EMSESP_DEBUG) - EMSESP::logger().debug("Showing custom support page"); + EMSESP::logger().debug("Sending custom support page"); #endif root.set(doc.as()); // add to web response root object diff --git a/src/web/WebStatusService.h b/src/web/WebStatusService.h index 0d38a5b73..6d3f59f1a 100644 --- a/src/web/WebStatusService.h +++ b/src/web/WebStatusService.h @@ -4,7 +4,7 @@ #define EMSESP_SYSTEM_STATUS_SERVICE_PATH "/rest/systemStatus" #define EMSESP_ACTION_SERVICE_PATH "/rest/action" -#include // for version checking +#include "../core/EMSESP_Version.h" #include "../emsesp_version.h" namespace emsesp { @@ -30,12 +30,13 @@ class WebStatusService { SecurityManager * _securityManager; // actions - bool checkUpgrade(JsonObject root, std::string & latest_version); - bool exportData(JsonObject root, std::string & type); - bool getCustomSupport(JsonObject root); - bool uploadURL(const char * url); - bool setSystemStatus(const char * status); - void allvalues(JsonObject output); + bool checkUpgrade(JsonObject root, std::string & latest_version); + bool exportData(JsonObject root, std::string & type); + bool getCustomSupport(JsonObject root); + bool uploadURL(const char * url); + bool setSystemStatus(const char * status); + void allvalues(JsonObject output); + uint8_t upgradeImportantMessages(std::string & version); std::string current_version_s = EMSESP_APP_VERSION; }; diff --git a/test/test_api/test_api.cpp b/test/test_api/test_api.cpp index f32116ad3..880d27dca 100644 --- a/test/test_api/test_api.cpp +++ b/test/test_api/test_api.cpp @@ -132,7 +132,7 @@ void uart_telegram(const char * rx_data) { // add an EMS device and register it void add_device(uint8_t device_id, uint8_t product_id) { - uart_telegram({device_id, 0x0B, EMSdevice::EMS_TYPE_VERSION, 0, product_id, 1, 0}); + uart_telegram({device_id, 0x49, EMSdevice::EMS_TYPE_VERSION, 0, product_id, 1, 0}); } // add our EMS test devices @@ -143,14 +143,14 @@ void add_devices() { add_device(0x08, 123); // Nefit Trendline // UBAuptime - uart_telegram({0x08, 0x0B, 0x14, 00, 0x3C, 0x1F, 0xAC, 0x70}); + uart_telegram({0x08, 0x49, 0x14, 00, 0x3C, 0x1F, 0xAC, 0x70}); // Boiler -> Me, UBAMonitorFast(0x18), telegram: 08 00 18 00 00 02 5A 73 3D 0A 10 65 40 02 1A 80 00 01 E1 01 76 0E 3D 48 00 C9 44 02 00 (#data=25) uart_telegram({0x08, 0x00, 0x18, 0x00, 0x00, 0x02, 0x5A, 0x73, 0x3D, 0x0A, 0x10, 0x65, 0x40, 0x02, 0x1A, 0x80, 0x00, 0x01, 0xE1, 0x01, 0x76, 0x0E, 0x3D, 0x48, 0x00, 0xC9, 0x44, 0x02, 0x00}); - // Boiler -> Me, UBAParameterWW(0x33), telegram: 08 0B 33 00 08 FF 34 FB 00 28 00 00 46 00 FF FF 00 (#data=13) - uart_telegram({0x08, 0x0B, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); + // Boiler -> Me, UBAParameterWW(0x33), telegram: 08 49 33 00 08 FF 34 FB 00 28 00 00 46 00 FF FF 00 (#data=13) + uart_telegram({0x08, 0x49, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); // // thermostat diff --git a/test/test_api/test_api.h b/test/test_api/test_api.h index 8848506ae..b4cf2681c 100644 --- a/test/test_api/test_api.h +++ b/test/test_api/test_api.h @@ -17,10 +17,9 @@ void test_2() { "[{\"info\":\"list all values (verbose)\",\"values\":\"list all values\",\"commands\":\"list all commands\",\"entities\":\"list all " "entities\",\"boil2hystoff\":\"hysteresis stage 2 off temperature\",\"boil2hyston\":\"hysteresis stage 2 on temperature\",\"boilhystoff\":\"hysteresis " "off temperature\",\"boilhyston\":\"hysteresis on temperature\",\"burnmaxpower\":\"burner max power\",\"burnminperiod\":\"burner min " - "period\",\"burnminpower\":\"burner min power\",\"chimneysweeper\":\"chimney sweeper\",\"coldshot\":\"send a cold shot of " - "water\",\"curvebase\":\"heatingcurve base\",\"curveend\":\"heatingcurve end\",\"curveon\":\"heatingcurve " - "on\",\"dhw[n].activated\":\"activated\",\"dhw[n].chargeoptimization\":\"charge optimization\",\"dhw[n].circ\":\"circulation " - "active\",\"dhw[n].circmode\":\"circulation pump mode\",\"dhw[n].circpump\":\"circulation pump " + "period\",\"chimneysweeper\":\"chimney sweeper\",\"coldshot\":\"send a cold shot of water\",\"curvebase\":\"heatingcurve " + "base\",\"curveend\":\"heatingcurve end\",\"curveon\":\"heatingcurve on\",\"dhw[n].activated\":\"activated\",\"dhw[n].chargeoptimization\":\"charge " + "optimization\",\"dhw[n].circ\":\"circulation active\",\"dhw[n].circmode\":\"circulation pump mode\",\"dhw[n].circpump\":\"circulation pump " "available\",\"dhw[n].comfort\":\"comfort\",\"dhw[n].comfort1\":\"comfort mode\",\"dhw[n].dhwprio\":\"dhw " "priority\",\"dhw[n].disinfecting\":\"disinfecting\",\"dhw[n].disinfectiontemp\":\"disinfection temperature\",\"dhw[n].flowtempoffset\":\"flow " "temperature offset\",\"dhw[n].hystoff\":\"hysteresis off temperature\",\"dhw[n].hyston\":\"hysteresis on temperature\",\"dhw[n].maxpower\":\"max " @@ -31,9 +30,10 @@ void test_2() { "off\",\"heatingtemp\":\"heating temperature\",\"maintenance\":\"maintenance scheduled\",\"maintenancedate\":\"next maintenance " "date\",\"maintenancetime\":\"time to next maintenance\",\"nofrostmode\":\"nofrost mode\",\"nofrosttemp\":\"nofrost " "temperature\",\"nompower\":\"nominal Power\",\"nrgheat\":\"energy heating\",\"pumpcharacter\":\"boiler pump characteristic\",\"pumpdelay\":\"pump " - "delay\",\"pumpmode\":\"boiler pump mode\",\"pumpmodmax\":\"boiler pump max power\",\"pumpmodmin\":\"boiler pump min power\",\"pumpontemp\":\"pump " - "logic temperature\",\"reset\":\"reset\",\"selburnpow\":\"burner selected max power\",\"selflowtemp\":\"selected flow " - "temperature\",\"summertemp\":\"summer temperature\"}]"; + "delay\",\"pumpkickday\":\"pump kick day\",\"pumpkickdelay\":\"pump kick delay\",\"pumpkickhour\":\"pump kick hour\",\"pumpmode\":\"boiler pump " + "mode\",\"pumpmodmax\":\"boiler pump max power\",\"pumpmodmin\":\"boiler pump min power\",\"pumpontemp\":\"pump logic " + "temperature\",\"reset\":\"reset\",\"selburnpow\":\"burner selected max power\",\"selflowtemp\":\"selected flow temperature\",\"summertemp\":\"summer " + "temperature\"}]"; TEST_ASSERT_EQUAL_STRING(expected_response, call_url("/api/boiler/commands")); } @@ -148,14 +148,14 @@ void test_12() { } void test_13() { - auto expected_response = "[{\"hc1\":{\"seltemp\":20.5,\"currtemp\":22.8,\"haclimate\":\"roomTemp\",\"modetype\":\"heat\",\"remotetemp\":null},\"hc2\":{" - "\"seltemp\":20.6,\"currtemp\":22.9,\"haclimate\":\"roomTemp\",\"modetype\":\"eco\",\"remotetemp\":null},\"hc3\":{\"seltemp\":20." - "7,\"currtemp\":23,\"haclimate\":\"roomTemp\",\"modetype\":\"nofrost\",\"remotetemp\":null},\"dhw\":{}}]"; + auto expected_response = + "[{\"hc1\":{\"seltemp\":20.5,\"currtemp\":22.8,\"modetype\":\"heat\",\"remotetemp\":null},\"hc2\":{\"seltemp\":20.6,\"currtemp\":22.9,\"modetype\":" + "\"eco\",\"remotetemp\":null},\"hc3\":{\"seltemp\":20.7,\"currtemp\":23,\"modetype\":\"nofrost\",\"remotetemp\":null},\"dhw\":{}}]"; TEST_ASSERT_EQUAL_STRING(expected_response, call_url("/api/thermostat")); } void test_14() { - auto expected_response = "[{\"seltemp\":20.5,\"currtemp\":22.8,\"haclimate\":\"roomTemp\",\"modetype\":\"heat\",\"remotetemp\":null}]"; + auto expected_response = "[{\"seltemp\":20.5,\"currtemp\":22.8,\"modetype\":\"heat\",\"remotetemp\":null}]"; TEST_ASSERT_EQUAL_STRING(expected_response, call_url("/api/thermostat/hc1/values")); } @@ -163,12 +163,10 @@ void test_15() { auto expected_response = "[{\"api_data\":\"# HELP emsesp_seltemp selected room temperature, °C, readable, writeable, visible\\n# TYPE emsesp_seltemp " "gauge\\nemsesp_seltemp{circuit=\\\"hc1\\\"} 20.50\\n# HELP emsesp_currtemp current room temperature, °C, readable, visible\\n# TYPE emsesp_currtemp " - "gauge\\nemsesp_currtemp{circuit=\\\"hc1\\\"} 22.80\\n# HELP emsesp_haclimate mqtt discovery current room temperature, enum, (0: selTemp; 1: " - "roomTemp), readable, visible\\n# TYPE emsesp_haclimate gauge\\nemsesp_haclimate{circuit=\\\"hc1\\\"} 1\\n# HELP emsesp_modetype mode type, enum, (0: " - "nofrost; 1: eco; 2: heat), readable, visible\\n# TYPE emsesp_modetype gauge\\nemsesp_modetype{circuit=\\\"hc1\\\"} " - "2\\nemsesp_seltemp{circuit=\\\"hc2\\\"} 20.60\\nemsesp_currtemp{circuit=\\\"hc2\\\"} 22.90\\nemsesp_haclimate{circuit=\\\"hc2\\\"} " - "1\\nemsesp_modetype{circuit=\\\"hc2\\\"} 1\\nemsesp_seltemp{circuit=\\\"hc3\\\"} 20.70\\nemsesp_currtemp{circuit=\\\"hc3\\\"} " - "23\\nemsesp_haclimate{circuit=\\\"hc3\\\"} 1\\nemsesp_modetype{circuit=\\\"hc3\\\"} 0\\n\"}]"; + "gauge\\nemsesp_currtemp{circuit=\\\"hc1\\\"} 22.80\\n# HELP emsesp_modetype mode type, enum, (0: nofrost; 1: eco; 2: heat), readable, visible\\n# " + "TYPE emsesp_modetype gauge\\nemsesp_modetype{circuit=\\\"hc1\\\"} 2\\nemsesp_seltemp{circuit=\\\"hc2\\\"} " + "20.60\\nemsesp_currtemp{circuit=\\\"hc2\\\"} 22.90\\nemsesp_modetype{circuit=\\\"hc2\\\"} 1\\nemsesp_seltemp{circuit=\\\"hc3\\\"} " + "20.70\\nemsesp_currtemp{circuit=\\\"hc3\\\"} 23\\nemsesp_modetype{circuit=\\\"hc3\\\"} 0\\n\"}]"; TEST_ASSERT_EQUAL_STRING(expected_response, call_url("/api/thermostat/metrics")); } @@ -217,27 +215,28 @@ void test_22() { void test_23() { auto expected_response = "[{\"system\":{\"version\":\"dev\",\"uptime\":\"000+00:00:00.000\",\"uptimeSec\":0,\"resetReason\":\"Unknown / " - "Unknown\",\"txpause\":false,\"gpios_in_use\":\"23, 5, 2, 18, 0\",\"gpios_available\":\"\"}," - "\"network\":{\"network\":\"WiFi\",\"hostname\":\"ems-esp\",\"RSSI\":-23,\"TxPowerSetting\":0,\"staticIP\":false,\"lowBandwidth\":false," - "\"disableSleep\":true,\"enableMDNS\":true,\"enableCORS\":false},\"ntp\":{\"NTPstatus\":\"disconnected\",\"enabled\":true,\"server\":\"pool.ntp.org\"," - "\"tzLabel\":\"Europe/" + "Unknown\",\"txpause\":false,\"gpios_allowed\":\"0, 2, 5, 18, 23\",\"gpios_in_use\":\"0, 2, 5, 18, " + "23\",\"gpios_available\":\"\"},\"network\":{\"network\":\"WiFi\",\"hostname\":\"ems-esp\",\"RSSI\":-23,\"TxPowerSetting\":0,\"staticIP\":false," + "\"lowBandwidth\":false,\"disableSleep\":true,\"enableMDNS\":true,\"enableCORS\":false},\"ntp\":{\"NTPstatus\":\"disconnected\",\"enabled\":true," + "\"server\":\"pool.ntp.org\",\"tzLabel\":\"Europe/" "London\",\"NTPStatus\":\"disconnected\"},\"ap\":{\"provisionMode\":\"always\",\"ssid\":\"ems-esp\"},\"mqtt\":{\"MQTTStatus\":\"disconnected\"," "\"MQTTPublishes\":0,\"MQTTQueued\":0,\"MQTTPublishFails\":0,\"MQTTReconnects\":0,\"enabled\":true,\"clientID\":\"ems-esp\",\"keepAlive\":60," "\"cleanSession\":false,\"entityFormat\":1,\"base\":\"ems-esp\",\"discoveryPrefix\":\"homeassistant\",\"discoveryType\":0,\"nestedFormat\":1," "\"haEnabled\":true,\"mqttQos\":0,\"mqttRetain\":false,\"publishTimeHeartbeat\":60,\"publishTimeBoiler\":10,\"publishTimeThermostat\":10," "\"publishTimeSolar\":10,\"publishTimeMixer\":10,\"publishTimeWater\":0,\"publishTimeOther\":10,\"publishTimeSensor\":10,\"publishSingle\":false," - "\"publish2command\":false,\"sendResponse\":false},\"syslog\":{\"enabled\":false},\"sensor\":{\"temperatureSensors\":3,\"temperatureSensorReads\":0," - "\"temperatureSensorFails\":0,\"analogSensors\":5,\"analogSensorReads\":0,\"analogSensorFails\":0},\"api\":{\"APICalls\":0,\"APIFails\":0},\"bus\":{" - "\"busStatus\":\"connected\",\"busProtocol\":\"Buderus\",\"busTelegramsReceived\":8,\"busReads\":0,\"busWrites\":0,\"busIncompleteTelegrams\":0," - "\"busReadsFailed\":0,\"busWritesFailed\":0,\"busRxLineQuality\":100,\"busTxLineQuality\":100},\"settings\":{\"boardProfile\":\"S32\",\"locale\":" - "\"en\",\"txMode\":1,\"emsBusID\":11,\"showerTimer\":false,\"showerMinDuration\":180,\"showerAlert\":false,\"hideLed\":false,\"noTokenApi\":false," - "\"readonlyMode\":false,\"fahrenheit\":false,\"dallasParasite\":false,\"boolFormat\":1,\"boolDashboard\":1,\"enumFormat\":1,\"analogEnabled\":true," - "\"telnetEnabled\":true,\"maxWebLogBuffer\":25,\"modbusEnabled\":false,\"forceHeatingOff\":false,\"developerMode\":false},\"devices\":[{\"type\":" - "\"boiler\",\"name\":\"My Custom " + "\"publish2command\":false,\"sendResponse\":false},\"syslog\":{\"enabled\":false},\"modbus\":{\"enabled\":false},\"sensor\":{\"temperatureSensors\":3," + "\"temperatureSensorReads\":0,\"temperatureSensorFails\":0},\"analog\":{\"enabled\":true,\"analogSensors\":5,\"analogSensorReads\":0," + "\"analogSensorFails\":0},\"api\":{\"APICalls\":0,\"APIFails\":0},\"bus\":{\"busStatus\":\"connected\",\"busProtocol\":\"Buderus\"," + "\"busTelegramsReceived\":8,\"busReads\":0,\"busWrites\":0,\"busIncompleteTelegrams\":0,\"busReadsFailed\":0,\"busWritesFailed\":0," + "\"busRxLineQuality\":100,\"busTxLineQuality\":100},\"settings\":{\"boardProfile\":\"S32\",\"locale\":\"en\",\"txMode\":5,\"emsBusID\":73," + "\"showerTimer\":false,\"showerMinDuration\":180,\"showerAlert\":false,\"hideLed\":false,\"noTokenApi\":false,\"readonlyMode\":false,\"fahrenheit\":" + "false,\"dallasParasite\":false,\"boolFormat\":1,\"boolDashboard\":1,\"enumFormat\":1,\"analogEnabled\":true,\"telnetEnabled\":true," + "\"maxWebLogBuffer\":25,\"modbusEnabled\":false,\"forceHeatingOff\":false,\"developerMode\":false},\"devices\":[{\"type\":\"boiler\",\"name\":\"My " + "Custom " "Boiler\",\"deviceID\":\"0x08\",\"productID\":123,\"brand\":\"\",\"version\":\"01.00\",\"entities\":39,\"handlersReceived\":\"0x18\"," "\"handlersFetched\":\"0x14 0x33\",\"handlersPending\":\"0xBF 0x10 0x11 0xC2 0xC6 0x15 0x1C 0x19 0x1A 0x35 0x34 0x2A 0xD1 0xE3 0xE4 0xE5 0xE9 0x02E0 " "0x2E " - "0x3B\"},{\"type\":\"thermostat\",\"name\":\"FW120\",\"deviceID\":\"0x10\",\"productID\":192,\"brand\":\"\",\"version\":\"01.00\",\"entities\":15," + "0x3B\"},{\"type\":\"thermostat\",\"name\":\"FW120\",\"deviceID\":\"0x10\",\"productID\":192,\"brand\":\"\",\"version\":\"01.00\",\"entities\":12," "\"handlersReceived\":\"0x016F\",\"handlersFetched\":\"0x0170 0x0171\",\"handlersPending\":\"0xA3 0x06 0xA2 0x12 0x13 0x0172 0x0165 " "0x0168\"},{\"type\":\"temperaturesensor\",\"name\":\"temperaturesensor\",\"entities\":3},{\"type\":\"analogsensor\",\"name\":\"analogsensor\"," "\"entities\":5},{\"type\":\"scheduler\",\"name\":\"scheduler\",\"entities\":2},{\"type\":\"custom\",\"name\":\"custom\",\"entities\":4}]}]"; @@ -247,27 +246,28 @@ void test_23() { void test_24() { auto expected_response = "[{\"system\":{\"version\":\"dev\",\"uptime\":\"000+00:00:00.000\",\"uptimeSec\":0,\"resetReason\":\"Unknown / " - "Unknown\",\"txpause\":false,\"gpios_in_use\":\"23, 5, 2, 18, 0\",\"gpios_available\":\"\"}," - "\"network\":{\"network\":\"WiFi\",\"hostname\":\"ems-esp\",\"RSSI\":-23,\"TxPowerSetting\":0,\"staticIP\":false,\"lowBandwidth\":false," - "\"disableSleep\":true,\"enableMDNS\":true,\"enableCORS\":false},\"ntp\":{\"NTPstatus\":\"disconnected\",\"enabled\":true,\"server\":\"pool.ntp.org\"," - "\"tzLabel\":\"Europe/" + "Unknown\",\"txpause\":false,\"gpios_allowed\":\"0, 2, 5, 18, 23\",\"gpios_in_use\":\"0, 2, 5, 18, " + "23\",\"gpios_available\":\"\"},\"network\":{\"network\":\"WiFi\",\"hostname\":\"ems-esp\",\"RSSI\":-23,\"TxPowerSetting\":0,\"staticIP\":false," + "\"lowBandwidth\":false,\"disableSleep\":true,\"enableMDNS\":true,\"enableCORS\":false},\"ntp\":{\"NTPstatus\":\"disconnected\",\"enabled\":true," + "\"server\":\"pool.ntp.org\",\"tzLabel\":\"Europe/" "London\",\"NTPStatus\":\"disconnected\"},\"ap\":{\"provisionMode\":\"always\",\"ssid\":\"ems-esp\"},\"mqtt\":{\"MQTTStatus\":\"disconnected\"," "\"MQTTPublishes\":0,\"MQTTQueued\":0,\"MQTTPublishFails\":0,\"MQTTReconnects\":0,\"enabled\":true,\"clientID\":\"ems-esp\",\"keepAlive\":60," "\"cleanSession\":false,\"entityFormat\":1,\"base\":\"ems-esp\",\"discoveryPrefix\":\"homeassistant\",\"discoveryType\":0,\"nestedFormat\":1," "\"haEnabled\":true,\"mqttQos\":0,\"mqttRetain\":false,\"publishTimeHeartbeat\":60,\"publishTimeBoiler\":10,\"publishTimeThermostat\":10," "\"publishTimeSolar\":10,\"publishTimeMixer\":10,\"publishTimeWater\":0,\"publishTimeOther\":10,\"publishTimeSensor\":10,\"publishSingle\":false," - "\"publish2command\":false,\"sendResponse\":false},\"syslog\":{\"enabled\":false},\"sensor\":{\"temperatureSensors\":3,\"temperatureSensorReads\":0," - "\"temperatureSensorFails\":0,\"analogSensors\":5,\"analogSensorReads\":0,\"analogSensorFails\":0},\"api\":{\"APICalls\":0,\"APIFails\":0},\"bus\":{" - "\"busStatus\":\"connected\",\"busProtocol\":\"Buderus\",\"busTelegramsReceived\":8,\"busReads\":0,\"busWrites\":0,\"busIncompleteTelegrams\":0," - "\"busReadsFailed\":0,\"busWritesFailed\":0,\"busRxLineQuality\":100,\"busTxLineQuality\":100},\"settings\":{\"boardProfile\":\"S32\",\"locale\":" - "\"en\",\"txMode\":1,\"emsBusID\":11,\"showerTimer\":false,\"showerMinDuration\":180,\"showerAlert\":false,\"hideLed\":false,\"noTokenApi\":false," - "\"readonlyMode\":false,\"fahrenheit\":false,\"dallasParasite\":false,\"boolFormat\":1,\"boolDashboard\":1,\"enumFormat\":1,\"analogEnabled\":true," - "\"telnetEnabled\":true,\"maxWebLogBuffer\":25,\"modbusEnabled\":false,\"forceHeatingOff\":false,\"developerMode\":false},\"devices\":[{\"type\":" - "\"boiler\",\"name\":\"My Custom " + "\"publish2command\":false,\"sendResponse\":false},\"syslog\":{\"enabled\":false},\"modbus\":{\"enabled\":false},\"sensor\":{\"temperatureSensors\":3," + "\"temperatureSensorReads\":0,\"temperatureSensorFails\":0},\"analog\":{\"enabled\":true,\"analogSensors\":5,\"analogSensorReads\":0," + "\"analogSensorFails\":0},\"api\":{\"APICalls\":0,\"APIFails\":0},\"bus\":{\"busStatus\":\"connected\",\"busProtocol\":\"Buderus\"," + "\"busTelegramsReceived\":8,\"busReads\":0,\"busWrites\":0,\"busIncompleteTelegrams\":0,\"busReadsFailed\":0,\"busWritesFailed\":0," + "\"busRxLineQuality\":100,\"busTxLineQuality\":100},\"settings\":{\"boardProfile\":\"S32\",\"locale\":\"en\",\"txMode\":5,\"emsBusID\":73," + "\"showerTimer\":false,\"showerMinDuration\":180,\"showerAlert\":false,\"hideLed\":false,\"noTokenApi\":false,\"readonlyMode\":false,\"fahrenheit\":" + "false,\"dallasParasite\":false,\"boolFormat\":1,\"boolDashboard\":1,\"enumFormat\":1,\"analogEnabled\":true,\"telnetEnabled\":true," + "\"maxWebLogBuffer\":25,\"modbusEnabled\":false,\"forceHeatingOff\":false,\"developerMode\":false},\"devices\":[{\"type\":\"boiler\",\"name\":\"My " + "Custom " "Boiler\",\"deviceID\":\"0x08\",\"productID\":123,\"brand\":\"\",\"version\":\"01.00\",\"entities\":39,\"handlersReceived\":\"0x18\"," "\"handlersFetched\":\"0x14 0x33\",\"handlersPending\":\"0xBF 0x10 0x11 0xC2 0xC6 0x15 0x1C 0x19 0x1A 0x35 0x34 0x2A 0xD1 0xE3 0xE4 0xE5 0xE9 0x02E0 " "0x2E " - "0x3B\"},{\"type\":\"thermostat\",\"name\":\"FW120\",\"deviceID\":\"0x10\",\"productID\":192,\"brand\":\"\",\"version\":\"01.00\",\"entities\":15," + "0x3B\"},{\"type\":\"thermostat\",\"name\":\"FW120\",\"deviceID\":\"0x10\",\"productID\":192,\"brand\":\"\",\"version\":\"01.00\",\"entities\":12," "\"handlersReceived\":\"0x016F\",\"handlersFetched\":\"0x0170 0x0171\",\"handlersPending\":\"0xA3 0x06 0xA2 0x12 0x13 0x0172 0x0165 " "0x0168\"},{\"type\":\"temperaturesensor\",\"name\":\"temperaturesensor\",\"entities\":3},{\"type\":\"analogsensor\",\"name\":\"analogsensor\"," "\"entities\":5},{\"type\":\"scheduler\",\"name\":\"scheduler\",\"entities\":2},{\"type\":\"custom\",\"name\":\"custom\",\"entities\":4}]}]"; @@ -278,12 +278,12 @@ void test_25() { auto expected_response = "[{\"api_data\":\"# HELP emsesp_system_uptimesec uptimeSec\\n# TYPE emsesp_system_uptimesec gauge\\nemsesp_system_uptimesec 0\\n# HELP " "emsesp_system_txpause txpause\\n# TYPE emsesp_system_txpause gauge\\nemsesp_system_txpause 0\\n# HELP emsesp_system_info info\\n# TYPE " - "emsesp_system_info gauge\\nemsesp_system_info{version=\\\"dev\\\", resetreason=\\\"Unknown / Unknown\\\", gpios_in_use=\\\"23, 5, 2, 18, 0" - "\\\"} 1\\n# HELP emsesp_network_rssi RSSI\\n# TYPE emsesp_network_rssi gauge\\nemsesp_network_rssi -23\\n# HELP emsesp_network_txpowersetting " - "TxPowerSetting\\n# TYPE emsesp_network_txpowersetting gauge\\nemsesp_network_txpowersetting 0\\n# HELP emsesp_network_staticip staticIP\\n# TYPE " - "emsesp_network_staticip gauge\\nemsesp_network_staticip 0\\n# HELP emsesp_network_lowbandwidth lowBandwidth\\n# TYPE emsesp_network_lowbandwidth " - "gauge\\nemsesp_network_lowbandwidth 0\\n# HELP emsesp_network_disablesleep disableSleep\\n# TYPE emsesp_network_disablesleep " - "gauge\\nemsesp_network_disablesleep 1\\n# HELP emsesp_network_enablemdns enableMDNS\\n# TYPE emsesp_network_enablemdns " + "emsesp_system_info gauge\\nemsesp_system_info{version=\\\"dev\\\", resetreason=\\\"Unknown / Unknown\\\", gpios_allowed=\\\"0, 2, 5, 18, 23\\\", " + "gpios_in_use=\\\"0, 2, 5, 18, 23\\\"} 1\\n# HELP emsesp_network_rssi RSSI\\n# TYPE emsesp_network_rssi gauge\\nemsesp_network_rssi -23\\n# HELP " + "emsesp_network_txpowersetting TxPowerSetting\\n# TYPE emsesp_network_txpowersetting gauge\\nemsesp_network_txpowersetting 0\\n# HELP " + "emsesp_network_staticip staticIP\\n# TYPE emsesp_network_staticip gauge\\nemsesp_network_staticip 0\\n# HELP emsesp_network_lowbandwidth " + "lowBandwidth\\n# TYPE emsesp_network_lowbandwidth gauge\\nemsesp_network_lowbandwidth 0\\n# HELP emsesp_network_disablesleep disableSleep\\n# TYPE " + "emsesp_network_disablesleep gauge\\nemsesp_network_disablesleep 1\\n# HELP emsesp_network_enablemdns enableMDNS\\n# TYPE emsesp_network_enablemdns " "gauge\\nemsesp_network_enablemdns 1\\n# HELP emsesp_network_enablecors enableCORS\\n# TYPE emsesp_network_enablecors " "gauge\\nemsesp_network_enablecors 0\\n# HELP emsesp_network_info info\\n# TYPE emsesp_network_info gauge\\nemsesp_network_info{network=\\\"WiFi\\\", " "hostname=\\\"ems-esp\\\"} 1\\n# HELP emsesp_ntp_enabled enabled\\n# TYPE emsesp_ntp_enabled gauge\\nemsesp_ntp_enabled 1\\n# HELP emsesp_ntp_info " @@ -312,48 +312,50 @@ void test_25() { "emsesp_mqtt_publish2command gauge\\nemsesp_mqtt_publish2command 0\\n# HELP emsesp_mqtt_sendresponse sendResponse\\n# TYPE emsesp_mqtt_sendresponse " "gauge\\nemsesp_mqtt_sendresponse 0\\n# HELP emsesp_mqtt_info info\\n# TYPE emsesp_mqtt_info gauge\\nemsesp_mqtt_info{mqttstatus=\\\"disconnected\\\", " "clientid=\\\"ems-esp\\\", base=\\\"ems-esp\\\", discoveryprefix=\\\"homeassistant\\\"} 1\\n# HELP emsesp_syslog_enabled enabled\\n# TYPE " - "emsesp_syslog_enabled gauge\\nemsesp_syslog_enabled 0\\n# HELP emsesp_sensor_temperaturesensors temperatureSensors\\n# TYPE " - "emsesp_sensor_temperaturesensors gauge\\nemsesp_sensor_temperaturesensors 3\\n# HELP emsesp_sensor_temperaturesensorreads temperatureSensorReads\\n# " - "TYPE emsesp_sensor_temperaturesensorreads gauge\\nemsesp_sensor_temperaturesensorreads 0\\n# HELP emsesp_sensor_temperaturesensorfails " - "temperatureSensorFails\\n# TYPE emsesp_sensor_temperaturesensorfails gauge\\nemsesp_sensor_temperaturesensorfails 0\\n# HELP " - "emsesp_sensor_analogsensors analogSensors\\n# TYPE emsesp_sensor_analogsensors gauge\\nemsesp_sensor_analogsensors 5\\n# HELP " - "emsesp_sensor_analogsensorreads analogSensorReads\\n# TYPE emsesp_sensor_analogsensorreads gauge\\nemsesp_sensor_analogsensorreads 0\\n# HELP " - "emsesp_sensor_analogsensorfails analogSensorFails\\n# TYPE emsesp_sensor_analogsensorfails gauge\\nemsesp_sensor_analogsensorfails 0\\n# HELP " - "emsesp_api_apicalls APICalls\\n# TYPE emsesp_api_apicalls gauge\\nemsesp_api_apicalls 0\\n# HELP emsesp_api_apifails APIFails\\n# TYPE " - "emsesp_api_apifails gauge\\nemsesp_api_apifails 0\\n# HELP emsesp_bus_bustelegramsreceived busTelegramsReceived\\n# TYPE " - "emsesp_bus_bustelegramsreceived gauge\\nemsesp_bus_bustelegramsreceived 8\\n# HELP emsesp_bus_busreads busReads\\n# TYPE emsesp_bus_busreads " - "gauge\\nemsesp_bus_busreads 0\\n# HELP emsesp_bus_buswrites busWrites\\n# TYPE emsesp_bus_buswrites gauge\\nemsesp_bus_buswrites 0\\n# HELP " - "emsesp_bus_busincompletetelegrams busIncompleteTelegrams\\n# TYPE emsesp_bus_busincompletetelegrams gauge\\nemsesp_bus_busincompletetelegrams 0\\n# " - "HELP emsesp_bus_busreadsfailed busReadsFailed\\n# TYPE emsesp_bus_busreadsfailed gauge\\nemsesp_bus_busreadsfailed 0\\n# HELP " - "emsesp_bus_buswritesfailed busWritesFailed\\n# TYPE emsesp_bus_buswritesfailed gauge\\nemsesp_bus_buswritesfailed 0\\n# HELP " - "emsesp_bus_busrxlinequality busRxLineQuality\\n# TYPE emsesp_bus_busrxlinequality gauge\\nemsesp_bus_busrxlinequality 100\\n# HELP " - "emsesp_bus_bustxlinequality busTxLineQuality\\n# TYPE emsesp_bus_bustxlinequality gauge\\nemsesp_bus_bustxlinequality 100\\n# HELP emsesp_bus_info " - "info\\n# TYPE emsesp_bus_info gauge\\nemsesp_bus_info{busstatus=\\\"connected\\\", busprotocol=\\\"Buderus\\\"} 1\\n# HELP emsesp_settings_txmode " - "txMode\\n# TYPE emsesp_settings_txmode gauge\\nemsesp_settings_txmode 1\\n# HELP emsesp_settings_emsbusid emsBusID\\n# TYPE emsesp_settings_emsbusid " - "gauge\\nemsesp_settings_emsbusid 11\\n# HELP emsesp_settings_showertimer showerTimer\\n# TYPE emsesp_settings_showertimer " - "gauge\\nemsesp_settings_showertimer 0\\n# HELP emsesp_settings_showerminduration showerMinDuration\\n# TYPE emsesp_settings_showerminduration " - "gauge\\nemsesp_settings_showerminduration 180\\n# HELP emsesp_settings_showeralert showerAlert\\n# TYPE emsesp_settings_showeralert " - "gauge\\nemsesp_settings_showeralert 0\\n# HELP emsesp_settings_hideled hideLed\\n# TYPE emsesp_settings_hideled gauge\\nemsesp_settings_hideled 0\\n# " - "HELP emsesp_settings_notokenapi noTokenApi\\n# TYPE emsesp_settings_notokenapi gauge\\nemsesp_settings_notokenapi 0\\n# HELP " - "emsesp_settings_readonlymode readonlyMode\\n# TYPE emsesp_settings_readonlymode gauge\\nemsesp_settings_readonlymode 0\\n# HELP " - "emsesp_settings_fahrenheit fahrenheit\\n# TYPE emsesp_settings_fahrenheit gauge\\nemsesp_settings_fahrenheit 0\\n# HELP " - "emsesp_settings_dallasparasite dallasParasite\\n# TYPE emsesp_settings_dallasparasite gauge\\nemsesp_settings_dallasparasite 0\\n# HELP " - "emsesp_settings_boolformat boolFormat\\n# TYPE emsesp_settings_boolformat gauge\\nemsesp_settings_boolformat 1\\n# HELP emsesp_settings_booldashboard " - "boolDashboard\\n# TYPE emsesp_settings_booldashboard gauge\\nemsesp_settings_booldashboard 1\\n# HELP emsesp_settings_enumformat enumFormat\\n# TYPE " - "emsesp_settings_enumformat gauge\\nemsesp_settings_enumformat 1\\n# HELP emsesp_settings_analogenabled analogEnabled\\n# TYPE " - "emsesp_settings_analogenabled gauge\\nemsesp_settings_analogenabled 1\\n# HELP emsesp_settings_telnetenabled telnetEnabled\\n# TYPE " - "emsesp_settings_telnetenabled gauge\\nemsesp_settings_telnetenabled 1\\n# HELP emsesp_settings_maxweblogbuffer maxWebLogBuffer\\n# TYPE " - "emsesp_settings_maxweblogbuffer gauge\\nemsesp_settings_maxweblogbuffer 25\\n# HELP emsesp_settings_modbusenabled modbusEnabled\\n# TYPE " - "emsesp_settings_modbusenabled gauge\\nemsesp_settings_modbusenabled 0\\n# HELP emsesp_settings_forceheatingoff forceHeatingOff\\n# TYPE " - "emsesp_settings_forceheatingoff gauge\\nemsesp_settings_forceheatingoff 0\\n# HELP emsesp_settings_developermode developerMode\\n# TYPE " - "emsesp_settings_developermode gauge\\nemsesp_settings_developermode 0\\n# HELP emsesp_settings_info info\\n# TYPE emsesp_settings_info " + "emsesp_syslog_enabled gauge\\nemsesp_syslog_enabled 0\\n# HELP emsesp_modbus_enabled enabled\\n# TYPE emsesp_modbus_enabled " + "gauge\\nemsesp_modbus_enabled 0\\n# HELP emsesp_sensor_temperaturesensors temperatureSensors\\n# TYPE emsesp_sensor_temperaturesensors " + "gauge\\nemsesp_sensor_temperaturesensors 3\\n# HELP emsesp_sensor_temperaturesensorreads temperatureSensorReads\\n# TYPE " + "emsesp_sensor_temperaturesensorreads gauge\\nemsesp_sensor_temperaturesensorreads 0\\n# HELP emsesp_sensor_temperaturesensorfails " + "temperatureSensorFails\\n# TYPE emsesp_sensor_temperaturesensorfails gauge\\nemsesp_sensor_temperaturesensorfails 0\\n# HELP emsesp_analog_enabled " + "enabled\\n# TYPE emsesp_analog_enabled gauge\\nemsesp_analog_enabled 1\\n# HELP emsesp_analog_analogsensors analogSensors\\n# TYPE " + "emsesp_analog_analogsensors gauge\\nemsesp_analog_analogsensors 5\\n# HELP emsesp_analog_analogsensorreads analogSensorReads\\n# TYPE " + "emsesp_analog_analogsensorreads gauge\\nemsesp_analog_analogsensorreads 0\\n# HELP emsesp_analog_analogsensorfails analogSensorFails\\n# TYPE " + "emsesp_analog_analogsensorfails gauge\\nemsesp_analog_analogsensorfails 0\\n# HELP emsesp_api_apicalls APICalls\\n# TYPE emsesp_api_apicalls " + "gauge\\nemsesp_api_apicalls 0\\n# HELP emsesp_api_apifails APIFails\\n# TYPE emsesp_api_apifails gauge\\nemsesp_api_apifails 0\\n# HELP " + "emsesp_bus_bustelegramsreceived busTelegramsReceived\\n# TYPE emsesp_bus_bustelegramsreceived gauge\\nemsesp_bus_bustelegramsreceived 8\\n# HELP " + "emsesp_bus_busreads busReads\\n# TYPE emsesp_bus_busreads gauge\\nemsesp_bus_busreads 0\\n# HELP emsesp_bus_buswrites busWrites\\n# TYPE " + "emsesp_bus_buswrites gauge\\nemsesp_bus_buswrites 0\\n# HELP emsesp_bus_busincompletetelegrams busIncompleteTelegrams\\n# TYPE " + "emsesp_bus_busincompletetelegrams gauge\\nemsesp_bus_busincompletetelegrams 0\\n# HELP emsesp_bus_busreadsfailed busReadsFailed\\n# TYPE " + "emsesp_bus_busreadsfailed gauge\\nemsesp_bus_busreadsfailed 0\\n# HELP emsesp_bus_buswritesfailed busWritesFailed\\n# TYPE emsesp_bus_buswritesfailed " + "gauge\\nemsesp_bus_buswritesfailed 0\\n# HELP emsesp_bus_busrxlinequality busRxLineQuality\\n# TYPE emsesp_bus_busrxlinequality " + "gauge\\nemsesp_bus_busrxlinequality 100\\n# HELP emsesp_bus_bustxlinequality busTxLineQuality\\n# TYPE emsesp_bus_bustxlinequality " + "gauge\\nemsesp_bus_bustxlinequality 100\\n# HELP emsesp_bus_info info\\n# TYPE emsesp_bus_info gauge\\nemsesp_bus_info{busstatus=\\\"connected\\\", " + "busprotocol=\\\"Buderus\\\"} 1\\n# HELP emsesp_settings_txmode txMode\\n# TYPE emsesp_settings_txmode gauge\\nemsesp_settings_txmode 5\\n# HELP " + "emsesp_settings_emsbusid emsBusID\\n# TYPE emsesp_settings_emsbusid gauge\\nemsesp_settings_emsbusid 73\\n# HELP emsesp_settings_showertimer " + "showerTimer\\n# TYPE emsesp_settings_showertimer gauge\\nemsesp_settings_showertimer 0\\n# HELP emsesp_settings_showerminduration " + "showerMinDuration\\n# TYPE emsesp_settings_showerminduration gauge\\nemsesp_settings_showerminduration 180\\n# HELP emsesp_settings_showeralert " + "showerAlert\\n# TYPE emsesp_settings_showeralert gauge\\nemsesp_settings_showeralert 0\\n# HELP emsesp_settings_hideled hideLed\\n# TYPE " + "emsesp_settings_hideled gauge\\nemsesp_settings_hideled 0\\n# HELP emsesp_settings_notokenapi noTokenApi\\n# TYPE emsesp_settings_notokenapi " + "gauge\\nemsesp_settings_notokenapi 0\\n# HELP emsesp_settings_readonlymode readonlyMode\\n# TYPE emsesp_settings_readonlymode " + "gauge\\nemsesp_settings_readonlymode 0\\n# HELP emsesp_settings_fahrenheit fahrenheit\\n# TYPE emsesp_settings_fahrenheit " + "gauge\\nemsesp_settings_fahrenheit 0\\n# HELP emsesp_settings_dallasparasite dallasParasite\\n# TYPE emsesp_settings_dallasparasite " + "gauge\\nemsesp_settings_dallasparasite 0\\n# HELP emsesp_settings_boolformat boolFormat\\n# TYPE emsesp_settings_boolformat " + "gauge\\nemsesp_settings_boolformat 1\\n# HELP emsesp_settings_booldashboard boolDashboard\\n# TYPE emsesp_settings_booldashboard " + "gauge\\nemsesp_settings_booldashboard 1\\n# HELP emsesp_settings_enumformat enumFormat\\n# TYPE emsesp_settings_enumformat " + "gauge\\nemsesp_settings_enumformat 1\\n# HELP emsesp_settings_analogenabled analogEnabled\\n# TYPE emsesp_settings_analogenabled " + "gauge\\nemsesp_settings_analogenabled 1\\n# HELP emsesp_settings_telnetenabled telnetEnabled\\n# TYPE emsesp_settings_telnetenabled " + "gauge\\nemsesp_settings_telnetenabled 1\\n# HELP emsesp_settings_maxweblogbuffer maxWebLogBuffer\\n# TYPE emsesp_settings_maxweblogbuffer " + "gauge\\nemsesp_settings_maxweblogbuffer 25\\n# HELP emsesp_settings_modbusenabled modbusEnabled\\n# TYPE emsesp_settings_modbusenabled " + "gauge\\nemsesp_settings_modbusenabled 0\\n# HELP emsesp_settings_forceheatingoff forceHeatingOff\\n# TYPE emsesp_settings_forceheatingoff " + "gauge\\nemsesp_settings_forceheatingoff 0\\n# HELP emsesp_settings_developermode developerMode\\n# TYPE emsesp_settings_developermode " + "gauge\\nemsesp_settings_developermode 0\\n# HELP emsesp_settings_info info\\n# TYPE emsesp_settings_info " "gauge\\nemsesp_settings_info{boardprofile=\\\"S32\\\", locale=\\\"en\\\"} 1\\n# HELP emsesp_device_productid productID\\n# TYPE " "emsesp_device_productid gauge\\nemsesp_device_productid{type=\\\"boiler\\\", name=\\\"My Custom Boiler\\\", deviceid=\\\"0x08\\\", " "version=\\\"01.00\\\"} 123\\n# HELP emsesp_device_entities entities\\n# TYPE emsesp_device_entities " "gauge\\nemsesp_device_entities{type=\\\"boiler\\\", name=\\\"My Custom Boiler\\\", deviceid=\\\"0x08\\\", version=\\\"01.00\\\"} " "39\\nemsesp_device_productid{type=\\\"thermostat\\\", name=\\\"FW120\\\", deviceid=\\\"0x10\\\", version=\\\"01.00\\\"} " "192\\nemsesp_device_entities{type=\\\"thermostat\\\", name=\\\"FW120\\\", deviceid=\\\"0x10\\\", version=\\\"01.00\\\"} " - "15\\nemsesp_device_entities{type=\\\"temperaturesensor\\\", name=\\\"temperaturesensor\\\"} 3\\nemsesp_device_entities{type=\\\"analogsensor\\\", " + "12\\nemsesp_device_entities{type=\\\"temperaturesensor\\\", name=\\\"temperaturesensor\\\"} 3\\nemsesp_device_entities{type=\\\"analogsensor\\\", " "name=\\\"analogsensor\\\"} 5\\nemsesp_device_entities{type=\\\"scheduler\\\", name=\\\"scheduler\\\"} 2\\nemsesp_device_entities{type=\\\"custom\\\", " "name=\\\"custom\\\"} 4\\n\"}]"; TEST_ASSERT_EQUAL_STRING(expected_response, call_url("/api/system/metrics")); diff --git a/test/test_data/custom_support.json b/test/test_data/custom_support.json index b528645a3..6d5b81502 100644 --- a/test/test_data/custom_support.json +++ b/test/test_data/custom_support.json @@ -13,6 +13,6 @@ "", "For help and questions please contact your installer." ], - "img_url": "https://emsesp.org/_media/images/designer.png" + "img_url": "https://emsesp.org/media/images/designer.png" } } \ No newline at end of file diff --git a/test/test_data/emsesp_allvalues.json b/test/test_data/emsesp_allvalues.json new file mode 100644 index 000000000..6a8297eb1 --- /dev/null +++ b/test/test_data/emsesp_allvalues.json @@ -0,0 +1,103 @@ +{ + "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 + } +} \ No newline at end of file diff --git a/test/test_data/emsesp_customizations.json b/test/test_data/emsesp_customizations.json new file mode 100644 index 000000000..99ba91cef --- /dev/null +++ b/test/test_data/emsesp_customizations.json @@ -0,0 +1,37 @@ +{ + "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" + ] + } + ] + } +} \ No newline at end of file diff --git a/test/test_data/emsesp_entities.json b/test/test_data/emsesp_entities.json new file mode 100644 index 000000000..804cc81d4 --- /dev/null +++ b/test/test_data/emsesp_entities.json @@ -0,0 +1,6 @@ +{ + "type": "entities", + "Entities": { + "entities": [] + } +} \ No newline at end of file diff --git a/test/test_data/emsesp_schedule.json b/test/test_data/emsesp_schedule.json new file mode 100644 index 000000000..8674b3959 --- /dev/null +++ b/test/test_data/emsesp_schedule.json @@ -0,0 +1,6 @@ +{ + "type": "schedule", + "Schedule": { + "schedule": [] + } +} \ No newline at end of file diff --git a/test/test_data/emsesp_settings.json b/test/test_data/emsesp_settings.json new file mode 100644 index 000000000..80b8f74d4 --- /dev/null +++ b/test/test_data/emsesp_settings.json @@ -0,0 +1,145 @@ +{ + "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, + "email_enabled": false, + "email_ssl": false, + "email_starttls": true, + "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" + } +} \ No newline at end of file diff --git a/test/test_data/emsesp_systembackup.json b/test/test_data/emsesp_systembackup.json new file mode 100644 index 000000000..3f7b0816c --- /dev/null +++ b/test/test_data/emsesp_systembackup.json @@ -0,0 +1,249 @@ +{ + "type": "systembackup", + "version": "3.8.2", + "date": "2026-04-15T08:06:45", + "systembackup": [ + { + "type": "settings", + "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.X.X", + "gateway_ip": "192.168.X.X", + "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": 75, + "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 + } + }, + { + "type": "schedule", + "Schedule": { + "schedule": [] + } + }, + { + "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" + ] + } + ] + } + }, + { + "type": "entities", + "Entities": { + "entities": [] + } + }, + { + "type": "modules", + "Modules": { + "modules": [] + } + }, + { + "type": "nvs", + "nvs": [ + { + "type": 1, + "key": "nompower", + "value": 30 + }, + { + "type": 33, + "key": "boot", + "value": "3.8.1-dev.4" + }, + { + "type": 4, + "key": "d_boot", + "value": 1767525325 + }, + { + "type": 33, + "key": "app1", + "value": "3.8.2-dev.13" + }, + { + "type": 33, + "key": "app0", + "value": "3.8.1" + }, + { + "type": 4, + "key": "d_app0", + "value": 1774988066 + }, + { + "type": 1, + "key": "fresh_firmware", + "value": 0 + }, + { + "type": 4, + "key": "d_app1", + "value": 1776194060 + }, + { + "type": 66, + "key": "nrgheat", + "value": 485871.5481 + }, + { + "type": 66, + "key": "nrgww", + "value": 101649.2176 + } + ] + } + ] +} \ No newline at end of file