A custom integration that reads and adjusts a SolisArt solar heating controller from Home Assistant. I wrote it for my own SolisArt system, and kept it generic: zones, labels and limits are read from the controller, nothing about my house is hard-coded.
I don't work for SolisArt, and this project is not affiliated with the company. The logo shown in Home Assistant is theirs. I wrote the integration for my own system and share it as is. You use it at your own risk: I take no responsibility for misuse, unsuitable settings, damage to your installation, extra energy costs or any other consequence of using it. The MIT license says the same.
The controller publishes /XML/status.xml on its web interface. Every value in it that
the integration recognises becomes an entity:
- temperature probes
T1toT16(°C). A probe the controller reports as disconnected (Dsc) is created disabled, and shows as unavailable if it disconnects later; - circulators
TRIAC1toTRIAC13and the two three-way valves, in %; - flow meters
FL1toFL5, in L/min; - relays (
MREL1,SREL1...), on or off.
The entities are named after the controller's tags. What each probe measures depends on how your system was installed, and the Visualisation page of the controller shows it. Rename them in Home Assistant once you know.
The integration also reads /param.htm (the User page) every 5 minutes: zones, their
labels, heating modes and comfort and reduced temperatures, plus the controller and web interface versions.
Each zone also gets a current slot sensor: Comfort or Reduced, the half hour of its schedule
that applies right now. The integration reads the controller's own clock for this
(/XML/dtstat.xml, no login needed, at the same pace as status.xml), so a clock drift
between Home Assistant and the controller does not matter. If that page cannot be read,
the current slot shows as unavailable and everything else keeps working.
For each zone the controller has (heating zones and hot water), the integration adds:
- the heating mode, with the labels of the controller's User page: Arrêt (off), Solaire (solar only) or Sol/App (solar and backup heater). In English, Home Assistant shows them as Off, Solar and Solar/Backup;
- the comfort and reduced temperatures, in °C. Their limits come from the controller's page. They show as unavailable while the zone is off, since the controller locks them then;
- the comfort/reduced schedule, one text entity per day (for example "Schedule Ground
floor Monday"). It lists the comfort periods, such as
06:00-08:30, 18:00-22:00, and the rest of the day is reduced. An empty value means reduced all day. Times go by half hours, and6-8:30or18h-22hwork too. These entities sit in the Configuration section of the device.
Each heating zone also gets a thermostat, and hot water a water heater, for dashboards and voice assistants:
- thermostat: off for the controller's off mode, heat for the two other modes, which the preset tells apart (Solar or Solar/Backup). Turning it back on restores the last preset. The target temperature is the comfort temperature, and the reduced temperature shows as an attribute;
- water heater: Off, Solar or Solar/Backup, filed under the standard Home
Assistant modes
off,ecoandperformance, with the hot water comfort temperature as target; - the current temperature comes from the probe you pick for each zone in the options. There is none by default, since the probe in a given room depends on the installation.
The entities take the zone labels set on the controller (for example "Heating mode Ground floor").
The solisart.copier_planning action copies one schedule day to other days or zones in a
single write, for example Monday to the rest of the week.
To change a value, the integration does what your browser does on the User page. It reads
param.htm, sends the whole form back with the new value, then reads the page again to
check the controller kept it. If the value did not stick, Home Assistant shows an error.
Changes made less than 1.5 s apart go out together in one request, so clicking the
arrows of a temperature five times sends only the last value.
- A SolisArt controller reachable on your local network, with its web interface.
Tested with controller software
SRB_32MX_vD.50-5and web interfaceWEB_vA.98. - The login of the controller's User page.
- Home Assistant 2026.10 or later. HACS refuses older versions.
HACS must already be installed in your Home Assistant.
- In Home Assistant, open HACS from the sidebar.
- Open the menu with the three dots at the top right and choose Custom repositories.
- Paste
https://github.com/Bagu/solisart, pick the type Integration, then click Add. - Search for SolisArt in HACS, open it and click Download.
- Restart Home Assistant.
This button opens the repository straight in your HACS:
Copy custom_components/solisart into the custom_components folder of your Home
Assistant configuration, then restart.
Then go to Settings, Devices & services, Add integration, SolisArt, and enter the
controller's address (for example 192.168.1.20) and the login of its web interface.
The controller exposes no serial number, so the integration tells controllers apart by their address. If the address changes (new router, new DHCP lease), open the menu of the integration entry (the three dots) and choose Reconfigure. You can enter the new address or a new login there, and the entities keep their names and history. Leave the password empty to keep the saved one.
Options: how often status.xml is read (30 s by default) and how often param.htm is
read (300 s by default). The controller takes almost a second to build param.htm, so it is
best not to read it much more often. Another option allows changes on an untested
controller version (see below). It is off by default. The last fields pick the
temperature probe of each zone for the thermostats and the water heater.
- SolisArt does not publish an API. This integration reads the same pages as your browser. A software update of the controller can change those pages and break it.
- Only one tool should change the controller's settings. If two tools write to
param.htm, each one overwrites what the other just set. - Every change sends back the whole User page form. The other settings on that page are sent as they were read a moment before.
- Login sent in clear: the controller only answers over plain HTTP, so the login of
its User page goes out with every read of
param.htmand every change. Anyone who can watch your local network can read it. Keep the controller on a network you trust, and give it a password you use nowhere else. - Tested versions: the integration only changes settings on controller software
SRB_32MX_vD.50-5with web interfaceWEB_vA.98. On any other version, reading goes on, but every change is refused, and Home Assistant shows a message in Settings, System, Repairs with the versions it found. If everything works on your side, open an issue with those versions to get them added to the list. You can also allow changes on an untested version in the options, at your own risk. - The integration gives Home Assistant access to the controller and nothing more. Deciding when to heat with the solar surplus or during off-peak hours belongs in your own automations.
- Reporting a problem: attach the integration's diagnostics and, if the problem is about
the User page, a copy of
param.htmpassed throughpython outils/anonymiser.py param.htm param_anonyme.htm, which masks the installation name and the logins (details in CONTRIBUTING.md).
The code is under the MIT license (see LICENSE and NOTICE). The
SolisArt name and logo, including the images in custom_components/solisart/brand,
belong to SolisArt. The license does not cover them: they are only there so you
recognise the controller in Home Assistant.