Ariston Group integration via eBusd

I integrate the ebusd in HA via mqtt. I generate the needed discovery messages myself, but I read that ebusd can also generate the discovery messages.

As the write you’re doing is a single operation with multiple parameters in a single call you cannot use builtin discovered MQTT AFAIK. There may be a way tweaking mqtt-json.cfg file but it’s way out my abilities (btw I hate regexp).

What you can do is publish an already crafted MQTT message to the specific topic, in your case it should be

ebusd/dwh/holyday_date/set

and use a template as a payload that converts a datetime input in a format that ebusd understand.
I choose to use an offset over the current date and time as “start a custom setting from now and keep it for X hours”, I use a template like this

{% set newtime = now()+timedelta(hours=states('input_number.temp_override_hours')|int) %} 
{{ '"' + (states('input_number.temperature_override_temp') | float)| string + ';' + (newtime.strftime('%H')) + ':' + (newtime.strftime('%M')) + ':' + (newtime.strftime('%S')) + ';' + (newtime.strftime('%d')) +'.' + (newtime.strftime('%m')) + '.' + (newtime.strftime('%Y') + ';257"')}}

where
input_number.temperature_override_temp is the new value of the CH/Cooling temp to be set
and
input_number.temp_override_hours is the number of hours for which the new setting must be maintained

you can always adapt the logic to a different behaviour.

Glad to know the constant is not mandatory, I’ll look into it as soon as the cooling season starts…

Thank you so much @ wrongisthenwright ! :pray:
With your hint I was able now to automate this holiday setting depending on my calendar entries. :partying_face: It took me some time tonight to adjust it to my needs, but finally it´s working. :slight_smile:

Glad it worked, I’ll see what happens with mine in a few weeks…

I got two addresses mixed up in my previous post on the datapoints of the Ariston Nuos split. The correct addresses are: 1366 for the evaporation temperature and 136c for the suction temperature.
The HA card now looks like this:

2 Likes

Which model should I get? Because this one (Daniel Kucera) keeps blocking my boiler every now and then

The eBus adapter shield C6 (Welcome to eBUS Adapter Shield - eBUS Adapter Shield C6) worked for me out of the box, without any change in settings or trimming needed.

Hi @FransO

Could you make a small manual of your whole solution? I would love to learn from you.

Most of it is already in my posts in this thread. It all started by me being somewwhat dissatisfied by the Ariston.net integration provided via HACS. It worked, but the limits on API calls is such that an update cycle less then once every 15 minutes can quickly cause rejection of API calls for the rest of the day.
Searching and reading through the internet pointed to a possible path for a cloudless solution (whenever possible I avoid cloud solutions). The Ariston Nuos Split water heater that I own is not a very common appliance so no ready to use solution was available. That is allright with me, I like DIY solutions. It turns out that the water heater has a Bridgenet connector. Bridgenet is the Ariston variant of the eBus standard and that pointed me to the eBus adapter shield (Welcome to eBUS Adapter Shield - eBUS Adapter Shield C6) and the ebusd daemon at Home · john30/ebusd Wiki · GitHub and to this thread. Installing hard- and software is quite straightforward (if you read the docs beforehand :flushed:).
However there was/is no documentation on how to interpret the data that was broadcasted and how to get additional information out of the appliance. I managed to interpret most of the broadcasted data, but was still stuck with insufficient information to get a full integration in HA. The breakthrough came when @Rincewind01 discovered that you could query the slave for more information. Up till then I had only considered querying the master.
With a small program I queried all 65535 possible adresses (each query 2 times and with an interval of 2 seconds in order not to overload the bus, took a day and a half) and obtained 275 addresses that returned some information. Querying those 275 addresses in different situations and comparing the values returned with values in the system menu on the display of the appliance got me enough information to implement an integration in HA. ebusd can use HA-discovery to do this, but I use an own program to format and submit the MQTT discovery messages.
After that it is a case of defining a picture element populated with the data obtained via ebusd to create a vsualisation and associated controls of the Ariston Nuos Split in Home Assistant.

