Deye Modbus — Complete Register List by Model, ESPHome and Home Assistant
For configuration and diagnosis, see Deye Time of Use settings, Deye inverter troubleshooting and Deye Home Assistant automations.
SG01LP1, SG02LP1, SG03LP1, SG04LP3, SG05LP3 and SG01HP3 — separate maps, DEC and HEX addresses,
data types, scales, Time of Use, and write registers.
The biggest mistake in Deye guides is treating the whole brand as a single inverter.
Address 186 may mean PV1 power in one family, while in SG04LP3 and SG05LP3 the same value sits at address 672.
That’s why this article is built the opposite way to most available material: you first pick the exact model,
and only then use the correct register table.
If you’re still choosing a communication method, start with the guide
how to connect Deye to Home Assistant.
Here I focus on the reference layer: addresses, data types, scales, and the differences between families.
Why there is no single Deye register map
The LP1, LP3, and HP3 designations are not cosmetic. They define the hardware platform, the number of phases, and the battery type.
Older single-phase LP1 units mostly use the 0-279 range. Three-phase LP3 and HP3 units move the core data to the 500-683 range.
Even units with a similar-looking name can differ in MPPT count, counter width, and where Time of Use sits.
| Family | Models | Map | Status | TOU / write | Key note |
|---|---|---|---|---|---|
| SG01LP1 | SUN-7.6/8/12/14/16K-SG01LP1-EU | SG01LP1 registers | Confirmed deye_hybrid group | Partially confirmed | Older single-phase map; do not use 500+ addresses from LP3. |
| SG02LP1 | SUN-7.6/8/10/12K-SG02LP1-EU-AM2/AM3 | SG02LP1 registers | Confirmed separate map | TOU 248-279 confirmed | Has PV3 and scale/counter differences. |
| SG03LP1 | SUN-3/3.6/5/6K-SG03LP1-EU | SG03LP1 registers | Confirmed separate map | Shared legacy TOU – needs validation | On timeouts, max. 16 registers per request. |
| SG04LP1 | SUN-3/3.6/5/6K-SG04LP1-EU | SG01LP1 as a test profile | No independent complete map in the base source | Experimental | Dump the basic addresses first; we do not claim full compatibility. |
| SG05LP1 | SUN-3.6/5/6/7/7.6/8/10K-SG05LP1-EU | SG02LP1/SG0XLP1 as a candidate | Unconfirmed complete model map | Experimental | New generation; per-firmware testing required. |
| SG06LP1 | SUN-3-12K-SG06LP1-EU | None | No verified complete map | Do not use write | Diagnostic profile and dump only. |
| SG04LP3 | SUN-5/6/8/10/12K-SG04LP3-EU | SG04LP3 registers | Best confirmed | Full 146-177 (146 weekly schedule, 148-177 time slots) | Base 3-phase LV map. |
| SG05LP3 3-12 kW | SUN-3/4/5/6/8/10/12K-SG05LP3-EU | SG05LP3 registers | Close to the SG04LP3 map, not fully confirmed | Writing requires model testing | Some registers overlap with SG04LP3, some don’t — treat as a starting point, not a certainty. |
| SG05LP3 14-20 kW | SUN-14/15/16/18/20K-SG05LP3-EU | SG05LP3 registers | Monitoring practically confirmed | TOU/write: C | Do not assign status A without testing. |
| SG06LP3 | SUN-3/4/5/6/8K-SG06LP3-EU | None | Experimental | Do not use write | Do not assume compatibility just from the LP3 designation. |
| SG01HP3 5-25 kW | SUN-5-25K-SG01HP3-EU-AM2 | SG01HP3 registers | Confirmed separate HP3 map | Separate HP3 settings | Possibly two battery inputs and PV3/PV4. |
| SG01HP3 29.9-50 kW | SUN-29.9/30/35/40/50K-SG01HP3-EU | SG01HP3 registers as a base | Monitoring partially confirmed | Writing requires validation | Different MPPT counts and battery 2. |
| SG02HP3 | SUN-25-50K-SG02HP3-EU | SG01HP3 as a test profile | Family supported by ESPHome projects, no complete base table | Experimental | Separate dump and comparison against HP3. |
| LP2 / HP2 | US/JP split-phase models | None | Outside the EU maps | Do not use write | Do not copy LP1/HP3. |
| String G05/G06 | SUN-…-G05/G06P3 | Outside hybrid scope | Separate string map | Different settings set | Not a hybrid. |
| Microinverters | SUN-M / G3 | Outside hybrid scope | Separate micro map | No battery TOU | Different protocol and registers. |
How to read the register table
The DEC address is the value used directly in ESPHome and most integrations. HEX makes it easier to cross-check against technical documentation.
The type U_WORD means a 16-bit unsigned integer, and
S_WORD a signed one. Energy counters often span two registers and require the correct low/high word order.
A scale of 0.1 means the raw value must be multiplied by 0.1.
The same address read as unsigned instead of signed can show a value around 65000 instead of a negative power reading.
A 32-bit counter assembled with the reversed word order can also look plausible while being completely wrong.
Also watch for deceptively similar registers: in the single-phase map, 169 is the total grid power from the inverter port, while 172 is the power from an external CT clamp (Grid CT) used for zero-export — two different quantities, even though both are called “grid power”.
SG01LP1 — older single-phase LV map
SG01LP1 uses a legacy map where PV1 Power sits at address 186, battery SOC at 184, and battery power at 190. Do not carry over 500+ addresses from SG04LP3 here.
SUN-7.6/8/12/14/16K-SG01LP1-EU and compatible regional variants.
| Category | Register | DEC | HEX | Type | Scale | Unit | R/W | Confidence | Notes |
|---|---|---|---|---|---|---|---|---|---|
| PV / grid | PV1 Power | 186 | BA | U_WORD | 1 | W | R | A/B | |
| Energy | Daily Production | 108 | 6C | U_WORD | 0.1 | kWh | R | A/B | |
| AC | Micro-inverter Power | 166 | A6 | U_WORD | 1 | W | R | A/B | |
| CT | Internal CT L1 Power | 167 | A7 | S_WORD | 1 | W | R | A/B | |
| Temperature | DC Temperature | 90 | 5A | S_WORD | 0.1 | °C | R | A/B | |
| Battery | Total Battery Charge | 72,73 | 48,49 | U_DWORD | 0.1 | kWh | R | A/B | |
| PV / grid | PV2 Power | 187 | BB | U_WORD | 1 | W | R | A/B | |
| PV / grid | PV1 Voltage | 109 | 6D | U_WORD | 0.1 | V | R | A/B | |
| PV / grid | PV1 Current | 110 | 6E | U_WORD | 0.1 | A | R | A/B | |
| Energy | Total Production | 96,97 | 60,61 | U_DWORD | 0.1 | kWh | R | A/B | |
| AC | Total Grid Power | 169 | A9 | S_WORD | 1 | W | R | A/B | SG02LP1: scale of 10 per group documentation; compare against the HMI. |
| AC | Grid Voltage L1 | 150 | 96 | U_WORD | 0.1 | V | R | A/B | |
| Battery | Battery Power | 190 | BE | S_WORD | 1 | W | R | A/B | |
| Battery | Battery Voltage | 183 | B7 | U_WORD | 0.01 | V | R | A/B | |
| Battery | Battery SOC | 184 | B8 | U_WORD | 1 | % | R | A/B | |
| Battery | Battery Current | 191 | BF | S_WORD | 0.01 | A | R | A/B | |
| Temperature | AC Temperature | 91 | 5B | S_WORD | 0.1 | °C | R | A/B |
The table above shows the most important registers for this family. The full list, including the 4xxxx address,
source, word order, write risk, and per-model comments, is in the attached XLSX spreadsheet.
SG02LP1 — single-phase map with a third MPPT
SG02LP1 is a separate family. Among other things it has PV3 at address 188 and its own Time of Use block at 248-279. It’s a good example of why sharing the LP1 suffix doesn’t mean an identical map.
SUN-7.6/8/10/12K-SG02LP1-EU-AM2/AM3 and -P variants.
| Category | Register | DEC | HEX | Type | Scale | Unit | R/W | Confidence | Notes |
|---|---|---|---|---|---|---|---|---|---|
| PV / grid | PV1 Power | 186 | BA | U_WORD | 1 | W | R | A/B | |
| Energy | Daily Production | 108 | 6C | U_WORD | 0.1 | kWh | R | A/B | |
| AC | Micro-inverter Power | 166 | A6 | U_WORD | 1 | W | R | A/B | |
| CT | Internal CT L1 Power | 167 | A7 | S_WORD | 1 | W | R | A/B | |
| Temperature | DC Temperature | 90 | 5A | S_WORD | 0.1 | °C | R | A/B | |
| Battery | Total Battery Charge | 72,73 | 48,49 | U_DWORD | 0.1 | kWh | R | A/B | |
| TOU | Time of Use Time 1 | 250 | FA | U_WORD | 1 | R/W | A/B | HHMM | |
| PV / grid | PV2 Power | 187 | BB | U_WORD | 1 | W | R | A/B | |
| PV / grid | PV1 Voltage | 109 | 6D | U_WORD | 0.1 | V | R | A/B | |
| PV / grid | PV1 Current | 110 | 6E | U_WORD | 0.1 | A | R | A/B | |
| Energy | Total Production | 96,97 | 60,61 | U_DWORD | 0.1 | kWh | R | A/B | |
| AC | Total Grid Power | 169 | A9 | S_WORD | 10 | W | R | A/B | SG02LP1: scale of 10 per group documentation; compare against the HMI. |
| AC | Grid Voltage L1 | 150 | 96 | U_WORD | 0.1 | V | R | A/B | |
| Battery | Battery Power | 190 | BE | S_WORD | 1 | W | R | A/B | |
| Battery | Battery Voltage | 183 | B7 | U_WORD | 0.01 | V | R | A/B | |
| Battery | Battery SOC | 184 | B8 | U_WORD | 1 | % | R | A/B | |
| Battery | Battery Current | 191 | BF | S_WORD | 0.01 | A | R | A/B | |
| Temperature | AC Temperature | 91 | 5B | S_WORD | 0.1 | °C | R | A/B | |
| TOU | Time of Use SOC 1 | 268 | 10C | U_WORD | 1 | % | R/W | A/B | |
| TOU | Time of use enabled | 248 | F8 | U_WORD | 1 | R/W | A/B |
The table above shows the most important registers for this family. The full list, including the 4xxxx address,
source, word order, write risk, and per-model comments, is in the attached XLSX spreadsheet.
SG03LP1 — a separate map and shorter queries
SG03LP1 uses a similar address range to the older LP1, but should be treated separately. Some units do not tolerate long read blocks and require limiting a single request to about 16 registers.
SUN-3/3.6/5/6K-SG03LP1-EU.
| Category | Register | DEC | HEX | Type | Scale | Unit | R/W | Confidence | Notes |
|---|---|---|---|---|---|---|---|---|---|
| PV / grid | PV1 Power | 186 | BA | U_WORD | 1 | W | R | A/B | |
| Energy | Daily Production | 108 | 6C | U_WORD | 0.1 | kWh | R | A/B | |
| AC | Micro-inverter Power | 166 | A6 | U_WORD | 1 | W | R | A/B | |
| CT | Internal CT L1 Power | 167 | A7 | S_WORD | 1 | W | R | A/B | |
| Temperature | DC Temperature | 90 | 5A | S_WORD | 0.1 | °C | R | A/B | |
| Battery | Total Battery Charge | 72,73 | 48,49 | U_DWORD | 0.1 | kWh | R | A/B | Shared deye_hybrid_battery group; limit a single read to <=16 registers if timeouts occur. |
| PV / grid | PV2 Power | 187 | BB | U_WORD | 1 | W | R | A/B | |
| PV / grid | PV1 Voltage | 109 | 6D | U_WORD | 0.1 | V | R | A/B | |
| PV / grid | PV1 Current | 110 | 6E | U_WORD | 0.1 | A | R | A/B | |
| Energy | Total Production | 96,97 | 60,61 | U_DWORD | 0.1 | kWh | R | A/B | |
| AC | Total Grid Power | 169 | A9 | S_WORD | 1 | W | R | A/B | SG02LP1: scale of 10 per group documentation; compare against the HMI. |
| AC | Grid Voltage L1 | 150 | 96 | U_WORD | 0.1 | V | R | A/B | |
| Battery | Battery Power | 190 | BE | S_WORD | 1 | W | R | A/B | Shared deye_hybrid_battery group; limit a single read to <=16 registers if timeouts occur. |
| Battery | Battery Voltage | 183 | B7 | U_WORD | 0.01 | V | R | A/B | Shared deye_hybrid_battery group; limit a single read to <=16 registers if timeouts occur. |
| Battery | Battery SOC | 184 | B8 | U_WORD | 1 | % | R | A/B | Shared deye_hybrid_battery group; limit a single read to <=16 registers if timeouts occur. |
| Battery | Battery Current | 191 | BF | S_WORD | 0.01 | A | R | A/B | Shared deye_hybrid_battery group; limit a single read to <=16 registers if timeouts occur. |
| Temperature | AC Temperature | 91 | 5B | S_WORD | 0.1 | °C | R | A/B |
The table above shows the most important registers for this family. The full list, including the 4xxxx address,
source, word order, write risk, and per-model comments, is in the attached XLSX spreadsheet.
SG04LP3 — the main three-phase LV map
SG04LP3 is the best-documented family. Here you’ll find full PV, battery, CT, Load/EPS, Generator/Smart Load, energy counters, and the TOU block at 146-177.
SUN-5/6/8/10/12K-SG04LP3-EU, including select AM2-P variants after firmware confirmation.
| Category | Register | DEC | HEX | Type | Scale | Unit | R/W | Confidence | Notes |
|---|---|---|---|---|---|---|---|---|---|
| System | Running status | 500 | 1F4 | U_WORD | 1 | R | A/B | Status code; requires a value map. | |
| PV / grid | PV1 Power | 672 | 2A0 | U_WORD | 1 | W | R | A/B | |
| Battery | Daily Battery Charge | 514 | 202 | U_WORD | 0.1 | kWh | R | A/B | |
| Load / EPS | Total Load Power | 653 | 28D | U_WORD | 1 | W | R | A/B | |
| Generator / Smart Load | Phase voltage of Gen port A | 661 | 295 | U_WORD | 0.1 | V | R | A/B | Port meaning depends on inverter configuration. |
| TOU | Time of Use Weekly Selling Schedule | 146 | 92 | U_WORD | 1 | R/W | B | Do not write the whole word without preserving the other bits. | |
| Settings | Maximum battery charge current | 108 | 6C | U_WORD | 1 | A | R/W | A/B | Do not exceed the battery and wiring current limits. |
| PV / grid | PV2 Power | 673 | 2A1 | U_WORD | 1 | W | R | A/B | |
| PV / grid | PV1 Voltage | 676 | 2A4 | U_WORD | 0.1 | V | R | A/B | |
| PV / grid | PV1 Current | 677 | 2A5 | U_WORD | 0.1 | A | R | A/B | |
| PV / grid | Daily Production | 529 | 211 | U_WORD | 0.1 | kWh | R | A/B | Daily counter. |
| PV / grid | Total Production | 534 | 216 | U_DWORD | 0.1 | kWh | R | A/B | Addresses 534-535. |
| PV / grid | Total Grid Power | 625 | 271 | S_WORD | 1 | W | R | A/B | Import/export sign needs confirmation. |
| PV / grid | Grid Voltage L1 | 598 | 256 | U_WORD | 0.1 | V | R | A/B | |
| Battery | Battery Power | 590 | 24E | S_WORD | 1 | W | R | A/B | Confirm charge/discharge sign. |
| Battery | Battery Voltage | 587 | 24B | U_WORD | 0.01 | V | R | A/B | LV platform. |
| Battery | Battery SOC | 588 | 24C | U_WORD | 1 | % | R | A/B | |
| Battery | Battery Current | 591 | 24F | S_WORD | 0.01 | A | R | A/B | |
| PV / grid | AC Temperature | 541 | 21D | S_WORD | 0.1 | °C | R | A/B | Check the offset for your firmware. |
| PV / grid | DC Temperature | 540 | 21C | S_WORD | 0.1 | °C | R | A/B | Check the offset for your firmware. |
| TOU | Time of Use Time 1 | 148 | 94 | U_WORD | 1 | R/W | A/B | HHMM format; minutes 00-59. | |
| TOU | Time of Use SOC 1 | 166 | A6 | U_WORD | 1 | % | R/W | A/B | |
| Generator / Smart Load | Total Power of Gen Ports | 667 | 29B | U_WORD | 1 | W | R | A/B | Port meaning depends on inverter configuration. |
The table above shows the most important registers for this family. The full list, including the 4xxxx address,
source, word order, write risk, and per-model comments, is in the attached XLSX spreadsheet.
SG05LP3 — close to SG04LP3, but without full confirmation
SG05LP3 shares a large part of the three-phase LV map with SG04LP3 (PV, battery, and grid telemetry), but this is not 100% confirmed. The community itself is still discussing the full mapping of this family, especially the TOU part — treat the table below as a verified starting point, not a settled certainty, and always compare the reading against the inverter screen before the first write. The 14-20 kW variants require even more caution, especially for TOU, power limits, and writing.
SUN-3/4/5/6/8/10/12K-SG05LP3-EU-SM2 and SUN-14/15/16/18/20K-SG05LP3-EU-SM2.
| Category | Register | DEC | HEX | Type | Scale | Unit | R/W | Confidence | Notes |
|---|---|---|---|---|---|---|---|---|---|
| System | Running status | 500 | 1F4 | U_WORD | 1 | R | A/B | Status code; requires a value map. SG05LP3: check power variant, MPPT count, and firmware. | |
| PV / grid | PV1 Power | 672 | 2A0 | U_WORD | 1 | W | R | A/B | SG05LP3: check power variant, MPPT count, and firmware. |
| Battery | Daily Battery Charge | 514 | 202 | U_WORD | 0.1 | kWh | R | A/B | SG05LP3: check power variant, MPPT count, and firmware. |
| Load / EPS | Total Load Power | 653 | 28D | U_WORD | 1 | W | R | A/B | SG05LP3: check power variant, MPPT count, and firmware. |
| Generator / Smart Load | Phase voltage of Gen port A | 661 | 295 | U_WORD | 0.1 | V | R | A/B | Port meaning depends on inverter configuration. SG05LP3: check power variant, MPPT count, and firmware. |
| TOU | Time of Use Weekly Selling Schedule | 146 | 92 | U_WORD | 1 | R/W | A/B | Do not write the whole word without preserving the other bits. SG05LP3: check power variant, MPPT count, and firmware. | |
| Settings | Maximum battery charge current | 108 | 6C | U_WORD | 1 | A | R/W | A/B | Do not exceed the battery and wiring current limits. SG05LP3: check power variant, MPPT count, and firmware. |
| PV / grid | PV2 Power | 673 | 2A1 | U_WORD | 1 | W | R | A/B | SG05LP3: check power variant, MPPT count, and firmware. |
| PV / grid | PV1 Voltage | 676 | 2A4 | U_WORD | 0.1 | V | R | A/B | SG05LP3: check power variant, MPPT count, and firmware. |
| PV / grid | PV1 Current | 677 | 2A5 | U_WORD | 0.1 | A | R | A/B | SG05LP3: check power variant, MPPT count, and firmware. |
| PV / grid | Daily Production | 529 | 211 | U_WORD | 0.1 | kWh | R | A/B | Daily counter. SG05LP3: check power variant, MPPT count, and firmware. |
| PV / grid | Total Production | 534 | 216 | U_DWORD | 0.1 | kWh | R | A/B | Addresses 534-535. SG05LP3: check power variant, MPPT count, and firmware. |
| PV / grid | Total Grid Power | 625 | 271 | S_WORD | 1 | W | R | A/B | Import/export sign needs confirmation. SG05LP3: check power variant, MPPT count, and firmware. |
| PV / grid | Grid Voltage L1 | 598 | 256 | U_WORD | 0.1 | V | R | A/B | SG05LP3: check power variant, MPPT count, and firmware. |
| Battery | Battery Power | 590 | 24E | S_WORD | 1 | W | R | A/B | Confirm charge/discharge sign. SG05LP3: check power variant, MPPT count, and firmware. |
| Battery | Battery Voltage | 587 | 24B | U_WORD | 0.01 | V | R | A/B | LV platform. SG05LP3: check power variant, MPPT count, and firmware. |
| Battery | Battery SOC | 588 | 24C | U_WORD | 1 | % | R | A/B | SG05LP3: check power variant, MPPT count, and firmware. |
| Battery | Battery Current | 591 | 24F | S_WORD | 0.01 | A | R | A/B | SG05LP3: check power variant, MPPT count, and firmware. |
| PV / grid | AC Temperature | 541 | 21D | S_WORD | 0.1 | °C | R | A/B | Check the offset for your firmware. SG05LP3: check power variant, MPPT count, and firmware. |
| PV / grid | DC Temperature | 540 | 21C | S_WORD | 0.1 | °C | R | A/B | Check the offset for your firmware. SG05LP3: check power variant, MPPT count, and firmware. |
| TOU | Time of Use Time 1 | 148 | 94 | U_WORD | 1 | R/W | A/B | HHMM format; minutes 00-59. SG05LP3: check power variant, MPPT count, and firmware. | |
| TOU | Time of Use SOC 1 | 166 | A6 | U_WORD | 1 | % | R/W | A/B | SG05LP3: check power variant, MPPT count, and firmware. |
| Generator / Smart Load | Total Power of Gen Ports | 667 | 29B | U_WORD | 1 | W | R | A/B | Port meaning depends on inverter configuration. SG05LP3: check power variant, MPPT count, and firmware. |
The table above shows the most important registers for this family. The full list, including the 4xxxx address,
source, word order, write risk, and per-model comments, is in the attached XLSX spreadsheet.
SG01HP3 — the three-phase high-voltage map
SG01HP3 uses the 500+ map, but some value scales differ from LP3. PV and battery power may use a x10 multiplier, and larger models may expose PV3/PV4 and data for a second battery.
SUN-5-25K-SG01HP3-EU-AM2 and larger 29.9-50 kW variants after validating the MPPT count and battery.
| Category | Register | DEC | HEX | Type | Scale | Unit | R/W | Confidence | Notes |
|---|---|---|---|---|---|---|---|---|---|
| System | Running status | 500 | 1F4 | U_WORD | 1 | R | A/B | ||
| PV | PV1 Power | 672 | 2A0 | U_WORD | 10 | W | R | A/B | PV and battery power use a scale of 10 in the HP3 profile. |
| Energy | Daily Production | 529 | 211 | U_WORD | 0.1 | kWh | R | A/B | |
| Grid | Total Grid Power | 625 | 271 | S_WORD | 1 | W | R | A/B | |
| CT | Internal CT L1 Power | 604 | 25C | S_WORD | 1 | W | R | A/B | |
| AC | Current L1 | 630 | 276 | S_WORD | 0.01 | A | R | A/B | |
| Temperature | DC Temperature | 540 | 21C | S_WORD | 0.1 | °C | R | A/B | |
| Battery HV | Daily Battery Charge | 514 | 202 | U_WORD | 0.1 | kWh | R | A/B | |
| PV | PV2 Power | 673 | 2A1 | U_WORD | 10 | W | R | A/B | PV and battery power use a scale of 10 in the HP3 profile. |
| PV | PV1 Voltage | 676 | 2A4 | U_WORD | 0.1 | V | R | A/B | |
| PV | PV1 Current | 677 | 2A5 | U_WORD | 0.1 | A | R | A/B | |
| Temperature | AC Temperature | 541 | 21D | S_WORD | 0.1 | °C | R | A/B |
The table above shows the most important registers for this family. The full list, including the 4xxxx address,
source, word order, write risk, and per-model comments, is in the attached XLSX spreadsheet.
Key addresses — family comparison
| Metric | SG01LP1 | SG02LP1 | SG03LP1 | SG04/05LP3 | SG01HP3 | Comment |
|---|---|---|---|---|---|---|
| PV1 Power | 186 | 186 | 186 | 672 | 672 | LP1 uses the 0-279 map; LP3/HP3 the 500+ map. |
| PV2 Power | 187 | 187 | 187 | 673 | 673 | |
| PV3 Power | — | 188 | — | opcjonalnie 674 | 674 | SG02LP1 and HP3 may have additional MPPTs. |
| PV1 Voltage | 109 | 109 | 109 | 676 | 676 | |
| PV1 Current | 110 | 110 | 110 | 677 | 677 | |
| Daily PV Energy | 108 | 108 | 108 | 529 | 529 | |
| Total PV Energy | 96–97 | 96–97 | 96–97 | 534–535 | 534–535 | |
| Total Grid Power | 169 | 169 | 169 | 625 | 625 | SG02LP1 documents a x10 scale. |
| Battery Voltage | 183 | 183 | 183 | 587 | 587 | HP3 scale 0.1 V; some LP3 LV maps use 0.01 V. |
| Battery SoC | 184 | 184 | 184 | 588 | 588 | |
| Battery Power | 190 | 190 | 190 | 590 | 590 | HP3 scale x10. |
| TOU start | legacy / separate group | 248 | legacy / osobna grupa | 146 | separate HP3 group | Do not carry TOU addresses over between families. |
Models without a fully confirmed map
SG04LP1, SG05LP1, SG06LP1, SG06LP3, and SG02HP3 are included in the matrix, but I don’t artificially assign them a complete table.
For these units, the right approach is to read a few basic addresses, dump ranges, compare against the HMI, and only then expand the profile.
The absence of a full map is a technical fact, not a gap to be filled by guessing.
Time of Use is not shared across all models
In SG04LP3 and SG05LP3, the six TOU windows are mainly concentrated in the 146-177 range.
In SG02LP1, the corresponding block starts at 248 and ends at 279.
This is one of the most dangerous areas to copy between families, since a wrong write can change the charging schedule, the target SOC, or the energy source.
First read the entire settings block and store the values. Then change one parameter, read it back, and compare against the inverter screen.
For bitmasks, use read-modify-write so you don’t zero out neighboring flags.
Treat the work mode (register 142: 0 = Selling First, 1 = Zero Export to Load, 2 = Zero Export to CT) as a critical setting — test it on an inverter with no critical load attached. Never write to register 80 by accident: a value of 1 forces deep standby, opens the relays, cuts CT measurement, and disables the BACKUP port.
value_type — what each type means
ESPHome needs to know how to interpret the raw bytes from a register. For Deye, four types cover practically everything. A register that has a minus sign next to its scale in the tables above, or is marked S_WORD, should always be coded as a signed type — otherwise negative values (e.g. battery charging) turn into numbers around 65000.
16-bit unsigned (0-65535). Voltages, PV currents, SOC — values that are never negative.
16-bit signed (-32768…32767). Bidirectional power values (battery, grid) and temperatures. A negative value usually means charging/import.
32-bit unsigned from a pair of registers (energy counters). Deye/Sunsynk stores the low word at the lower address — check the order if an energy counter jumps or shows absurd values.
32-bit signed from a pair of registers. Less common on Deye than on FoxESS, but useful for some summed power values in the HP3 families.
ESPHome — a safe configuration skeleton
uart:
id: uart_deye
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 9600
stop_bits: 1
modbus:
id: modbus_deye
uart_id: uart_deye
send_wait_time: 250ms
modbus_controller:
- id: deye
address: 0x01
modbus_id: modbus_deye
update_interval: 10s
Add only the sensors relevant to your family on top of this skeleton.
Don’t start with hundreds of entities and active writing. First compare SOC, battery voltage, PV, grid, and Load against the inverter screen.
Common mistakes
Using the LP3 map on LP1, or the other way round.
S_WORD read as U_WORD.
A 32-bit counter assembled as HW/LW instead of LW/HW.
SG03LP1 timeouts on an overly long read.
Connecting to BMS 485 instead of the correct Modbus port.
ESPHome, a logger, and another integration all polling the inverter at once.
Common problems and how to fix them
Usually reversed A/B polarity, or a connection to the wrong port — BMS 485 instead of the Modbus/Meter port. Swap A<->B, check that your RS485 converter has automatic direction control (auto flow control), and make sure you’re connecting to the port labeled Modbus/COM, not the battery BMS communication port.
The register was treated as U_WORD instead of S_WORD. Battery Power, Battery Current, Total Grid Power, and similar bidirectional registers need value_type: S_WORD, otherwise a negative value (charging, import) wraps around to the top of the unsigned range.
Wrong word order in a 32-bit register. Check that you’re reading both registers of the pair (e.g. 534 and 535) in the correct low/high word order — if in doubt, try the reversed-order variant (`_R`).
A single register block is too large for one Modbus request. Limit a single read to a maximum of 16 registers and split the configuration into several smaller `modbus_controller` blocks instead of one big one.
This happens when data passes through the Deye logger/cloud instead of a direct RS485 read from the ESP32. With a direct connection to the Modbus port this shouldn’t happen — check whether the logger is competing for the same serial port.
Usually a competing Modbus client (e.g. the datalogger or a mobile app) is holding the connection and blocking the write from the ESP32. Also make sure the port is set in the inverter menu to 485/Slave, not Master/Meter — in Master mode the inverter expects data from a meter, not from an external controller.
Sources and documentation
Deye does not publish a single official Modbus document covering all families. The sources below are mostly actively maintained community projects, verified empirically across thousands of installations — not factory documentation. Treat this the same way as the FoxESS article: distinguish what’s confirmed by a document from what’s reverse-engineered.
| Source | What it covers | Reliability |
|---|---|---|
| github.com/kellerza/sunsynk | Single-phase map (LP1) and the basics of TOU/limit control | Very high — actively maintained, thousands of installations |
| github.com/kbialek/deye-inverter-mqtt | Three-phase LV (SG04LP3) and HV (SG01HP3) map, per-model metric groups | High — active project, precise per-family tables |
| github.com/StephanJoubert/home_assistant_solarman | Ready-made per-model YAML profiles, HA integration | High, some definitions tested on a single model |
| github.com/davidrapan/ha-solarman | Information registers and HP3 (block 0x0001-0x0008) | High, actively developed |
| DIY Solar Power Forum and forum.iobroker.net | Empirical confirmations (work mode, ports, risk warnings) | Medium — community-sourced, but independently repeated multiple times |
Deye does not officially support direct Modbus access via ESP32 or ESPHome. Reading is safe (read-only access), but writing to control registers — especially the work mode, SOC limits, and register 80 (deep standby, opens the relays and disables the BACKUP port) — can affect how the inverter operates. Always test writes one at a time, starting with the least critical registers, and keep a way to restore settings from the inverter screen on hand.
Full catalog to download
This article shows the most important registers and differences. The full database is in the XLSX spreadsheet and contains 400+ entries across 12 tabs:
separate registers for SG01LP1, SG02LP1, SG03LP1, SG04LP3, SG05LP3, and SG01HP3, plus Models, Legend, Sources,
Model coverage, Address comparison, and SG04 vs SG05 tabs — with the DEC, HEX, and 4xxxx address, data type, word order, scale, unit,
R/W, confidence level, and source for every register.
The key takeaway
There is no such thing as a “Deye register” without a model. There is a SG02LP1, SG04LP3, or SG01HP3 register,
with a defined data type, scale, and confidence level. Only that level of description is a safe basis for an integration.
