Fără Descriere

conexocasa d01a627ecd v2.2.0: email/password auth + automatic token refresh + HA re-auth flow 7 luni în urmă
.github caaa174d50 chore: add GitHub Actions workflows and issue templates 7 luni în urmă
tests d6826df217 v2.1.0: auto-discover devices by station 7 luni în urmă
translations d3f4e25a81 v2.2.0: email/password auth + automatic token refresh + HA re-auth flow 7 luni în urmă
.gitignore d35d2b1de2 Initial commit: Solar of Things Home Assistant Integration v2.0.0 8 luni în urmă
CHANGELOG.md d3f4e25a81 v2.2.0: email/password auth + automatic token refresh + HA re-auth flow 7 luni în urmă
CONTROL_FEATURES.md d35d2b1de2 Initial commit: Solar of Things Home Assistant Integration v2.0.0 8 luni în urmă
DEVELOPER.md d35d2b1de2 Initial commit: Solar of Things Home Assistant Integration v2.0.0 8 luni în urmă
EXAMPLES.md d35d2b1de2 Initial commit: Solar of Things Home Assistant Integration v2.0.0 8 luni în urmă
INSTALLATION.md d6826df217 v2.1.0: auto-discover devices by station 7 luni în urmă
LICENSE d35d2b1de2 Initial commit: Solar of Things Home Assistant Integration v2.0.0 8 luni în urmă
QUICKSTART.md d6826df217 v2.1.0: auto-discover devices by station 7 luni în urmă
README.md c49a2030dd docs: comprehensive README with sensors, controls, automations, dashboard cards 7 luni în urmă
RELEASE_NOTES_v2.1.1.md 0d61ed2f0b v2.1.1: bump version, update changelog, add release notes 7 luni în urmă
__init__.py d3f4e25a81 v2.2.0: email/password auth + automatic token refresh + HA re-auth flow 7 luni în urmă
api.py d3f4e25a81 v2.2.0: email/password auth + automatic token refresh + HA re-auth flow 7 luni în urmă
config_flow.py d3f4e25a81 v2.2.0: email/password auth + automatic token refresh + HA re-auth flow 7 luni în urmă
const.py d3f4e25a81 v2.2.0: email/password auth + automatic token refresh + HA re-auth flow 7 luni în urmă
create_github_repo.sh 7f4bf7529a chore: add one-shot GitHub repo creation + release push script 7 luni în urmă
hacs.json 8abf9dea66 chore: add HACS metadata and PR template 7 luni în urmă
manifest.json d3f4e25a81 v2.2.0: email/password auth + automatic token refresh + HA re-auth flow 7 luni în urmă
number.py d6826df217 v2.1.0: auto-discover devices by station 7 luni în urmă
select.py d6826df217 v2.1.0: auto-discover devices by station 7 luni în urmă
sensor.py d6826df217 v2.1.0: auto-discover devices by station 7 luni în urmă
setup_github.sh d6826df217 v2.1.0: auto-discover devices by station 7 luni în urmă
strings.json d3f4e25a81 v2.2.0: email/password auth + automatic token refresh + HA re-auth flow 7 luni în urmă
switch.py d6826df217 v2.1.0: auto-discover devices by station 7 luni în urmă

README.md

☀️ Solar of Things — Home Assistant Integration

Latest Release HACS Custom Home Assistant MIT License CI Status

Monitor and control your Siseli solar inverter directly from Home Assistant.
Real-time power data · Battery management · Grid control · Energy Dashboard ready


Table of Contents


Overview

The Solar of Things integration connects Home Assistant to the Siseli solar portal and provides:

  • Auto-discovery of every inverter device under your station — enter your Station ID once and Home Assistant finds all your devices automatically.
  • 10+ real-time sensors for power, battery, grid and load data, updated every 5 minutes.
  • 4 monthly summary sensors for energy totals and solar coverage.
  • 8 control entities (sliders, dropdowns, switches) to manage battery limits, operating modes and grid settings directly from HA.
  • Full compatibility with the Home Assistant Energy Dashboard.
  • Multi-station support — add the integration once per station.

