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.
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.
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.
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).
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).
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
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
@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.
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.
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.
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.
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