Ariston Group integration via eBusd

Wow, thank you very much, you have opened up a world for me with this example :D.

Can I ask you one more thing about the read command, when I try to read a value, for example:
docker exec -en c19abbbdd932 ebusctl read -m 0 energymgr z1_night_temp

I get this result:

31182000026371 / 0100 = 3: energymgr z1_night_temp

in this case the result does not make sense, is the problem that the read command is not correct or can there be answers that have no value like this one?

Thanks

I know I’m asking a lot of you, but I’m entusist to be able to do it myself.

I tried to decode this string using that csv attached but the result is negative, can you help me to decode this one?

THANKS

#70 1e 2001 02 7710 / 06a4000080ff7f = 3

#r,heatpump,heatpump_EWT_temp,Heatpump Water Return Temp,,18,2000,7710,,s,IGN:1,,,,,,SIN,10,°C
#r,energymgr,heatpump_EWT_temp,Heatpump Water Return Temp,,1e,2001,7710,,s,IGN:1,,,,,,SIN,10,°C

#r,heatpump,water_flow_info,Heatpump Water Flow Data,13,1e,2000,7610771079106e13,,s,IGN:1,,,,LWT_temp,s,SIN,10,°C,,EWT_temp,s,SIN,10,°C,,evaporator_temp,s,SIN,10,°C,,flow_meter,s,UIN,10,L

#g,heatpump,coolat_data,Heatpump Coolant Data,70,1e,2001,7710,,s,IGN:2,,,,EWT_temp,s,SIN,10,C
r,heatpump,heatpump_EWT_temp,Heatpump EWT Temp,,1e,2001,7710,,s,IGN:1,,,,,,SIN,10,°C

I found the solution, i used this row:
r,heatpump,heatpump_EWT_temp,Heatpump EWT Temp,1e,2001,7710,SIN,10,°C,

because the first byte 06 is automatically excluded.

Thanks,
Matteo

Yeah the first byte is handled directly by ebusd as it is part of the standard protocol .
Ariston ebus implementation adds second byte to be ignored only on master/slave query commands, that has to be discarded with a IGN:1 field setting.

In your firmware (and many others recent versions of the devices it seems) the energy manager doesn’t reply back with a reply but with (what I interpret as) an error code /0100.

Having been asked I try to answer to Matteo’s question and otherd who would like to try decoding these are the most commonly transmitted message types, treat these as templates and with these you should be able to “read” most of the messages.

1) MASTER/SLAVE

It’s the message type used mainly by a device to request a parameter/reading from another eg.

311e200002d22c / 020119

This is read as:

31 - MASTER Address (in this case ebusd that has 31 as master and 36 as slave addresses)
1e - HP slave address
2000 - PBSB (primary and secondary bytes) in Ariston dialect of ebus is (what I interpret as) the command to be executed, 2000 stands for queryparameter
02 - LEN of the message (ebusd is able to generate this in case of writing messages, reading a parameter via ebusctl read cause the writing of a query message on the bus like the one we’re dissecting) in Ariston jargon 2 hex bytes are a single parameter
d22c - parameter code/id, in this case the HP minimum pump modulation
/ divider that separate the request from the reply, from here on the communication is from the slave to the master
02 - REPLY length, 02 hex bytes, ebusd use this to check that all bytes have been received then discard it, doesn’t need to be parsed
01 - Ariston dialect addition: represents the number of parameter that are replied back, it’s generated with the formula 0x(2^n-1) where n is the number of parameters here a single one (2^1-1=1)
19 - value in hex of d22c parameter (0x19= 25 dec) my HP pump is set to go down to minimum 25% of the modulation

Master/Slave commands usually request more parameter with a single query: eg:

7f1e200004704f7217 / 05036300bf00

7f - Sensys master address
1e - HP slave
2000 - query
04 - 04 hex bytes, 2 parameters
704f - 1st par. (heatpump_exp_valve)
7217 - 2nd par. (heatpump_suction_temp)
/
05 - number of hex bytes of the reply
03 - number of parameters sent back, here n is 2: (2^2-1=3)
6300 - ebus is Little Endian so the reply must be read swapping hex bytes, 0063= 99 (99pct??)
bf00 - 00bf = 191 = 19.1°C (Ariston Ebus transmits temps almost always as integer multiplied by 10)

