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 fieldValue
Slave IPYour bridge’s IP address (the integration’s example default is 10.10.20.102 — use your own)
TCP PortYour bridge’s Modbus TCP port (the integration’s example default is 8899)
Unit ID1 (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.

Similar Posts