ysard / ebusd_configuration_chaffoteaux_bridgenet

Configuration & reverse engineering for the ebusd demon adapted to the boiler Chaffoteaux Mira C Green
GNU General Public License v3.0
16 stars 2 forks source link

Handshake protocol - Help needed #3

Open ysard opened 6 months ago

ysard commented 6 months ago

How to help

Knowledge summary

Addresses src/dest (or emitter/receiver) of devices on the bus:

ebusd: 31/36
boiler: 37/3c
thermostat z1: 70/75
thermostat z2: f0/f5
thermostat z3: 01/06

Boot time:

boiler: 13.5s - 13.57s; 12.7ms/packet
thermostat: 16.2s - 16.4s; 11.8ms/packet

Handshake sequence is divided into the following parts:

Addr not found in boiler boot sequence but present for thermostat:

[
'04', '05', '06', '08', '0c',
'14', '15', '16', '18', '1c',
'24',
      '35', '36', '38', '3c',
'44'
]

=> some logic here...

Special packets (boot from offline and reboot):

In the following:

    - chaffoteaux thermostat: Honeywell EasyControl 3318604
    - chaffoteaux boiler: Mira C Green
    - ariston boiler1: Ariston Genus Premium Evo (from john30/ebusd-configuration#103)
    - ariston boiler2: Ariston Clas One without thermostat on ebus

Extra sources:

Dumps

thermostat chaffoteaux                                      boiler chaffoteaux
17:36:35.991  70fe203400                                    17:37:54.371  37fe203400
17:36:36.266  70fe2031103239313332334d453030323275020014    17:37:54.642  37fe2031103233313332324d50313136373cfe0100
17:36:37.316  70fe203a0102                                  17:37:55.697  00fe203a0102      [bus notice] new master 00, master count 4
17:36:37.414  70fe203a0104
17:36:37.515  70fe203a0105
17:36:37.616  70fe203a0106
17:36:37.717  70fe203a0108
17:36:37.848  70fe203a0109                                  17:37:55.799  00fe203a0109
17:36:37.908  70fe203a010a                                  17:37:55.902  00fe203a010a
17:36:38.003  70fe203a010b                                  17:37:56.005  00fe203a010b
17:36:38.103  70fe203a010c
17:36:38.205  70fe203a010d                                  17:37:56.108  00fe203a010d
17:36:38.305  70fe203a010e                                  17:37:56.211  00fe203a010e
17:36:38.401  70fe203a0112                                  17:37:56.314  00fe203a0112
17:36:38.528  70fe203a0114
17:36:38.601  70fe203a0115
17:36:38.702  70fe203a0116
17:36:38.803  70fe203a0118
17:36:38.903  70fe203a0119                                  17:37:56.417  00fe203a0119
17:36:39.004  70fe203a011a                                  17:37:56.520  00fe203a011a
17:36:39.105  70fe203a011b                                  17:37:56.629  00fe203a011b
17:36:39.205  70fe203a011c
17:36:39.306  70fe203a011d                                  17:37:56.725  00fe203a011d
17:36:39.407  70fe203a011e                                  17:37:56.828  00fe203a011e
17:36:39.507  70fe203a0120                                  17:37:56.931  00fe203a0120
17:36:39.611  70fe203a0121                                  17:37:57.034  00fe203a0121
17:36:39.709  70fe203a0122                                  17:37:57.137  00fe203a0122
17:36:39.809  70fe203a0123                                  17:37:57.240  00fe203a0123
17:36:39.910  70fe203a0124
17:36:40.010  70fe203a0125                                  17:37:57.343  00fe203a0125
17:36:40.111  70fe203a0126                                  17:37:57.446  00fe203a0126
17:36:40.207  70fe203a0127                                  17:37:57.549  00fe203a0127
17:36:40.308  70fe203a0128                                  17:37:57.652  00fe203a0128
17:36:40.408  70fe203a0129                                  17:37:57.759  00fe203a0129
17:36:40.503  70fe203a012a                                  17:37:57.857  00fe203a012a
17:36:40.599  70fe203a012b                                  17:37:57.960  00fe203a012b
17:36:40.700  70fe203a012c                                  17:37:58.063  00fe203a012c
17:36:40.801  70fe203a012d                                  17:37:58.166  00fe203a012d
17:36:40.901  70fe203a012e                                  17:37:58.269  00fe203a012e
17:36:41.002  70fe203a012f                                  17:37:58.372  00fe203a012f
17:36:41.102  70fe203a0132                                  17:37:58.475  00fe203a0132
17:36:41.203  70fe203a0134                                  17:37:58.578  00fe203a0134
17:36:41.304  70fe203a0135
17:36:41.399  70fe203a0136
17:36:41.500  70fe203a0138
17:36:41.600  70fe203a0139                                  17:37:58.681  00fe203a0139
17:36:41.696  70fe203a013a                                  17:37:58.786  00fe203a013a
17:36:41.792  70fe203a013b                                  17:37:58.886  00fe203a013b
17:36:41.892  70fe203a013c
17:36:41.993  70fe203a013d                                  17:37:58.990  00fe203a013d
17:36:42.093  70fe203a013e                                  17:37:59.093  00fe203a013e
17:36:42.195  70fe203a0140                                  17:37:59.200  00fe203a0140
17:36:42.297  70fe203a0141                                  17:37:59.298  00fe203a0141
17:36:42.399  70fe203a0142                                  17:37:59.403  00fe203a0142
17:36:42.497  70fe203a0143                                  17:37:59.506  00fe203a0143
17:36:42.592  70fe203a0144
17:36:42.687  70fe203a0145                                  17:37:59.608  00fe203a0145
17:36:42.788  70fe203a0146                                  17:37:59.711  00fe203a0146
17:36:42.888  70fe203a0147                                  17:37:59.813  00fe203a0147
17:36:42.989  70fe203a0148                                  17:37:59.916  00fe203a0148
17:36:43.091  70fe203a0149                                  17:38:00.019  00fe203a0149
17:36:43.191  70fe203a014a                                  17:38:00.121  00fe203a014a
17:36:43.291  70fe203a014b                                  17:38:00.224  00fe203a014b
17:36:43.387  70fe203a014c                                  17:38:00.327  00fe203a014c
17:36:43.482  70fe203a014d                                  17:38:00.431  00fe203a014d
17:36:43.583  70fe203a014e                                  17:38:00.533  00fe203a014e
17:36:43.684  70fe203a014f                                  17:38:00.636  00fe203a014f
17:36:43.784  70fe203a0150                                  17:38:00.739  00fe203a0150
17:36:43.885  70fe203a01fe                                  17:38:00.842  00fe203a01fe
17:36:44.959  70fe2036050075000075                          17:38:01.913  37fe203605003c00003c
17:36:45.164  70fe203a0102                                  17:38:02.117  00fe203a0102
17:36:45.266  70fe203a0104
17:36:45.359  70fe203a0105
17:36:45.460  70fe203a0106
17:36:45.560  70fe203a0108
17:36:45.662  70fe203a0109                                  17:38:02.220  00fe203a0109
17:36:45.761  70fe203a010a                                  17:38:02.323  00fe203a010a
17:36:45.861  70fe203a010b                                  17:38:02.426  00fe203a010b
17:36:45.960  70fe203a010c
17:36:46.061  70fe203a010d                                  17:38:02.529  00fe203a010d
17:36:46.163  70fe203a010e                                  17:38:02.632  00fe203a010e
17:36:46.256  70fe203a0112                                  17:38:02.735  00fe203a0112
17:36:46.357  70fe203a0114
17:36:46.452  70fe203a0115
17:36:46.552  70fe203a0116
17:36:46.655  70fe203a0118
17:36:46.757  70fe203a0119                                  17:38:02.841  00fe203a0119
17:36:46.856  70fe203a011a                                  17:38:02.941  00fe203a011a
17:36:46.957  70fe203a011b                                  17:38:03.046  00fe203a011b
17:36:47.057  70fe203a011c
17:36:47.157  70fe203a011d                                  17:38:03.148  00fe203a011d
17:36:47.257  70fe203a011e                                  17:38:03.253  00fe203a011e
17:36:47.357  70fe203a0120                                  17:38:03.353  00fe203a0120
17:36:47.453  70fe203a0121                                  17:38:03.455  00fe203a0121
17:36:47.552  70fe203a0122                                  17:38:03.558  00fe203a0122
17:36:47.654  70fe203a0123                                  17:38:03.661  00fe203a0123
17:36:47.753  70fe203a0124
17:36:47.852  70fe203a0125                                  17:38:03.764  00fe203a0125
17:36:47.952  70fe203a0126                                  17:38:03.867  00fe203a0126
17:36:48.052  70fe203a0127                                  17:38:03.970  00fe203a0127
17:36:48.154  70fe203a0128                                  17:38:04.073  00fe203a0128
17:36:48.247  70fe203a0129                                  17:38:04.176  00fe203a0129
17:36:48.347  70fe203a012a                                  17:38:04.278  00fe203a012a
17:36:48.448  70fe203a012b                                  17:38:04.381  00fe203a012b
17:36:48.547  70fe203a012c                                  17:38:04.484  00fe203a012c
17:36:48.645  70fe203a012d                                  17:38:04.588  00fe203a012d
17:36:48.744  70fe203a012e                                  17:38:04.690  00fe203a012e
17:36:48.838  70fe203a012f                                  17:38:04.793  00fe203a012f
17:36:48.933  70fe203a0132                                  17:38:04.900  00fe203a0132
17:36:49.033  70fe203a0134                                  17:38:04.999  00fe203a0134
17:36:49.132  70fe203a0135
17:36:49.235  70fe203a0136
17:36:49.333  70fe203a0138
17:36:49.433  70fe203a0139                                  17:38:05.102  00fe203a0139
17:36:49.533  70fe203a013a                                  17:38:05.205  00fe203a013a
17:36:49.633  70fe203a013b                                  17:38:05.307  00fe203a013b
17:36:49.733  70fe203a013c
17:36:49.833  70fe203a013d                                  17:38:05.410  00fe203a013d
17:36:49.933  70fe203a013e                                  17:38:05.513  00fe203a013e
17:36:50.034  70fe203a0140                                  17:38:05.616  00fe203a0140
17:36:50.133  70fe203a0141                                  17:38:05.719  00fe203a0141
17:36:50.233  70fe203a0142                                  17:38:05.822  00fe203a0142
17:36:50.333  70fe203a0143                                  17:38:05.925  00fe203a0143
17:36:50.429  70fe203a0144
17:36:50.529  70fe203a0145                                  17:38:06.028  00fe203a0145
17:36:50.630  70fe203a0146                                  17:38:06.131  00fe203a0146
17:36:50.730  70fe203a0147                                  17:38:06.234  00fe203a0147
17:36:50.829  70fe203a0148                                  17:38:06.336  00fe203a0148
17:36:50.929  70fe203a0149                                  17:38:06.439  00fe203a0149
17:36:51.030  70fe203a014a                                  17:38:06.542  00fe203a014a
17:36:51.129  70fe203a014b                                  17:38:06.645  00fe203a014b
17:36:51.235  70fe203a014c                                  17:38:06.748  00fe203a014c
17:36:51.335  70fe203a014d                                  17:38:06.851  00fe203a014d
17:36:51.435  70fe203a014e                                  17:38:06.954  00fe203a014e
17:36:51.535  70fe203a014f                                  17:38:07.057  00fe203a014f
17:36:51.636  70fe203a0150                                  17:38:07.160  00fe203a0150
17:36:51.737  70fe203a01fe                                  17:38:07.264  00fe203a01fe
17:36:52.284  70fe2036050100000075                          17:38:07.825  37fe203605010000003c
perefouras commented 6 months ago

Here is my contribution to help understand the handshake over ebus.

Boiler : Ariston Clas one 25 (brand new PCB #65116585-06) No thermostat on the ebus (only Daniel Kucera ebus adapter v6.0) TA1 shunt to be able to control heating via HA integration (it looks like a device with address 70 missing on the bus might prevent the full control of the boiler).

Log file attached ariston-clas-one-reset.log.gz

ysard commented 5 months ago

Ok thank you I read it.

You have an interesting bus reset response to your manual bus reset, not seen until now 37fe2034 0a 3c5affffffffff010300. It's sent at the beginning of the handshake instead of 37fe2034 00.

Plus a normal silent error for the external temp probe during boot (command 2004, 0xec opcode).

Its all the changes it see. It's more opaque than before with this unexpected bus reset...

perefouras commented 5 months ago

Thank you for the analysis.

So, there could be differences between makes/manufacturers ?! Or maybe this 37fe2034 0a rather could be some kind of a (desperate!) call to somebody with a 7x id (at least one zone to give control to/accept control from) ?

It really looks like it's going to be hard to get something out of this mysterious first exchange.

I'd really like to be able to properly control the heating from HA though.

I'm a little concerned the method I use when I reach the requested temperature (lower/set fixed temperature to minimum to trigger/force circulation, wait a handfull of minutes for the hot water to reach all radiators and then trigger "winter mode" with 0120) might be to stressfull to the electronics in the long term. It was obviously not designed to operate like this...

It seems I'm the only one with no ebus thermostat at play and it prooves quite hard to try and guess a working hack !

ysard commented 5 months ago

there could be differences between makes/manufacturers ?! There could be some updates of the protocol, my boiler was installed in 2013. But there are also a lot of unknown parts in it... I found that the protocol is robust to missing bytes in the packets. For example in the 2004 packets (errors) some fields can be omitted, the boiler will react the same. It could be an indication about a protocol update with backward compatibility. Your 0xec error is 5 bytes long, mine is 4, but 2 are enough...

maybe this 37fe2034 0a rather could be some kind of a (desperate!) call to somebody with a 7x id Yeah it might be possible, I thought about it but I can't be sure as long I have a genuine thermostat on my bus (and you know that I'm using it rather than a didicated ebus module).

Above all, at this stage the enumeration of packets and serial number publications have not yet begun. Each device is not yet supposed to know each other.

Also don't forget that you can change the address of your ebusd service with the parameter -a, --address=ADDR. So 70 will be ok.

It might be possible to simulate the full handshake, but not with command line tool, the timings will not be ok. There should be around 100ms between packets, so the full sequence sent with a shell script will take too long . The time required to complete the sequence would exceed the boiler reboot window (~14s).

The solution could be to send the full hex sequence at once.

Like exposed on https://github.com/john30/ebusd/wiki/eBUS-background, the byte sequences are terminated with a CRC. There is a test program in the ebusd sources that you can compile:

$ cd ~/ebusd/src/lib/ebus/test
$ make test_symbol
$./test_symbol 31fe202003022001      #<= wake up DHW
calculated CRC: 0x76
$./test_symbol 31fe2004020c02        #<= 114 error
calculated CRC: 0x87

$./test_symbol 31fe202003022000      #<= shutdown DHW
calculated CRC: 0x77
$./test_symbol 31fe2004020c00        #<= 114 error suppress
calculated CRC: 0x85

Then these sequences with their CRC appended can be sent to the esp8266 module as a new client via netcat. The firmware of the esp should handle multiple clients that want to send or receive data to/from ebus (my version does it, like the original one if I remember correctly). Here are some examples:

$ echo -n -e "\x31\xfe\x20\x20\x03\x02\x20\x01\x76" | ncat 192.168.1.65 3333    <= wake up DHW
$ echo -n -e "\x31\xfe\x20\x04\x02\x0c\x02\x87" | ncat 192.168.1.65 3333        <= 114 error

$ echo -n -e "\x31\xfe\x20\x20\x03\x02\x20\x00\x77" | ncat 192.168.1.65 3333    <= shutdown DHW
$ echo -n -e "\x31\xfe\x20\x04\x02\x0c\x00\x85" | ncat 192.168.1.65 3333        <= 114 error suppress

$ echo '31fe20200302200176' | xxd -r -p | ncat 192.168.1.65 3333    <= wake up DHW
$ echo '31fe20200302200077' | xxd -r -p | ncat 192.168.1.65 3333    <= shutdown DHW

It "works" but I have a few misfires and I have to send the orders several times :/ I don't understand this because according to my code, data from clients have priority over data sent to them. Maybe it's due to my hardware hack, once again.

Here is a Wireshark filter to check that the data is fired on the network:

ip.dst eq 192.168.1.65 and tcp.flags.push eq 1

It's a start for a Python-Fu program that does the reset/handshake itself.

ogkita commented 1 month ago

Hi ysard,

Thank you very much for your work. It help me with my integration.

This is my installation:

The problem of my installation is that Ariston not allow several thermostats for the same zone. For example I have 1 zone for each floor and in each floor I have several thermostat, one for each room. This configuration is not supported by Ariston.

Then I have installed one thermostat for each room and when one of thermostats in the same floor need heat/cold I swith on this zone with external rele. I Hope explain correctly ;-).