2) MASTER/MASTER messages (used also for broadcast messages)
These are messages that a master sent to another one and usually the only replied back value is an ack (/00)

13fe2020106a7146006a723c006a7396006a749600

13 - sender
fe - receiver (fe stand for every device on the bus)
2020 - PBSB this I read as “the following parameter have these values act on them accordingly”
10 - LEN
6a71 - 1st par CODE
4600 - 1st par VALUE
6a72 - 2nd par CODE
3c00 - 2nd par VALUE
6a73 - 3rd par CODE
9600 - 3rd par VALUE
6a74 - 4th par CODE
9600 - 4th par VALUE

remember that par CODES are always 2 hex bytes long, values have different lentgh based on various data types (1,2 3 even 4 bytes long)
The /00 ack is not sent back on replying to broadcast messages

This other message
131e20200dc33efbc44664cd46006a475b01 / 00

should be parsed as:
13 1e 2020 0d c33e fb c446 64 cd46 00 6a47 5b01 / 00

Here you have 3 PAR with a single hex byte VALUE length and a single parameter with a 2 byte length.
1e here reply back a /00 ack.

An exception to this case is when a device broadcast a query command like this one:

37fe2000020120

here the boiler (master 0x37) is asking to every device (fe) to reply back (2000 PBSB) the value of 0120 parameter; there is no direct reply but (I interpret, from my findings) independently, the devices that have the value and are “authoritative” for that parameter reply back the value with another, asyncronous, broadcast message.