API behavior is based on the Siseli web portal and the reference CLI client at Hyllesen/solar-of-things-solar-usage.


Features

Category What you get
🔍 Auto-discovery Enter Station ID → HA fetches all device IDs automatically
📊 Real-time monitoring 10 per-device sensors, updated every 5 min
📅 Monthly statistics 4 station-level energy summary sensors
🎛️ System control 8 control entities (battery limits, modes, grid switches)
⚡ Energy Dashboard All power and energy sensors are dashboard-ready
🏠 Multi-station Unlimited stations via multiple config entries
🔒 Secure auth IOT-Token header authentication (no username/password stored)
🌏 Timezone-aware Configurable IOT-Time-Zone header per integration
🔄 Auto-retry HA coordinator pattern with automatic retry on failure

Sensors

Real-time Device Sensors

Updated every 5 minutes · One set per discovered device

Entity Unit Device Class Description
{device} PV Input Power W power Solar panel DC input power
{device} AC Output Power W power AC power delivered to loads
{device} Battery Charging Current A current Current flowing into battery
{device} Battery Discharge Current A current Current flowing out of battery
{device} Battery Voltage V voltage Battery bank terminal voltage
{device} Battery Power W power Net battery power (calculated: discharge − charge × voltage)
{device} Battery State of Charge % battery Battery charge level
{device} Grid Feed-in Power W power Power exported to the utility grid
{device} Grid Import Power W power Power imported from the utility grid (calculated)
{device} Load Power W power Total household / load consumption

Monthly Station Sensors

Updated every 30 minutes · Requires Station ID

Entity Unit Device Class Description
Station {id} Monthly PV Generated kWh energy Total solar generation this month
Station {id} Monthly Grid Import kWh energy Total grid import this month
Station {id} Monthly Total Consumption kWh energy Total household consumption this month
Station {id} Monthly Solar Coverage % — Percentage of consumption met by solar

Control Entities

Control entities require your device firmware/account to support the settings API. If controls are unresponsive, see TROUBLESHOOTING.md.

Number Entities (Sliders)

Entity Range Step Unit Description
{device} Battery Charge Limit 0 – 100 1 % Maximum SOC target for charging
{device} Battery Discharge Limit 0 – 100 1 % Minimum SOC before stopping discharge
{device} Grid Charge Limit 0 – 5000 100 W Max grid power used for battery charging

Select Entities (Dropdowns)

Entity Options Description
{device} Operating Mode Self-Use · Time-of-Use · Backup · Grid-Tie · Off-Grid System operating strategy
{device} Battery Priority Solar First · Battery First · Grid First Energy source priority order

Switch Entities

Entity Description
{device} Grid Charging Allow/deny battery charging from the grid
{device} Grid Feed-In Allow/deny exporting excess power to the grid
{device} Backup Mode Reserve battery capacity for power outages

Requirements

Requirement Details
Home Assistant 2023.1 or newer
Siseli account Active account at solar.siseli.com
IOT-Token Retrieved from browser DevTools (see Configuration)
Station ID 18-digit ID from the Siseli portal
Network Home Assistant must be able to reach https://solar.siseli.com

Installation

HACS (Recommended)

HACS is the easiest way to install and keep the integration up to date.

  1. Open HACS in your Home Assistant sidebar.
  2. Click Integrations.
  3. Click the three-dot menu ⋮ (top-right) → Custom repositories.
  4. Add the repository:

    https://github.com/conexocasa/solar-of-things-ha
    

    Category: Integration

  5. Click Add, then search for Solar of Things.

  6. Click Download and confirm.

  7. Restart Home Assistant.

After restarting, continue to Configuration.


Manual Installation

  1. Download the latest release asset: solar-of-things-ha.zip

  2. Extract the ZIP. Inside you will find:

    custom_components/
    └── solar_of_things/
       ├── __init__.py
       ├── api.py
       ├── config_flow.py
       ├── const.py
       ├── manifest.json
       ├── number.py
       ├── select.py
       ├── sensor.py
       ├── strings.json
       ├── switch.py
       └── translations/
           └── en.json
    
  3. Copy the solar_of_things folder into your HA config directory:

    /config/custom_components/solar_of_things/
    
  4. Restart Home Assistant.

