How to connect to IMMERGAS Magis Combo V2 / Magis Pro V2 heat pump via MODBUS into HA

  1. These are the results:
    Immergas - Zone 2 min CH? candidate (near R08 3003) (3004)	1	
    Immergas - Zone 2⁄3 CH candidate (gap 4351-4356) (4352)	NA	
    Immergas - Zone 2⁄3 CH candidate (gap 4351-4356) (4353)	NA	
    Immergas - Zone 2⁄3 candidate (near R08) (3005)	NA	
    Immergas - Zone 2⁄3 cooling candidate (gap 4351-4356) (4354)	NA	
    Immergas - Zone 2⁄3 cooling candidate (gap 4351-4356) (4355)	NA

With some error on the log:

13:30:34	[W]	[modbus:247]	
Error function code: 0x83 exception: 2, address: 11, 17ms after last send
13:30:34	[E]	[modbus_controller:097]	
Modbus error function code: 0x3 exception: 2 
13:30:34	[E]	[modbus_controller:104]	
Modbus error - last command: function code=0x3  register address = 0x11C7  registers count=1 payload size=0
13:30:34	[W]	[modbus:247]	
Error function code: 0x83 exception: 2, address: 11, 22ms after last send
13:30:34	[E]	[modbus_controller:097]	
Modbus error function code: 0x3 exception: 2 
13:30:34	[E]	[modbus_controller:104]	
Modbus error - last command: function code=0x3  register address = 0xBBD  registers count=1 payload size=0
13:30:34	[W]	[modbus:247]	
Error function code: 0x83 exception: 2, address: 11, 25ms after last send
13:30:34	[E]	[modbus_controller:097]	
Modbus error function code: 0x3 exception: 2 
13:30:34	[E]	[modbus_controller:104]	
Modbus error - last command: function code=0x3  register address = 0x11CA  registers count=1 payload size=0
13:30:34	[W]	[modbus:247]	
Error function code: 0x83 exception: 2, address: 11, 29ms after last send
13:30:34	[E]	[modbus_controller:097]	
Modbus error function code: 0x3 exception: 2 
13:30:34	[E]	[modbus_controller:104]	
Modbus error - last command: function code=0x3  register address = 0x1100  registers count=1 payload size=0
13:30:34	[W]	[modbus:247]	
Error function code: 0x83 exception: 2, address: 11, 25ms after last send
13:30:34	[E]	[modbus_controller:097]	
Modbus error function code: 0x3 exception: 2 
13:30:34	[E]	[modbus_controller:104]	
Modbus error - last command: function code=0x3  register address = 0x11CD  registers count=1 payload size=0
13:30:34	[W]	[modbus:247]	
Error function code: 0x83 exception: 2, address: 11, 31ms after last send
13:30:34	[E]	[modbus_controller:097]	
Modbus error function code: 0x3 exception: 2 
13:30:34	[E]	[modbus_controller:104]	
Modbus error - last command: function code=0x3  register address = 0x1101  registers count=1 payload size=0
13:30:35	[W]	[modbus:247]	
Error function code: 0x83 exception: 2, address: 11, 22ms after last send
13:30:35	[E]	[modbus_controller:097]	
Modbus error function code: 0x3 exception: 2 
13:30:35	[E]	[modbus_controller:104]	
Modbus error - last command: function code=0x3  register address = 0x11E9  registers count=1 payload size=0
13:30:35	[W]	[modbus:247]	
Error function code: 0x83 exception: 2, address: 11, 27ms after last send
13:30:35	[E]	[modbus_controller:097]	
Modbus error function code: 0x3 exception: 2 
13:30:35	[E]	[modbus_controller:104]	
Modbus error - last command: function code=0x3  register address = 0x1102  registers count=1 payload size=0
13:30:35	[W]	[modbus:247]	
Error function code: 0x83 exception: 2, address: 11, 24ms after last send
13:30:35	[E]	[modbus_controller:097]	
Modbus error function code: 0x3 exception: 2 
13:30:35	[E]	[modbus_controller:104]	
Modbus error - last command: function code=0x3  register address = 0x11F8  registers count=1 payload size=0
13:30:35	[W]	[modbus:247]	
Error function code: 0x83 exception: 2, address: 11, 28ms after last send
13:30:35	[E]	[modbus_controller:097]	
Modbus error function code: 0x3 exception: 2 
13:30:35	[E]	[modbus_controller:104]	
Modbus error - last command: function code=0x3  register address = 0x1103  registers count=1 payload size=0
13:30:35	[E]	[modbus_helpers:087]	
not enough data for value type=1 offset=2 size=2 required=2
13:30:35	[E]	[modbus_helpers:076]	
not enough data for value type=1 offset=4 size=2
13:30:35	[E]	[modbus_helpers:087]	
not enough data for value type=1 offset=2 size=2 required=2
  1. I can Attach the log