The problem is that the Ariston system do not know the current temperature (set point and current tempereature) for each zone. Well, with your work and others that you know (komw, wrongisthenewright, john30, danielkucera, ...) I have configured this:

1.- When eBus receive "10fe2001027118" I send: "70 FE 20 0E 09 71 18 XX XX 00 00 FF FF 00"

2.- For each 2 minutes I send the rooms temperature: "70 FE 20 0E 09 71 18 XX XX 00 00 FF FF 00" "70 FE 20 20 04 71 18 XX XX" "70 FE 20 20 04 62 71 XX XX"

3.- When eBus receive "7ffe2000027118" I send: "70 FE 20 0F 05 71 18 XX XX 00"

All is for each zone (three zones).

This way we get 2 things:

1.- We can see in the diagnostic zone both temperatures.

2.- When I see the calculated temperatures I can see the Ariston system calculate different temperatures for each zone, I think that Ariston is using the temperatures that I send for each zone (only for heat, not for cold).

3.- I can not set zone thermoregulation to 4 (external senor + room thermostat), We only can use 3 (Only external sensor). But like I explained before, I think whit option thermoregulation in 3 Ariston is using this temperatures for calculate the output temperature.

Regarding Handshake protocol, I think it is not mandatory for a optimal installation. It would be great in other to have a total integration but I think the system will work with some integrations.

