Gree Versati III Air to water heat pump

Hello everybody.

I recently purchased a Gree Versati III monoblock air to water heat pump for my house.
The unit comes with a color display and full WiFi functionality with Gree+ app for android.

In my shop a have a Toytomi unit that is perfectly working with native Gree HA integration.
In my phone’s Gree+ App both units are working.

Anyway my guess is, that part of the code is same, but the air to water units have more and different sensors and modes.
I am willing to help as far as i can, anyone who has knowledge, time and appetite for that.

Monitoring of such units, is very critical for power consumption, performace and automation.

Thanks in advance

i also would be interested into getting my gree versati iii working in home assistant. I’ve tried gree ac integrations, but I can onlY TURN on and off the unit.

1 Like

I also have a Versati III heat pump.
In theory it could be controlled using Modbus / RS485 via cable.
It would be easier if it worked via Wi-Fi.

Do any of you Versati owners have a document with the modbus register layout?

I have a Versati II, and I found the Gree modbus document for Versati (labeld V1.5), but having scanned the registers on my heat pump, they obviously don’t match that version of the document.

I can probably reverse engineer enough to set up the heat pump as a HA device, but won’t be able to decode alarms or anything else that I cant replicate via the front panel buttons.

2 Likes

Hi Pug

Thanks for your input.
Yes I found the same modbus document as you.
Have you prepared any code for yours already?
My guess is that they probably have a few similar functions.
Maybe the book is for the versati III.

I can correct or modify the code by experimenting if I have from somewere to start.
Are you doing it in a modbus.yaml and then include it in the config?
Can we get the modbus through ethernet network (I have done that with victron energy integration) or via Modbus to USB (I use a raspberry pi 4 for HA).

Thanks in advance!

1 Like

I have been tinkering with the modbus interface on the heat pump, firstly getting direct connection of the modbus RTU RS485 interface to talk to an RS485 USB stick plugged into a PC. I tried a few free modbus sniffer and tester programs, and the best that I found for this testing was the CAS Modbus Scanner, which lets me read the modbus registers on the heat pump, and even switch it on and off from the PC.

I then tried networking the modbus, and have just got it working with the USB RS485 adapter plugged into a Netgear D7800 router running openWRT. I am using the packages kmod-usb-serial-ch341 (to match my RS485 adapter) and mbusd to convert modbus RTU to modbus/TCP. I can now read the heat pump registers using modbus/TCP from the comfort of my desk.

Looking at the available protocol document, comparing it to the parameters read via modbus and the order of items on the Gree wired control panel, I think that I have figured out the definition of 90% of the registers, enough to implement the control strategy that I want. Almost nothing matches the document.

Next thing is to hack together a device configuration to extract a few useful parameters as an exercise in learning how to program HA (which I am completely new to).

3 Likes

Hi, I also am a Versati III user. Do you have any updates, any tools that we can use for monitoring or controling the heat pump? Tnx.

Hi there, I have Versati II which I control thru RS485 TTL adapter from home assistant - here is my configuration.yaml for main functions. Probably there is no change of registers for Versati III. Just try it out. Also it can be used with cheap ESP to RS485 RTU bridge. I tested with MikroTik Knot which have a modbus as well.

modbus:
  - name: versati2