Done: reg 0-999, found 1
Done: reg 1000-1999, found 0
Done: reg 2000-2999, found 6
Done: reg 3000-3999, found 13
Done: reg 4000-4999, found 28
Done: reg 5000-5999, found 0
Done: reg 6000-6999, found 15
Done: reg 7000-7999, found 0
Done: reg 8000-8999, found 0
Done: reg 9000-9999, found 0
[14:34:51.353][I][T_PDU_SCAN:071]:	OK	reg=512	value=0
[14:37:23.525][I][T_PDU_SCAN:071]:	OK	reg=2000	value=1
[14:37:25.128][I][T_PDU_SCAN:071]:	OK	reg=2010	value=0
[14:37:25.281][I][T_PDU_SCAN:071]:	OK	reg=2011	value=0
[14:37:38.729][I][T_PDU_SCAN:071]:	OK	reg=2095	value=500
[14:37:39.530][I][T_PDU_SCAN:071]:	OK	reg=2100	value=0
[14:37:39.845][I][T_PDU_SCAN:071]:	OK	reg=2102	value=0
[14:41:18.748][I][T_PDU_SCAN:071]:	OK	reg=3000	value=563
[14:41:18.904][I][T_PDU_SCAN:071]:	OK	reg=3001	value=543
[14:41:19.054][I][T_PDU_SCAN:071]:	OK	reg=3002	value=310
[14:41:19.214][I][T_PDU_SCAN:071]:	OK	reg=3003	value=0
[14:41:21.315][I][T_PDU_SCAN:071]:	OK	reg=3016	value=583
[14:41:23.066][I][T_PDU_SCAN:071]:	OK	reg=3027	value=0
[14:41:23.225][I][T_PDU_SCAN:071]:	OK	reg=3028	value=0
[14:41:23.380][I][T_PDU_SCAN:071]:	OK	reg=3029	value=32768
[14:41:27.212][I][T_PDU_SCAN:071]:	OK	reg=3053	value=0
[14:41:27.380][I][T_PDU_SCAN:071]:	OK	reg=3054	value=0
[14:41:27.699][I][T_PDU_SCAN:071]:	OK	reg=3056	value=458
[14:41:28.488][I][T_PDU_SCAN:071]:	OK	reg=3061	value=0
[14:41:28.659][I][T_PDU_SCAN:071]:	OK	reg=3062	value=0
[14:44:31.551][I][T_PDU_SCAN:071]:	OK	reg=4011	value=0
[14:45:01.960][I][T_PDU_SCAN:071]:	OK	reg=4201	value=1
[14:45:02.113][I][T_PDU_SCAN:071]:	OK	reg=4202	value=9
[14:45:25.785][I][T_PDU_SCAN:071]:	OK	reg=4350	value=42
[14:45:25.961][I][T_PDU_SCAN:071]:	OK	reg=4351	value=50
[14:45:26.753][I][T_PDU_SCAN:071]:	OK	reg=4356	value=12
[14:45:26.903][I][T_PDU_SCAN:071]:	OK	reg=4357	value=7
[14:45:34.129][I][T_PDU_SCAN:071]:	OK	reg=4402	value=4
[14:45:34.278][I][T_PDU_SCAN:071]:	OK	reg=4403	value=1
[14:45:35.550][I][T_PDU_SCAN:071]:	OK	reg=4411	value=0
[14:45:41.638][I][T_PDU_SCAN:071]:	OK	reg=4449	value=0
[14:45:41.959][I][T_PDU_SCAN:071]:	OK	reg=4451	value=1
[14:45:42.120][I][T_PDU_SCAN:071]:	OK	reg=4452	value=236
[14:45:42.271][I][T_PDU_SCAN:071]:	OK	reg=4453	value=0
[14:45:42.439][I][T_PDU_SCAN:071]:	OK	reg=4454	value=1
[14:45:42.598][I][T_PDU_SCAN:071]:	OK	reg=4455	value=231
[14:45:44.674][I][T_PDU_SCAN:071]:	OK	reg=4468	value=120
[14:45:44.844][I][T_PDU_SCAN:071]:	OK	reg=4469	value=180
[14:45:46.433][I][T_PDU_SCAN:071]:	OK	reg=4479	value=4
[14:45:57.961][I][T_PDU_SCAN:071]:	OK	reg=4551	value=310
[14:45:58.462][I][T_PDU_SCAN:071]:	OK	reg=4554	value=386
[14:45:58.910][I][T_PDU_SCAN:071]:	OK	reg=4557	value=2000
[14:45:59.097][I][T_PDU_SCAN:071]:	OK	reg=4558	value=0
[14:46:03.399][I][T_PDU_SCAN:071]:	OK	reg=4585	value=396
[14:46:03.550][I][T_PDU_SCAN:071]:	OK	reg=4586	value=0
[14:46:03.710][I][T_PDU_SCAN:071]:	OK	reg=4587	value=0
[14:46:03.876][I][T_PDU_SCAN:071]:	OK	reg=4588	value=0
[14:46:05.800][I][T_PDU_SCAN:071]:	OK	reg=4600	value=0
[14:47:45.476][I][T_PDU_SCAN:071]:	OK	reg=6000	value=3
[14:47:45.803][I][T_PDU_SCAN:071]:	OK	reg=6002	value=0
[14:47:47.085][I][T_PDU_SCAN:071]:	OK	reg=6010	value=70
[14:47:47.241][I][T_PDU_SCAN:071]:	OK	reg=6011	value=100
[14:47:47.561][I][T_PDU_SCAN:071]:	OK	reg=6013	value=1
[14:47:47.723][I][T_PDU_SCAN:071]:	OK	reg=6014	value=0
[14:49:05.500][I][T_PDU_SCAN:071]:	OK	reg=6500	value=300
[14:49:05.656][I][T_PDU_SCAN:071]:	OK	reg=6501	value=200
[14:49:05.821][I][T_PDU_SCAN:071]:	OK	reg=6502	value=0
[14:49:05.969][I][T_PDU_SCAN:071]:	OK	reg=6503	value=0
[14:49:06.129][I][T_PDU_SCAN:071]:	OK	reg=6504	value=0
[14:49:06.296][I][T_PDU_SCAN:071]:	OK	reg=6505	value=83
[14:49:06.443][I][T_PDU_SCAN:071]:	OK	reg=6506	value=14
[14:49:06.597][I][T_PDU_SCAN:071]:	OK	reg=6507	value=1
[14:49:07.086][I][T_PDU_SCAN:071]:	OK	reg=6510	value=1
  1. About status Codes: i use the heat pump only for heating and hot water.
    Maybe this evening i can try to force it to start also in cooling for a short time and see the status.
