For anybody interested, I’d like to share my Modbus TCP configuration for the Aqotec RM360. Feel free to use it as a template and adjust to your preferences. The template in configuration.yaml is mostly for adjusting the decimal places. Please note that the hardware configuration can be a bit different in your case, therefore I recommend to compare the values with the readings from RM360 display and the wiring diagram.
Modbus.yaml:
# TCP connection
- name: Heating
type: tcp
host: 192.168.1.26
port: 502
delay: 3
timeout: 2
sensors:
######### Temperaure probes ##########
- name: HeatBuffer_7T5_WarmWater_HK3
unique_id: d3f039970-ad43-HeatBuffer7T5
unit_of_measurement: °C
slave: 1
address: 43090
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatBuffer_9T4_TankMiddleTop
unique_id: d3f039970-ad44-HeatBuffer9T4
unit_of_measurement: °C
slave: 1
address: 43266
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatBuffer_9T5_TankMiddleBottom
unique_id: d3f039970-ad45-HeatBuffer9T5
unit_of_measurement: °C
slave: 1
address: 43268
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatBuffer_T10_OutsideTemp
unique_id: d3f039970-ad46-HeatBufferT10
unit_of_measurement: °C
slave: 1
address: 43000
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatBuffer_T11_PrimaryReturn
unique_id: d3f039970-ad47-HeatBufferT11
unit_of_measurement: °C
slave: 1
address: 43001
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatBuffer_T12_SecondaryFeed
unique_id: d3f039970-ad48-HeatBufferT12
unit_of_measurement: °C
slave: 1
address: 43002
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatBuffer_T13_BoilerTop
unique_id: d3f039970-ad49-HeatBufferT13
unit_of_measurement: °C
slave: 1
address: 43354
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
### Not Connected ###
# - name: HeatBuffer_T14_BoilerBottom
# unique_id: d3f039970-ad53-HeatBufferT14
# unit_of_measurement: °C
# slave: 1
# address: 43355
# data_type: int16
# scan_interval: 1
# device_class: temperature
# state_class: measurement
- name: HeatBuffer_T15_SecondaryReturn
unique_id: d3f039970-ad50-HeatBufferT15
unit_of_measurement: °C
slave: 1
address: 43003
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatBuffer_T16_FeedHK2
unique_id: d3f039970-ad51-HeatBufferT16
unit_of_measurement: °C
slave: 1
address: 43054
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatBuffer_T17_Circulation
unique_id: d3f039970-ad52-HeatBufferT17
unit_of_measurement: °C
slave: 1
address: 43027
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
### Not Connected ###
# - name: HeatBuffer_T20_RL
# unique_id: d3f039970-ad44-HeatBuffer_T20_RL
# unit_of_measurement: °C
# slave: 1
# address: 43056
# data_type: int16
# scan_interval: 1
# device_class: temperature
# state_class: measurement
- name: HeatBuffer_5T23_TankTop
unique_id: d3f039970-ad54-HeatBuffer5T23
unit_of_measurement: °C
slave: 1
address: 43377
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatBuffer_5T24_TankBottom
unique_id: d3f039970-ad55-HeatBuffer5T24
unit_of_measurement: °C
slave: 1
address: 43378
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
########## Presets ##########
- name: HeatPresetTemp_HK0
unique_id: d3f039970-ad01-PresetTemp_HK0
unit_of_measurement: °C
slave: 1
address: 43004
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatPresetTemp_SpKr1
unique_id: d3f039970-ad02-PresetTemp_SpKr1
unit_of_measurement: °C
slave: 1
address: 43360
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
# - name: HeatPresetTemp_Feed_HK1
# unique_id: d3f039970-ad03-PresetTemp_Feed_HK1
# unit_of_measurement: °C
# slave: 1
# address: 43026
# data_type: int16
# scan_interval: 1
# device_class: temperature
# state_class: measurement
# - name: HeatPresetTemp_Feed_HK2
# unique_id: d3f039970-ad04-PresetTemp_Feed_HK2
# unit_of_measurement: °C
# slave: 1
# address: 43055
# data_type: int16
# scan_interval: 1
# device_class: temperature
# state_class: measurement
########## Status ##########
- name: HeatOperatingState_HK1
unique_id: d3f039970-ad05-OperatingState_HK1
unit_of_measurement: state
slave: 1
address: 43032
data_type: int16
scan_interval: 1
state_class: measurement
# - name: HeatOperatingState_HK2
# unique_id: d3f039970-ad06-OperatingState_HK2
# unit_of_measurement: state
# slave: 1
# address: 43060
# data_type: int16
# scan_interval: 1
# state_class: measurement
# - name: HeatOperatingState_Spkr1
# unique_id: d3f039970-ad07-OperatingState_Spkr1
# unit_of_measurement: state
# slave: 1
# address: 43363
# data_type: int16
# scan_interval: 1
# state_class: measurement
- name: HeatState_Ubergabestation
unique_id: d3f039970-ad08-State_UbergabeStation
unit_of_measurement: state
slave: 1
address: 43010
data_type: int16
scan_interval: 1
state_class: measurement
- name: HeatOutputState_Pump_3
unique_id: d3f039970-ad09-OutputState_Pump_3
unit_of_measurement: state
slave: 1
address: 43029
data_type: int16
scan_interval: 1
state_class: measurement
# - name: HeatOutputState_LadePumpe_4
# unique_id: d3f039970-ad10-OutputState_LadePumpe_4
# unit_of_measurement: state
# slave: 1
# address: 43361
# data_type: int16
# scan_interval: 1
# state_class: measurement
- name: HeatOutputState_Pump_8
unique_id: d3f039970-ad11-OutputState_Pump_8
unit_of_measurement: state
slave: 1
address: 43058
data_type: int16
scan_interval: 1
state_class: measurement
- name: HeatState_Mischer_M67
unique_id: d3f039970-ad12-Status_Mischer_M67
unit_of_measurement: state
slave: 1
address: 43059
data_type: int16
scan_interval: 1
state_class: measurement
- name: HeatStatus_3way_Valve_M12
unique_id: d3f039970-ad13-Status_3way_Valve_M12
unit_of_measurement: state
slave: 1
address: 43005
data_type: int16
scan_interval: 1
state_class: measurement
- name: HeatCalculated_ValvePosition_HK0
unique_id: d3f039970-ad14-Calculated_ValvePosition_HK0
unit_of_measurement: state
slave: 1
address: 43007
data_type: int16
scan_interval: 1
state_class: measurement
########### HeatMeter ##########
- name: HeatMeter
unique_id: d3f039970-ad56-HeatMeter
unit_of_measurement: kWh
slave: 1
address: 43750
data_type: float32
scan_interval: 1
device_class: energy
state_class: total_increasing
- name: HeatFeed
unique_id: d3f039970-ad57-HeatFeed
unit_of_measurement: °C
slave: 1
address: 43758
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatReturn
unique_id: d3f039970-ad58-HeatReturn
unit_of_measurement: °C
slave: 1
address: 43759
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
- name: HeatFlow
unique_id: d3f039970-ad59-HeatFlow
unit_of_measurement: l/h
slave: 1
address: 43756
data_type: float32
scan_interval: 1
device_class: volume_flow_rate
state_class: measurement
- name: HeatVolume_in_m3
unique_id: d3f039970-ad60-Volume_in_m3
unit_of_measurement: m³
slave: 1
address: 43752
data_type: float32
scan_interval: 1
device_class: volume
state_class: measurement
- name: HeatActualPower_in_kW
unique_id: d3f039970-ad61-Actual_power_in_kW
unit_of_measurement: kW
slave: 1
address: 43754
data_type: float32
scan_interval: 1
device_class: power
state_class: measurement
- name: HeatSpreizung_in_K
unique_id: d3f039970-ad62-Spreizung_in_K
unit_of_measurement: K
slave: 1
address: 43760
data_type: int16
scan_interval: 1
device_class: temperature
state_class: measurement
configuration.yaml
# Platform Template:
- platform: template
sensors:
heatfeed_act:
friendly_name: "HeatFeed Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatfeed') | float / 100 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatreturn_act:
friendly_name: "HeatReturn Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatreturn') | float / 100 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_7t5_warmwater_act:
friendly_name: "HeatBuffer_7T5_WarmWater_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_7t5_warmwater') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_9t4_tankmiddletop_act:
friendly_name: "HeatBuffer_9T4_TankMiddleTop_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_9t4_tankmiddletop') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_9t5_tankmiddlebottom_act:
friendly_name: "HeatBuffer_9T5_TankMiddleBottom_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_9t5_tankmiddlebottom') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_t10_outsidetemp_act:
friendly_name: "HeatBuffer_T10_OutsideTemp_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_t10_outsidetemp') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_t11_primaryreturn_act:
friendly_name: "HeatBuffer_T11_PrimaryReturn_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.HeatBuffer_T11_PrimaryReturn') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_t12_secondaryfeed_act:
friendly_name: "HeatBuffer_T12_SecondaryFeed_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_t12_secondaryfeed') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_t13_boilertop_act:
friendly_name: "HeatBuffer_T13_BoilerTop_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_t13_boilertop') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_t15_secondaryreturn_act:
friendly_name: "HeatBuffer_T15_SecondaryReturn_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_t15_secondaryreturn') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_t16_feedhk2_act:
friendly_name: "HeatBuffer_T16_FeedHK2_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_t16_feedhk2') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_t17_circulation_act:
friendly_name: "HeatBuffer_T17_Circulation_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_t17_circulation') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_5t23_tanktop_act:
friendly_name: "HeatBuffer_5T23_TankTop_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_5t23_tanktop') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heatbuffer_5t24_tankbottom_act:
friendly_name: "HeatBuffer_5T24_TankBottom_Act"
unit_of_measurement: "°C"
value_template: "{{ states('sensor.heatbuffer_5t24_tankbottom') | int / 10 }}"
attribute_templates:
device_class: "temperature"
state_class: "measurement"
heat_operatingstate_hk1:
friendly_name: "HeatOperatingState_HK1_Act"
unique_id: "d3f039970-ad05-OperatingState_HK1_Act"
device_class: "enum"
value_template: >
{% set states = {
0: 'Tagbetrieb',
1: 'Absenkung',
2: 'Partybetrieb',
3: 'Nutzungszeitraum-Betrieb',
4: 'AUS-AT-Abschaltung',
5: 'AUS-Raumtempabschaltung',
6: 'WW-Nachrang-Abschaltung',
7: 'Pufferuntertemperaturabschaltung',
8: 'extern Aus/FS',
9: 'Nichtnutzungszeitraum/FS',
10: 'Frostschutzbetrieb',
11: 'Estrichausheizung',
12: 'Handbetrieb'
} %}
{{ states[states('sensor.heat_operatingstate_hk1')] if states('sensor.heat_operatingstate_hk1') in states else 'Unknown' }}
attribute_templates:
device_class: "state"
state_class: "measurement"
heat_operatingstate_hk2:
friendly_name: "HeatOperatingState_HK2_Act"
unique_id: "d3f039970-ad06-OperatingState_HK2_Act"
device_class: "enum"
value_template: >
{% set states = {
0: 'Tagbetrieb',
1: 'Absenkung',
2: 'Partybetrieb',
3: 'Nutzungszeitraum-Betrieb',
4: 'AUS-AT-Abschaltung',
5: 'AUS-Raumtempabschaltung',
6: 'WW-Nachrang-Abschaltung',
7: 'Pufferuntertemperaturabschaltung',
8: 'extern Aus/FS',
9: 'Nichtnutzungszeitraum/FS',
10: 'Frostschutzbetrieb',
11: 'Estrichausheizung',
12: 'Handbetrieb'
} %}
{{ states[states('sensor.heat_operatingstate_hk2')] if states('sensor.heat_operatingstate_hk2')|int in states else 'Unknown' }}
heat_operatingstate_spkr1:
friendly_name: "HeatOperatingState_Spkr1_Act"
unique_id: d3f039970-ad07-OperatingState_Spkr1_Act
device_class: "enum"
value_template: >
{% set states = {
0: 'AUS/geladen',
1: 'Aus/Frostschutz',
2: 'Ladepause',
3: 'MinimaltempLdg.',
4: 'Zeitldg.',
5: 'einmalige Ladung händisch',
6: 'Ladung wg. Kontakt',
7: 'Zwangsladung aufgrund Visuanforderung',
8: 'Desinfektion automatisch',
9: 'Desinfektion wg. Kontakt',
10: 'Desinfektion bis deakt. Händisch',
11: 'Desinfektion bis Temp. Händisch',
12: 'Handbetrieb'
} %}
{{ states[states('sensor.heat_operatingstate_spkr1')] if states('sensor.heat_operatingstate_spkr1')|int in states else 'Unknown' }}
heat_state_ubergabestation:
friendly_name: "HeatState_Ubergabestation_Act"
unique_id: d3f039970-ad08-State_UbergabeStation_Act
device_class: "enum"
value_template: >
{% set states = {
0: 'AUS',
1: 'EIN im Normalbetrieb',
2: 'Station in RL-Begrenzung',
3: 'Station in Leistungsbegrenzung',
4: 'extern Aus',
5: 'Handbetrieb Ventil'
} %}
{{ states[states('sensor.heat_state_ubergabestation')] if states('sensor.heat_state_ubergabestation')|int in states else 'Unknown' }}
#Modbus
modbus: !include modbus.yaml