Thank you for your answer. I have distilled the most information from the earlier post but I am struggeling with adding the P values to my ebusd csv file. I think there is something wrong with the addresses that is use. Is it possible for you to post a complete csv file for ebusd?

PS: I now finally have an actual value of the temperature of my Nuos 250 in HA. Thank you

And I seem to have fixed it :slight_smile:


# 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,dhw,date_time,DateTime,,fe,2070,,time,,VTM,,,,date,,HDA
b,dhw,heating,Heating Mode,,fe,2010,d69a,on_off,,SIN,1,,,code,,IGN:2,,,,mode,,BCD,0=off;1=heatpump;2=element;3=both
b,dhw,setting,setting,,fe,2010,6147,required_temp,,SIN,10,°C,,code,,IGN:3,,,,normal_reduced,,BCD,0=off;1=reduced;2=normal
r2,dhw,on_off,On/Off,,fe,2001,0220
b,dhw,on_off,On/Off,,fe,200e,0220,state,s,BCD,0=off;1=on;2=on
r2,dhw,program_manual,Program/Manual,,fe,2001,c028
b,dhw,program_manual,Program/Manual,,fe,200e,c028,state,s,BCD,1=program;2=manual
r2,dhw,normal_temp,Normal temperature,,fe,2001,6126
b,dhw,normal,normal_temp,,fe,200e,6126,temp,s,SIN,10,°C,,min,s,SIN,10,°C,,max,s,SIN,10,°C,,
w,dhw,normal,normal_temp,,fe,200e,6126,temp,s,SIN,10,°C
r2,dhw,reduced_temp,reduced_temp,,fe,2001,6226
b,dhw,reduced,reduced_temp,,fe,200e,6226,temp,s,SIN,10,°C,,min,s,SIN,10,°C,,max,s,SIN,10,°C,,
w,dhw,reduced,reduced_temp,,fe,200e,6226,temp,s,SIN,10,°C
r2,dhw,anti_legionella_switch,anti_legionella,,fe,2001,0b20
b,dhw,anti_legionella,anti_legionella,,fe,200e,0b20,state,s,BCD,0=off;1=on
r2,dhw,legionella_temp,legionella_temp,,fe,2001,7d26
b,dhw,legionella,legionella_temp,,fe,200e,7d26,temp,s,SIN,10,°C,,min,s,SIN,10,°C,,max,s,SIN,10,°C,,
w,dhw,legionella,legionella_temp,,fe,200e,7d26,temp,s,SIN,10,°C

r2,dhw,actual,Actual temp,,7c,2000,63a0,,s,IGN:1,,,,temp,s,SIN,10,°C

r2,dhw,p22thigh,P 22 T-High,,7c,2000,6313,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p21tlow,P 21 T-Low,,7c,2000,6413,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p24tair,P 24 T-Air,,7c,2000,6513,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p26tevap,P 26 T-Evap,,7c,2000,6613,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p23tdome,P 23 T-Dome,,7c,2000,6713,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p25tsuct,P 25 T-Suct,,7c,2000,6c13,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p05setmin,P 05 Set Min,,7c,2000,662d,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p08minair,P 08 Min Air,,7c,2000,672d,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p07tmaxhp,P 07 T-max HP,,7c,2000,692d,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p09histhp,P 09 Hist HP,,7c,2000,6a2d,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p04setmax,P 04 Set Max,,7c,2000,6b2d,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p28tdisc,P 28 T-Disc,,7c,2000,7bfa,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,p27tcond,P 27 T-Cond,,7c,2000,7cfa,,s,IGN:1,,,,temp,s,SIN,10,°C

