/ha_solis_modbus

YAML file for reading Solis Hybrid Inverter directly with HA native modbus

Primary LanguagePythonMIT LicenseMIT

ha_solis_modbus

Home Assistant YAML for Solis Hybrid Inverter using MODBUS

This forked from https://github.com/fboundy/ha_solis_modbus and includes automations to estimate an overnight target SOC to ensure enough power to run your house until the sun comes out while also leaving maximum space in your battery for energy capture.

Fill in the three input numbers for charge, and set your usable battery capacity and solar prediction entity_id in the template sensor.

Requires forcast.solar integration: https://www.home-assistant.io/integrations/forecast_solar/

I have also added support for Discharging - can be used for Flux to discharge at peak times, for Octopus saving sessions. I also use this to dump excess enegry into my EV overnight. It works exactly as the charging. Fill in the inputs for start and stop times and target SOC, the automations do the rest!


This is a Home Assistant YAML file for communicating with a Solis Hybrid inverter using a Data Logging Stick which uses pure Modbus over TCP. It has been tested using a Solis 5-eh1p(3-6)k inverter and:

  • DLS-LAN stick: Serial number 1920xxxxxx as shown here
  • S2-WL-ST 4-pin dual WiFi/LAN stick: Serial number 7Axxxxxxxxxxxxxx as shown here

The S3-WIFI-ST stick will NOT work.

v1.1.0 now also supports writing to the inverter using a number of Automations. Scripts and Inputs.

Reading from the Inverter

The YAML file which can be included in the configuration.yaml file in the Home Assitant config folder. All that should need changing is the solis_ip secret which is included from secrets.yaml. Alternatively just overwrite with the IP address.

Scan intervals are set as follows:

  • Instantaneous readings: 1 minute
  • Daily totals: 5 minutes
  • Monthly, Yearly and Lifetime totals: 1 hour

Include this file in your configuation.yaml file with:

modbus: !include solis.yaml

Within this file you need to set the TCP port that MODBUS uss depending on the model of Data Logging Stick:

port: 8899 for the older DLS-LAN stick or port: 502 for the newer S2-WL-ST stick.

A fairly comprehensive set of both the input registers (33xxx) and holding registers (43xxx) is read. Other registers can be imported using the same format. A full list can be found here courtesy of Dr. Brian Coghlan. Note that some parameters are 32 bit and span two registers. Also note that 16 bit parameters can be signed (int16) or unsigned (uint16). More information on the Home Asistant Modbus integration can be found here.

Writing to the Inverter

This is done with a service call to the modbus integration. For example, to set the Timed Discharge Current Limit (register) to 50A:
service: modbus.write_register
data:
  address: 43141
  slave: 1
  value: 500
  hub: solis

The following scripts are included in scripts.yaml to assit with this:

  • Solis Write Holding Register: writes value to address
  • Solis Set Charge Current: sets the Timed Charge Current (Register 43131) to current
  • Solis Set Eco7 Times: sets the 1st set of Timed Charging Times (Registers 43143 - 6) to the times specified by the input_datetime enties: economy_7_start and economy_7_start
  • Solis Set Energy Storage Mode: sets the Energy Storage Control Switch(Register 43110) to that specified by the six input_boolean entites solis_storage_mode_*
  • Set Solis Storage Toggles: sets the six input_boolean entites solis_storage_mode_* to match the values read from the inverter if they change (e.g. they are set manually on the inverter itself)
  • Solis Set Time: sets the time on the inverter to match Home Assistant

Template Sensors

There are also a number of template sensors some of which are just helpers but others are needed for some of the scripting below and rely on certain input entities (see below). These are included in a separate file solis-templates.yaml these can be included into your configuation.yaml file with the below. Alternatively you may wish to merge them into the file directly:

template:
  !include solis-templates.yaml

Inputs

A number of helpers are needed for the scripts and automations included below. These are included in inputs.yaml. As with the other .yaml files they need to be either merged or included into your configuation.yaml. The inputs are as follows:

  • Economy 7 Start Time: input_boolean.economy_7_start

  • Economy 7 End Time: input_boolean.economy_7_end

  • Solis Storage Mode toggles which set the following bits of the Energy Storage Control Switch:

     Bit 0 (1)  - Spontaneous Mode      input_boolean.solis_storage_mode_spontaneous
     Bit 1 (2)  - Timed Mode            input_boolean.solis_storage_mode_timed
     Bit 2 (4)  - Off-Grid Mode         input_boolean.solis_storage_mode_off_grid
     Bit 3 (8)  - Battery Wake-Up Mode  input_boolean.solis_storage_mode_wake_up
     Bit 4 (16) - Backup Mode           input_boolean.solis_storage_mode_backup
     Bit 5 (32) - Grid Charge Mode      input_boolean.solis_storage_mode_grid_charge
     Bit 6 (64) - Feed-In Priority Mode input_boolean.solis_storage_mode_feed_in_priority
    

Utilities

Also included is a small Python script pymodbus_test.py 2hich will check modbus communications and, if all is well, will report back Inverter Temperature, Grid Voltage and Battery SOC:

Inverter Temperature:     30.3 C
Grid Voltage:            243.3 V
Battery SOC:              15.0 %

The following YAML files are also included:

octopus-intelligent.yaml - scripts and automations by @robjwalker to assist with Octopus Intelligent tariffs
ng_eso_dfs.yaml          - sensors to detect the most recent National Grid ESO Demand Flexibility Service slot start and end times