Verify the folder is in the right place: go to Settings → System → Logs and look for solar_of_things. No errors means the component loaded correctly.


Configuration

Step 1 — Find Your Credentials

You need three values from the Siseli portal. All three are visible in the browser's Network tab — no third-party tools needed.

  1. Open https://solar.siseli.com and log in.
  2. Press F12 (or Cmd + Option + I on macOS) to open DevTools.
  3. Click the Network tab.
  4. Press Ctrl + R (or Cmd + R) to refresh the page.
  5. Click any request that goes to solar.siseli.com and look at:
Value Where to find it Example
IOT-Token Request Headers tab → IOT-Token CA49A160DBFFE7A827...
Station ID Request Payload tab → stationId 423564214316007425
Device ID Request Payload tab → deviceId 423564214341173249

Tip: Filter the Network tab by typing device/list or history to find the relevant requests faster.

Security: Your IOT-Token is session-based and may expire. If the integration stops working, re-copy a fresh token from the portal.


Step 2 — Add the Integration

  1. In Home Assistant go to Settings → Devices & Services.
  2. Click + Add Integration (bottom-right).
  3. Search for Solar of Things and select it.
  4. Fill in the configuration form:

| Field | Required | Description | |---|---|---| | IOT Token | ✅ Yes | Paste your IOT-Token header value | | Station ID | ✅ Yes | 18-digit Station ID | | Device ID | ⬜ Optional | Leave blank to auto-discover ALL devices | | Time zone | ⬜ Optional | Default: Asia/Manila. Set to your local tz (e.g. Europe/Berlin) |

  1. Click Submit. The integration will:
    • Validate your token by calling the Siseli API.
    • Auto-discover all device IDs under the station.
    • Create HA entities for every discovered device.

Device ID is optional. If you leave it blank, Home Assistant will call POST /apis/device/list and create entities for every inverter under your station automatically. Set Device ID only if you want to restrict entities to a single device.


Step 3 — Verify Entities

After adding the integration, go to Settings → Devices & Services → Solar of Things and click your station.

You should see:

  • ☀️ Sensor entities (PV power, battery, grid, load)
  • 🔢 Number sliders (battery charge/discharge limits, grid charge limit)
  • 🔽 Select dropdowns (operating mode, battery priority)
  • 🔘 Switches (grid charging, grid feed-in, backup mode)
  • 📊 Monthly energy summary sensors (if station ID is set)

Entities may show Unknown for the first 5 minutes while the coordinator fetches the first data update.


Multiple Stations

To monitor more than one station:

  1. Go to Settings → Devices & Services.
  2. Click + Add Integration again.
  3. Search for Solar of Things and add it with the credentials for your second station.
  4. Repeat for every additional station.

Each station appears as a separate device group in Home Assistant with its own set of sensors and control entities.


Screenshots

The screenshots below show typical HA entity cards for this integration. Your entity names will include your device name (e.g. 1_Inverter) instead of the placeholder shown.

Device sensors in Entities view

┌─────────────────────────────────────────────────────┐
│  1_Inverter · Siseli Solar Inverter                 │
├─────────────────────────────────────────────────────┤
│  ☀️  PV Input Power              22 W               │
│  🔌  AC Output Power            324 W               │
│  🔋  Battery State of Charge     76 %               │
│  🔋  Battery Voltage           27.2 V               │
│  ⬆️  Battery Charging Current   1.2 A               │
│  ⬇️  Battery Discharge Current  0.0 A               │
│  ⚡  Battery Power             32.6 W               │
│  🏠  Load Power                324 W               │
│  📤  Grid Feed-in Power          0 W               │
│  📥  Grid Import Power           0 W               │
├─────────────────────────────────────────────────────┤
│  🎛️  Battery Charge Limit       ████░░░░  80 %      │
│  🎛️  Battery Discharge Limit    █░░░░░░░  10 %      │
│  🎛️  Grid Charge Limit          ░░░░░░░░   0 W      │
│  🔽  Operating Mode             Self-Use            │
│  🔽  Battery Priority           Solar First         │
│  🔘  Grid Charging              OFF                 │
│  🔘  Grid Feed-In               ON                  │
│  🔘  Backup Mode                OFF                 │
└─────────────────────────────────────────────────────┘

