-
Notifications
You must be signed in to change notification settings - Fork 4
Description
So I discovered that in my MasterTherm installation I have access to instant local data via the Modbus TCP protocol. This is open and does not require and authentication or additional hardware.
Hardware Requirements
I have a MasterTherm geo heatpump installed in 2022 which came with a touchscreen display in the living area:

The screen used is by CAREL called pGDX (https://www.carel.com/pgdx). The screen connects to my WiFi and I can connect to its Modbus via TCP port 502.
Testing
To test if it works, download the free Open ModScan on Windows (https://github.com/sanny32/OpenModScan/releases) and go to Connection -> Connect. Choose 'Remote TCP/IP Server' and enter your Touchscreen's IP Address. Leave the port at 502 and click OK. Now leave the address and device id at 1. Choose 03: HOLDING REGISTER under 'MODBUS Point Type'. Make sure your data display option is set to integer:

It's working if you see data listed in the registers:

Home Assistant
To add this to Home Assistant, I suggest adding support for Modbus TCP to Masterthermconnect.
- There is no module ID or device ID
- There is no email/password needed
The MasterTherm integration would need to have its settings UI changed. All that's needed is the option to choose between 'MasterTherm Cloud' and 'Modbus TCP'. Then for Modbus users only need to enter an IP address.
Modbus has different types of registers you can read and sometimes write to:
0x = Coil = 00001-09999
1x = Discrete Input = 10001-19999
3x = Input Register = 30001-39999
4x = Holding Register = 40001-49999
We are only interested in the holding registers with address range 40001-49999. All the other registers are not used for this application.
Addresses
Since the first two address locations 40001 and 40002 are used for something else, everything is shifted by 2 when compared to our current implementation. Also, all the data types are one after the other.
Everything is stored as a signed integer.
Analog
A_1 -> 40003
A_2 -> 40004
A_500 -> 40502
All the above need to be divided by 10. For example a temperature of 17.1 is stored as 171.
Digital
D_1 -> 40503
D_2 -> 40504
D_496 -> 40998
Integers
I_1 -> 40999
I_2 -> 41000
I_500 -> 41498
I think the easiest is to use PyModbus. See Solaredge Modbus for an example implementation.
Metadata
Metadata
Assignees
Labels
Projects
Status