I hope the comment will help you.

Thank you very much again.

ysard commented 1 week ago

@ogkita :

Hello, thank you for your feedback and information.

You do indeed have a more advanced configuration than the manufacturer suggests/allows.

For your comments:

wrongisthenewright commented 1 week ago

2.- When I see the calculated temperatures I can see the Ariston system calculate different temperatures for each zone, I think that Ariston is using the temperatures that I send for each zone (only for heat, not for cold).

I'll try to dump the initial handsake in the next weeks (I'm on vacation...) but on this point I can shed some lights (at least I think). Every zone calculate the setpoint differently because every sensys thermostat has its own temp sensor so the setpoint is calculated differently. The zone manager then picks the highest temperature from all the zone (in heating mode), the one with the lower ambient temp.

In this way the system can heat the colder zone, the others simply will shut off when the desired temp is reached.

wrongisthenewright commented 1 week ago

I've discovered that in my system (Ariston Genus One+Nimbus 70m heatpump+hybrid manager+sensys+wifi gateway) the command I need to send to cause a bus reset is

w,broadcast,ebus_reset,Reset ebus,,fe,2031,ffffffffffffffffffffffff23fe00,ebus_reset,m,BCD,,,,,,,,,,,,,,,,,,,,,,

23 I think it's a "special" bus address, I have several on my system not "explicitly" associated with devices, this is the result of a ebusctl info command:

address 00: master #1
address 01: master #6
address 03: master #11
address 09: slave
address 0f: master #21
address 13: master #12  - Hybrid Energymanager
address 18: slave #12  - Hybrid Energymanager
address 1e: slave - Heatpump (master address uknown, should be 1e-5=19)
address 23: slave
address 30: master #3
address 31: master #8, ebusd
address 35: slave #3
address 36: slave #8, ebusd
address 37: master #18 - Boiler
address 3c: slave #18 - Boiler
address 6d: slave
address 70: master #4  - Sensys
address 75: slave #4  - Sensys
address 7f: master #24  - Gateway
address 84: slave #24  - Gateway

00 from eBus standard should be the control computer address, I think it's "emulated" by some other device, like the others...

Another interesting thing is (at least I interpret it in this way) that after a bus reset that one device "impersonating" the 00 address, the "master of masters", start the discovery protocol polling on the bus with the PBSB 203a all the available addresses

...
00fe203a0149 = 30
00fe203a014a = 29
00fe203a014b = 30
00fe203a014c = 30
00fe203a014d = 30
00fe203a014e = 30
00fe203a014f = 30
00fe203a0150 = 30
00fe203a01fe = 39
...

and only 2 instances of 203a PBSB queries from 70 master address (sensys)

70fe203a011e = 31
70fe203a0123 = 29