Monthly station summary sensors

┌─────────────────────────────────────────────────────┐
│  Solar Station 423564214316007425                   │
├─────────────────────────────────────────────────────┤
│  📊  Monthly PV Generated      95.45 kWh            │
│  📊  Monthly Grid Import        0.00 kWh            │
│  📊  Monthly Total Consumption  0.00 kWh            │
│  📊  Monthly Solar Coverage       — %               │
└─────────────────────────────────────────────────────┘

Energy Dashboard configuration

  Solar production  ──▶  sensor.1_inverter_pv_input_power
  Grid consumption  ──▶  sensor.1_inverter_grid_import_power
  Return to grid    ──▶  sensor.1_inverter_grid_feed_in_power
  Battery charge    ──▶  sensor.1_inverter_battery_charging_current
  Battery discharge ──▶  sensor.1_inverter_battery_discharge_current

Energy Dashboard

This integration is fully compatible with the HA Energy Dashboard.

Go to Settings → Dashboards → Energy and add:

Dashboard slot Entity to use
Solar production sensor.{device}_pv_input_power
Grid consumption sensor.{device}_grid_import_power
Return to grid sensor.{device}_grid_feed_in_power
Battery charge sensor.{device}_battery_charging_current
Battery discharge sensor.{device}_battery_discharge_current

For monthly totals use the station-level sensors:

Dashboard slot Entity to use
Solar production (monthly) sensor.station_{id}_monthly_pv_generated
Grid import (monthly) sensor.station_{id}_monthly_grid_import

Automation Examples

Low battery alert

automation:
  - alias: "Solar — Low Battery Alert"
    trigger:
      - platform: numeric_state
        entity_id: sensor.1_inverter_battery_state_of_charge
        below: 20
    action:
      - service: notify.mobile_app
        data:
          title: "⚠️ Solar Battery Low"
          message: >
            Battery is at
            {{ states('sensor.1_inverter_battery_state_of_charge') }}%.
            Consider reducing load or enabling grid charging.

Auto-enable grid charging at night

automation:
  - alias: "Solar — Enable Grid Charging at Night"
    trigger:
      - platform: time
        at: "22:00:00"
    action:
      - service: switch.turn_on
        target:
          entity_id: switch.1_inverter_grid_charging

Switch to backup mode before a storm

automation:
  - alias: "Solar — Backup Mode Before Storm"
    trigger:
      - platform: state
        entity_id: weather.home
        to: "rainy"
    condition:
      - condition: numeric_state
        entity_id: sensor.1_inverter_battery_state_of_charge
        below: 80
    action:
      - service: switch.turn_on
        target:
          entity_id: switch.1_inverter_backup_mode
      - service: number.set_value
        target:
          entity_id: number.1_inverter_battery_charge_limit
        data:
          value: 95

Time-of-use mode during peak hours

automation:
  - alias: "Solar — TOU Mode During Peak Hours"
    trigger:
      - platform: time
        at: "17:00:00"
    action:
      - service: select.select_option
        target:
          entity_id: select.1_inverter_operating_mode
        data:
          option: "Time-of-Use"
  - alias: "Solar — Self-Use Mode After Peak"
    trigger:
      - platform: time
        at: "21:00:00"
    action:
      - service: select.select_option
        target:
          entity_id: select.1_inverter_operating_mode
        data:
          option: "Self-Use"

Dashboard Card Examples

Entities card — quick status overview

type: entities
title: ☀️ Solar System
entities:
  - entity: sensor.1_inverter_pv_input_power
    name: Solar Generation
    icon: mdi:solar-power
  - entity: sensor.1_inverter_battery_state_of_charge
    name: Battery Level
    icon: mdi:battery
  - entity: sensor.1_inverter_load_power
    name: Home Load
    icon: mdi:home-lightning-bolt
  - entity: sensor.1_inverter_grid_import_power
    name: Grid Import
    icon: mdi:transmission-tower-import
  - entity: sensor.1_inverter_grid_feed_in_power
    name: Grid Feed-In
    icon: mdi:transmission-tower-export