#    type: tcp
#    host: 192.168.2.77
#    port: 502
    type: serial
    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: N
    port: /dev/ttyUSB1
    stopbits: 1
        
    sensors:
      - name: "Outside Temp."
        scan_interval: 30
        slave: 1
        address: 45
        input_type: holding
        unit_of_measurement: °C
        count: 1
        scale: 0.1
        offset: 0
        precision: 1
        data_type: uint16

      - name: "Leaving Water Temp."
        scan_interval: 30
        slave: 1
        address: 50
        input_type: holding
        unit_of_measurement: °C
        count: 1
        scale: 0.1
        offset: 0
        precision: 1
        data_type: uint16
        
      - name: "Water Tank Temp."
        scan_interval: 30
        slave: 1
        address: 53
        input_type: holding
        unit_of_measurement: °C
        count: 1
        scale: 0.1
        offset: 0
        precision: 1
        data_type: uint16
        
    switches:
      - name: Gree On/OFF
        slave: 1
        address: 1
        command_on: 170
        command_off: 85
        scan_interval: 5
        verify:
            input_type: holding
            address: 1
            delay: 5
            state_on: 170
            state_off: 85
            
      - name: "Mode Heat+HotWater"
        slave: 1
        address: 2
        command_on: 04
        scan_interval: 5
        verify:
            input_type: holding
            address: 2
            delay: 5
            state_on: 4
            state_off: 2
            
      - name: "Mode HotWater"
        slave: 1
        address: 2
        command_on: 02
        scan_interval: 5
        verify:
            input_type: holding
            address: 2
            delay: 5
            state_on: 2
            state_off: 4
            
      - name: "Mode Cooling"
        slave: 1
        address: 2
        command_on: 05
        scan_interval: 5
        verify:
            input_type: holding
            address: 2
            delay: 5
            state_on: 5
            state_off: 4 
            
      - name: "Mode Cool+HotWater"
        slave: 1
        address: 2
        command_on: 03
        scan_interval: 5
        verify:
            input_type: holding
            address: 2
            delay: 5
            state_on: 3
            state_off: 4
            
    binary_sensors:
      - name: "System Irrecoverable Protection"
        address: 103
        scan_interval: 20
        slave: 1
        input_type: coil
      - name: "Flow Switch Protection"
        address: 108
        scan_interval: 20
        slave: 1
        input_type: coil
      - name: "IDU Irrecoverable Protection"
        address: 191
        scan_interval: 20
        slave: 1
        input_type: coil
        
    climates:
      - name: Gree HotWater
        slave: 1
        address: 53  # Адреса на текущия показател (не за управление) трябва да се превърнат от HEX в DEC за да бачкат с HA
        data_type: uint16
        offset: 0
        precision: 1
        scale: 0.1
        count: 1
        target_temp_register: 13 # Адреса за управление - трябва да се превърнат от HEX в DEC за да бачкат с HA
        max_temp: 60
        min_temp: 40
        temp_step: 1
        
      - name: Gree FloorHeat
        slave: 1
        address: 50  # Адреса на текущия показател (не за управление) трябва да се превърнат от HEX в DEC за да бачкат с HA
        data_type: uint16
        offset: 0
        precision: 1
        scale: 0.1
        count: 1
        target_temp_register: 10  # Адреса за управление - трябва да се превърнат от HEX в DEC за да бачкат с HA
        max_temp: 55
        min_temp: 25
        temp_step: 1
        
      - name: Gree Cooling
        slave: 1
        address: 50  # Адреса на текущия показател (не за управление) трябва да се превърнат от HEX в DEC за да бачкат с HA
        data_type: uint16
        offset: 0
        precision: 1
        scale: 0.1
        count: 1
        target_temp_register: 09  # Адреса за управление - трябва да се превърнат от HEX в DEC за да бачкат с HA
        max_temp: 25
        min_temp: 16
        temp_step: 1
      ```

Cheers
3 Likes

I am very happy some people have gathered here. Unfortunately at the moment I am in the peak if my bussiness (marine electronics) and I don’t have any time to spend on that matter. In the end of the season I will start again. In the mean time I found a very inexpesive RS485 to usb converter cable from victron energy at 28E+vat

Cheers to everybody.

1 Like

@agisofttm How do you know what address represent which function? E.g. you use for On/Off address 1 and in the documentation I can find only “word 42”. Am I right that you somehow translate this “word 42” into “address 1”?
Thank you in advance.

Hi @Gerwazy

It’s depend what kind of Versati do you use. There are at least 5-6 modbus protocols from Gree (which is stupid), but I’m using Modbus protocol Version 1.0 for NaE(NaD) types. Here is documentation for my machines.


1 Like

Thank you for your fast replay. I use exactly the same protocol as you but on Cooper & Hunter heat pump. My question was more about how to discover proper address. After spending 2 days watching & reading what is available I guess I have to scan my heat pump modbus and try to somehow connect proper scan result (address) with table entry from documentation (?) Or is there any other way to translate this e.g. “word 42” into right address? There is no separate “address column” in documentation.

@Gerwazy Actually I don’t have answers for this question. For my models of Gree Versati I spend at least 6 months to find proper documentation. About Word 42 - this is actually Address, so the "WORDS"in my config are actually Addresses. So if you believe that “Cooper & Hunter” are using Gree protocol, try use all other documentation of Gree. I can help only by sending all I have to you.

Cheers

Thank you Vladimir! Based on your screenshots have realised I have different modbus protocol - V1.1 where on/off functionality is as “word 42”, not as “word 1” in yours.
Today I am going to check again your config changing for on/off switch address from 1 to 42.

It this helps anyone, I found Versati Modbus v1.5
https://man.kievclimate.com/man/Gree/Versati/Versati%20III/R32_Versati%20Modbus%20V1.5.pdf

Hi, can someone please help me to find the address of the outdoor temperature sensor for esphome? I’m already clueless and I’ve tried everything :smiley:

I used a modbus converter and connected A to A, B to B and GND to GND.
I connected the converter to Wemos RX-TX and TX-RX.

The address of the Gree Versati III heat pump is 0x01.

I think I am entering the sensor address “outside temp” wrong or I have another parameter wrong like U_DWORD, holding, adress: 0x9004… etc

datasheet: https://man.kievclimate.com/man/Gree/Versati/Versati%20III/R32_Versati%20Modbus%20V1.5.pdf

uart:
  id: mod_bus
  tx_pin: D1
  rx_pin: D3
  baud_rate: 9600
  stop_bits: 1
  data_bits: 8

modbus:
  id: modbus_versati3

modbus_controller:
  - id: versati3
    address: 0x01
    modbus_id: modbus_versati3
    setup_priority: -10
    update_interval: 5s

sensor:
  - platform: modbus_controller
    modbus_controller_id: versati3
    id: outside_temp
    name: "test_gree_Outside_Temp"
    address: 0x9004
    register_type: holding
    value_type: U_DWORD
    unit_of_measurement: '°C'

I’ve tried these addresses and they don’t work:
address: 0x0004
address: 0x7535
address: 0x9004
address: 0x0113
address: 0x2D
address: 0x0020
address: 0x13
address: 0x0D
address: 0xFA4
address: 14

error in the log:
[22:31:14][D][modbus_controller:029]: Modbus command to device=1 register=0x10D countdown=0 no response received - removed from send queue

Thank you in advance for your help…

Hi,

How and where did you connect the modbus cable? Does the Versati III have to be disassembled to connect the modbus cable? How can this be done?

Hi The modbus cable goes to the back of the control panel on port 1 as in the picture below.
Capture1|579x500

1 Like

Where can I find this connector? How to access it? What is the name of the connector if I want to buy a cable for it?

That’s in the behind the color display. Just pull it off and you will see it.

1 Like