qix67 / comfortzone_heatpump

Arduino library to monitor and control Comfortzone EX50 heatpump
GNU General Public License v3.0
8 stars 5 forks source link

What version of heatpump are your code tested on? #9

Open Staffolainen opened 10 months ago

Staffolainen commented 10 months ago

Hi and thanks for awesome project!

I have a CZ RX65 with software version 2.21 and have difficulties to get anything meaningful out from it with the code. I have tried sniffing the traffic and cannot find the protocol structure you have described, so I want to understand if they either have changed the protocol significantly or if they just added some basic encryption on top of it. Do you have a small data dump from your heat pump you can share so I can compare and see if there are any similarities between them? I am trying to translate your functions and reverse engineer the protocol into a python script since I have slightly different setup for the data ingestion but I also tried the example with a teensy.

qix67 commented 10 months ago

Hi,

Controller version 1.60 and 1.80 are supported. check comfortzone_config.h

If the library fails to receive anything, check your wiring. If it fails to decode packet, you can try to enable DEBUG mode in comfortzone_config.h. The differences between 1.60 and 1.80 are mainly packet ID, raw packet format is unchanged. In DEBUG mode, the library should at least dump valid packets even if ID is unknown.

You can also check issue #2 which contains a lot of informations I used when porting my code from 1.60 to 1.80 protocol.

Eddy0815 commented 8 months ago

Hi,

@Staffolainen my Controller Version is 2.21 too. Did you get anything working? Also interested in Python version of this great library to get this stuff run on my already existing hardware... (raspberry with USB RS485 adapter)

Staffolainen commented 8 months ago

Hi, haven’t have time to play around to much lately(too much work) unfortunately so this is a low intensity project. Have bought all hardware and will (hopefully) do an attempt to catch some data frames during the Christmas vacation to compare with the 1.8 frames to see if I can find any similarities. Have you been able to capture any frames with your setup? Maybe compare what I found with my rs 485->UDP converter (moxa nport).

/S

28 nov. 2023 kl. 19:44 skrev Eddy0815 @.***>:



Hi,

@Staffolainenhttps://github.com/Staffolainen my Controller Version is 2.21 too. Did you get anything working? Also interested in Python version of this great library to get this stuff run on my already existing hardware... (raspberry with USB RS485 adapter)

— Reply to this email directly, view it on GitHubhttps://github.com/qix67/comfortzone_heatpump/issues/9#issuecomment-1830472266, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AMWTBS2OWZMGLZ4YOP4IRRLYGYWJZAVCNFSM6AAAAAA6KLFV4WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMZQGQ3TEMRWGY. You are receiving this because you were mentioned.Message ID: @.***>

Eddy0815 commented 8 months ago

ATM ordering arduino hardware, totally at the beginning of this new project...

Hardware ordered... waiting for delivery

Eddy0815 commented 8 months ago

I managed to get a dump from my heat bump. @qix67 it would be nice if you find some time to take a look at the dump. Hopefully it will be not too difficult to add the new FW-Version to your library. You will make my very very happy! During the dump i changed ventilation to fast and back to normal and changed room temp to 25 and back to 24. Greetings and have a nice Christmas time! UI Software 2.12.1 UI Hardware F Controller 2.21 WP Box 1 heatbumpdump.txt

qix67 commented 8 months ago

I just pushed a new branch named feature/ctrl2_21 .

With this branch, ventilation speed and room temp settings should work properly.

I also found 3 status frames containing ventilation speed, room temp, time and date, the library returns their state in real time.

Can you try this version and check if the dump is correct.

If you can give me additional dumps when you use the control panel, I can improve this version. You can also perform no action and give me real time power consumption, compressor frequency, ... when heatpump is running.

Eddy0815 commented 8 months ago

Amazing, it seems to work. Only tested reading (don't changed settings with your library) and as you can see in the dumps, the values are returned perfect. Thx so much for your work and extremely fast response. One dump is while the bump was running and I touched nothing. The other while the bump was not running but scrolling through the settings in the control panel. heatbumpdump_whileheating.txt heatbumpdump_whileUsingControl.txt

Staffolainen commented 8 months ago

Nice! What microcontroller and RS485 card did you use? Am having high hope to be able to work with this during Christmas break. :)