in my system only 6 devices reply to this polling with the 203b PBSB, communicating in the last hex byte their own slave address:

70 fe 203b 01 75 = 3084  --> Sensys Thermostat
03 fe 203b 01 1e = 3082  --> Heatpump slave but 03 as master address
03 fe 203b 01 23 = 3091  --> 23 special address with 03 as master
13 fe 203b 01 18 = 3030  --> Hybrid EnergyManager
37 fe 203b 01 3c = 3105  --> Boiler
7f fe 203b 01 84 = 3089  --> Wifi GW
ogkita commented 1 week ago

Hi @ysard,

Attached is the txt with temperatures calculated: temp_calculated.txt

On the other hand, my Ariston installation does not support thermoregulation for cooling: image

Others params that I am getting are:

 Slope for heating
 Requested status (on/off)
 Energy consumption
 Operation mode
 Compressor frequency

Here is my csv file: ariston.csv

I think your idea of using fixed mode and calculating the temperature in home assistant is very good. The problem is the formula, I was going through your link where you talk about it, but it didn't seem to solve everything.

What formula do you use?

I'm also investigating how to send the minimum and maximum temperatures for each zone, but I haven't found the right parameters. If you look at my csv you will see that I am investigating with e.g. 6072, 6073, 6074, ... but so far I have not been successful, I am still working on it.