D99 = 1 When Z2 cooling request
D99 = 6 When Z2 Heating request
D99 = 61 When DHW with solar boost input
D99 = 64 When DHW with electric heater (not heatpump)
D97 = 342 When Z2 cooling request

Anyway if could be useful my zone 1 have classic thermostat on-off. Zone 2 have Immergas Remote Zone Panel.

If you need i have full dump but Was easyer paste here only OK Messages

Huge thanks GianVv — your scan already found things I couldn't see on my single-zone unit. Three registers that are dead on my system respond on yours: 2011, 3053, 3062. I think 2011 is the Zone 2 thermostat/heat-request (it sits right next to 2010 = Zone 1). Could you check one thing: when your Zone 2 remote panel is actively calling for heat, does register 2011 change from 0 to 1? And do 3053 / 3062 show any value then? That would confirm the Zone 2 mapping.

Two more notes from your log: 3003 reads 0 on your system too, so it's probably not the Zone 2 max-CH setpoint after all (I'll re-check). And 4453 is 0 on yours vs 1 on mine — interesting, might be zone-config related. Thanks again — this is exactly the data the map needed! :folded_hands:

2011 don't turn on when heatings zone 2
3053 and 3062 always to 0

Now I'm playing with DD bus, but I have. some troubles.... Just trying to get it work

Thanks for testing all of that, GianVv — it actually settles the question.

So on your 2-zone unit, 2011 / 3053 / 3062 do exist (they're dead on my single-zone system), but they carry no usable zone-2 info: 2011 doesn't turn on when zone 2 heats, and 3053 / 3062 stay at 0. Their mere existence just signals "2 zones configured" — they're not request/data flags.

Conclusion: the T-/T+ (BMS) bus is a dead end for per-zone stuff. It exposes the global/generator picture — operating mode, DHW, outdoor temp, heat-pump/refrigerant data, faults, system state — plus at most zone-1-style setpoints, but no real per-zone control or per-zone sensors. All the multi-zone logic (room setpoints, per-zone requests, chrono/schedules, comfort/eco) lives entirely on the D+/D- (Dominus) bus. So you're already looking in the right place by moving to DD.

That also matches how I mapped it here: T-/T+ = the heat pump / generic system view; D+/D- = zones + panels + schedules.

“Their mere existence just signals "2 zones configured" — they're not request/data flags.”

I think too.
When I i launch the Dominus app always appear only 1 zone + DHW, and after a few scan the zone 2 appear, so i think Dominus will read/poll the zone panels to load the correct config.

I was trying to move to DD bus, Just Because TT is limited