> For the complete documentation index, see [llms.txt](https://docs.smart-stuff.nl/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.smart-stuff.nl/p1-modbus-dongle/firmware-v2-current/register-mapping/sunspec-203.md).

# SunSpec 203

## Mapping behaviour

* Device Manager mapping value: `15`
* Profile: `SUNSPEC203`
* Read function codes: `FC03` and `FC04`
* Register widths: mixed 16-bit and 32-bit
* 32-bit word order: high word first (MSW-LSW)
* Unmapped register handling: Modbus exception

{% hint style="info" %}
Device ID, baud rate and serial format are global firmware v2 settings. They are not changed when this mapping is selected.
{% endhint %}

## Register overview

| Address (decimal / hex) | Words | Type          | Source or fixed value        | Conversion               | Missing         |
| ----------------------- | ----: | ------------- | ---------------------------- | ------------------------ | --------------- |
| `40000` / `0x9C40`      |     2 | `uint32`      | `constant 0x53756E53u`       | —                        | —               |
| `40002` / `0x9C42`      |     1 | `uint16`      | `constant 1`                 | —                        | —               |
| `40003` / `0x9C43`      |     1 | `uint16`      | `constant 65`                | —                        | —               |
| `40004` / `0x9C44`      |    16 | `text`        | `constant "Smartstuff"`      | —                        | zero            |
| `40020` / `0x9C54`      |    16 | `text`        | `constant "P1 Modbus Pro+"`  | —                        | zero            |
| `40036` / `0x9C64`      |     8 | `text`        | `constant ""`                | —                        | zero            |
| `40044` / `0x9C6C`      |     8 | `text`        | `constant _VERSION_ONLY`     | —                        | zero            |
| `40052` / `0x9C74`      |    16 | `text`        | `constant "P1M"`             | —                        | zero            |
| `40068` / `0x9C84`      |     1 | `uint16`      | `dev_id`                     | —                        | source\_default |
| `40069` / `0x9C85`      |     1 | `uint16`      | `constant 203`               | —                        | —               |
| `40070` / `0x9C86`      |     1 | `uint16`      | `constant 105`               | —                        | —               |
| `40071` / `0x9C87`      |     1 | `int16`       | `current_total_legacy_a`     | scale 100                | zero            |
| `40072` / `0x9C88`      |     1 | `int16`       | `derived_current_l1_a`       | scale 100, by\_direction | zero            |
| `40073` / `0x9C89`      |     1 | `int16`       | `current_l2_a`               | scale 100, by\_direction | zero            |
| `40074` / `0x9C8A`      |     1 | `int16`       | `derived_current_l3_a`       | scale 100, by\_direction | zero            |
| `40075` / `0x9C8B`      |     1 | `int16`       | `constant -2`                | —                        | —               |
| `40076` / `0x9C8C`      |     1 | `int16`       | `voltage_l1_v`               | scale 10                 | zero            |
| `40077` / `0x9C8D`      |     1 | `int16`       | `voltage_l2_v`               | scale 10                 | zero            |
| `40078` / `0x9C8E`      |     1 | `int16`       | `voltage_l3_v`               | scale 10                 | zero            |
| `40079` / `0x9C8F`      |     3 | `uint16 fill` | `constant 0x8000u`           | —                        | zero            |
| `40082` / `0x9C92`      |     1 | `int16`       | `constant -1`                | —                        | —               |
| `40083` / `0x9C93`      |     1 | `int16`       | `constant 5000`              | —                        | —               |
| `40084` / `0x9C94`      |     1 | `int16`       | `constant -2`                | —                        | —               |
| `40085` / `0x9C95`      |     1 | `int16`       | `net_power_total_kw`         | scale 1000               | zero            |
| `40086` / `0x9C96`      |     1 | `int16`       | `net_power_l1_kw`            | scale 1000               | zero            |
| `40087` / `0x9C97`      |     1 | `int16`       | `net_power_l2_kw`            | scale 1000               | zero            |
| `40088` / `0x9C98`      |     1 | `int16`       | `net_power_l3_kw`            | scale 1000               | zero            |
| `40089` / `0x9C99`      |     1 | `int16`       | `constant 0`                 | —                        | —               |
| `40090` / `0x9C9A`      |     4 | `uint16 fill` | `constant 0x8000u`           | —                        | zero            |
| `40094` / `0x9C9E`      |     1 | `int16`       | `constant 0`                 | —                        | —               |
| `40095` / `0x9C9F`      |     4 | `uint16 fill` | `constant 0x8000u`           | —                        | zero            |
| `40099` / `0x9CA3`      |     1 | `int16`       | `constant 0`                 | —                        | —               |
| `40100` / `0x9CA4`      |     4 | `uint16 fill` | `constant 0x8000u`           | —                        | zero            |
| `40104` / `0x9CA8`      |     1 | `int16`       | `constant 0`                 | —                        | —               |
| `40105` / `0x9CA9`      |     2 | `uint32`      | `energy_returned_total_kwh`  | scale 1000               | zero            |
| `40107` / `0x9CAB`      |     2 | `uint32`      | `constant 0xFFFFFFFFu`       | —                        | —               |
| `40109` / `0x9CAD`      |     2 | `uint32`      | `constant 0xFFFFFFFFu`       | —                        | —               |
| `40111` / `0x9CAF`      |     2 | `uint32`      | `constant 0xFFFFFFFFu`       | —                        | —               |
| `40113` / `0x9CB1`      |     2 | `uint32`      | `energy_delivered_total_kwh` | scale 1000               | zero            |
| `40115` / `0x9CB3`      |     2 | `uint32`      | `constant 0xFFFFFFFFu`       | —                        | —               |
| `40117` / `0x9CB5`      |     2 | `uint32`      | `constant 0xFFFFFFFFu`       | —                        | —               |
| `40119` / `0x9CB7`      |     2 | `uint32`      | `constant 0xFFFFFFFFu`       | —                        | —               |
| `40121` / `0x9CB9`      |     1 | `int16`       | `constant 0`                 | —                        | —               |
| `40122` / `0x9CBA`      |    52 | `uint16 fill` | `constant 0xFFFFu`           | —                        | zero            |
| `40174` / `0x9CEE`      |     2 | `uint32`      | `constant 0`                 | —                        | —               |
| `40176` / `0x9CF0`      |     1 | `uint16`      | `constant 0xFFFFu`           | —                        | —               |
| `40177` / `0x9CF1`      |     1 | `uint16`      | `constant 0`                 | —                        | —               |

## Reading the table

* **Words** is the number of consecutive 16-bit Modbus registers occupied by the entry.
* **Source** names correspond directly to the firmware v2 recipe source.
* **Conversion** records the exact scale, transform or direction handling configured by the recipe.
* This page is generated from `mb_recipe.h` and `modbus_profiles.h` for firmware 2.3.0.