In short, it seems that the option I took is working although it is not quite "good". Your idea seems to me also very good and I will take it into account if I manage to read and write the max/min temperatures of each zone.

Finally, it seems that my system has no pressure probe... something that seems incredible to me, but I am not able to see the water pressure in the circuit, when I say that it has no probe I mean that in any parameter of any diagnostic menu it appears... I think it is a very big fault of the device.

We are still working on it! , Oscar

ogkita commented 1 week ago

Hi @wrongisthenewright ,

Yes, I think so, you can have different temperatures for each zone, but by only having one source of heat/cold, you can't send water at different temperatures to different zones..... That's my "basic" theory, but I think the system has a "mixing" valve that may be mixing return water with supply water to send water at different temperatures to different zones... I'm not sure about this actually.

wrongisthenewright commented 1 week ago

Hi @wrongisthenewright ,

Yes, I think so, you can have different temperatures for each zone, but by only having one source of heat/cold, you can't send water at different temperatures to different zones..... That's my "basic" theory, but I think the system has a "mixing" valve that may be mixing return water with supply water to send water at different temperatures to different zones... I'm not sure about this actually.

Hi, please take a lokk at this Ariston Professional Manual (it's in italian as I was not able to find the english version, but google translate can help):

https://agenziavirgilio.it/wp-content/uploads/2021/06/Sistemi_Ibridi_Net_-_Professional_Manual_LE211AR_03_2021.pdf

It's related to hybrid systems like mine (HP+Boiler) but the setpoint logics and algorithms are still valid, on a HP only configuration simply ingore the boiler settings and the logic will be simpler, only the HP will be used.

The more important parts are on Chapter 15 (functioning logics). In a multiple zone env. you can offset the setpoint by a different value for each zone to compensate different insulation / solar exposure of the various zones.

P.S.: This seems the version for a Split system like yours, but still the italian version... https://agenziavirgilio.it/wp-content/uploads/2021/06/Nimbus_S_Net__Professional_Manual_LE132AR_03_2021.pdf

wrongisthenewright commented 1 week ago

Hi @wrongisthenewright ,

Yes, I think so, you can have different temperatures for each zone, but by only having one source of heat/cold, you can't send water at different temperatures to different zones..... That's my "basic" theory, but I think the system has a "mixing" valve that may be mixing return water with supply water to send water at different temperatures to different zones... I'm not sure about this actually.

Note that there's no "mixing" of cool/heat water. The system in heating will heat the water at the max setpoint calculated for the various zones, when a zone reach the desired room temp then the module will close the valve of that zone, the valve will be re-opened when the room temp fall below Tsetpoint -0.3°C. In cooling the reverse is applied.

ysard commented 1 week ago

@ogkita :

What formula do you use?

The paragraph defining this formula is here:

https://pro-domo.ddns.net/blog/domotiser-son-chauffage-avec-home-assistant-automatisation-partie-3.html#implementation-des-differentes-regulations

As I said, I use the temperature from the weather service, but you can use the temperature from your external sensor instead.

In other words:

{% set theoric_target_temp = z1_slope * (z1_room_temp_setpoint - ext_temp) + z1_slope * z1_room_temp_influence  * (z1_room_temp_setpoint - z1_room_temp) + 30 + z1_offset %}

With a low and a high limit (I use a low limit of 35°C but I should have used the minimum temperature specified in the boiler instead, as I'm using the boiler parameter for the high limit: z1_water_max_temp).

Choosing the “Outdoor and room temp” option from my drop-down menu allows me to apply the same water law as if I had the official room thermostat.

Of course, the result of the temperature calculation is applied to ebusd_boiler_z1_fixed_temp via the automation set_z1_fixed_temp. The boiler control mode must be set to “Fixed”.

I'm also investigating how to send the minimum and maximum temperatures for each zone

Indeed 6071,6072,6073,6074 and 6171,6172,6173,6174 are the registers I'm thinking about.

Also note that when you modify a parameter on the boiler, it should quickly broadcast it on the ebus network. Useful to identify registers.

Finally, it seems that my system has no pressure probe

I haven't found (or looked for) this sensor; you're right it should exist as the boiler is capable of emitting a low pressure error. However, this value is not mentioned in my troubleshooting menu manual.

If you know the value to look for, you could use my bruteforce script in the tools/ folder.

ogkita commented 1 week ago

Hi @ysard and @wrongisthenewright

Thank you very much for your comments and documentation.

We keep pushing!

I will continue with the max/min temperatures for each zone and I will tell you the results.

@ysard, did you see the temperature variations in heat mode? They are not very high, but it is clear that it uses the data for the calculation, isn't it? Otherwise they would always be the same.

, Oscar

wrongisthenewright commented 1 week ago

Hi @ysard, Here is my csv file: ariston.csv

Since you have a Nimbus Heatpump have you tried my complete CSV? It should give you back many parameters, I imagine at least all the energymaager/heatpump related codes should be decoded.

I'm also investigating how to send the minimum and maximum temperatures for each zone, but I haven't found the right parameters. If you look at my csv you will see that I am investigating with e.g. 6072, 6073, 6074, ... but so far I have not been successful, I am still working on it.

These are the codes you're looking for:

6071 Heating max temp setting for Z1
6072 Heating max temp setting for Z2
6073 Heating max temp setting for Z3

6171 Heating min temp setting for Z1
6172 Heating min temp setting for Z2
6173 Heating min temp setting for Z3

7171 Cooling max temp setting for Z1
7172 Cooling max temp setting for Z2
7173 Cooling max temp setting for Z3

7371 Cooling min temp setting for Z1
7372 Cooling min temp setting for Z2
7373 Cooling min temp setting for Z3

all present in my CSV, as stated before try it if you already haven't

In short, it seems that the option I took is working although it is not quite "good". Your idea seems to me also very good and I will take it into account if I manage to read and write the max/min temperatures of each zone.

My CSV has corresponding lines for writing some of these parameters (only for Z1 as I have a single zone, but is simple to extend to other zones...

Finally, it seems that my system has no pressure probe... something that seems incredible to me, but I am not able to see the water pressure in the circuit, when I say that it has no probe I mean that in any parameter of any diagnostic menu it appears... I think it is a very big fault of the device.

Try to read the 7547 code, in my case is the boiler pressure sensor, but I suspect it can be valid also for a heatpump only plant.

ysard commented 1 week ago

@ogkita

did you see the temperature variations in heat mode? They are not very high, but it is clear that it uses the data for the calculation, isn't it? Otherwise they would always be the same.

Yeah it would be the same but you need to make sure that both parameters (external temp + current zone temp) play a role in the calculation. This is not so easy to see at a glance.

Here is a capture from my data ("External temp" is my room temp as I said before):

screenshot_HA_entities

Since I use the meteo service, I could use the previsions instead of the current temp in order to anticipate the changes. But it's for another time...

@wrongisthenewright 7547 id: Hum, I have doubts about it on my side. It returns 3.0; but the pressure gauge on the boiler shows 2.8bars. I do not expect such discrepancy here. And if It's really 3 bars I will not add water since It's a maximum allowed. I'm a bit lazy about purging the circuit afterwards :D I will try to test during the next maintenance.

wrongisthenewright commented 1 week ago

@wrongisthenewright 7547 id: Hum, I have doubts about it on my side. It returns 3.0; but the pressure gauge on the boiler shows 2.8bars. I do not expect such discrepancy here. And if It's really 3 bars I will not add water since It's a maximum allowed.

Im sure it’s the right parameter. I tend to keep the pressure in my system on the lower side of the allowed fork but when it get too low (during maintenance some water get lost) I add water and the 7547 changes accordingly. As per 0.2 bar of difference I’ll bet it’s normal production difference between the dial and the pressure probe…

Don’t know your boiler but in my case I can read the detected water pressure from the menu you can try to see if the value is 3.0

ogkita commented 1 week ago

Hi @ysard and @wrongisthenewright

Parameter 7547 is not found in my system:

grep '7547' /var/log/ebusd/ebusd.log # Nothing returned ;-). It seems that my system does not have this "probe". On the Ariston website I see this:

image hahahaha

About setPoint, max and min temperatures, I already have the values under control. Now I'm struggling to know the impulsion and return temperatures. .... I'm investigating these values 7117 7217 7317 and 7710 7810 7910 do they sound familiar?

Finally, I am also analysing the formulas to calculate the flow temperatures in my openhab, but I can't find anything to calculate in cooling mode. Do you know where I could find information?

@ysard, I now have three outside temperatures:

 1.- openweatherMap
 2.- External unit (seems to have its own probe)
 3.- Outdoor probe.

I will analyse the values for a while to see how far they are from each other and give you a summary.

, Oscar

perefouras commented 1 week ago

Hi all,

I cannot help with the per zone temp settings.

However, I can confirm that 7547 accurately returns the boiler water pressure on a direct call on my Ariston Clas One 25 as found in @wrongisthenewright original ariston.csv

ysard commented 1 week ago

@wrongisthenewright, @perefouras :

I finally investigated this register. 0.2 bars seemed to me to be a very significant difference. 10 graduations are useful on this gauge (between 1 and 3 bars), moreover where a value of 2.8 at cold water seems to me very high (supposed to be around 2 bars), a pressure of 3 bars at cold would necessarily trigger the purge in heating condition which was not the case this winter.

So I lowered the pressure to 2bars, and there's no change in the register value.

Just so we're clear, here's my query command:

ebusctl hex 3c2000027547

No, the menu doesn't offer this parameter, or at least it's not explicitly mentioned in the manual.

I should have used my register monitoring script, but I was a bit lazy. Now I can't fill the circuit because the filling valve leaks and rejects the injected water :D For a thing that must have been used 10 times... (I suppose this valve is only used during maintenance operations, isn't it?)

In short, a total failure.

@ogkita : This setting seems to be not broadcasted. You should not find it until you explicitly query it.

I use this command:

ebusctl hex 3c2000027547

I'm investigating these values 7117 7217 7317 and 7710 7810 7910 do they sound familiar?

Unfortunately no, I only keep updated the values for my boiler, they are for 99.9% of them listed on the repository, including uncertain ones. But there is a logical continuation in yours. It should be the a correct way...

I can't find anything to calculate in cooling mode.

No I haven't the formula for the cooling compensation law. But I might be interested about it for a later topic :p

wrongisthenewright commented 6 days ago

@wrongisthenewright, @perefouras :

I finally investigated this register. 0.2 bars seemed to me to be a very significant difference. 10 graduations are useful on this gauge (between 1 and 3 bars), moreover where a value of 2.8 at cold water seems to me very high (supposed to be around 2 bars), a pressure of 3 bars at cold would necessarily trigger the purge in heating condition which was not the case this winter.

So I lowered the pressure to 2bars, and there's no change in the register value.

Just so we're clear, here's my query command:

ebusctl hex 3c2000027547

No, the menu doesn't offer this parameter, or at least it's not explicitly mentioned in the manual.

sorry for your problems, it seems your boiler doesn’t have the probe, strange. But in my case that is the correct register so it should work on similar boilers (Genus family)

wrongisthenewright commented 6 days ago

Hi @ysard and @wrongisthenewright

Parameter 7547 is not found in my system:

grep '7547' /var/log/ebusd/ebusd.log

Nothing returned ;-). It seems that my system does not have this "probe". On the Ariston website I see this:

It seems that in a heat pump only system there’s no pressure probe, I can concur it’s weird…

About setPoint, max and min temperatures, I already have the values under control. Now I'm struggling to know the impulsion and return temperatures. .... I'm investigating these values 7117 7217 7317 and 7710 7810 7910 do they sound familiar?


r,heatpump,heatpump_ext_temp,External Temp,,18,2000,7810,,s,IGN:1,,,,,,SIN,10,°C
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
r,heatpump,heatpump_evaporator_temp,Heatpump Evaporator Temp,,18,2000,7910,,s,IGN:1,,,,,,SIN,10,°C
r,heatpump,heatpump_suction_temp,Heatpump Suction Temp,,18,2000,7217,,s,IGN:1,,,,,,SIN,10,°C
r,heatpump,heatpump_comp_discharge_temp,Heatpump Compr Discharge Temp,,18,2000,7317,,s,IGN:1,,,,,,SIN,10,°C
r,heatpump,heatpump_condenser_outlet_temp,Heatpump Condenser Outlet Temp,,18,2000,7117,,s,IGN:1,,,,,,SIN,10,°C
r,heatpump,heatpump_teo_temp,Heatpump Condenser Outlet Water Temp,,1e,2000,7417,,s,IGN:1,,,,,,SIN,10,°C