Glance card — at-a-glance numbers

type: glance
title: Solar At a Glance
entities:
  - entity: sensor.1_inverter_pv_input_power
    name: PV
  - entity: sensor.1_inverter_battery_state_of_charge
    name: Battery
  - entity: sensor.1_inverter_load_power
    name: Load
  - entity: sensor.1_inverter_grid_import_power
    name: Grid In
  - entity: sensor.1_inverter_grid_feed_in_power
    name: Grid Out

Control panel card

type: entities
title: 🎛️ Solar Controls
entities:
  - entity: select.1_inverter_operating_mode
    name: Operating Mode
  - entity: select.1_inverter_battery_priority
    name: Battery Priority
  - entity: number.1_inverter_battery_charge_limit
    name: Charge Limit
  - entity: number.1_inverter_battery_discharge_limit
    name: Discharge Limit
  - entity: number.1_inverter_grid_charge_limit
    name: Grid Charge Limit
  - type: divider
  - entity: switch.1_inverter_grid_charging
    name: Grid Charging
  - entity: switch.1_inverter_grid_feed_in
    name: Grid Feed-In
  - entity: switch.1_inverter_backup_mode
    name: Backup Mode

Troubleshooting

See the full guide: TROUBLESHOOTING.md

Quick reference for the most common issues:

Symptom Most likely cause Fix
"Cannot Connect" on setup Expired or wrong IOT-Token Re-copy fresh token from portal DevTools
No devices discovered Wrong Station ID Verify 18-digit stationId in portal Network tab
Entities show "Unavailable" Token expired or portal unreachable Check HA logs + re-enter token
Sensors always "Unknown" API returns null for that field Normal for unsupported sensors on your model
Controls do nothing Settings endpoint varies by firmware Check HA logs for endpoint + HTTP status
Integration not in search Files not installed correctly Verify /config/custom_components/solar_of_things/ exists

Enable debug logging

Add to configuration.yaml:

logger:
  default: info
  logs:
    custom_components.solar_of_things: debug

Restart HA, reproduce the problem, then check Settings → System → Logs.


API Reference

This integration targets the same endpoints used by the Siseli web portal.

Endpoint Method Purpose
/apis/device/list POST Discover all device IDs under a station
/apis/deviceState/simple/attribute/keys/history/v1 POST Real-time time-series telemetry per device
/apis/stationOverView/stateAttributeSummary/category/yearly POST Monthly energy summary per station

Required request headers

Header Value
IOT-Token Your authentication token
IOT-Time-Zone Your timezone string (e.g. Asia/Manila)
Content-Type application/json; charset=utf-8
Origin https://solar.siseli.com

Reference client (Node.js CLI with same API behavior): Hyllesen/solar-of-things-solar-usage


Contributing

Contributions are very welcome!

  1. Fork the repository.
  2. Create a feature branch: git checkout -b feature/my-improvement
  3. Make your changes and add tests if applicable.
  4. Run the validation workflow locally:

    python3 -m py_compile __init__.py api.py config_flow.py \
     const.py sensor.py number.py select.py switch.py
    
  5. Commit with a clear message and open a Pull Request.

Bug reports and feature requests → use the GitHub Issues templates: github.com/conexocasa/solar-of-things-ha/issues/new/choose


Changelog

See CHANGELOG.md for a full history.

Version Highlights
v2.1.1 HACS metadata, GitHub Actions CI/CD, issue templates, release script
v2.1.0 Station-based device auto-discovery (/apis/device/list)
v2.0.0 Control entities (battery limits, operating modes, grid switches)
v1.0.0 Initial release — monitoring sensors, config flow, multi-station

License

This project is licensed under the MIT License — see LICENSE for details.


Disclaimer

This is an unofficial community integration and is not affiliated with, endorsed by, or supported by Siseli or Solar of Things. Use at your own risk. The API may change without notice.


Made with ☀️ for the Home Assistant community
Report a Bug · Request a Feature · HA Community Forum