-
Notifications
You must be signed in to change notification settings - Fork 32
Itho WPU Heat pump support
- A supported Itho heat pump, e.g. WPU 5G 5.5kW, WPU 4G.
Other versions / prior generations may work but have not been tested yet. - Non-CVE add-on obtained from NRG Watch
- In case of problems, check for a newer version of the add-on firmware, e.g. by using the Web-Interface
- Connect the non-CVE add-on via a straight UTP cable (e.g. CAT5E/CAT6) to the black service socket on the heat-pump.
Do NOT connect a UTP cable from the WPU unit to your laptop! - Perform further configuration via the web page of the add-on: join existing WiFi network, MQTT as per non-CVE guide.
There is a special topic about this add-on and usage with the WPU with a lot of information: Tweakers.net WPU topic
- All operational parameters in the status page.
- Used electric energy (kWh) per mode (boiler, heating, cooling, standby)
Note: Electric energy is not (or may not be) available in units sold from 2023 (hardware version 78). It is confirmed to work on hardware version 76 (2022). - WPU counters: Runtime, number of compressor starts etc.
Note: Must be enabled separately (see below) - View device type / version (Under debug)
- Experimental features (see below)
For now:
- Control of temperature and heating preference
Using manual control (see below) it is possible to block and enable heating/cooling/DHW at will. - Anything related to fan speed on the add-on web page.
The WPU records counters (depending on firmware version), which can be viewed when enabled in system settings.
Enable counters (4210) in i2c commands on the system settings page in the webinterface:
polling frequency can be set separately for counters in the system settings page. The default is 3600 seconds, one hour, as counter data does not need to be polled as frequently as other status info, and the i2c bus is quite overloaded as it is. It is recommended to keep the polling interval large.
When enabled the counter information is visible in the status page (after the first poll) and it is also added to the ithostatus MQTT message.
Example: (note that depending on the WPU firmware version, not all rows may be visible)
E-consumption is only available in WPU firmware >= 34. Source energy is only available in WPU firmware >= 37.
Note that the used electrical energy is in kWh * 10, and is reported in normal kWh in the normal status message. This info can be considered obsolete and can be disregarded. The energy to/from source seems to be in kWh * 10 as well (MWh/100).
If there is no counter information in the status page, you can use the "Query Counters" button on the Debug page to poll counters. When the command is succesful (reply is visible on the debug page) counters should be added to status page and MQTT.
Example config for sensors measuring pressure, temperature in boiler, room, CV supply and return temp, status, boiler mode (e.g. Eco / Comfort) and kWh total to date.
It is possible to calculate via Home Assistant the daily kWh usage.
The WPU Power Used sensor can be used with the Energy dashboard too. Adjust sensors to meet your own requirements.
The below works with the current 2.3.5 version
mqtt:
sensor:
- name: "Itho WPU CV Pressure"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['CV pressure (Bar)'] }}"
unique_id: "itho_wpu_bar"
state_class: "measurement"
device_class: "pressure"
unit_of_measurement: "bar"
- name: "Itho WPU Flow rate (l/h)"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['Flow sensor (lt_hr)'] }}"
unique_id: "itho_wpu_flowrate"
state_class: "measurement"
- name: "Itho WPU CV Return"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['CV return temp (°C)'] }}"
unique_id: "itho_wpu_cv_return"
state_class: "measurement"
device_class: "temperature"
unit_of_measurement: "°C"
- name: "Itho WPU Status"
state_topic: "itho/ithostatus"
value_template: >
{% set st = value_json.Status| int %}
{% if st == 0 %}
init
{% elif st == 1 %}
off
{% elif st == 2 %}
cv
{% elif st == 3 %}
boiler
{% elif st == 4 %}
cooling
{% elif st == 5 %}
venting
{% endif %}
unique_id: "itho_wpu_status"
- name: "Itho WPU Boiler temp"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['Boiler temp up (°C)'] }}"
unique_id: "itho_wpu_boiler_temp"
state_class: "measurement"
device_class: "temperature"
unit_of_measurement: "°C"
- name: "Itho WPU CV Supply"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['CV supply temp (°C)'] }}"
unique_id: "itho_wpu_cv_supply"
state_class: "measurement"
device_class: "temperature"
unit_of_measurement: "°C"
- name: "Itho WPU Requested temp"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['Requested room temp (°C)'] }}"
unique_id: "itho_wpu_cv_req_temp"
state_class: "measurement"
device_class: "temperature"
unit_of_measurement: "°C"
- name: "Itho WPU Temp from source"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['Temp from source (°C)'] }}"
unique_id: "itho_wpu_temp_from_source"
state_class: "measurement"
device_class: "temperature"
unit_of_measurement: "°C"
- name: "Itho WPU Temp to source"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['Temp to source (°C)'] }}"
unique_id: "itho_wpu_temp_to_source"
state_class: "measurement"
device_class: "temperature"
unit_of_measurement: "°C"
- name: "Itho WPU Total Power Used"
state_topic: "itho/ithostatus"
value_template: >
{% if is_number(value_json['E-consumption during stand-by (kWh)']) %}
{{ (value_json['E-consumption during stand-by (kWh)']| float + value_json['E-consumption during DHW (kWh)']| float + value_json['E-consumption during heating (kWh)']| float + value_json['E-consumption during cooling (kWh)']| float) | float }}
{% else %}
None
mqtt{% endif %}
unique_id: "itho_wpu_total_energy"
state_class: "total"
device_class: "energy"
unit_of_measurement: "kWh"
- name: "Itho WPU Current Room temp"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['Room temp (°C)'] }}"
unique_id: "itho_wpu_roomtemp"
state_class: "measurement"
device_class: "temperature"
unit_of_measurement: "°C"
- name: "Itho WPU CV pump percent"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['Cv pump (%)'] }}"
unique_id: "itho_wpu_cv_pump"
state_class: "measurement"
unit_of_measurement: '%'
- name: "Itho WPU Source pump percent"
state_topic: "itho/ithostatus"
value_template: "{{ value_json['Well pump (%)'] }}"
unique_id: "itho_wpu_well_pump"
state_class: "measurement"
unit_of_measurement: '%'
- name: "Itho WPU Thermostat mode"
state_topic: "itho/ithostatus"
value_template: >
{% if value_json['ECO selected on thermostat'] == 1 %}Eco{% endif %}
{% if value_json['Comfort selected on thermostat'] == 1 %}Comfort{% endif %}
{% if value_json['Boiler boost from thermostat'] == 1 %}Boost{% endif %}
{% if value_json['Venting from thermostat'] == 1 %}Venting{% endif %}
{% if value_json['Tariff low from thermostat'] == 1 %}Low{% endif %}
{% if value_json['Boiler blocked from thermostat'] == 1 %}Off{% endif %}
unique_id: "itho_wpu_thermostat_mode"
To report on daily usage in kWh, configure the utility meter in configuration.yaml
utility_meter:
energy_wpu:
source: sensor.itho_wpu_total_power_used
cycle: daily
name: Daily WPU power use
This is generated daily and it can take a day before the calculation is available.
The WPU can recieve outside temperature information from a monitoring service, when no sensor is present. We can set the outside temp in the WPU by spoofing this i2c command (i2c message class CE30
). The WPU main Spider will transmit this outdoor temperature to paired Autotemp units.
Note
The WPU might already receive the outside temperature via a contract with a company, e.g. often Klimaatgarant for The Netherlands.
Outside temperature can be set in de Debug menu using the CE30 button and via MQTT. Example MQTT command (topic: itho/cmd)
{
"outside_temp": 12
}
Optionally one can set a temporary temperature that will be valid until the specified unix timestamp. After the timestamp, the temperature will fall back to the specified outside temp.
{
"outside_temp": 4
"temporary_outside_temp": 10
"valid_until": 1677936000
}
This will set the outside temp to 10 degrees until timestamp 1677936000
. After that timestamp the outside temp will remain at 4 degrees.
Behaviour of the outside temperature / outdoor sensor is controlled by the setting "Outdoor sensor" (usually setting number 8):
- For WPU firmware below version 35, set setting "Outdoor sensor" to
2
. - For WPU firmware from version 35 and up this setting can be left at the default
0
. - When this setting is at
1
, the connected outdoor sensor will be read and CE30 commands will be ignored.
Manual control ie. the 4030 command is low level "manual control" of your itho unit. Use with care and use only if you know what you are doing! Make sure you set the "Max manual operation time" setting in the settings page. The itho unit will remain in manual mode until the timer expires. 0 means unlimited.
json keys explaination:
"manual_operation_index": manual_operation_index description (dataype uint16_t)
"manual_operation_datatype": manual_operation_datatype description (dataype uint8_t)
"manual_operation_value": manual_operation_value description (dataype uint16_t)
"manual_operation_checked": manual_operation_checked description (dataype uint8_t)
Example of an MQTT manual operation json:
{
"manual_operation_index":34,
"manual_operation_datatype":0,
"manual_operation_value":0,
"manual_operation_checked":1
}
This example blocks cooling. (Set "enable cooling" to 0)
Index | Description | Value | Datatype |
---|---|---|---|
0 | Outside temperature | -25 - 50 | 146 (0x92) |
15 | Enable low tariff | 0/1 | 0 |
20 | Source pump speed | 0 - 100 | 0 |
30 | Set total heat demand | 0 - 100 | 0 |
31 | Enable electric element | 0/1 | 0 |
33 | Enable CH heating | 0/1 | 0 |
34 | Enable Cooloing | 0/1 | 0 |
36 | Set DHW Mode | 0=Eco | 0 |
1=Reserved | |||
2=Comfort | |||
3=Blocked | |||
37 | Reset All Faults | 0/1 | 0 |
Set total heat demand to 0 to block heating:
{
"manual_operation_index":30,
"manual_operation_datatype":0,
"manual_operation_value":0,
"manual_operation_checked":1
}
Enable "tariff low" to trigger DHW. This will trigger the boiler, if boiler temps are below setpoints.
{
"manual_operation_index":15,
"manual_operation_datatype":0,
"manual_operation_value":1,
"manual_operation_checked":1
}