b,broadcast,c_2010_da46,2010 da46,,fe,2010,da46,c_da46,,IGN:*
b,broadcast,c_2038_00,2038 00,,fe,2038,00,c_2038_00,,IGN:*
b,broadcast,c_2038_01,2038 00,,fe,2038,01,c_2038_01,,IGN:*
b,broadcast,c_2038_02,2038 00,,fe,2038,02,c_2038_02,,IGN:*
b,broadcast,c_2020_7d26,2020 7d26,,fe,2020,7d26,c_7d26,,IGN:*
b,broadcast,ign2050,ign2050,,fe,2050,,data,,IGN:*
b,broadcast,ign2051,ign2051,,fe,2051,,data,,IGN:*
b,broadcast,ign2071,ign2071,,fe,2071,,data,,IGN:*
b,broadcast,error,Error,,fe,2004,,reply,,IGN:*

b,dhw,reply,Reply,,fe,200f,,value,,HEX:*
w,dhw,command,Command,,fe,2020,,data,,HEX:*
w,dhw,query,Query,,fe,2000,,address,,HEX:*
1 Like

This is my csv file for the Ariston Nuos Split. The first block are values that are frequently broadcasted so I do not need to poll for them. The values in the second block are broadcasted infrequently therefore I poll them. the third block are values queried from the slave. The fourth block are broadcasted values to be ignored. The last lines are so I can query for incidental values and can send a command that is not foreseen in the csv.

# 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,dhw,date_time,DateTime,,fe,2070,,time,,VTM,,,,date,,HDA
b,dhw,heating,Heating Mode,,fe,2010,d69a,on_off,,SIN,1,,,code,,IGN:2,,,,mode,,BCD,0=off;1=heatpump;2=element;3=both
b,dhw,setting,setting,,fe,2010,6147,required_temp,,SIN,10,°C,,code,,IGN:3,,,,normal_reduced,,BCD,0=off;1=reduced;2=normal

r2,dhw,power,On/Off,,fe,2001,0220
b,dhw,power,On/Off,,fe,200e,0220,value,s,BCD,0=off;1=on
w,dhw,power,On/Off,,fe,200e,0220,value,s,BCD,0=off;1=on
r2,dhw,mode,Program/Manual,,fe,2001,c028
b,dhw,mode,Program-Manual,,fe,200e,c028,value,s,BCD,0=off;1=program;2=manual
w,dhw,mode,Program-Manual,,fe,200e,c028,value,s,BCD,0=off;1=program;2=manual
r2,dhw,normal_temp,Normal temperature,,fe,2001,6126
b,dhw,normal,normal_temp,,fe,200e,6126,temp,s,SIN,10,°C,,min,s,SIN,10,°C,,max,s,SIN,10,°C,,
w,dhw,normal,normal_temp,,fe,200e,6126,temp,s,SIN,10,°C
r2,dhw,reduced_temp,reduced_temp,,fe,2001,6226
b,dhw,reduced,reduced_temp,,fe,200e,6226,temp,s,SIN,10,°C,,min,s,SIN,10,°C,,max,s,SIN,10,°C,,
w,dhw,reduced,reduced_temp,,fe,200e,6226,temp,s,SIN,10,°C
r2,dhw,anti_legionella_switch,anti_legionella,,fe,2001,0b20
b,dhw,anti_legionella,anti_legionella,,fe,200e,0b20,value,s,BCD,0=off;1=on
w,dhw,anti_legionella,anti_legionella,,fe,200e,0b20,value,s,BCD,0=off;1=on
r2,dhw,legionella_temp,legionella_temp,,fe,2001,7d26
b,dhw,legionella,legionella_temp,,fe,200e,7d26,temp,s,SIN,10,°C,,min,s,SIN,10,°C,,max,s,SIN,10,°C,,
w,dhw,legionella,legionella_temp,,fe,200e,7d26,temp,s,SIN,10,°C