10 dec. 2023 kl. 16:17 skrev Eddy0815 @.***>:



Amazing, it seems to work. Only tested reading (don't changed settings with your library) and as you can see in the dumps, the values are returned perfect. Thx so much for your work and extremely fast response. One dump is while the bump was running and I touched nothing. The other while the bump was not running but scrolling through the settings in the control panel. heatbumpdump_whileheating.txthttps://github.com/qix67/comfortzone_heatpump/files/13628243/heatbumpdump_whileheating.txt heatbumpdump_whileUsingControl.txthttps://github.com/qix67/comfortzone_heatpump/files/13628246/heatbumpdump_whileUsingControl.txt

— Reply to this email directly, view it on GitHubhttps://github.com/qix67/comfortzone_heatpump/issues/9#issuecomment-1848993635, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AMWTBS6DVQ5UTUPFKEJUFHTYIXHB3AVCNFSM6AAAAAA6KLFV4WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNBYHE4TGNRTGU. You are receiving this because you were mentioned.Message ID: @.***>

Eddy0815 commented 8 months ago

using espressif esp 32 Dev kit and same module qix67 is using #2

qix67 commented 8 months ago

@Eddy0815 What action did you perform on the control panel in heatbumpdump_whileUsingControl.txt ? Navigation does not action on heatpump, you must change a setting to generate a message.

I have noticed 2 packets appearing regularly (UNK:65 6F DE 02 D3 5E 41 44 44 52 18 57 01 02 03 04 0B 0D 01 D6 03 and UNK:65 6F DE 02 D3 5E 41 44 44 52 18 57 01 02 03 04 0B 0D 01 D4), I don't known what they do.

In your last dump, I also have found another packet (UNK:65 6F DE 02 D3 5E 41 44 44 52 18 57 01 02 03 04 0B 0D 00 41 03) with a parameter (B8 01 (44.0° ?) followed by C2 01 (45.00° ?). Whatever it is, after setting this value, the same value appears in the first 2 bytes of status packet UNK:41 44 44 52 07 8A 65 6F DE 02 C5 72 01 02 03 04 0B 0D 00 41 03. Did you changed anything during this dump ?

Eddy0815 commented 8 months ago

I will make another dump while changeing some settings. Or will it be better for you if i make very small dumps while changing only one setting each dump? The switch between 44 and 45 should by a change of the water temperature for usewater (shower for example). try to make new dumps this evening... thx

qix67 commented 8 months ago

One dump per settings is easier but 1 big dump is ok if you give the settings you change in time ordered.

If you choose to make 1 dump per setting, after starting the dump, wait 15-30 seconds before modifiying settings and wait 15-30 seconds after the last change. This helps me to decode status frame.

qix67 commented 8 months ago

I have not noticed until this morning the my message about "UNK:65 6F DE 02 D3 5E 41 44 44 52 18 57 01 02 03 04 0B 0D 00 41 03" is a bit weird because setting a value and reading a status both use the same code, only parameter differs. If the read byte parameter is 0xAF, the reply is a status frame. If the parameter is 0x02, the reply is the value sent by the write command with the same come.

More strange, status frame payload size is 175 bytes long... exactly 0xAF bytes. Same for 0x02.

I don't know if I ever encounter such a frame in other protocol version. I don't know yet how I will manage such a case.

qix67 commented 8 months ago

I pushed a new version. It should be able to properly decode the weird frame. With this version, you should see hot water settings properly decoded.

qix67 commented 8 months ago

And 1 new version.

I added 3 things:

Eddy0815 commented 8 months ago

just made another dump with the new version while heatbump was running without changing anything... (Dump while making changes via control pannel will follow soon) heatbumpdump_whileheating.txt

time until filter have to be changed: 37 days

R_REPLY_STATUS_V180_STATUS_runtime_and_energy is matching perfect

Next is a short dump which should match around about the time i was reading the following value from the display (extended menue by long pressing button in settings menue) TE Dump Timerange manual reading from display.txt description of value translated from german, don't know if correct te0: 10,5 outdoor temp te1: 24,8 frontflow temp te2: 31,1 backflow temp te3: 24,5 room temp te4: 60,5 hotgas temp te5: 33,3 kondens out te6: 9,1 steamer input te7: 3.2 out air temp te24: 28,4 hot water temp

qix67 commented 8 months ago

I just pushed a new version.

Eddy0815 commented 8 months ago

Sry for the longer response time, me and my family were knocked out by illness. Made three Dumps while changing settings:

Dump 1: set_fan_speed (normal -> fast -> normal) set_room_temperature (24 -> 25 -> 24) set_hot_water_temperature (45 -> 46 -> 45) set_led_luminosity (0 -> 1 -> 0) settings dump 1.txt

Dump 2: set_hour (12 -> 13) set_minute (39 -> 40 or 38 -> 39 sry not shure, can't remember exactly) set_day (21 -> 22) set_month (12 -> 1) set_year (2023 -> 2024) settings dump 2.txt

Dump 3: set_extra_hot_water (off -> on -> off) set_fireplace_mode (off -> on -> off) during dump 3 the compressor was running at 21.6 Hz settings dump 3.txt

Would it be possible that you provide your actual Sketch code running on your ESP with your website and MQTT implementation? That would be so extremely nice!

qix67 commented 8 months ago

No problem, I have a lot of people ill around me, it is nearly a miracle I am not.

I discovered something using dump2, the command is nearly the same between the 3 protocol versions, only the 6th byte changes, version 1.6 uses 07, version 1.8 uses 09 and version 2.21 uses 0D. This is a bit funny :)

qix67 commented 8 months ago

I just pushed a new version.

In dump1, I didn't find led luminosity setting packet, you will have to redo it.

In dump2, I didn't find hour setting packet but all the other packets have the same order in protocol 1.6 and 1.8, hour setting packet should be decoded properly.

In dump3, I add support for extra hot water and fireplace mode (both on/off). Tomorrow, I will try to find their current value in status frames.

I think I have found the current compressor frequency.

Can you confirm me several values:

Would it be possible that you provide your actual Sketch code running on your ESP with your website and MQTT implementation? That would be so extremely nice!

I am not sure if it can be useful. The code was never updated since 6 years and probably does not compile on arduino >= 1.9. It also is probably fairly complex because the ESP connected to my heatpump has a HTU21d sensors connected. It is connected via MQTT to my central domoticz but also to another ESP. I have a bunch of #ifdef because my wifi & MQTT codes are used by both my ESPs and my Teensy(s), each one having different sensors, my code is total mess :) but it was far worst before I start using MQTT :)

Eddy0815 commented 8 months ago

In #5 you posted two files for mqtt and web. This are your latest versions? Then i will start with them. Never made anything with arduino before, the learning curve will be very steep. You helped me so much with the decoding, i would never have started this project without your help. I do not understand any single thing your are decoding, it's a shame on me. Will test new version, verify values and deliver led dump tomorrow. And big thx again! Wish you a nice x-mas time!

Eddy0815 commented 7 months ago

TEx and compressor frequency are perfect now. Made new dump while changing LED from 0 -> 1 -> 2 -> 3 -> 0 settings dump LED.txt

qix67 commented 7 months ago

Happy new year.

Good to known TEx sensor and compressor frequency are OK.

About LED settings, I think it should be wired differently on your heatpump. It should be driven by the control panel itself instead of the heatpump.

In your latest dump, I see no write command except

UNK:65 6F DE 02 D3 5E 41 44 44 52 18 57 01 02 03 04 0B 0D 01 D6 03 00 00 81  => 18
UNK:41 44 44 52 07 8A 65 6F DE 02 17 77 01 02 03 04 0B 0D 01 D6 03 00 6D  => 17
UNK:65 6F DE 02 D3 5E 41 44 44 52 18 57 01 02 03 04 0B 0D 01 D4 03 00 00 86  => 18
UNK:41 44 44 52 07 8A 65 6F DE 02 17 77 01 02 03 04 0B 0D 01 D4 03 00 22  => 17

These commands appear periodically even when you do nothing. Moreover, I don't see any "special" changes in all status frame, decoded or not. I don't think it is possible all led settings and status frame were missed/corrupted during nearly 1 minute.

Eddy0815 commented 7 months ago

Happy new year,

could be different wiring. For me it is no problem. Don't need to control LED remotely.

Eddy0815 commented 6 months ago

Do you know when you will find time to finalize 2.21? ATM only in debug mode, all values will be shown but in normal mode not. Tried to understand and complete the comfortzone_decoder* files but i failed ;-(

Fan - time to filter change: 83 days Fan speed: normal Hot water production: no Room heating in progress: no Compressor activity: stopped Additional power (resistor): no Mode: idle Defrost enabled: no TE0 - Outdoor temp: 0.00°C TE1 - Flow water: 0.00°C TE2 - Return water: 0.00°C TE3 - Indoor temp: 0.00°C TE4 - Hot gas temp: 0.00°C TE5 - Exchanger out: 0.00°C TE6 - Evaporator in: 0.00°C TE7 - Exhaust air: 0.00°C TE24 - Hot water temp: 0.00°C Heatpump - Compressor frequency: 20.20Hz Heatpump - Compressor power: 1584W Heatpump - Add power: 0W Heatpump - Total power: 1584W Heatpump - Compressor input power: 800W Compressor energy: 20619.35kWh Add energy: 819.89kWh Hot water energy: 8737.99kWh Compressor runtime: 563579 minutes Total runtime: 1442879 minutes

qix67 commented 6 months ago

I just release version 1.4.1 which should have all values correct in normal mode. Don't forget to set your heatpump version in comfortzone_config.h

Eddy0815 commented 6 months ago

still have trouble getting all working... the readings are looking better now but not perfect. This was while producing hot water:

Fan - time to filter change: 64 days Fan speed: normal Hot water production: no Room heating in progress: no Compressor activity: stopped Additional power (resistor): no Mode: idle Defrost enabled: no TE0 - Outdoor temp: 8.30°C TE1 - Flow water: 23.30°C TE2 - Return water: 32.50°C TE3 - Indoor temp: 23.40°C TE4 - Hot gas temp: 58.50°C TE5 - Exchanger out: 35.70°C TE6 - Evaporator in: 6.90°C TE7 - Exhaust air: -2.30°C TE24 - Hot water temp: 34.10°C Heatpump - Compressor frequency: 36.00Hz Heatpump - Compressor power: 2555W Heatpump - Add power: 0W Heatpump - Total power: 2555W Heatpump - Compressor input power: 1008W Compressor energy: 21336.70kWh Add energy: 839.53kWh Hot water energy: 8922.40kWh Compressor runtime: 582385 minutes Total runtime: 1470329 minutes

the bold values are wrong...

I have tried to set Fan speed and hot water settings but nothing happened... do you have any idea what could be wrong? heatpump.set_fan_speed(3, 5); heatpump.set_hot_water_temperature(50.0, 5); also tried without the timeout...

qix67 commented 6 months ago

Sometimes, due to collision on RS485 bus, the library fails to set value and you have to call the function 2 times.

The value in bold are not supported according to comfortzone_status.h . If you want me to add them, you will have to provide several additional dumps for example when starting/stopping to produce hot water, moreover, you will have to redo the same dumps 3 or 4 times. This will help me to find which values change due to hot water production and which values change without being related to this function.

You also have the filter_alarm which is not supported but it is one of the hardest value to found because it occurs every 90 days only (at least on my heatpump).

timdj commented 3 months ago

Filter alarm could maybe debugged by setting days left to one in service settings? Then you would only have to wait one day instead of 90?