# wlcrs/huawei_solar architecture

> Architecture diagram of the GitHub repository wlcrs/huawei_solar, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wlcrs/huawei_solar
- Repository: https://github.com/wlcrs/huawei_solar

## Overview

Huawei Solar is a Home Assistant integration for monitoring and controlling Huawei solar installations over serial or network Modbus. The user configures a connection, the integration establishes device runtime data and coordinators, and Home Assistant entities expose inverter, battery, meter, and optimizer information. With elevated permissions, configuration entities and services write settings or issue charge/discharge and grid-export commands. The map reflects the README’s documented capabilities; some platform setup and device wiring are inferred only from the available excerpts, so uncertain links are omitted.

Main entry points: [`update_coordinator.py`](https://github.com/wlcrs/huawei_solar/blob/main/update_coordinator.py) (Register coordinators), [`__init__.py`](https://github.com/wlcrs/huawei_solar/blob/main/__init__.py) (Entry lifecycle), [`sensor.py`](https://github.com/wlcrs/huawei_solar/blob/main/sensor.py) (Monitoring sensors), [`number.py`](https://github.com/wlcrs/huawei_solar/blob/main/number.py) (Number controls)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Connection setup"]
  node_config["Config flow<br/>[config_flow.py]"]
  node_integration["Entry lifecycle<br/>[__init__.py]"]
end

subgraph group_runtime["Device runtime"]
  node_device_data["Device runtime data<br/>[types.py]"]
  node_coordinator["Register coordinators"]
  node_optimizer["Optimizer updates"]
end

subgraph group_entities["Home Assistant entities"]
  node_sensor["Monitoring sensors<br/>[sensor.py]"]
  node_number["Number controls<br/>[number.py]"]
  node_select["Select controls<br/>[select.py]"]
  node_switch["Switch controls<br/>[switch.py]"]
  node_button["Battery action button<br/>[button.py]"]
end

subgraph group_control["Controls and diagnostics"]
  node_services["Control services<br/>[services.py]"]
  node_diagnostics["Diagnostics<br/>[diagnostics.py]"]
end

node_user(("Home Assistant user"))
node_ha(("Home Assistant"))
node_solar{{"Huawei installation"}}
node_modbus["Modbus client"]

node_user -->|"configures"| node_config
node_config -->|"tests connection"| node_modbus
node_modbus -->|"communicates"| node_solar
node_ha -->|"loads entry"| node_integration
node_integration -->|"creates client"| node_modbus
node_integration -->|"builds runtime data"| node_device_data
node_integration -->|"creates coordinators"| node_coordinator
node_coordinator -->|"reads registers"| node_solar
node_optimizer -->|"reads optimizer data"| node_solar
node_ha -->|"sets up platform"| node_sensor
node_ha -->|"sets up platform"| node_number
node_ha -->|"sets up platform"| node_select
node_ha -->|"sets up platform"| node_switch
node_ha -->|"sets up platform"| node_button
node_sensor -->|"reads updates"| node_coordinator
node_sensor -->|"reads optimizer updates"| node_optimizer
node_number -->|"reads updates"| node_coordinator
node_number -->|"writes settings"| node_solar
node_select -->|"reads updates"| node_coordinator
node_select -->|"writes settings"| node_solar
node_switch -->|"reads updates"| node_coordinator
node_switch -->|"writes settings"| node_solar
node_button -->|"stops battery action"| node_solar
node_user -->|"invokes"| node_services
node_services -->|"writes controls"| node_solar
node_ha -->|"requests report"| node_diagnostics
node_diagnostics -->|"reads runtime data"| node_device_data
node_diagnostics -->|"reads cached updates"| node_coordinator

click node_config "https://github.com/wlcrs/huawei_solar/blob/main/config_flow.py"
click node_integration "https://github.com/wlcrs/huawei_solar/blob/main/__init__.py"
click node_device_data "https://github.com/wlcrs/huawei_solar/blob/main/types.py"
click node_coordinator "https://github.com/wlcrs/huawei_solar/blob/main/update_coordinator.py"
click node_optimizer "https://github.com/wlcrs/huawei_solar/blob/main/update_coordinator.py"
click node_sensor "https://github.com/wlcrs/huawei_solar/blob/main/sensor.py"
click node_number "https://github.com/wlcrs/huawei_solar/blob/main/number.py"
click node_select "https://github.com/wlcrs/huawei_solar/blob/main/select.py"
click node_switch "https://github.com/wlcrs/huawei_solar/blob/main/switch.py"
click node_button "https://github.com/wlcrs/huawei_solar/blob/main/button.py"
click node_services "https://github.com/wlcrs/huawei_solar/blob/main/services.py"
click node_diagnostics "https://github.com/wlcrs/huawei_solar/blob/main/diagnostics.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_config,node_integration,node_user,node_modbus toneBlue
class node_device_data,node_coordinator,node_optimizer toneAmber
class node_sensor,node_number,node_select,node_switch,node_button toneMint
class node_services,node_diagnostics toneRose
class node_ha,node_solar toneIndigo
```

## Components

### Connection setup

- [Config flow](https://github.com/wlcrs/huawei_solar/blob/main/config_flow.py): `config_flow.py`
- [Entry lifecycle](https://github.com/wlcrs/huawei_solar/blob/main/__init__.py): `__init__.py`

### Device runtime

- [Device runtime data](https://github.com/wlcrs/huawei_solar/blob/main/types.py): `types.py`
- [Register coordinators](https://github.com/wlcrs/huawei_solar/blob/main/update_coordinator.py): `update_coordinator.py`
- [Optimizer updates](https://github.com/wlcrs/huawei_solar/blob/main/update_coordinator.py): `update_coordinator.py`

### Home Assistant entities

- [Monitoring sensors](https://github.com/wlcrs/huawei_solar/blob/main/sensor.py): `sensor.py`
- [Number controls](https://github.com/wlcrs/huawei_solar/blob/main/number.py): `number.py`
- [Select controls](https://github.com/wlcrs/huawei_solar/blob/main/select.py): `select.py`
- [Switch controls](https://github.com/wlcrs/huawei_solar/blob/main/switch.py): `switch.py`
- [Battery action button](https://github.com/wlcrs/huawei_solar/blob/main/button.py): `button.py`

### Controls and diagnostics

- [Control services](https://github.com/wlcrs/huawei_solar/blob/main/services.py): `services.py`
- [Diagnostics](https://github.com/wlcrs/huawei_solar/blob/main/diagnostics.py): `diagnostics.py`

### Other components

- **Home Assistant user**
- **Home Assistant**
- **Huawei installation**
- **Modbus client**

## Connections

- Home Assistant user → Config flow: configures
- Config flow → Modbus client: tests connection
- Modbus client → Huawei installation: communicates
- Home Assistant → Entry lifecycle: loads entry
- Entry lifecycle → Modbus client: creates client
- Entry lifecycle → Device runtime data: builds runtime data
- Entry lifecycle → Register coordinators: creates coordinators
- Register coordinators → Huawei installation: reads registers
- Optimizer updates → Huawei installation: reads optimizer data
- Home Assistant → Monitoring sensors: sets up platform
- Home Assistant → Number controls: sets up platform
- Home Assistant → Select controls: sets up platform
- Home Assistant → Switch controls: sets up platform
- Home Assistant → Battery action button: sets up platform
- Monitoring sensors → Register coordinators: reads updates
- Monitoring sensors → Optimizer updates: reads optimizer updates
- Number controls → Register coordinators: reads updates
- Number controls → Huawei installation: writes settings
- Select controls → Register coordinators: reads updates
- Select controls → Huawei installation: writes settings
- Switch controls → Register coordinators: reads updates
- Switch controls → Huawei installation: writes settings
- Battery action button → Huawei installation: stops battery action
- Home Assistant user → Control services: invokes
- Control services → Huawei installation: writes controls
- Home Assistant → Diagnostics: requests report
- Diagnostics → Device runtime data: reads runtime data
- Diagnostics → Register coordinators: reads cached updates