r2,dhw,actual,Actual temp,,7c,2000,6713,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,outside,Outside temp,,7c,2000,6513,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,tank_high,Tank high temp,,7c,2000,6313,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,tank_low,Tank low temp,,7c,2000,6413,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,suction,Suction temp,,7c,2000,6c13,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,evaporation,Evaporation temp,,7c,2000,6613,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,hot_gas,Hot gas temp,,7c,2000,7bfa,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,condensor,Condensor temp,,7c,2000,7cfa,,s,IGN:1,,,,temp,s,SIN,10,°C
r2,dhw,preset,Preset,,7c,2000,de89,,s,IGN:1,,,,value,s,BCD,0=green;1=comfort;2=fast
w,dhw,preset,Preset,,7c,2020,de89,value,m,BCD,0=green;1=comfort;2=fast
r2,dhw,preheat,Preheat,,7c,2000,0c88,,s,IGN:1,,,,value,s,BCD,0=off;1=on
w,dhw,preheat,Preheat,,7c,2020,0c88,value,m,BCD,0=off;1=on
r2,dhw,boost,Boost,,7c,2000,1a21,,s,IGN:1,,,,value,s,BCD,0=off;1=on
w,dhw,boost,Boost,,7c,2020,1a21,value,m,BCD,0=off;1=on

b,dhw,c_2010_da46,2010 da46,,fe,2010,da46,c_da46,,IGN:* 
b,dhw,c_2038_00,2038 00,,fe,2038,00,c_2038_00,,IGN:* 
b,dhw,c_2038_01,2038 00,,fe,2038,01,c_2038_01,,IGN:* 
b,dhw,c_2038_02,2038 00,,fe,2038,02,c_2038_02,,IGN:* 
b,dhw,c_2020_7d26,2020 7d26,,fe,2020,7d26,c_7d26,,IGN:* 
b,dhw,ign2050,ign2050,,fe,2050,,data,,IGN:*
b,dhw,ign2051,ign2051,,fe,2051,,data,,IGN:*
b,dhw,ign2071,ign2071,,fe,2071,,data,,IGN:*
b,dhw,error,Error,,fe,2004,,reply,,IGN:*

b,dhw,reply,Reply,,fe,200f,,value,,HEX:*
w,dhw,command,Command,,fe,2020,,data,,HEX:*
w,dhw,slave_command,Slave command,,7c,2020,,data,,HEX:*
w,dhw,query,Query,,fe,2000,,address,,HEX:*

Hi, sergiou87. I’m probably going to be purchasing the Nimbus Pocket M Net R32 heat pump. Have you found you can get all the data you want?

Thank you,
Stephen.

It should work with a good coverage, if not please dump messages as suggested and then we’ll try to find what’s missing

Thank you. This works with my Nuos Plus WiFi

finally i got the new adapter. i connected it to my home wifi and updated the firmware.
how do i configure the ebus part?



Do I need to do any other configurations besides that?

No, it is enough.
Now you have to set the ebusd addon to use the “enhanced” protocol.
Probably in the addon configuration you set the IP address of the previous adapter.
You need to change the connection string as ens:NEW_ADAPTER_IP_ADDRESS:9999.
Some hint are on the home page of the adapter web interface.

Wowww. I changed the port and ip and it worked perfectly right away. This seems much better than the adapter I had before. I think danman

I own an Ariston Nuos Wifi 200L. The Ariston web api is awfully slow when trying to avoid IP-bans. With this EBUS interface, is it possible to:

  • read actual temp at 10s interval
  • set target temperature
  • set mode?

Set target temperature: Yes
Set Mode: Yes
Read actual temperature: Yes. But every 10 seconds would probably be to much for the bus of the Ariston. It would also be a bit of an overkil. The actual temperature is measured by the sensor in the dome of the tank and does not change that fast. Once every minute would be quite adequate for a storage water heater. Even taking a shower it does not change more than half a degree Centigrade every minute. See attached graph. In order to know how much hot water you still have available it is more useful to take into account all three temperatures: The temperature in the dome (shown as actual temp on the display), the temperature at about middle of the tank and the temperature right next to the cold water intake. It takes time for the overall temperature of the water in the tank to even out. See attached graph.

2 Likes