---
title: "solis-shelly-sdm630-bridge"
url: "https://maker.wiznet.io/mason/projects/solis-shelly-sdm630-bridge/"
markdown_url: "https://maker.wiznet.io/mason/projects/solis-shelly-sdm630-bridge/md"
type: "UCC: User Created Content"
author: "matrover"
author_url: "https://github.com/matrover/solis-shelly-sdm630-bridge"
editor: "WIZnet"
editor_url: "https://maker.wiznet.io/"
original_author: "matrover"
original_url: "https://github.com/matrover/solis-shelly-sdm630-bridge"
published: "2026-09-22"
language: "en"
tags: ["ESP32", "W5500"]
hardware: ["Espressif ESP32", "WIZnet W5500"]
likes: 0
views: 199
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# solis-shelly-sdm630-bridge

> solis-shelly-sdm630-bridge

Original author: matrover (source: https://github.com/matrover/solis-shelly-sdm630-bridge)

## Components

- **Espressif ESP32** x 1 ([docs](https://www.espressif.com/en/products/socs/esp32))
- **WIZnet W5500** x 1 ([docs](https://docs.wiznet.io/Product/Chip/Ethernet/W5500))

WIZnet parts: W5500 ([Datasheet](https://docs.wiznet.io/Product/Chip/Ethernet/W5500/datasheet?utm_source=maker&utm_medium=project&utm_campaign=w5500), [product hub](https://maker.wiznet.io/products/w5500/))

## Documents and links

- [Github Code](https://github.com/matrover/solis-shelly-sdm630-bridge) (code)

## Article

## 프로젝트 개요

이 프로젝트는 **Shelly Pro 3EM이 측정한 3상 전력 데이터를 ESP32-S3가 읽어 Eastron SDM630 형식으로 변환하고, Solis S6 인버터에 전달하는 에너지 미터 브리지**입니다.

![](https://maker.wiznet.io/upload/ckeditor5/314965409%5F1790692236%2Epng)

이미지 출처 : AI 생성

핵심 데이터 흐름은 다음과 같습니다.

**Shelly Pro 3EM → W5500 Ethernet → ESP32-S3 → SDM630 Register 변환 → RS485 Modbus RTU → Solis S6**

쉽게 말하면, **Shelly가 전력을 측정하고, ESP32-S3가 그 값을 번역하며, Solis는 이를 SDM630 전력계에서 받은 데이터처럼 읽습니다.**

프로젝트를 이해하는 데 필요한 주요 장비와 용어는 다음과 같습니다.

- **Shelly Pro 3EM**
  3상 전압, 전류, 전력, 에너지 사용량을 측정하는 전력계입니다. 이 프로젝트의 **실제 측정 데이터 소스**입니다.

- **Eastron SDM630**
  RS485 Modbus RTU를 지원하는 3상 전력계입니다. Solis가 지원하는 미터 중 하나이며, 이 프로젝트에서는 실제 SDM630 대신 **ESP32-S3가 SDM630의 레지스터 구조를 재현**합니다.

- **Solis S6**
  태양광 및 에너지 저장 시스템에서 사용하는 인버터 계열입니다. 외부 전력계의 값을 읽어 계통의 수전·송전 전력을 모니터링하고 제어에 활용합니다.

ESPHome은 Shelly의 RPC를 이용해 순간 측정값과 누적 에너지를 가져옵니다.

ESP32-S3는 이 값을 SDM630이 사용하는 Register 주소에 맞춰 배치합니다.

따라서 이 프로젝트의 핵심은 단순히 데이터를 전달하는 것이 아니라, **Shelly의 전력 데이터를 Solis가 이해할 수 있는 SDM630 데이터 모델로 변환하는 것**입니다.

### Where WIZnet Fits

이 프로젝트에서는 KinCony ESP32-S3 Core Board에 탑재된 **WIZnet W5500**을 사용합니다.

W5500은 **Shelly Pro 3EM과 ESP32-S3 사이의 Ethernet 통신**을 담당합니다.

역할을 구간별로 나누면 다음과 같습니다.

**Shelly Pro 3EM ↔ W5500 ↔ ESP32-S3**
Ethernet을 통해 Shelly의 HTTP/RPC 데이터를 수집합니다.

**ESP32-S3 ↔ RS485 ↔ Solis S6**
변환된 SDM630 데이터를 Modbus RTU로 전달합니다.

따라서 W5500이 SDM630 에뮬레이션이나 Modbus RTU를 직접 처리하는 것은 아닙니다. W5500은 네트워크 연결을 제공하고, 실제 데이터 변환은 ESP32-S3가 수행합니다.

저장소에서 확인되는 W5500 연결 핀은 다음과 같습니다.

CLK: GPIO43

MOSI: GPIO44

MISO: GPIO42

CS: GPIO41

Interrupt: GPIO2

Reset: GPIO1

W5500 자체는 하드웨어 TCP/IP 기능을 지원하지만, 이 프로젝트의 ESPHome 환경에서는 W5500을 ESP32의 Ethernet 인터페이스로 연결하여 사용합니다. 따라서 이 구현에서는 **유선 Ethernet 연결을 제공하는 역할**이 가장 중요합니다.

### Implementation Notes

W5500 설정은 `esphome/solis-sdm630-bridge.yaml`에서 확인할 수 있습니다.

```plaintext
ethernet:
  type: W5500
  clk_pin: GPIO43
  cs_pin: GPIO41
```

실제 설정에는 MOSI, MISO, Interrupt, Reset 핀도 정의되어 있습니다.

Shelly의 순간 전력 데이터는 다음 RPC에서 가져옵니다.

```plaintext
EM.GetStatus?id=0
```

ESPHome은 응답된 JSON에서 전압, 전류, 전력 등의 값을 추출한 뒤 `write_float()`를 이용하여 SDM630 Register에 기록합니다.

SDM630의 측정값은 32-bit float 형식이므로 하나의 값에 두 개의 16-bit Modbus Register를 사용합니다.

누적 에너지는 다음과 같이 매핑됩니다.

```plaintext
write_float(72, total_act_ret_kwh);
write_float(74, total_act_kwh);
write_float(342, total_act_kwh);
```

Shelly에서 받은 Wh 값은 kWh로 변환한 뒤 기록됩니다.

또한 CT 설치 방향이나 인버터가 기대하는 전력 부호가 다른 경우를 처리하기 위해 다음 설정값을 제공합니다.

`solis_meter_power_sign`

`power_offset_w`

이를 이용하면 변환 로직 전체를 수정하지 않고 전력 방향과 오프셋을 조정할 수 있습니다.

### Practical Tips / Pitfalls

**Solis의 Modbus 설정을 먼저 확인해야 합니다.** 프로젝트의 기본 조건은 slave address `1`, `9600 baud`, `8N1`입니다.

**KinCony 보드의 W5500 핀맵을 그대로 사용해야 합니다.** 일반 ESP32 + W5500 예제와 GPIO 구성이 다를 수 있습니다.

**Shelly와 ESP32의 IP는 DHCP reservation으로 관리하는 것이 편리합니다.** IP 변경으로 인한 통신 및 OTA 문제를 줄일 수 있습니다.

**Solis가 미터를 인식하지 못하면 RS485 A/B 극성을 확인해야 합니다.Shelly와 통신이 끊긴 경우 마지막 측정값이 남을 수 있습니다.** 장기간 운용할 경우 timeout 이후 값을 무효화하는 처리를 검토하는 것이 좋습니다.

**수전과 송전 방향을 실제 계통과 비교해야 합니다.** 순간 전력 부호와 누적 import/export 값이 모두 올바른지 설치 후 확인해야 합니다.

**CT와 RS485 배선은 전기반 내부에서 이루어질 수 있으므로 적절한 전기 안전 절차가 필요합니다.**

### FAQ

**Q: 이 프로젝트에서 W5500을 사용하는 이유는 무엇인가요?**
A: ESP32-S3가 Shelly Pro 3EM의 측정값을 유선 Ethernet을 통해 가져오기 위해 사용합니다. 이 프로젝트에서 W5500은 Shelly와 브리지 사이의 네트워크 인터페이스를 담당합니다.

**Q: W5500은 ESP32-S3에 어떻게 연결되나요?**
A: SPI로 연결됩니다. KinCony ESP32-S3 Core Board에서는 CLK GPIO43, MOSI GPIO44, MISO GPIO42, CS GPIO41을 사용하며 Interrupt와 Reset 신호도 연결되어 있습니다.

**Q: W5500은 전체 시스템에서 어떤 역할을 하나요?**
A: Shelly Pro 3EM에서 ESP32-S3까지의 Ethernet 통신을 담당합니다. 이후 SDM630 데이터 변환과 RS485 Modbus RTU 처리는 ESP32-S3에서 수행됩니다.

**Q: 초보자도 구성할 수 있나요?**
A: ESPHome YAML 설정 경험이 있다면 소프트웨어 구조는 비교적 쉽게 따라갈 수 있습니다. 다만 Ethernet, RS485, Modbus Register와 3상 전력 측정에 대한 기본 지식이 있으면 문제 해결이 수월합니다.

**Q: W5500을 Wi-Fi 대신 사용하는 경우 어떤 차이가 있나요?**
A: 이 프로젝트의 W5500 경로는 유선 Ethernet이므로 무선 연결 상태에 의존하지 않습니다. 반면 실제 통신 신뢰성은 스위치, 케이블, 전원, 네트워크 구성 등 전체 설치 환경의 영향을 받으므로 W5500만으로 시스템 신뢰성이 결정되는 것은 아닙니다.

## Project Overview

This project is an **energy meter bridge that reads three-phase power data measured by a Shelly Pro 3EM, converts it into the Eastron SDM630 data format using an ESP32-S3, and delivers it to a Solis S6 inverter**.

![](https://maker.wiznet.io/upload/ckeditor5/314965409%5F1790692236%2Epng)

Image Source : AI Generated

The core data flow is as follows:

**Shelly Pro 3EM → W5500 Ethernet → ESP32-S3 → SDM630 Register Mapping → RS485 Modbus RTU → Solis S6**

In simple terms, **the Shelly measures the electrical data, the ESP32-S3 translates it, and the Solis reads it as if it came from an SDM630 energy meter.**

The main devices and terms needed to understand the project are listed below.

**Shelly Pro 3EM**
A three-phase energy meter that measures voltage, current, power, and energy consumption. In this project, it serves as the **actual source of measurement data**.

**Eastron SDM630**
A three-phase energy meter that supports RS485 Modbus RTU. It is one of the meters supported by Solis. Instead of using a physical SDM630, this project has the **ESP32-S3 reproduce the SDM630 register structure**.

**Solis S6**
A series of inverters used in solar and energy storage systems. It reads data from an external energy meter to monitor grid import and export power and use that information for system control.

ESPHome uses Shelly RPC calls to retrieve instantaneous measurements and accumulated energy values.

The ESP32-S3 then places these values into the register addresses expected by the SDM630.

The key point of this project is not simply forwarding data, but **converting Shelly power measurements into the SDM630 data model that the Solis inverter understands**.

### Where WIZnet Fits

This project uses a **WIZnet W5500** integrated on the KinCony ESP32-S3 Core Board.

The W5500 handles **Ethernet communication between the Shelly Pro 3EM and the ESP32-S3**.

Its role can be divided into two communication segments:

**Shelly Pro 3EM ↔ W5500 ↔ ESP32-S3**
Shelly HTTP/RPC data is collected over Ethernet.

**ESP32-S3 ↔ RS485 ↔ Solis S6**
The converted SDM630 data is delivered over Modbus RTU.

The W5500 does not directly handle SDM630 emulation or Modbus RTU. It provides the network connection, while the ESP32-S3 performs the actual data conversion.

The W5500 pin connections confirmed in the repository are:

CLK: GPIO43

MOSI: GPIO44

MISO: GPIO42

CS: GPIO41

Interrupt: GPIO2

Reset: GPIO1

Although the W5500 itself supports hardware TCP/IP functions, in this project's ESPHome environment it is used as the ESP32 Ethernet interface. Therefore, its most important role in this implementation is **providing wired Ethernet connectivity**.

### Implementation Notes

The W5500 configuration can be found in `esphome/solis-sdm630-bridge.yaml`.

```plaintext
ethernet:
  type: W5500
  clk_pin: GPIO43
  cs_pin: GPIO41
```

The full configuration also defines the MOSI, MISO, Interrupt, and Reset pins.

Shelly's instantaneous power data is retrieved through the following RPC call:

```plaintext
EM.GetStatus?id=0
```

ESPHome extracts voltage, current, power, and other values from the returned JSON and writes them into SDM630 registers using `write_float()`.

Because SDM630 measurement values use a 32-bit floating-point format, each value occupies two 16-bit Modbus registers.

Accumulated energy values are mapped as follows:

```plaintext
write_float(72, total_act_ret_kwh);
write_float(74, total_act_kwh);
write_float(342, total_act_kwh);
```

Values received from Shelly in Wh are converted to kWh before being written.

The project also provides the following configuration values to handle cases where the CT installation direction or the power sign expected by the inverter is reversed:

`solis_meter_power_sign`

`power_offset_w`

These settings allow the power direction and offset to be adjusted without modifying the overall conversion logic.

### Practical Tips / Pitfalls

**Check the Solis Modbus settings first.** The project's default configuration uses slave address `1`, `9600 baud`, and `8N1`.

**Use the W5500 pin mapping defined for the KinCony board.** Its GPIO configuration may differ from typical ESP32 + W5500 examples.

**It is convenient to manage the Shelly and ESP32 IP addresses using DHCP reservations.** This helps reduce communication and OTA issues caused by IP address changes.

**If the Solis inverter does not detect the meter, check the RS485 A/B polarity.If communication with the Shelly is interrupted, the last valid measurement may remain in the registers.** For long-term operation, it is worth considering logic that invalidates stale values after a timeout.

**Compare the import and export directions with the actual grid power flow.** After installation, verify that both the instantaneous power sign and accumulated import/export values are correct.

**CT and RS485 wiring may be installed inside an electrical distribution panel, so appropriate electrical safety procedures are required.**

### FAQ

**Q: Why is the W5500 used in this project?**
A: It allows the ESP32-S3 to retrieve measurement data from the Shelly Pro 3EM over wired Ethernet. In this project, the W5500 serves as the network interface between the Shelly and the bridge.

**Q: How is the W5500 connected to the ESP32-S3?**
A: It is connected over SPI. On the KinCony ESP32-S3 Core Board, CLK uses GPIO43, MOSI GPIO44, MISO GPIO42, and CS GPIO41. Interrupt and Reset signals are also connected.

**Q: What role does the W5500 play in the overall system?**
A: It handles Ethernet communication from the Shelly Pro 3EM to the ESP32-S3. SDM630 data conversion and RS485 Modbus RTU processing are then performed by the ESP32-S3.

**Q: Can beginners build this project?**
A: If you have experience configuring ESPHome YAML files, the software structure is relatively straightforward to follow. Basic knowledge of Ethernet, RS485, Modbus registers, and three-phase power measurement will make troubleshooting much easier.

**Q: What is the difference between using the W5500 and Wi-Fi in this project?**
A: The W5500 provides a wired Ethernet connection, so this communication path does not depend on wireless signal conditions. However, actual communication reliability still depends on the overall installation environment, including the network switch, cabling, power supply, and network configuration. The W5500 alone does not determine the reliability of the entire system.

---

Source: https://maker.wiznet.io/mason/projects/solis-shelly-sdm630-bridge/
