Verify Deye Inverter Registers with QModMaster
Writing a Home Assistant register definition for a Deye inverter from the Modbus manual alone is how garbage sensors get born. The advice from the Deye Modbus TCP integration project (leonelfaugusto/deye-modbus-tcp) is blunt: use a Modbus client like QModMaster to verify every register against the live inverter before writing the definition. This page shows you exactly how to do that verification pass, including the temperature offset trap that catches almost everyone once.
Before you open QModMaster: the Deye preconditions
Deye inverters are usually reached through an RS485 bridge (e.g. a Waveshare RS485-to-WiFi/ETH module) in Modbus TCP mode. The integration’s tested setup pins down the preconditions — verify each on your hardware first:
- Inverter Modbus SN = 01. Set under “Advanced Function” on the inverter display — this is the slave ID your Modbus client must use.
- Baud rate 9600 bps, 8N1. It must match on both the bridge and the inverter.
- Bridge in Modbus TCP ⇄ Modbus RTU mode, not Transparent. Transparent mode passes raw frames and the framing is different — your reads will fail or decode as garbage.
QModMaster connection settings
Go to Options → Modbus TCP and set:
| QModMaster field | Value |
|---|---|
| Slave IP | Your bridge’s IP address (the integration’s example default is 10.10.20.102 — use your own) |
| TCP Port | Your bridge’s Modbus TCP port (the integration’s example default is 8899) |
| Unit ID | 1 (matches Modbus SN = 01 on the inverter) |
Use function code 0x03 (Read Holding Registers) — Deye’s sensor map lives in holding registers, per the integration’s register definitions.
Verify registers one at a time, against the inverter screen
Don’t bulk-scan the whole map in one go. Read each register individually, apply its scale factor, and compare the result with the value shown on the inverter’s display:
- Read a register and note the raw value.
- Apply the scale multiplier from the manual (e.g. 0.1).
- Stand in front of the inverter (or open its local monitoring page) and compare. If the numbers disagree, your address, function code, or scale is wrong — not the inverter.
- Pay attention to signed vs unsigned: power and current values that can go negative are typically
int16; reading them as unsigned flips the sign.
The temperature offset trap: subtract 1000 first
This is the Deye-specific gotcha that makes temperatures read as hundreds of degrees. Some Deye temperature registers (the integration documents this for registers like 100/101 on supported models) encode the value with an offset of 1000:
real_value = (raw - 1000) × scale
Concrete example from the integration docs: raw 1250 with scale 0.1 → (1250 − 1000) × 0.1 = 25.0 °C. If your QModMaster read shows a raw value around 1200–1400 on a temperature register, don’t panic — subtract 1000 first, then scale. When writing your HA definition, flag these addresses as temperature registers so the offset is applied automatically. Which addresses carry the offset depends on your exact inverter model and firmware — confirm against your Deye Modbus manual.
Connecting over RS485 instead of a bridge?
USB-to-RS485 adapter (Amazon) — if you skip the network bridge and wire the inverter’s RS485 terminals straight to your PC, a dependable FTDI-based adapter is the first thing to buy; cheap adapters are a classic source of intermittent Modbus timeouts.
FAQ
QModMaster returns values but they’re all wrong-looking. Where do I start?
Check function code first (0x03 holding registers for Deye sensor data), then signed vs unsigned interpretation, then the scale factor — and for temperature registers, the −1000 offset. One of those four explains nearly every “wrong value” report.
My temperature reads ~125 °C. Is the inverter overheating?
Almost certainly not — you’re seeing the raw value before the offset is applied. (1250 − 1000) × 0.1 = 25.0 °C is the correct decoding.
Reads work in QModMaster but my HA definition shows nothing.
Your HA config is asking for different addresses, a different Unit ID, or reading in blocks with gaps the bridge can’t serve. Since QModMaster proves the hardware path works, the bug is in the definition — re-verify each address against what QModMaster returned.
Related Guides
Verification workflow and the temperature-offset formula are documented in the leonelfaugusto/deye-modbus-tcp project README. Register addresses, scales, and which registers carry the offset vary by Deye model and firmware — always confirm against your inverter’s Modbus manual. qmodmaster.com is an independent community resource for the upstream QModMaster project (LGPLv3) and is not affiliated with Deye or the integration’s authors.
