![Askoma](http://www.askoma.com/uploads/1/1/9/4/11941291/1396686877.png "Askoma")
[ASKOMA AG](http://www.askoma.com/ "You are cordially invited to contact us.") | Industriestrasse 1 | CH-4922 Bützberg | Switzerland | Hotline +41 62 958 70 99 | support@askoma.com
##ASKOHEAT+ MODBUS
![askoheat](http://www.askoma.com/uploads/1/1/9/4/11941291/editor/askoheat.png?1584020864 "Screw-in heaters and flange heaters for heating industrial and heating water with photovoltaic")
(c) 2020 Askoma AG
**Screw-in heaters and flange heaters for heating industrial and heating water with photovoltaic**
*Einschraubheizkörper und Flanschheizkörper zur Erwärmung von Brauch- und Heizungswasser mit Photovoltaik*
##Functional Describtion and Modbus Register
Version 1.15 - 11.11.2021
###Table of Contents
[Firmware Releases (Roadmap)](#Firmware_Releases)
* [Overview of Functions](#Overview_of_Functions)
* [Status LEDs](#Status_LEDs)
[Five Steps for Successful Implementation](#Implementation)
* [Settings for Modbus RTU](#RTU)
[Modbus Registers](#MODBUS)
* [1. Short Data Block - Address 100...109 - read only](#Short_Data_Block)
* [2a. Command Block - Address 200...202 - read/write](#Commmand_Block)
* [2b. Commands - Adress 210...212 - write only](#Commands)
* [3. Energymanager Block - Address 300...336 - read/write for selected registers](#EM_Block)
* [4. Parameter Block - Address 400...449 - read only](#Parameter_Block)
* [5. Configuration Block - Address 500...545 - read/write](#Configuration_Block)
* [6. Data Values Block - Address 600...646 - read only](#Data_Values_Block)
* [7. Extended Values Block - Address 700...758 - read only](#Extended_Values_Block)
##**Firmware Releases (Roadmap)**
| **Version** | **Date** | **Summary** |
| --- | --- | --- |
| 2.0.1 | until 07/2019 | Prerelease (prototype) |
| 2.0.2 | 08/2019 | Prerelease (prototype with some corrections) |
| 2.2.1 | 06.09.2019 | First official customer release on Olimex hardware with new modbus-registers |
| 2.2.2 | 18.09.2019 | Emergency Mode changed from switch to button and Extended Block added with STATUS |
| 2.3.1 | 28.10.2019 | Power to heat regulation by setpoint preset value |
| 3.0.1 | 05.11.2019 | First customer release on new ASKOHEAT+ hardware (within 0-10V, modbus TCP, legionella protection) |
| 3.0.2 | 01.12.2019 | Heater load value only if current flow is detected |
| 3.1.1 | 02.04.2020 | Configuration can be setted using the integrated ASKOHEAT+ configuration websites |
| 3.1.2 | 17.04.2020 | Implemntation of HTTP-JSON interface |
| 4.0.1 | 05.05.2020 | Update via Webinterface |
| 4.0.2 | 14.05.2020 | Implementation of MODBUS RTU communiction |
| 4.0.3 | 26.08.2020 | Auto Restart if connection to energymanager lost -\> [AUTO\_HEATER\_OFF\_SETTING](#mbc_AUTO_HEATER_OFF_SETTING) |
| 4.0.4 | 18.09.2020 | New local Website |
| 4.1.1 | 01.12.2020 | Use Analog Input as special input, temperature controlled heating, low tariff option |
| 4.2.1 | 10.03.2021 | Supports SMA SEMP and Feedin Control |
| 4.2.7 | 15.05.2021 | Support ethernet static IP address (without modbus relevant changes) |
| 4.3.0 | 29.08.2021 | Supports SEMEC Home (without modbus relevant changes) |
| **4.3.x** | **actual** | **Bug fixing and minor chnanges** |
[Back to Table of Contents](#Content)
###Overview of Functions
####Actuator controls
ASKOHEAT+ is an actuator consisting of three switchable heating elements. By combination 7 steps are possible.
In conjunction with the ASKOWALL, the pump is automatically switched on when the heating elements are activated.
The heating elements are controlled by the following input signals:
1. Manual thermostat, not via electronic evaluation, independently regulates (and limits) the set temperature.
2. Analog input: 0-10 volt signal (switches power corresponding to input signal)
Up to eight threshold values can be assigned to heating level and temperature.
3. Digital input: Heat pump request (switches to full power)
4. ASKOHEAT+ Push button: toggles emergency mode on / off (on switches to full power)
5. (Modbus) Heater Step 0-7 (switches power in 7 steps)
6. (Modbus) Load Setpoint Value: poitive 0-max. watt (ASKOHEAT switches the power automatically)
7. NOW AVAILABLE: (Modbus) Feedin Value: Regulation use case "Power to Heat": Grid feed-in of produced (e.g. solar) energy (represented by negative values as feed-in values to the EVU) is reduced by thermal storage with the ASKOHEAT+ through automatic selection of the optimum power level. If the value is positive, the ASKOHEAT+ switches off automatically.
8. (HTTP-JSON) Control the ASKOHEAT+ via the Modbus registers using the JSON format
9. Electronic thermostat with individual setting possibility for each control input
10. Heating during low tariff period
11. NEW: Supports SMA Sunny Home Manager 2.0 via SEMP: If enabled the ASKOHEAT+ will connected automatically with the Sunny Home Manager and will be listed with its three heaters.
####Sensors
1. Temperature Sensor 0: PT1000 integrated in ASKOHEAT+
2. Temperature Sensor 1: optional external PT1000
3. Temperature Sensor 2: optional external PT1000
4. Temperature Sensor 3: optional external PT1000
5. Temperature Sensor 4: optional external PT1000
6. Temperature Sensor 5: not implemented yet (future use)
7. Simple Current Flow Sensor: Current flow is measured via an integrated sensor. If the temperature limiter or the thermostat has been deactivated, this can be detected via it. The sensor does not provide an exact measured value, therefore only a flag is output.
####Saftey and Cost Prevention
1. Safety temperature limiter switches off independently when the protective temperature is exceeded.
2. Legionella protection: In intervals (daily, weekly, fortnightly, monthly) the boiler is heated to a temperature (50-65°C) to kill legionella. The heating time is limited to 240 minutes.
3. Monitoring of the temperature sensors. In case of a malfunction (e.g. cable break or accidental disconnection), errors are output (see register {502} MODBUS\_VAL\_TEMPERATURE\_STATUS).
**Note: If the error is to be cleared, i.e. the ASKOHEAT+ should forget that the temperature sensor(s) was (were) connected, then this can be done with the command {213} MODBUS\_VAL\_TEMPERATURE\_STATUS MODBUS\_CMD\_CLEAR\_TEMP\_SENSOR\_ERROR or via the web browser with /CLEAR TEMP ERROR or by pressing the Emergency Mode button for at least 30 seconds until the LED error display stops).**
4. Auto Heater Off: after 24 hours (this value can be adjust with {503} MODBUS\_CON\_AUTO\_HEATER\_OFF\_MINUTES) of continuous operation, the ASKOHEAT+ switches off automatically until the control value is changed again.
5. Emergency mode will switches off after 24 hours (this value can be adjust with {503} MODBUS\_CON\_AUTO\_HEATER\_OFF\_MINUTES)
6. Modbus Fail Save: Auto Heater Off also occurs if the master (e.g. Energy Manager) does not send any data to the ASKOHEAT+ for more than 60 seconds.
7. Monitoring of the relay switching cycles: Switch-on hysteresis of typ. 5 seconds, counting of the switching cycles.
8. Load Feedin Mode: Bias and activation delay prevent unnecessary load peaks or switching cycles that are too short.
####Further Features
1. Device status retrievable via a Modbus word register
2. The current switching step or heating load can be read out via the corresponding registers. If in Register {502} MODBUS\_CON\_INPUT\_SETTING bit 1 (Heater Load value only if current flows) is setted, the value is zero if the safety temperature limiter or the thermostat switched off.
3. All important functions and parameters can be configured via Modbus.
4. For installation and local support a simple effective webbrowser interface is implemented.
5. Via HTTP-JSON all Modbus registers can be accessed and all settings can be made via HTTP-JSON.
6. Automatic functions for time-dependent temperature-controlled heating (minimum temperature and low tariff).
7. NEW: Use of an Askoma Smart Meter via Modbus RTU (the ASKOHEAT+ must then be operated in Master Mode). The heating element then uses the excess energy reported by the smart meter (= feed) to heat the boiler within the set temperature. (Use Case Power To Heat without Energy Manager). The simple use case does not support data logging and cannot take priorities into account.
####Using Modbus TCP
1. Modbus TCP is served via the standard port 502.
2. The ASKOHEAT+ is the Modbus server whose registers are described here.
3. Currently up to 8 client connections can be served simultaneously.
4. Basically, there can be multiple socket connections per client ip.
5. Data is updated every second. Therefore we do not recommend faster polling cycles.
6. **Note: The connection between ASKOHEAT+ and an external client is considered interrupted after 5000 milliseconds. After an interruption of 60 seconds, registers MODBUS\_CMD\_SET\_HEATER\_STEP and MODBUS\_CMD\_LOAD\_SETPOINT\_VALUE and MODBUS\_CMD\_LOAD\_FEEDIN\_VALUE are deleted for security reasons.**
[Back to Table of Contents](#Content)
###**Status LEDs**
*NOTE: With firmware 4.1.1 the LED status display changes. It is now reduced to the essential.*
**TOP LED: Heater Status**
**Color** |
**On** |
Command**Flashing** |
Red |
|
Error, for further information open the local webpages of ASKOHEAT+ |
Blue |
Communication over ethernet (MODBUS TCP, RTU, webbrowser or HTTP-JSON (e.g. Energy Manager) within last 5 seconds |
|
White |
|
Identify for 20 seconds or Emergency Mode toggles on or off / very fast flashing at start and stop update |
**MIDDLE LED: Heater Connectivity**
**Color** |
**On** |
Command**Flashing** |
Red |
Error LAN (Ethernet) communication |
|
Yellow |
|
Data communication over LAN (Ethernet) |
Green |
LAN (Ethernet) connected to a switch, hub or router |
|
Blue |
WLAN (Wifi) connected (optional and is not implemented in this firmware) |
ASKOHEAT+ is running without LAN connection, e.g. using only analog input |
**BOTTOM LED: Heater Mode**
**Color** |
**On** |
Command**Flashing** |
Yellow |
Heater relais are active, but without current flow (switch-off by thermostat) |
|
Green |
Heater is active with current flow |
|
Blue |
|
Emergency Mode is active |
White |
|
Identify for 20 seconds or Emergency Mode toggles on or off / very fast flashing at start and stop update |
[Back to Table of Contents](#Content)
##**Five Steps for Successful Implementation**
STEP 1: Connection ASKOHEAT+ with local network router and find out its ip-address. In most cases
[askoheat-eth/](http:/askoheat-eth/) or
[askoheat.local/](http:/askoheat.local/)
will work.
STEP 2: Determine the IP address via the router. The ASKOHEAT+ is called "ASKOHEAT-ETH". To identify an ASKOHEAT LEDs flashes for 20 seconds via the Command
[askoheat-eth/identify](http:/askoheat-eth/identify)
or [askoheat.local/identify](http:/askoheat.local/identify)
* **NOTE: To prevent the IP address of ASKOHEAT+ from changing regularly, we recommend assigning a fixed IP address on the router. ASKOHEAT+ currently does not support a fixed IP address.**
STEP 3: Enter in a browser of a device connected to the network
[askoheat-eth/](http:/askoheat-eth/)
or [askoheat.local/](http:/askoheat.local/)
* You will see the info screen. Check if you see any errors or wrong settings
* Use Quick Setup to make the most important typical settings
[askoheat-eth/quick](http:/askoheat-eth/quick)
or [askoheat.local/quick](http:/askoheat.local/quick)
* To see all settings, you can view the advanced settings page
[askoheat-eth/expert](http:/askoheat-eth/expert)
or [askoheat.local/expert](http:/askoheat.local/expert)
* To make all advanced settings use the setup page
[askoheat-eth/setup1](http:/askoheat-eth/setup1)
or [askoheat.local/setup1](http:/askoheat.local/setup1)
STEP 4: Connect your modbus client with the ASKOHEAT+
* Use the known IP address and port 502. The unit ID is not relevant.
STEP 5: Useful modbus registers:
* Using the browser commands:
* The command [askoheat-eth/fullstatus](http:/askoheat-eth/fullstatus)
or [askoheat.local/fullstatus](http:/askoheat.local/fullstatus)
shows the actual status, values and settings of the ASKOHEAT+.
* With the command [askoheat-eth/getall](http:/askoheat-eth/getall)
or [askoheat.local/getall](http:/askoheat.local/getall)
will you see the whole registermap with its actual values.
* For a simple implementation of monitoring the following registers are recommended: [1. Short Data Block - Address 100...109 - read only](#Short_Data_Block)
* {100} - Temperature Sensor 1
* {102} - Temperature Sensor 2
* {104} - Temperature Sensor 3
* {106} - Temperature Sensor 4
* {108} - Emergency Mode
* {109} - Status of ASKOHEAT+ (Heater, input states, error flag)
* {110} - actual heater load
* The heating element is switched via the following registers: [2a. Command Block - Address 200...202 - read/write](#Commmand_Block)
* {200} - Set the heater to step 0 to 7
* {201} - Load setpoint for automatic setting of the optimum power level.
####**Settings for Modbus RTU**
* Settings are available starting with firmware 4.0.2.
* [MODBUS\_CON\_RTU\_BAUDRATE](#mbc_RTU_BAUDRATE)
* [MODBUS\_CON\_RTU\_SETTING](#mbc_RTU_SETTING)
* [MODBUS\_CON\_RTU\_SLAVE\_ID](#mbc_RTU_SLAVE_ID)
* [MODBUS\_CON\_RTU\_ENERGY\_METER\_TYPE](#mbc_RTU_ENERGY_METER_TYPE)
* You can setup all this parameters using [askoheat-eth/setup2](http:/askoheat-eth/setup2)
or [askoheat.local/setup2](http:/askoheat.local/setup2)
[Back to Table of Contents](#Content)
##**Modbus Registers**
* MODBUS TCP uses port 502
* MODBUS RTU is available with firmware 4.0.2
###**1. Short Data Block[^1.2] - Address 100...109[^1.1] - read only**
**For minimal implementations the essential values are summarized here. Historically, these have already been available in first generation devices and ensure backward compatibility.**
* modbus function 4 read input register
| **\#define (JSON, C++, Python, ...)** | **Modbus Address** | **Data** | **Description** | **Vers.** |
| --- | --- | --- | --- | --- |
| MODBUS\_IREG\_TEMP1 | 100 | 1 word / uint16 / 0-100 °celcius | temperature of sensor 1, optional external PT1000[^1.3] | 2.0.1 |
| MODBUS\_IREG\_TEMP2 | 102 | 1 word / uint16 / 0-100 °celcius | temperature of sensor 2, optional external PT1000[^1.4] | 2.0.1 |
| MODBUS\_IREG\_TEMP3 | 104 | 1 word / uint16 / 0-100 °celcius | temperature of sensor 3, optional external PT1000[^1.5] | 2.0.1 |
| MODBUS\_IREG\_TEMP4 | 106 | 1 word / uint16 / 0-100 °celcius | temperature of sensor 4, optional external PT1000[^1.6] | 2.0.1 |
| MODBUS\_IREG\_EMG | 108 | 1 word / byte / 0 = off, 255 = on | emergency mode[^1.7] | 2.0.1 |
| [MODBUS\_IREG\_STATUS](#mbv_STATUS) | 109| 1 word / uint16 / [flags](#mbv_STATUS) | read status of ASKOHEAT+, to switch heaters on or off use register 200 [^1.8] | 2.2.1 |
| MODBUS\_IREG\_HEATER\_LOAD | 110 | 1 word / uint16 / 250-30000 watt | actual electrical heater load | 2.3.1 |
| *MODBUS\_IREG\_RESERVED* | *111* | *1 word* / *uint16* / *tbd* | *reserved for future features* | *tbd* |
| **Summary** | | **block: \[12\] words / \[24\] bytes** | | |
[^1.1]: address register in decimal
[^1.2]: registers are downward compatible with older ASKOHEAT versions - **this block is very short with most important informations**
[^1.3]: same as register 637 [MODBUS\_VAL\_TEMPERATURE\_SENSOR1](#mbv_TEMPERATURE_SENSOR1)
[^1.4]: same as register 636 [MODBUS\_VAL\_TEMPERATURE\_SENSOR2](#mbv_TEMPERATURE_SENSOR2)
[^1.5]: same as register 635 [MODBUS\_VAL\_TEMPERATURE\_SENSOR3](#mbv_TEMPERATURE_SENSOR3)
[^1.6]: same as register 634 [MODBUS\_VAL\_TEMPERATURE\_SENSOR4](#mbv_TEMPERATURE_SENSOR4)
[^1.7]: see status flag low byte bit7 in register 624 [MODBUS\_VAL\_STATUS](#mbv_STATUS)
[^1.8]: read register 624, for setting use register 200
[Back to Table of Contents](#Content)
###**2a. Command Block - Address 200...202 - read/write**
**The commands are used to control the performance of ASKOHEAT+. Three options are available.**
* modbus function 3 read holding register
* modbus function 6 write single register
| **\#define (JSON, C++, Python, ...)** | **Modbus Address** | **Data** | **Description** | **Vers.** |
| --- | --- | --- | --- | --- |
| [MODBUS\_CMD\_SET\_HEATER\_STEP](#mbs_SET_HEATER_STEP) | 200 | 1 word / byte / [flags](#mbs_SET_HEATER_STEP) | switch heaters on / off | 2.0.1 |
| MODBUS\_CMD\_LOAD\_SETPOINT\_VALUE | 201 | 1 word / signed int16 / 250-30000 watt | Load setpoint for automatic setting of the optimum power level of the ASKOHEAT+. | 2.3.1 |
| MODBUS\_CMD\_LOAD\_FEEDIN\_VALUE | 202 | 1 word / signed int16 / -30000..30000 watt | Use Case "Power to Heat": negative values activate thermal storage, ASKOHEAT+ automatically switches to the correct level.* | 4.2.1 |
####**MODBUS\_CMD\_SET\_HEATER\_STEP**
> low byte:
>> * bit2: switch heater 3 on (relay 3)
>> * bit1: switch heater 2 on (relay 2)
>> * bit0: switch heater 1 on (relay 1)
> **Important Notes**
>> * Default value after any power on or reboot is zero.
>> * This register is only changed from an external energy manager.
>> * The pump is automatically active when one of the heater is switched on.
>> * To protect the relay contacts, a switch-on inhibit is activated after a relay is deactivated. (see [MODBUS\_CON\_RELAY\_SEC\_COUNT](#mbc_RELAY_SEC_COUNT)
>> * If the emergency mode or heat pump request is active, all heaters 1-3 will be switched on until the emergency mode or heat pump request is reset and the setting in MODBUS_IREG_STATUS are restored. (see [MODBUS\_CON\_INPUT\_SETTING](#mbc_INPUT_SETTING))
>> * If activated, results of analog input 0-10V measuring will override the MODBUS_IREG_STATUS. (see [MODBUS\_VAL\_ANALOG\_INPUT\_STEP](#mbv_ANALOG_INPUT_STEP))
[Back to Table of Contents](#Content)
###**2b. Commands - Adress 210...213 - write only**
**These commands are helpful for service and support or during setup.**
* modbus function 6 write single register
| **\#define (JSON, C++, Python, ...)** | **Modbus Address** | **Data** | **Description** | **Vers.** |
| --- | --- | --- | --- | --- |
| MODBUS\_CMD\_RESET | 210 | 1 word | rebooting of ASKOHEAT+ | 3.0.1 |
| MODBUS\_CMD\_RECONFIG | 211 | 1 word | return to factory setting, user must make network setting again | 3.0.1 |
| MODBUS\_CMD\_IDENTIFY | 212 | 1 word | all LED flashes for 20 seconds for identification purposes | 3.0.1 |
| MODBUS\_CMD\_CLEAR\_TEMP\_SENSOR\_ERROR | 213 | 1 word | Clears rememberd temperature sensors after any temperature sensor error | 3.0.1 |
[Back to Table of Contents](#Content)
###**3. Energymanager Block - Address 300...336 - read/write for selected registers**
**This register set is useful for use by energy managers. All important values are contained in one block. This reduces the implementation effort, as only one data set has to be loaded. Three registers can be read and written. These are implemented as Holding Registers as well as Input Registers.**
* modbus function 4 read input register
* modbus function 6 write register for selected registers
| **\#define (JSON, C++, Python, ...)** | **Modbus Address** | **Data** | **Description** | **Vers.** |
| --- | --- | --- | --- | --- |
| MODBUS\_EMA\_ID | 300…315 | 16 words / char\[32\][^3.1] / text string | read only - serial number (same as MODBUS\_PAR\_ID)| 3.1.1 |
| MODBUS\_EMA\_STATUS | 316 | 1 word / uint16 / [flags](#mbv_STATUS) | read only - read status of ASKOHEAT+ (same as [MODBUS\_VAL\_STATUS](#mbv_STATUS)) | 3.1.1 |
| MODBUS\_EMA\_HEATER\_LOAD | 317| 1 word / uint16 / 250-30000 watt | read only - actual electrical heater load (same as MODBUS\_VAL\_HEATER\_LOAD) | 3.1.1 |
| MODBUS\_EMA\_SET\_HEATER\_STEP | 318 | 1 word / byte / [flags](#mbs_SET_HEATER_STEP) | read and write - switch heaters on / off (same as [MODBUS\_CMD\_SET\_HEATER\_STEP](#mbs_SET_HEATER_STEP)) | 3.1.1 |
| MODBUS\_EMA\_LOAD\_SETPOINT\_VALUE | 319 | 1 word / signed int16 / 250-30000 watt | read and write - Load setpoint for automatic setting of the optimum power level of the ASKOHEAT+. (same as MODBUS\_CMD\_LOAD\_SETPOINT\_VALUE) | 3.1.1 |
| MODBUS\_EMA\_LOAD\_FEEDIN\_VALUE | 320 | 1 word / signed int16 / -30000..30000 watt | read and write - Use Case "Power to Heat": negative values activate thermal storage, ASKOHEAT+ automatically switches to the correct level. (same as MODBUS\_CMD\_LOAD\_FEEDIN\_VALUE) | 4.2.1 |
| MODBUS\_EMA\_EMERGENCY\_MODE | 321 | 1 word / byte / 0 = off, 255 = on | read only - emergency mode[^1.7] (same as MODBUS\_IREG\_EMG) | 3.1.1 |
| MODBUS\_EMA\_HEAT\_PUMP\_REQUEST | 322 | 1 word / byte / 0 = off, 255 = on | read only - indicates digital input of signal heat pump request | 3.1.1 |
| MODBUS\_EMA\_ANALOG\_INPUT\_FLOAT | 323 | 2 words / float32 / floating Point volt | read only - analog input 0-10V (same as MODBUS\_EXT\_ANALOG\_INPUT\_FLOAT) | 3.1.1 |
| MODBUS\_EMA\_TEMPERATURE\_FLOAT\_SENSOR0 | 325 | 2 words / float32 / floating point °celcius | read only - temperature of sensor 0, integrated in ASKOHEAT+ PT1000 (same as MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR0) | 3.1.1 |
| MODBUS\_EMA\_TEMPERATURE\_FLOAT\_SENSOR1 | 327 | 2 words / float32 / floating point °celcius | read only - temperature of sensor 1, optional external PT1000 (same as MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR1) | 3.1.1 |
| MODBUS\_EMA\_TEMPERATURE\_FLOAT\_SENSOR2 | 329 | 2 words / float32 / floating point °celcius | read only - temperature of sensor 2, optional external PT1000 (same as MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR2) | 3.1.1 |
| MODBUS\_EMA\_TEMPERATURE\_FLOAT\_SENSOR3 | 331 | 2 words / float32 / floating point °celcius | read only - temperature of sensor 3, optional external PT1000 (same as MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR3) | 3.1.1 |
| MODBUS\_EMA\_TEMPERATURE\_FLOAT\_SENSOR4 | 333 | 2 words / float32 / floating point °celcius | read only - temperature of sensor 4, optional external PT1000 (same as MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR4) | 3.1.1 |
| MODBUS\_EMA\_TEMPERATURE\_FLOAT\_SENSOR5 | 335 | 2 words / float32 / floating point °celcius | read only - temperature of sensor 5, this sensor is not implemented yet | 3.1.1 |
| **Summary** | | **block: \[37\] words / \[74\] bytes** | | |
[Back to Table of Contents](#Content)
###**4. Parameter Block[^3.3] - Address 400...449 - read only**
**Parameters are information about the device configuration, serial number and versions that is permanently stored in the device.**
* modbus function 4 read input register
| **\#define (JSON, C++, Python, ...)** | **Modbus Address** | **Data** | **Description** | **Vers.** |
| --- | --- | --- | --- | --- |
| MODBUS\_PAR\_ID | 400…415 | 16 words / char\[32\][^3.1] / text string | serial number | 2.2.1 |
| [MODBUS\_PAR\_TYPE](#mbp_TYPE) | 416 | 1 word / byte[^3.2] / [flags](#mbp_TYPE) | type of ASKOHEAT+ | 3.0.1 |
| MODBUS\_PAR\_HEATER1\_POWER | 417 | 1 word / uint16 / 250-10000 watt | electrical power | 2.3.1 |
| MODBUS\_PAR\_HEATER2\_POWER | 418 | 1 word / uint16 / 250-10000 watt | electrical power | 2.3.1 |
| MODBUS\_PAR\_HEATER3\_POWER | 419 | 1 word / uint16 / 250-10000 watt | electrical power | 2.3.1 |
| MODBUS\_PAR\_ARTICLE\_NUMBER | 420…427 | 8 words / char\[16\] / text string | manufactor article number | 3.0.1 |
| MODBUS\_PAR\_ARTICLE\_NAME | 428…443 | 16 words / char\[32\ / text string | article description* | 3.0.1 |
| MODBUS\_PAR\_SOFTWARE\_VERSION | 444…446 | 3 words / char\[6\] / text string (eg. 1.2.3) | software release number | 2.2.1 |
| MODBUS\_PAR\_HARDWARE\_VERSION | 447…449 | 3 words / char\[6\] / text string | type and version of hardware | 3.0.1 |
| **Summary** | | **block: \[50\] words / \[100\] bytes** | | |
[^3.1]: char[n] is a zero terminated string formed from low and high byte of an array of words
[^3.2]: byte is the lowbyte of a word
[^3.3]: parameters are (pre)set at the factory
####**MODBUS\_PAR\_TYPE**
> * bit7: OEM version
> * bit5: wired as delta connection (L1-L2, L2-L3, L3-L1)
> * bit4: wired as star connection (L1-N, L2-N, L3-N)
> * bit3: heater type screw in
> * bit2: heater type flange
> * bit1: 7 stage version
> * bit0: 3 stage version
[Back to Table of Contents](#Content)
###**5. Configuration Block[^4.1] - Address 500...545 - read/write**
**This is the configuration area. Here the behavior of ASKOHEAT+ is adjusted to the individual requirements. Typically, only settings for legionella protection are necessary. In some cases, adjustments to the inputs can be useful. When used in a ASKOWALL, the pump run-on time can be adapted to the local conditions. With the "info string" an individual device tag can be assigned.**
* modbus function 3 read holding register
* modbus function 6 write single register
| **\#define (JSON, C++, Python, ...)** | **Modbus Address** | **Data** | **Description** | **Vers.** |
| --- | --- | --- | --- | --- |
| MODBUS\_CON\_RELAY\_SEC\_COUNT | 500 | 1 word / uint16 / 0-16 seconds | switch on inhibit of relays (factory setting is 5 seconds) | 2.2.1 |
| MODBUS\_CON\_PUMP\_SEC\_COUNT | 501 | 1 word / uint16 / 0-240 seconds | pump follow-up time after switching off any heater (factory setting is 30 seconds) | 2.2.1 |
| [MODBUS\_CON\_INPUT\_SETTING](#mbc_INPUT_SETTING) | 502 | 1 word / byte / [flags](#mbc_INPUT_SETTING) | use of inputs (analog input 0-10V, heat pump request, emergency mode, setpoint value or feedin values L1...L3 | 2.2.1 |
| MODBUS\_CON\_AUTO\_HEATER\_OFF\_MINUTES | 503 | 1 word / uint16 / 2-10080 minutes | cost prevention and safety function: time until the heater switches off automatically | read 2.2.1 write 3.0.1 |
| [MODBUS\_CON\_AUTO\_HEATER\_OFF\_SETTING](#mbc_AUTO_HEATER_OFF_SETTING) | 504 | 1 word / byte / [flags](#mbc_AUTO_HEATER_OFF_SETTING) | setting of auto off function for cost prevention and safety | read 2.2.1 write 3.0.1 |
| *MODBUS\_CON\_CASCADE\_PRIO* | *505* | *1 word / byte / 0-255* | *prioritization for cascade control* |*tbd* |
| *[MODBUS\_CON\_HEATBUFFER\_TYPE](#mbc_HEATBUFFER_TYPE)* | *506* | *1 word / byte / [flags](#mbc_HEATBUFFER_TYPE)* | *type of heatbuffer in which ASKOHEAT+ is installed* | *tbd* |
| *MODBUS\_CON\_HEATBUFFER\_VOLUME* | *507* | *1 word / uint16 / 0-1000 litres* | *heat storage volume* | *tbd* |
| [MODBUS\_CON\_HEATER\_POSITION](#mbc_HEATER_POSITION) | 508 | 1 word / byte / [flags](#mbc_HEATER_POSITION) | Installation position of ASKOHEAT+ (ASKOWALL (c), middle or bottom of boiler) | 4.1.1 |
| [MODBUS\_CON\_LEGIO\_SETTING](#mbc_LEGIO_SETTING) | 509 | 1 word / uint16 / [flags](#mbc_LEGIO_SETTING) | setting of legionella protection | 3.0.1 |
| MODBUS\_CON\_LEGIO\_TEMPERATURE | 510 | 1 word / byte / 50-65 | heat up temperature for legionella protection | 3.0.1 |
| MODBUS\_CON\_LEGIO\_HEATUP\_MINUTES | 511 | 1 word / unit16 / 0-1440 | heat up time for legionella protection (default 240) | 4.1.0 |
| MODBUS\_CON\_LEGIO\_ACTIV\_TIME | 512…515 | 4 words / char\[8\] / text string | preferred start time for legionella protection, if necessary if pv energy is available, eg. „12:00 AM" | 4.1.7 |
| *MODBUS\_CON\_WATER\_HARDNESS* | *516…519* | *4 words / char\[8\] / text string* | *typical water hardness, for example „32 °fH", „hart", °14 dH"* | *tbd* |
| *[MODBUS\_CON\_HOUSETYPE](#mbc_HOUSETYPE)* | *520* | *1 word / byte / [flags](#mbc_HOUSETYPE)* | *kind of building* | *tbd* |
| *MODBUS\_CON\_HOUSEHOLD\_MEMBERS* | *521* | *1 word / byte / 1-255* | *number of household members* | *tbd* |
| MODBUS\_CON\_INFOSTRING | 522…537 | 16 words / char\[32\] / text string | free useable infostring | 2.3.1 |
| *[MODBUS\_CON\_ADVANCED\_SETTING](#mbc_ADVANCED_SETTING)* | *538* | *1 word / byte / [flags](#mbc_ANALOG_IN_SETTING)* | *used for future advanced functions* | *tbd*
| MODBUS\_CON\_LOAD\_FEEDIN\_DELAY | 539 | 1 word / uint16 / 0-120 seconds | switch-on delay time (seconds) in load feedin mode | 4.2.1 |
| MODBUS\_CON\_LOAD\_FEEDIN\_BIAS | 540 | 1 word / uint16 / 0-10000 watt | bias level = basic energy level in feedin mode | 4.2.1 |
| MODBUS\_CON\_TIMEZONE\_BIAS | 540 | 1 word / signed int16 / -12 to 12 | timezone for real time clock | 4.1.0 |
| MODBUS\_CON\_SUMMERTIME\_BIAS | 540 | 1 word / signed int16 / 0 or 1 | summertime (1 hour offset) | 4.1.0 |
| *MODBUS\_CON\_RESERVED* | *543...545* | *3 words* / *tbd* | *reserved for future features* | *tbd* |
| [MODBUS\_CON\_RTU\_BAUDRATE](#mbc_RTU_BAUDRATE) | 546…548 | 3 words / char\[6\] / text string | Modbus RTU baudrate as text string (default 19200) | 4.0.2 |
| [MODBUS\_CON\_RTU\_SETTING](#mbc_RTU_SETTING) | 549 | 1 words /char\[6\] / uint16 / [flags](#mbc_RTU_SETTING) | Modbus RTU settings | 4.0.2 |
| MODBUS\_CON\_RTU\_SLAVE\_ID | 550 | 1 word / byte (0 - 240) | Modbus RTU slave ID of ASKOHEAT+ or slave ID of connected energy meter (default 99) | 4.0.2 |
| [MODBUS\_CON\_RTU\_ENERGY\_METER\_TYPE](#mbc_RTU_ENERGY_METER_TYPE) | 551 | 1 word / byte | Modbus RTU type of connected energy meter | 4.0.2 |
| MODBUS\_CON\_LOW\_TARIFF\_START\_TIME\_HOUR | 552 | 1 word / byte (0 - 23) | Low tariff start time hour | 4.1.0 |
| MODBUS\_CON\_LOW\_TARIFF\_START\_TIME\_MINUTE | 553 | 1 word / byte (0 - 59) | Low tariff start time minute | 4.1.0 |
| MODBUS\_CON\_LOW\_TARIFF\_END\_TIME\_HOUR | 554 | 1 word / byte (0 - 23) | Low tariff end time hour | 4.1.0 |
| MODBUS\_CON\_LOW\_TARIFF\_END\_TIME\_MINUTE | 555 | 1 word / byte (0 - 59) | Low tariff end time minute | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_HYSTERESIS | 556+557 | 2 words / float32 / floating point volt | Hystersis voltage (after the threshold value has been reached, it must be undercut by at least the hysteresis value) | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_0\_THRESHOLD | 558+559 | 2 words / float32 / floating point volt | Threshold 0 voltage (this value must be reached to activte the heater step value, until the temperature is reached) | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_0\_THRESHOLD\_STEP | 560 | 1 word / byte (0 - 7) | Threshold 0 Heater step, if threshold value is reached | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_0\_THRESHOLD\_TEMP | 561 | 1 word / byte (0 - 95) °celcius | Threshold 0 temperature limit - used if temperature control is activated | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_1\_THRESHOLD | 562+563 | 2 words / float32 / floating point volt | Threshold 1 voltage | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_1\_THRESHOLD\_STEP | 564 | 1 word / byte (0 - 7) | Threshold 1 Heater step | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_1\_THRESHOLD\_TEMP | 565 | 1 word / byte (0 - 95) °celcius | Threshold 1 temperature limit | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_2\_THRESHOLD | 566+567 | 2 words / float32 / floating point volt | Threshold 2 voltage | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_2\_THRESHOLD\_STEP | 568 | 1 word / byte (0 - 7) | Threshold 2 Heater step | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_2\_THRESHOLD\_TEMP | 569 | 1 word / byte (0 - 95) °celcius | Threshold 2 temperature limit | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_3\_THRESHOLD | 570+571 | 2 words / float32 / floating point volt | Threshold 3 voltage | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_3\_THRESHOLD\_STEP | 572 | 1 word / byte (0 - 7) | Threshold 3 Heater step | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_3\_THRESHOLD\_TEMP | 573 | 1 word / byte (0 - 95) °celcius | Threshold 3 temperature limit | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_4\_THRESHOLD | 574+575 | 2 words / float32 / floating point volt | Threshold 4 voltage | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_4\_THRESHOLD\_STEP | 576 | 1 word / byte (0 - 7) | Threshold 4 Heater step | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_4\_THRESHOLD\_TEMP | 577 | 1 word / byte (0 - 95) °celcius | Threshold 4 temperature limit | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_5\_THRESHOLD | 578+579 | 2 words / float32 / floating point volt | Threshold 5 voltage | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_5\_THRESHOLD\_STEP | 580 | 1 word / byte (0 - 7) | Threshold 5 Heater step | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_5\_THRESHOLD\_TEMP | 581 | 1 word / byte (0 - 95) °celcius | Threshold 5 temperature limit | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_6\_THRESHOLD | 582+583 | 2 words / float32 / floating point volt | Threshold 6 voltage | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_6\_THRESHOLD\_STEP | 584 | 1 word / byte (0 - 7) | Threshold 6 Heater step | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_6\_THRESHOLD\_TEMP | 585 | 1 word / byte (0 - 95) °celcius | Threshold 6 temperature limit | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_7\_THRESHOLD | 586+587 | 2 words / float32 / floating point volt | Threshold 7 voltage | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_7\_THRESHOLD\_STEP | 588 | 1 word / byte (0 - 7) | Threshold 7 Heater step | 4.1.0 |
| MODBUS\_CON\_ANALOG\_IN\_7\_THRESHOLD\_TEMP | 589 | 1 word / byte (0 - 95) °celcius | Threshold 7 temperature limit | 4.1.0 |
| MODBUS\_CON\_HEAT\_PUMP\_REQUEST\_OFF\_STEP | 590 | 1 word / byte (0 - 7) | Heater step if digital input (Heat Pump Request) is open (logic on) | 4.1.0 |
| MODBUS\_CON\_HEAT\_PUMP\_REQUEST\_ON\_STEP | 591 | 1 word / byte (0 - 7) | Heater step if digital input (Heat Pump Request) is closed (logic on) | 4.1.0 |
| MODBUS\_CON\_EMERGENCY\_MODE\_ON\_STEP | 592 | 1 word / byte (0 - 7) | Heater step if emergency mode is active | 4.1.0 |
| MODBUS\_CON\_TEMPERATURE\_HYSTERESIS | 593 | 1 word / byte (0 - 95) °celcius | Temperature Hystersis, if temperature control is activated | 4.1.0 |
| [MODBUS\_CON\_TEMPERATURE\_SETTING](#mbc_TEMPERATURE_SETTING) | 594 | 1 word / byte / [flags](#mbc_TEMPERATURE_SETTING) | Selection of temperature sensors for temperature monitoring | 4.1.0 |
| MODBUS\_CON\_TEMPERATURE\_MINIMUM | 595 | 1 word / byte (0 - 95) °celcius | Temperature limit used to hold minimal temperature | 4.1.0 |
| MODBUS\_CON\_TEMPERATURE\_SET\_HEATER\_STEP | 596 | 1 word / byte (0 - 95) °celcius | Temperature limit if controlled by Set Heater Step | 4.1.0 |
| MODBUS\_CON\_TEMPERATURE\_LOAD\_SETPOINT | 597 | 1 word / byte (0 - 95) °celcius | Temperature limit if controlled by Load Setpoint or Load Feedin respectively SMA SEMP or SENEC.Home | 4.1.0 |
| MODBUS\_CON\_TEMPERATURE\_LOW\_TARIFF | 598 | 1 word / byte (0 - 95) °celcius | Temperature limit if low tariff mode is active | 4.1.0 |
| MODBUS\_CON\_TEMPERATURE\_HEAT\_PUMP\_REQUEST | 599 | 1 word / byte (0 - 95) °celcius | Temperature limit if controlled by Heat Pump Request (digial input) or Emergency Mode | 4.1.0 |
| **Summuary** | | **block: \[100\] words / \[200\] bytes** | | |
[^4.1]: value is can be configured within the ASKOHEAT+ hosted webserver in configuration mode
#####**MODBUS\_CON\_INPUT\_SETTING**
> high byte:
>> * bit3: software control input SENEC.Home is enabled (Note: This feature requires firmware 4.4.1 or higher.)
>> * bit2: software congrol SMA.SEMP is enabled (Note: This feature requires firmware 4.2.1 or higher.)
>> * bit1: hold minimal temperature option is enabled
>> * bit0: low tariff option is enabled
> low byte:
>> * bit7: emergency mode switch is enabled
>> * bit6: heat pump request input is enabled
>> * bit5: analog input 0-10V signal is enabled
>> * bit4: set heater step is enabled
>> * bit3: load setpoint value is enabled
>> * bit2: load feedin value (use case power to heat) is enabled
>> * bit1: heater load value only if current flows (see [MODBUS\_VAL\_HEATER\_LOAD](#mbv_HEATER_LOAD) and [MODBUS\_IREG\_HEATER\_LOAD](#mbi_HEATER_LOAD))
>> * bit0: missing current flow triggers error (see [MODBUS\_VAL\_ERROR\_STATUS](#mbv_ERROR_STATUS))
#####**MODBUS\_CON\_AUTO\_HEATER\_OFF\_SETTING**
> * bit7: auto off function is enabled for emergency mode switch (see [MODBUS\_CON\_AUTO\_HEATER\_OFF\_MINUTES](#mbc_AUTO_HEATER_OFF_MINUTES) and [MODBUS\_VAL\_AUTO\_HEATER\_OFF\_COUNTDOWN](#mbv_AUTO_HEATER_OFF_COUNTDOWN))
> * bit6: auto off function is enabled for heat pump request input (see [MODBUS\_CON\_AUTO\_HEATER\_OFF\_MINUTES](#mbc_AUTO_HEATER_OFF_MINUTES) and [MODBUS\_VAL\_AUTO\_HEATER\_OFF\_COUNTDOWN](#mbv_AUTO_HEATER_OFF_COUNTDOWN))
> * bit5: auto off function is enabled for analog input 0-10V (see [MODBUS\_CON\_AUTO\_HEATER\_OFF\_MINUTES](#mbc_AUTO_HEATER_OFF_MINUTES) and [MODBUS\_VAL\_AUTO\_HEATER\_OFF\_COUNTDOWN](#mbv_AUTO_HEATER_OFF_COUNTDOWN))
> * bit4: auto off function is enabled for modbus control
> * bit1: auto restart if energymanager connection lost (modbus tcp or rtu) -\> after 300 seconds (bit0 must be activated)
> * bit0: auto off function is enabled for timeout of modbus tcp communication -\> after 60 seconds
#####***MODBUS\_CON\_HEATBUFFER\_TYPE***
> * bit7: other
> * bit7: heat pump
> * bit6: oil burner
> * bit5: gas burner
> * bit4: pellet firing
> * bit3: combind heat and power unit (CHP)
> * bit1: heating water
> * bit0: tap water (Brauchwasser)
#####**MODBUS\_CON\_HEATER\_POSITION**
> * bit7: ASKOWALL (c)
> * bit1: at middle of boiler
> * bit0: at bottom of boiler
#####**MODBUS\_CON\_LEGIO\_SETTING**
> high byte:
>> * bit7: legionella protection is enabled
>> * bit6: preferably use feedin energy, otherwise it will waiting until pv energy is available in the following days
>> * bit3: interval monthly (30 days)
>> * bit2: interval fortnightly (14 days)
>> * bit1: interval weekly (7 days)
>> * bit0: interval daily
> low byte:
>> * bit5: use temperature sensor 5 (not implemented yet) for heat up
>> * bit4: use temperature sensor 4 (optional external PT1000) for heat up
>> * bit3: use temperature sensor 3 (optional external PT1000) for heat up
>> * bit2: use temperature sensor 2 (optional external PT1000) for heat up
>> * bit1: use temperature sensor 1 (optional external PT1000) for heat up
>> * bit0: use temperature sensor 0 (ASKOHEAT+ internal PT1000) for heat up
#####***MODBUS\_CON\_HOUSETYPE***
> * *bit7: commercial building*
> * *bit2: appartment building*
> * *bit1: private two-family house*
> * *bit0: private single-familiy house*
#####***MODBUS\_CON\_ADVANCED\_SETTING***
> * *reserved for advanced functions*
#####**MODBUS\_CON\_RTU\_BAUDRATE**
> valid values
>> * 1200
>> * 2400
>> * 4800
>> * 9600
>> * 14400
>> * 19200 (default)
>> * 28800
>> * 38400
>> * 57600
>> * 76800
>> * 115200
>> * 230400
#####**MODBUS\_CON\_RTU\_SETTING**
> high byte:
>> + bit7: master mode active -> useable to connect an external energy meter via RS485 to ASKOHEAT+ ([compatible devices](#mbc_RTU_ENERGY_METER_TYPE))
> low byte:
>> * bit7: slave mode active -> ASKOHEAT+ can be controlled by any Modbus master connected at RS485
>> * bit2: (1) send parity bit odd
>> * bit1: (1) send parity bit even
>> * bit0: (1) send two stop bits / (0) send one stop bit
#####**MODBUS\_CON\_RTU\_ENERGY\_METER\_TYPE**
> Supported energy meter:
>> * 001 AUTOMATION ONE TYPE A1EM.BIMOD.3.100
>> * 002 AUTOMATION ONE TYPE A1EM.MOD
>> * 010 CARLO GAVAZZI EM300 / ET300 SERIES (e.g. EM340)
#####** MODBUS\_CON\_TEMPERATURE\_SETTING**
> low byte:
>> * bit5: use temperature sensor 5 (not implemented yet) for heat up
>> * bit4: use temperature sensor 4 (optional external PT1000) for heat up
>> * bit3: use temperature sensor 3 (optional external PT1000) for heat up
>> * bit2: use temperature sensor 2 (optional external PT1000) for heat up
>> * bit1: use temperature sensor 1 (optional external PT1000) for heat up
>> * bit0: use temperature sensor 0 (ASKOHEAT+ internal PT1000) for heat up
[Back to Table of Contents](#Content)
###**6. Data Values Block - Address 600...646 - read only**
**All relevant information about operating times, current measured values, status flags and internal counter are listed here. Many of the registers are output for information only.**
* modbus function 4 read input register
| **\#define (JSON, C++, Python, ...)** | **Modbus Address** | **Data** | **Description** | **Vers.** |
| --- | --- | --- | --- | --- |
| MODBUS\_VAL\_OPERATING\_TIME | 600+601 | 2 words / array\[4\][^5.11] / dd:hh:mm | operation hour counter of ASKOHEAT+ | 2.2.1 |
| MODBUS\_VAL\_OPERATING\_HEATER1 | 602+603 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of heater 1 | 2.2.1 |
| MODBUS\_VAL\_OPERATING\_HEATER2 | 604+605 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of heater 2 | 2.2.1 |
| MODBUS\_VAL\_OPERATING\_HEATER3 | 606+607 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of heater 3 | 2.2.1 |
| MODBUS\_VAL\_OPERATING\_PUMP | 608+609 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of pump | 2.2.1 |
| MODBUS\_VAL\_OPERATING\_VALVE | 610+611 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of valve (not implemented yet) | 2.2.1 |
| MODBUS\_VAL\_RELAY1\_COUNT | 612+613 | 2 words / int32 / 0-100.000 | number of heater 1 relay (1) on switchings | 2.2.1 |
| MODBUS\_VAL\_RELAY2\_COUNT | 614+615 | 2 words / int32 / 0-100.000 | number of heater 2 relay (2) on switchings | 2.2.1 |
| MODBUS\_VAL\_RELAY3\_COUNT | 616+617 | 2 words / int32 / 0-100.000 | number of heater 3 relay (3) on switchings | 2.2.1 |
| MODBUS\_VAL\_RELAY4\_COUNT | 618+619 | 2 words / int32 / 0-100.000 | number of pump relay (4) on switchings | 2.2.1 |
| MODBUS\_VAL\_RELAY5\_COUNT | 620+621 | 2 words / int32 / 0-100.000 | number of valve relay (5) on switchings | 2.2.1 |
| MODBUS\_VAL\_RELAY\_COUNTDOWN | 622 | 1 word / uint16 / unsigned integer | debug information only, if value > 0 then heater relays on protection (count down) is active | 2.2.1 |
| MODBUS\_VAL\_PUMP\_COUNTDOWN | 623 | 1 word / uint16 / unsigned integer | debug information only, if value > 0 then pump relay follow-up time (count down) is active | 2.2.1 |
| [MODBUS\_VAL\_STATUS](#mbv_STATUS) | 624 | 1 word / uint16 / [flags](#mbv_STATUS) | read status of ASKOHEAT+, to switch heaters on or off use register 200 [^5.2] | 2.2.1 |
| MODBUS\_VAL\_HEATER\_LOAD | 625| 1 word / uint16 / 250-30000 watt | actual electrical heater load | 2.3.1 |
| [MODBUS\_VAL\_ACTUAL\_CONTROL\_INPUT](#mbv_ACTUAL_CONTROL_INPUT) | 626 | 1 word / byte / [flags](#mbv_ACTUAL_CONTROL_INPUT) | status of legionella protection | 4.1.0 |
| [MODBUS\_VAL\_LEGIO\_STATUS](#mbv_LEGIO_STATUS) | 627 | 1 word / byte / [flags](#mbv_LEGIO_STATUS) | status of legionella protection | 3.0.1 |
| MODBUS\_VAL\_LEGIO\_OPERATING | 628+629 | 2 words / array\[4\][^5.17] / dd:hh:mm | minute counter since last active legionella protection activation | 3.0.1 |
| MODBUS\_VAL\_LEGIO\_COUNTDOWN | 630 | 1 word / uint16 / unsinged integer | countdown timer if legionella protection is active (seconds plateau time) | 3.0.1 |
| [MODBUS\_VAL\_ERROR\_STATUS](#mbv_ERROR_STATUS) | 631 | 1 word / uint16 / [flags](#mbv_ERROR_STATUS) | error status flags temperature sensor fails can be cleared by using [MODBUS\_CMD\_CLEAR\_TEMP\_SENSOR\_ERROR](#mbc_CLEARTEMPSENSERR) | 2.2.1 |
| [MODBUS\_VAL\_TEMPERATURE\_STATUS](#mbv_TEMPERATURE_STATUS) | 632 | 1 word / byte / [flags](#mbv_TEMPERATURE_STATUS) | temperature sensor flags, installed sensors will be rembembered until they are cleard by using [MODBUS\_CMD\_CLEAR\_TEMP\_SENSOR\_ERROR](#mbc_CLEARTEMPSENSERR)| 2.2.1 |
| MODBUS\_VAL\_TEMPERATURE\_SENSOR5 | 633 | 1 word / uint16 / 0-100 °celcius | temperature of sensor 5, this sensor is not implemented yet | 2.2.1 |
| MODBUS\_VAL\_TEMPERATURE\_SENSOR4 | 634 | 1 word / uint16 / 0-100 °celcius | temperature of sensor 4, optional external PT1000 | 2.2.1 |
| MODBUS\_VAL\_TEMPERATURE\_SENSOR3 | 635 | 1 word / uint16 / 0-100 °celcius | temperature of sensor 3, optional external PT1000 | 2.2.1 |
| MODBUS\_VAL\_TEMPERATURE\_SENSOR2 | 636 | 1 word / uint16 / 0-100 °celcius | temperature of sensor 2, optional external PT1000 | 2.2.1 |
| MODBUS\_VAL\_TEMPERATURE\_SENSOR1 | 637 | 1 word / uint16 / 0-100 °celcius | temperature of sensor 1, optional external PT1000 | 2.2.1 |
| MODBUS\_VAL\_TEMPERATURE\_SENSOR0 | 638 | 1 word / uint16 / 0-100 °celcius | temperature of sensor 0, integrated in ASKOHEAT+ PT1000 | 2.2.1 |
| MODBUS\_VAL\_ANALOG\_INPUT\_STEP | 639 | 1 word / byte / 0-7 | calculated heater step based on analog input 0-10V signal | 2.2.1 |
| MODBUS\_VAL\_ACTUAL\_TEMPERATURE\_LIMIT | 640 | 1 words / uint16 / 0-99 | Actual used temperature limit, based on the actual valid control input | 4.1.0 |
| MODBUS\_VAL\_AUTO\_HEATER\_OFF\_COUNTDOWN | 641+642 | 2 / int32 / 0-1440 minutes | countdown time until auto switch off heaters | 2.2.1 |
| MODBUS\_VAL\_EMERGENCY\_OFF\_COUNTDOWN | 643+644 | 2 / int32 / 0-1440 minutes | countdown time until emergency mode will switched off | 3.1.1 |
| MODBUS\_VAL\_BOOT\_COUNT | 645+646 | 2 words / int32 / 0-100.000 | number of valve bootings of ASKOHEAT+ | 4.0.4 |
| MODBUS\_VAL\_OPERATING\_SET\_HEATER\_STEP | 647+648 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Set Heat Step | 4.1.1 |
| MODBUS\_VAL\_OPERATING\_LOAD\_SETPOINT | 649+650 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Load Setpoint | 4.1.1 |
| MODBUS\_VAL\_OPERATION\_LOAD\_FEEDIN | 651+652 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Load Feedin | 4.1.1 |
| MODBUS\_VAL\_OPERATION\_HEAT\_PUMP\_REQUEST | 653+654 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Heat Pump Request | 4.1.1 |
| MODBUS\_VAL\_OPERATION\_ANALOG\_IN | 655+656 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Analog Input | 4.1.1 |
| MODBUS\_VAL\_OPERATION\_EMERGENCY\_MODE | 657+658 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Emergency Mode | 4.1.1 |
| MODBUS\_VAL\_OPERATION\_LEGIO | 659+660 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Legionella Protection | 4.1.1 |
| MODBUS\_VAL\_OPERATION\_LOW\_TARIFF | 661+662 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Low Tariff Mode | 4.1.1 |
| MODBUS\_VAL\_OPERATION\_MINIMAL\_TEMP | 663+664 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Hold Minimal Temperature Mode | 4.1.1 |
| MODBUS\_VAL\_OPERATING\_HEATER\_STEP\_1 | 665+666 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Heater Step 1 | 4.1.1 |
| MODBUS\_VAL\_OPERATING\_HEATER\_STEP\_2 | 667+668 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Heater Step 2 | 4.1.1 |
| MODBUS\_VAL\_OPERATING\_HEATER\_STEP\_3 | 669+670 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Heater Step 3 | 4.1.1 |
| MODBUS\_VAL\_OPERATING\_HEATER\_STEP\_4 | 671+672 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Heater Step 4 | 4.1.1 |
| MODBUS\_VAL\_OPERATING\_HEATER\_STEP\_5 | 673+674 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Heater Step 5 | 4.1.1 |
| MODBUS\_VAL\_OPERATING\_HEATER\_STEP\_6 | 675+676 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Heater Step 6 | 4.1.1 |
| MODBUS\_VAL\_OPERATING\_HEATER\_STEP\_7 | 677+678 | 2 words / array\[4\] / dd:hh:mm | operation hour counter of Heater Step 7 | 4.1.1 |
| MODBUS\_VAL\_SET\_HEATER\_STEP\_COUNT | 679+680 | 2 words / int32 / 0-100.000 | number of Set Heater Step usage | 4.1.1 |
| MODBUS\_VAL\_LOAD\_SETPOINT\_COUNT | 681+682 | 2 words / int32 / 0-100.000 | number of Load Setpoint usage | 4.1.1 |
| MODBUS\_VAL\_LOAD\_FEEDIN\_COUNT | 683+684 | 2 words / int32 / 0-100.000 | number of Load Feedin usage | 4.1.1 |
| MODBUS\_VAL\_HEAT\_PUMP\_REQUEST\_COUNT | 685+686 | 2 words / int32 / 0-100.000 | number of Heat Pump Request usage | 4.1.1 |
| MODBUS\_VAL\_ANALOG\_IN\_COUNT | 687+688 | 2 words / int32 / 0-100.000 | number of Analog Input usage | 4.1.1 |
| MODBUS\_VAL\_EMERGENCY\_MODE\_COUNT | 689+690 | 2 words / int32 / 0-100.000 | number of Emergency Mode usage | 4.1.1 |
| MODBUS\_VAL\_LEGIO\_COUNT | 691+692 | 2 words / int32 / 0-100.000 | number of Legionella Protection usage | 4.1.1 |
| MODBUS\_VAL\_LOW\_TARIFF\_COUNT | 693+694 | 2 words / int32 / 0-100.000 | number of Low Tariff Mode usage | 4.1.1 |
| MODBUS\_VAL\_MINIMAL\_TEMP\_COUNT | 695+696 | 2 words / int32 / 0-100.000 | number of Hold Minimal Temperature usage | 4.1.1 |
| MODBUS\_VAL\_MAX\_TEMPERATURE | 697 | 1 word / byte (0 - 255) °celcius | Highest measured temperature | 4.1.1 |
| **Summary** | | **block: \[98\] words / \[196\] bytes** | | |
[^5.1]: array\[4\] = days (first word = uint16) : hours (2nd word, high byte) : minutes (2nd word, low byte)
[^5.2]: read register 624, for setting use register 200
#####**MODBUS\_VAL\_STATUS** and **MODBUS\_IREG\_STATUS**
> high byte:
>> * bit7: any error occurred (see [MODBUS\_VAL\_ERROR\_STATUS](#mbv_ERROR_STATUS))
>> * bit6: temperature limit reached, heaters are switched off (see [MODBUS\_CON\_TEMPERATURE\_SETTING](#mbc_TEMPERATURE_SETTING))
>> * bit5: pump ralay follow-up time is active (see [MODBUS\_VAL\_PUMP\_COUNTDOWN](#mbv_PUMP_COUNTDOWN))
>> * bit4: auto heater off is active (see [MODBUS\_CON\_AUTO\_HEATER\_OFF\_MINUTES](#mbc_AUTO_HEATER_OFF_MINUTES) and [MODBUS\_VAL\_AUTO\_HEATER\_OFF\_COUNTDOWN](#mbv_AUTO_HEATER_OFF_COUNTDOWN)) and [MODBUS\_VAL\_EMERGENCY\_OFF\_COUNTDOWN](#mbv_EMERGENCY_OFF_COUNTDOWN))
>> * bit3: load feedin value is active when register [MODBUS\_CMD\_LOAD\_FEEDIN\_VALUE](#mbc_LOAD_FEEDIN_VALUE) indicates a negative value and ASKOHEAT+ will reduce the grid feed-in
>> * bit2: load setpoint is active when register [MODBUS\_CMD\_LOAD\_SETPOINT\_VALUE](#mbc_LOAD_SETPOINT_VALUE) has valid positive values
>> * bit1: analog input 0-10V is active (see [MODBUS\_CON\_INPUT\_SETTING](#mbc_INPUT_SETTING) and [MODBUS\_VAL\_ANALOG\_INPUT\_STEP](#mbv_ANALOG_INPUT_STEP) and [MODBUS\_EXT\_ANALOG\_INPUT\_FLOAT](#mbe_ANALOG_INPUT_FLOAT))
>> * bit0: legionella protection is active (see [MODBUS\_VAL\_STATUS](#mbv_STATUS) and [MODBUS\_VAL\_LEGIO\_COUNTDOWN](#mbv_LEGIO_COUNTDOWN) and [MODBUS\_CON\_LEGIO\_SETTING](#mbc_LEGIO_SETTING))
> low byte:
>> * bit7: emergency mode is active (see [MODBUS\_CON\_INPUT\_SETTING](#mbc_INPUT_SETTING))
>> * bit6: heat pump request is active (see [MODBUS\_CON\_INPUT\_SETTING](#mbc_INPUT_SETTING))
>> * *bit5: heater 1-3 current flow (ASKOHEAT+ internal saftey switch or thermostat switch have not triggered)*
>> * *bit4: relay 5 - valve is active, is not implented yet*
>> * bit3: relay 4 - pump is active
>> * bit2: relay 3 - heater 3 is active
>> * bit1: relay 2 - heater 2 is active
>> * bit0: relay 1 - heater 1 is active
#####**MODBUS\_VAL\_ACTUAL\_CONTROL\_INPUT**
> high byte:
>> * bit3: software control input SENEC.Home is enabled
>> * bit2: software congrol SMA.SEMP is enabled
>> * bit1: heater actual controlled by auto heater off
>> * bit0: heater actual controlled by legionella protection
> low byte:
>> * bit7: heater actual controlled by load setpoint
>> * bit6: heater actual controlled by load feedin
>> * bit5: heater actual controlled by emergency mode
>> * bit4: heater actual controlled by heat pump request
>> * bit3: heater actual controlled by analog input
>> * bit2: heater actual controlled by set heater step
>> * bit1: heater actual controlled by low tariff mode
>> * bit0: heater actual controlled by minimal temperature mode
#####**MODBUS\_VAL\_LEGIO\_STATUS**
> low byte:
>> * bit 7: error: settings or not correct
>> * bit 6: error: temperature cannot be reached after 240 minutes (the temperature value set on the thermostat may be too low)
>> * bit 5: error: no valid temperature sensor is connected
>> * bit 4: error: Unexpected drop in temperature while pleateu timer is active
>> * bit 2: temperature outside legionella protection interval reached
>> * bit 1: temperature is reached, plateau time is active
>> * bit 0: heating up phase (see [MODBUS\_VAL\_LEGIO\_COUNTDOWN](#mbv_LEGIO_COUNTDOWN))
#####**MODBUS\_VAL\_ERROR\_STATUS**
> high byte:
>> * bit7: WLAN connection error (wifi)
>> * bit6: LAN connection error (ethernet)
>> * bit4: MODBUS RTU connection error (rs485)
>> * bit3: Error Settings: minimum one setting causes malfunction
>> * bit2: legionella proctection error (see [MODBUS\_VAL\_LEGIO\_STATUS](#mbv_LEGIO_STATUS))
>> * bit0: current flow error (If at least one radiator is activated and no current flows, then the thermostat has been deactivated or the temperature limiter has tripped. This function can be activated with the setting bit0 at [MODBUS\_CON\_INPUT\_SETTING](#mbc_INPUT_SETTING) can be activated.)
> low byte:
>> * bit7: error in the internal real time clock (actual no connection to the ntp server possible)
>> * bit6: error in the temperature settings (no sensor used or used sensor is not available)
>> * *bit5: temperatur sensor 5 without function (wire break, disconnected or fault of PT1000)*
>> * bit4: temperatur sensor 4 without function (wire break, disconnected or fault of PT1000)
>> * bit3: temperatur sensor 3 without function (wire break, disconnected or fault of PT1000)
>> * bit2: temperatur sensor 2 without function (wire break, disconnected or fault of PT1000)
>> * bit1: temperatur sensor 1 without function (wire break, disconnected or fault of PT1000)
>> * bit0: temperatur sensor 0 without function (wire break, disconnected or fault of PT1000)
#####**MODBUS\_VAL\_TEMPERATURE\_STATUS**
> high byte:
>> * bit6: temperature limit set by control input set heater step
>> * bit5: temperature limit set by control input load setpoint or feedin
>> * bit4: temperature limit set by control analog input
>> * bit3: temperature limit set by control input heat pump request or emergency mode
>> * bit2: temperature limit set by control input legionella protection
>> * bit1: temperature limit set by control input low tariff mode
>> * bit0: temperature limit set by control input hold minimal temperature
> low byte:
>> * bit6: temperature limit reached, heaters are switched off
>> * *bit5: temperatur sensor 5 is available*
>> * bit4: temperatur sensor 4 is available, optional external PT1000
>> * bit3: temperatur sensor 3 is available, optional external PT1000
>> * bit2: temperatur sensor 2 is available, optional external PT1000
>> * bit1: temperatur sensor 1 is available, optional external PT1000
>> * bit0: temperatur sensor 0 is available, ASKOHEAT+ internal PT1000
[Back to Table of Contents](#Content)
###**7. Extended Values Block - Address 700...758 - read only**
**Additional values are listed in this block, e.g. temperature values as floating point. In normal applications these registers are not needed.**
* modbus function 4 read input register
| **\#define (JSON, C++, Python, ...)** | **Modbus Address** | **Data** | **Description** | **Vers.** |
| --- | --- | --- | --- | --- |
| [MODBUS\_EXT\_STATUS](#mbv_STATUS) | 700 | 1 word / uint16 / [flags](#mbv_STATUS) | read status of ASKOHEAT+, to switch heaters on or off use register 200 [^5.2] | 2.2.1 |
| MODBUS\_EXT\_HEATER\_LOAD | 701 | 1 word / int16 / 250-30000 watt | actual electrical heater load | 2.3.1 |
| *MODBUS\_EXT\_RESERVED* | *702* | *1 word* / *int16* / *tbd* | *reserved for future features* | *tbd* |
| [MODBUS\_EXT\_LEGIO\_STATUS](#mbv_LEGIO_STATUS) | 703 | 1 word / byte / [flags](#mbv_LEGIO_STATUS) | status of legionella protection | 3.0.1 |
| MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR5 | 704+705 | 2 words / float32 / floating point °celcius | temperature of sensor 5, this sensor is not implemented yet | 2.2.1 |
| MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR4 | 706+707 | 2 words / float32 / floating point °celcius | temperature of sensor 4, optional external PT1000 | 2.2.1 |
| MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR3 | 708+709 | 2 words / float32 / floating point °celcius | temperature of sensor 3, optional external PT1000 | 2.2.1 |
| MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR2 | 710+711 | 2 words / float32 / floating point °celcius | temperature of sensor 2, optional external PT1000 | 2.2.1 |
| MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR1 | 712+713 | 2 words / float32 / floating point °celcius | temperature of sensor 1, optional external PT1000 | 2.2.1 |
| MODBUS\_EXT\_TEMPERATURE\_FLOAT\_SENSOR0 | 714+715 | 2 words / float32 / floating point °celcius | temperature of sensor 0, integrated in ASKOHEAT+ PT1000 | 2.2.1 |
| MODBUS\_EXT\_ANALOG\_INPUT\_FLOAT | 716 | 2 words / float32 / floating Point volt | analog input 0-10V | 2.2.1 |
| [MODBUS\_EXT\_LOAD\_SETPOINT\_VALUE](#mbc_LOAD_SETPOINT_VALUE) | 718 | 1 word / signed int16 / 250-30000 watt | Load setpoint for automatic setting of the optimum power level of the ASKOHEAT+. | 2.3.1 |
| [MODBUS\_EXT\_LOAD\_FEEDIN\_VALUE](#mbc_LOAD_FEEDIN_VALUE") | 719 | 1 word / signed int16 / -30000..30000 watt | Use Case "Power to Heat": negative values activate thermal storage, ASKOHEAT+ automatically switches to the correct level. | 4.2.1 |
| MODBUS\_EXT\_RESERVE1 | 720...744 | 5 / char\[10\] / text string | reserved for future use | 2.2.1 |
| MODBUS\_EXT\_MILLIS | 725+726 | 2 / int32 / 0-4.294.967.295 | debug information only (RTOS milliseconds) | 2.2.1 |
| MODBUS\_EXT\_RESERVE2 | 727...742 | 16 / char\[32\] / text string | reserved for future use | 2.2.1 |
| MODBUS\_EXT\_RESERVE3 | 743...758 | 16 / char\[32\] / text string | reserved for future use | 2.2.1 |
| **Summary** | | **block: \[59\] words / \[118\] byes** | | |
[Back to Table of Contents](#Content)