There are other message types but these are used mainly for specific function (cast date, programs, errors, serials, but these can be left for other nights :slight_smile:

1 Like

Many thanks to all of you and to @wrongisthenwright in particular. I have interfaced our Ariston Nuos Split WiFi (heatpump water heater) with an eBUS Adapter Shield C6. With the help of this post and the referenced github sites I managed to decode most broadcasts. My csv file is:

# type (r[1-9];w;u),circuit,name,[comment],[QQ],ZZ,PBSB,[ID],field1,part (m/s),datatypes/templates,divider/values,unit,comment,field2,part (m/s),datatypes/templates,divider/values,unit,comment,field3,part (m/s),datatypes/templates,divider/values,unit,comment,field4,part (m/s),datatypes/templates,divider/values,unit,comment,field5,part (m/s),datatypes/templates,divider/values,unit,comment
b,broadcast,slave_address,SlaveAddress,,fe,203b,,address,,HEX:1
b,broadcast,date_time,DateTime,,fe,2070,,time,,VTM,,,,date,,HDA
b,broadcast,current_target_temperature,Current Target Temperature,,fe,2010,6147,target,,S3N,10,°C,,code,,HEX:2,,,,normal_reduced,,BCD,0=off;1=reduced;2=normal,,,
b,broadcast,reduced_temperature,Reduced Temperature,,fe,200f,6226,reduced,,S3N,10,°C,,code,,HEX:2,,,,timed_fixed,,BCD,0=off;1=timed;2=always_on,,,
b,broadcast,normal_temperature,Normal Temperature,,fe,200e,6126,new_target,,SIN,10,°C,,code,,HEX:2,,,,max_temperature,,SIN,10,°C,,
b,broadcast,nuos_info1,Nuos Info 1,,fe,2020,0220,dhw_status,s,BCD,,,,el_code,s,HEX:2,,,,electrical_element,s,BCD,,,,al_code,s,HEX:2,,,,anti_legionella,s,BCD,,,,mode_code,s,HEX:2,,,,comfort_mode,s,BCD,0=off;1=timed;2=always_on,
b,broadcast,nuos_info2,Nuos Info 2,,fe,2020,ca2a,data,s,HEX:1,,,,comfort_temp,s,HEX:2,,,,dhw_comfort_temp,m,SIN,10,°C,,economy_temp,m,HEX:2,,,,dhw_economy_temp,m,SIN,10,°C
b,broadcast,heating_mode,Heating Mode,,fe,2010,d69a,status,,SIN,1,,,heating_code,,HEX:2,,,,heating_mode,,BCD,0=off;1=heatpump;2=element;3=both,,,
b,broadcast,c_2010_da46,2010 da46,,fe,2010,da46,c_da46,,SIN,1,,,code,,HEX:2,,,,c_d3f2,,SIN,1,,,
b,broadcast,c_2038_00,2038 00,,fe,2038,00,c_2038_00,,HEX:1,,,,data,,HEX:3,,,,
b,broadcast,c_2038_01,2038 01,,fe,2038,01,c_2038_01,,HEX:1,,,,data,,HEX:3,,,,
b,broadcast,c_2038_02,2038 02,,fe,2038,02,c_2038_02,,HEX:1,,,,data,,HEX:3,,,,
b,broadcast,c_2020_7d26,2020 7d26,,fe,2020,7d26,c_7d26,,SIN,10,°C,,code1,,HEX:2,,,,c_712b,,HEX:2,,,,code2,,HEX:2,,,,c_7e2b,,SIN,10,,,
b,broadcast,ign2050,ign2050,,fe,2050,,data,,IGN:11
b,broadcast,ign2051,ign2051,,fe,2051,,data,,IGN:14
b,broadcast,ign2071,ign2071,,fe,2071,,data,,IGN:7
b,broadcast,reply,Reply,,fe,200f,,reply,,HEX:*
w,broadcast,command,Command,,fe,2020,,command,,HEX:*
w,broadcast,query,Query,,fe,2000,,query,,HEX:*

Reading parameters only seems to succeed by issuing a broadcast request, e.g. hex fe 2000 02 c028 to read the program/manual mode. Up to 4 parameters can be requested in one request. The reply comes as a broadcast message with PBSB 200f. Setting a parameter also works with a broadcast message but with PBSB 2020.
Adressing the master or the slave (77, 7c) directly does not seem to work.

2 Likes

Not sure how I did it, ChatGPT helped me a lot with it, but I managed to decode the Leaving Water Temp and Return Water Temp on my Ariston Nimbus Pocket heatpump!

The original csv had those two lines:

r,heatpump,heatpump_LWT_temp,Heatpump Waterflow T emp,,18,2000,7610,,s,IGN:1,,,,,,SIN,10,°C
r,heatpump,heatpump_EWT_temp,Heatpump Water Return Temp,,18,2000,7710,,s,IGN:1,,,,,,SIN,10,°C

But they wouldn’t work for me. I changed just the 18,2000 part to 1e,2000 and it works!
Now, since most lines on the CSV don’t work for me, I wondered if by changing them from 18 to 1e will fix them! So I tried a few more lines and, even though the correct value for me wasn’t always the 1e, it seems that by just changing that part the messages are being decoded correctly!
Another example is the heatpump_mode, which I changed from 18,2000,ca46 to 70,2000,ca46 and it reads it correctly! :smiling_face:

After a lot of trying and with a lot of help from wrongisthenwright my strong feeling is that Ariston only puts changing values on the ebus. So sensor info is always there because they change all the time. User settings need to be changed before they are published. Today, for example, I changed the room influence per zone and BOOM, they are there in HA. So, before changing the original CSV to much, I would change some setting and see or they pop-up.

Firstly, many thanks for your work. I managed to connect to my boiler and see some basic data. I think i have unusual boiler - HS 24 Premium - and I’m getting quite many unidentified messages. I’m running similar setup as @rufusz so only boiler and shield are on the bus.

Can you point me in the correct direction as to decoding some of the messages?

My goal is to have a possibility to 1. turn on and off heating mode based on HA triggers 2. Simulate external temperature sensor as to activate slope mode of the heating temperature.

Here is result of ebustcl info:


# docker exec -it addon_2ad9b828_ebusd ebusctl info
version: ebusd 25.1.p20250414
update check: revision 25.1 available, device firmware v5-c6 1[540f] up to date
device: 192.168.100.249:9999, TCP, enhanced, firmware 1.1[540f].1[540f]
signal: acquired
symbol rate: 83
max symbol rate: 155
min arbitration micros: 6
max arbitration micros: 5393
min symbol latency: 1
max symbol latency: 43
scan: finished
reconnects: 0
masters: 3
messages: 354
conditional: 0
poll: 99
update: 64
address 13: master #12
address 18: slave #12
address 31: master #8, ebusd
address 36: slave #8, ebusd
address 37: master #18
address 3c: slave #18, scanning

and grab result all

# docker exec -it addon_2ad9b828_ebusd ebusctl grab result all
31fe07fe00 = 1
313c070400 / 00 = 1: scan.3c
37fe20101001910000029100000391000004910000 = 704
37fe20100c0c1900000d1900000e190000 = 5
37fe20100f63975e010064975e010065975e0100 = 139
37fe20100566975e0100 = 139
37fe20100e6a96be0000c39402006b96be0000 = 141
37fe20100e6d96be0000c69402006e96be0000 = 141
37fe20100d7647ff7f00d1940000d2940000 = 29
37fe20100dc19402006996be0000c2940200 = 141
37fe20100dc49402006c96be0000c5940200 = 141
37fe201010d3460000cf9c0000d9950000da950000 = 168
37fe201004d7420000 = 141
37fe201010d9940000da940000db940000dc940000 = 139
37fe201008da469600d3f20100 = 141
37fe201010db950000dc950000dd950000de950000 = 139
37fe201008dc464b00d2f20400 = 141
37fe201008dd940000de940000 = 139
37fe201008de464b00d1f20700 = 141
37fe20200c028401028501028601088100 = 2
37fe20200b0684007074460071747800 = 2
37fe202003088600 = 4
37fe20200c6075340361755e0164750000 = 2
37fe20200c61765e016476000065765e01 = 4
37fe20200a6376a0000f2300102300 = 6
37fe20200b64263200c679036271be00 = 2
37fe20200c65755e016675340367752c01 = 2
37fe20200c6676340367762c0169762c01 = 6
37fe20200c69752c016a7582006b755e01 = 6
37fe20200c6a7682006b765e016c763200 = 4
37fe20200a6c753200c07d01c27d0a = 6
37fe20200c707546007175780072757800 = 2
37fe20200a712bbc70c02800ca2a06 = 6
37fe20200c727478007374460074744600 = 4
37fe20200c737546007475460075750000 = 4
37fe20200c747646007576000076761900 = 4
37fe20200b7574000076741900068500 = 4
37fe20200b7675190006860070764600 = 4
37fe20200b797696007a761e00ce7900 = 12
37fe2020047e2b0001 = 2
37fe20200cc07e01c27e0ac97e06008601 = 4
37fe20200ac97d0600850160763403 = 6
37fe20200cce7e00028101028201028301 = 2
37fe202009da2703db2703078100 = 2
37fe203b013c = 12
37fe2010080591000006910000 = 704: ignored ign6
37fe20100f60475e010061975e010062975e0100 = 139: energymgr hybrid_LWT_setpoint
37fe2010096147500000d7460000 = 140: energymgr dhw_current_target_temp
37fe2010057310ff7f00 = 29: boiler ext_temp
37fe201010c04b0100091900000a1900000b190000 = 703: boiler boiler_status
37fe20200c61266801622664007d265802 = 4: energymgr dhw_info_3
31182000027971 /  = 1: energymgr z1_summer_winter_temp_thresh
313c20000242d2 / 03012508 = 6: boiler hours_pump_on
313c2000024bd1 / 03015f04 = 5: boiler hours_burner_on_CH
313c2000024cd1 / 03014100 = 6: boiler hours_burner_on_DHW
313c2000026229 / 03015800 = 6: boiler dhw_max_power_pct
313c2000026329 / 03015800 = 6: boiler heat_max_power_pct
313c2000026429 / 03011400 = 5: boiler heat_min_power_pct
313c2000026529 / 03012300 = 6: boiler slow_ignition_power_pct
313c2000026629 / 03013700 = 6: boiler heat_max_adj_power_pct
313c2000026829 / 03011800 = 6: boiler nominal_power
313c2000026847 / 03010000 = 5: boiler flame_power_kw
313c2000026910 / 03016101 = 6: boiler EWT_temp
313c200002c04b / 020101 = 6: boiler boiler_status
313c200002d140 / 020119 = 6: boiler config_version_counter
31fe202003008101 = 1: energymgr z1_heat_temp_range
37fe202009012001d02a02d12a00 = 10: energymgr heating_status
37fe2020090220010b20000f2000 = 7: energymgr dhw_status
31fe202003032000 = 1: heatpump silent_mode
37fe20200b052000602bc00374261e00 = 2: energymgr auto_function
37fe20200b0681017071b4007171e600 = 4: energymgr z1_cool_temp_range
31fe2020030b2000 = 3: energymgr dhw_thermal_cleansing_mode
31fe2020030f2300 = 4: energymgr cooling_status
37fe20200c6071340361715e0164710000 = 2: energymgr z1_heat_water_max_temp
37fe20200c6073340361735e0164730000 = 2: energymgr z3_heat_water_max_temp
37fe20200c61725e016472000065725e01 = 2: energymgr z2_heat_water_min_temp
37fe20200b6371a000c67a036272be00 = 2: energymgr z1_night_temp
37fe20200b6372a000c67b036273be00 = 2: energymgr z2_night_temp
37fe20200b6373a000c67c036274be00 = 2: energymgr z3_night_temp
37fe20200c65715e016671340367712c01 = 3: energymgr z1_heat_setpoint_temp_set
37fe20200c65735e016673340367732c01 = 2: energymgr z3_heat_setpoint_temp_set
37fe20200c6a7282006b725e016c723200 = 2: energymgr z2_heat_slope
37fe20200c707246007172780072727800 = 2: energymgr z2_cool_setpoint_temp_set
31fe20200474266400 = 1: gateway internet_wheather_temp_offset
31fe202003c02800 = 2: energymgr dhw_comfort_mode
37fe20200cc07a01c27a0ac97a06008201 = 2: energymgr z2_heat_therm_type_selection
31fe202003c279b7 = 1: energymgr z1_heat_room_temp_infl
37fe20200cce7a00ce7b00ce7c00ce7d00 = 2: energymgr z2_heat_request_mode

I’m willing to buy cube S net thermostat if it would be impossible without it.

EDIT:

In the meantime I checked out chaffoteaux .csv linked before and it seems like big part of unknown messages are related to schedules:

Internet’s conclusion is that it is not possible to simulate external sensor value as it is read-only - that’s fine. Changing water temperature setpoint is possible via HA so the heat curve controller can be on the server side.
I’m now looking for option to set heat request from HA but I can’t seem to find any solution. Only time the boiler is going into heating mode is when relay from connected dumb thermostat is being turned on. When it is z1_heat_request_status changes value to 1 on this configuration.

Hi,
I’ll look at the message dump in the next days but as a preliminary the first point should be doable, the second one not so.
You can TRY to broadcast (write on the bus) the external temp value but to use it the boiler needs to be configured to use the function, and it probably will generate an error sayng that you haven’t an external probe connected. I think thad the broadcast of the sensor value in not enough, I think Ariston devices talk to each other so that the one having the external probe actively inform the others that is kind of authoritative on that parameter. Unluckily I’m unable to decode/reverse engieer that custom protocol/handshaking so I think it won’t work.

In my case the Ext probe is connected to the energy manager PCB (in my hybrid system it controls the HP and the Boiler) but I can use the ext temp values with the boiler as the EM “knows” the protocol and then I think it informs the other devices on the bus that it has the probe connected.

In my really humble opinion the best way to do it is to buy the “native” probe and wire it to the boiler SE port (SE=Sonda Esterna, “external probe” in Italian), it doesn’t cost much and it is weather hardened and build to last. Wiring it is simple, just 2 common wires (a network cable or even an old telephone cable is enough).
If you don’t have a North exposed position to wire it you can place it where the direct sun is shielded some way.

Hi,
as I could not find it anywhere else until now, I just wanted to share a finding for the actual store temperature of my ELCO DHW.2 heatpump.
This seems to be pretty much the same HP like the one @alwik described somewhere above. (I think it was a Ariston NUOS?)

More or less by accident and a lot of trial and error, I found out the actual store temperature of my HP. My device info looks like this:

admin@Ebusd:/etc/ebusd$ ebusctl info
version: ebusd 25.1.25.1
update check: OK, device firmware v5 1[540f] up to date
device: 192.168.168.120:9999, TCP, enhanced, firmware 1.1[540f].1[540f]
access: *
signal: acquired
symbol rate: 44
max symbol rate: 93
min arbitration micros: 9
max arbitration micros: 52
min symbol latency: 5
max symbol latency: 15
scan: finished
reconnects: 0
masters: 2
messages: 47
conditional: 0
poll: 16
update: 21
address 31: master #8, ebusd
address 36: slave #8, ebusd
address 77: master #19
address 7c: slave #19, scanning

By sending the following code, I receice the actual temperature:

admin@Ebusd:/etc/ebusd$ ebusctl hex -s 77 -n 7c200063a0
0301ed01 = 01ed = 493 /10 = 49,3°C
admin@Ebusd:/etc/ebusd$ ebusctl hex -s 77 -n 7c200063a0
03018f01 = 018f = 399 /10 = 39,9°C

The following line in the csv works for me and shows the actual store temperature in HA then:

r,dhw,dhw_store_temp,store temperature,,7c,2000,63a0,,s,IGN:1,,,,,s,SIN,10,°C,,

These codes also deliver some values (maybe temperatures), but I could not find out yet which ones:

60a0,61a0,62a0,64a0,65a0,66a0,67a0,68a0,69a0

And also the following codes deliver additional values:

70a0,71a0,72a0,73a0
40af,41af,42af,43af,44af

Maybe this helps at least as a starting point for someone with the same device, who can find out more about those values and what they mean…

2 Likes

Great work @Rincewind01 ! I have just tried to reproduce this on my Ariston Nuos plus WiFi, and indeed I’m getting the temperature in HA. Interested in finding out what the other values could mean. I might put some time in that somewhere next week. Maybe also good for @pprazzi to read this, as he has the same boiler.
Thanks for sharing!

1 Like

Thank you for the reply,

after some trial and error I must agree with you that sending external temp value is not doable. I agree that best way would be wired sensor but I thought about it too late. Now the bathroom where the boiler is hanging is finished and I didn’t lay cable soon enough. Even then I live in a condo and hanging anything on outside wall would mean asking HOA and I wish to avoid that. I looked at ariston wireless sensor probe but the price is outrageous and for that I could get cube S net (around 160$ around here).

If you could help me find a way to trigger heating mode via HA the plan is as follows:

  1. Smart TRVs will trigger heating mode individually via The Better Thermostat.
  2. HA will act as a heat curve calculator based on external and internal temperatures and just send correct value of water heat setpoint (that’s already working). Worst case scenario when things go south the water will be a little bit too cold compared to the optimal value and will burn more gas until I work out the problem. Not really worried about this part.
  3. I will hook ESP32 with ESPhome and wired DS18B20 to the relay of the boiler as a backup. If communication with the server will be lost that means that all shenanigans described above are not working and ESP will work as single zone thermostat so the house will not freeze. All the software for that will be hardcoded in the ESP so I trust it to be as reliable as the dumb thermostat I have now.

Good find!
I haven’t that code transmitted on my system, my boiler is an instant gas type, but even if it has an internal small tank querying for that code gives me strange values (8°C) while reading 61a0 gives me a value of 33.6°C and tis number is rightly diminishing (I have used hot water some time ago and I have disabled the feature to keep the tank heated).

Just to be sure, how have you cross-checked that the values you’re reading are indeed the tank temp? there is a menu item/physical gauge where to read the “real” value?

Sorry, edited multiple times…

Just to be sure that I understand: you want “only” to enable/disable heating or do you need mode?
Enabling heating can be done via 0120 command code, my CSV already has the correct lines, these:

b,energymgr,heating_status,Heating Status,,fe,200f,0120,,s,onoff
w,energymgr,heating_status,Heating Status,,fe,2020,0120,,s,onoff

so you should have a switch in HA to enable it.
If instead you need to enable/disable climatic thermoregulation (??) I think you need some kind of external probe connected because the boiler I think would need to “feel” the probe when you activate that feature, but you can try it via the onboard menu if it’s available.

You then need to set the specific zone parameter to the outood probe only settings, for Z1 is c079 and you need to set it to 2:
this line reads the value:

r,energymgr,z1_heat_therm_type_selection,Z1 Heating Thermoreg Type Selection,,18,2000,C079,,s,IGN:1,,,,,,BCD,0=fixed_temp;1=basic_on_off;2=outdoor_temp_only;3=room_temp_only;4=outdoor_and_room

this one allows you to change it via HA:
w,trigger,energymgr_z1_heat_therm_type_selection,Z1 Heating Thermoreg Type Selection Trigger,,fe,2000,c079,,m,UCH

you can simply publish a MQTT message from an action, send “2” to the topic:
ebusd/energymgr/energymgr_z1_heat_therm_type_selection/set

Another (hacky) way, given that the external probe is nothing more than a NTC 10Kohm @20°C you could be to “simulate” the probe changing dynamically the resistance value applied to the SE port terminals. I’m not an electrical engineer so can’t help there (I don’t know if it’s even possible)…

I’m sorry, maybe I have not described it clearly. I can switch heating on/off ( I guess it’s called winter mode) but for now in order for water to actually start heating external thermostat must close it relay which in turn is connected to TA1.

What I would like to do is to tell boiler “we need heat, start heating the water (:slight_smile: )” but via the software, not by the relay connected to TA1. Cube S Net and I guess other smart thermostat are connected to ebus so i suspects that’s possible, I just can’t figure it out.

this MQTT message generates error:

2025-04-28 00:54:07.443 [mqtt error] write message energymgr energymgr_z1_heat_therm_type_selection not found

but that’s expected, nearly all sensors from energymgr topic are unavailable. Only dhw_target_temp is always showing 8, but that topic was mentioned above, I think that’s normal.

EDIT:

I got the gist of it and found ebusd/energymgr/z2_heat_request_mode/set, which was exatcly what I was looking for, thank you!

Thank you @Rincewind01 for this, I was a bit disappointed until now with the ebusd readout of my heatpump water heater Ariston Nuos Split 200. I checked your codes on my water heater and I see three temperatures, presumably T-Low, T-High and T-Dome, at 0x60a0, 0x61a0 and 0x63a0. I don’t know which is which yet, the differences are to small and the display on the water heater does not show decimals. I’ll check again after I have used a large amount, more than 50 liters, at one time. 0x63a0 is the temperature that is shown in the app.
At 0x62a0 I get 0x8000 when heating and 0x0000 when not.
Here are some readings at different times. the second and third column are while heating.

Address Data1 Data2 Data3 Data4 Data5
40af 0 0 0 0 0
41af 1964 1966 1966 1966 1966
42af 2367 2369 2369 2369 2369
43af 3523 2223 3341 232 232
44af 233 274 1392 883 1959
60a0 527 603 615 621 584
61a0 526 603 615 620 584
62a0 0 32768 32768 0 0
63a0 575 602 615 620 608
64a0 90 90 90 90 90
65a0 64 64 64 64 64
66a0 43 43 43 43 43
67a0 516 516 516 516 516
68a0 42 40 41 41 41
69a0 0 0 0 0 0
70a0 619 600 614 619 619
71a0 601 580 595 600 600
72a0 620 601 615 620 620
73a0 620 620 620 620 620

For my water heater Ariston Nuos Split 200 I found that requesting a datapoint by means of hex fe200102xxxx I get an answer at fe200e that gives actual value as well as the upper and the lower bound. Of all possible xxxx I only got an answer for the codes below:

Raw output Address Value Lower Upper
0220010001 On / Off 0220 1 0 1
0b20000001 Antibacterial run on/off 0b20 0 0 1
0f20000001 ? 0f20 0 0 1
15f3000001 ? 15f3 0 0 1
61266c02f401bc02 Normal temperature 6126 620 500 700
61474e020080ff7f Required temperature 6147 590 -32767 32767
62264e02a0006c02 Reduced temperature 6226 590 160 620
712bbc70a005bc70 Minutes between antibacterial runs? 712b 28860 1440 28860
7d268a025802bc02 Antibacterial temperature 7d26 650 600 700
7e2b00000080ff7f ? 7e2b 0 -32767 32767
c028010102 Timed(1) Manual(2) c028 1 1 2
ca2ab400ff ? ca2a 180 0 255
d3f20000ff ? d3f2 0 0 255
d7460100ff Normal / Reduced d746 1 0 255
da46aa00ff ? da46 170 0 255
db46aa00ff ? db46 170 0 255

Most of these codes can be set by fe 2020 nn code value.

Indeed I have verified the code 63a0 against the current temperature shown in the display of my HP. The display is cutting the numbers after the decimal point.
For the values 38.0-38.9 the display only shows 38 and so on. But fits perfectly.