Skip to content

Commit b4f7a53

Browse files
Solax Cloud fixes to add inverter type (#3144)
* Solax Cloud fixes to add inverter type * [pre-commit.ci lite] apply automatic fixes * Remove redudant line --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 99862f2 commit b4f7a53

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
lines changed

apps/predbat/config.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,6 +1883,34 @@
18831883
"charge_discharge_with_rate": False,
18841884
"target_soc_used_for_discharge": True,
18851885
},
1886+
"SolaxCloud": {
1887+
"name": "SolaxCloud",
1888+
"has_rest_api": False,
1889+
"has_mqtt_api": False,
1890+
"output_charge_control": "power",
1891+
"charge_control_immediate": False,
1892+
"has_charge_enable_time": True,
1893+
"has_discharge_enable_time": True,
1894+
"has_target_soc": True,
1895+
"has_reserve_soc": True,
1896+
"has_timed_pause": False,
1897+
"charge_time_format": "HH:MM:SS",
1898+
"charge_time_entity_is_option": True,
1899+
"soc_units": "%",
1900+
"num_load_entities": 1,
1901+
"has_ge_inverter_mode": False,
1902+
"has_fox_inverter_mode": False,
1903+
"time_button_press": False,
1904+
"clock_time_format": "%Y-%m-%d %H:%M:%S",
1905+
"write_and_poll_sleep": 2,
1906+
"has_time_window": False,
1907+
"support_charge_freeze": False,
1908+
"support_discharge_freeze": False,
1909+
"has_idle_time": False,
1910+
"can_span_midnight": False,
1911+
"charge_discharge_with_rate": False,
1912+
"target_soc_used_for_discharge": True,
1913+
},
18861914
}
18871915

18881916
# Control modes for Solax inverters

apps/predbat/predbat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import requests
2828
import asyncio
2929

30-
THIS_VERSION = "v8.31.1"
30+
THIS_VERSION = "v8.31.2"
3131

3232
# fmt: off
3333
PREDBAT_FILES = ["predbat.py", "hass.py", "config.py", "prediction.py", "gecloud.py", "utils.py", "inverter.py", "ha.py", "download.py", "web.py", "web_helper.py", "predheat.py", "futurerate.py", "octopus.py", "solcast.py", "execute.py", "plan.py", "fetch.py", "output.py", "userinterface.py", "energydataservice.py", "alertfeed.py", "compare.py", "db_manager.py", "db_engine.py", "plugin_system.py", "ohme.py", "components.py", "fox.py", "carbon.py", "web_mcp.py", "component_base.py", "axle.py", "unit_test.py"]

apps/predbat/solax.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -374,16 +374,14 @@ async def automatic_config(self):
374374

375375
# Set up entity references for each plant
376376
# Load/import/export from plant realtime data
377-
inverter_list = [self.plant_inverters[plant][0] for plant in plants]
378-
379377
self.set_arg("load_today", [f"sensor.{self.prefix}_solax_{plant}_total_load" for plant in plants])
380378
self.set_arg("import_today", [f"sensor.{self.prefix}_solax_{plant}_total_imported" for plant in plants])
381379
self.set_arg("export_today", [f"sensor.{self.prefix}_solax_{plant}_total_exported" for plant in plants])
382380
self.set_arg("pv_today", [f"sensor.{self.prefix}_solax_{plant}_total_yield" for plant in plants])
381+
self.set_arg("battery_power", [f"sensor.{self.prefix}_solax_{plant}_battery_charge_discharge_power" for plant in plants])
383382

384383
# Power and SOC from device realtime data (using first inverter)
385384
inverter_list = [self.plant_inverters[plant][0] for plant in plants]
386-
self.set_arg("battery_power", [f"sensor.{self.prefix}_solax_{plant}_{inv}_charge_discharge_power" for plant, inv in zip(plants, inverter_list)])
387385
self.set_arg("grid_power", [f"sensor.{self.prefix}_solax_{plant}_{inv}_grid_power" for plant, inv in zip(plants, inverter_list)])
388386
self.set_arg("pv_power", [f"sensor.{self.prefix}_solax_{plant}_{inv}_pv_power" for plant, inv in zip(plants, inverter_list)])
389387
self.set_arg("load_power", [f"sensor.{self.prefix}_solax_{plant}_{inv}_ac_power" for plant, inv in zip(plants, inverter_list)])
@@ -557,6 +555,12 @@ def get_max_soc_battery(self, plant_id):
557555
max_soc = plant_info.get("batteryCapacity", 0)
558556
return max_soc # in kWh
559557

558+
def get_charge_discharge_power_battery(self, plant_id):
559+
total_power = 0
560+
for device_id in self.plant_batteries.get(plant_id, []):
561+
total_power += self.realtime_device_data.get(device_id, {}).get("chargeDischargePower", 0)
562+
return total_power # in Watts
563+
560564
def get_current_soc_battery_kwh(self, plant_id):
561565
current_soc = 0
562566
count_devices = 0
@@ -2077,6 +2081,7 @@ async def publish_plant_info(self):
20772081
battery_soc_max = self.get_max_soc_battery(plant_id)
20782082
battery_soc = self.get_current_soc_battery_kwh(plant_id)
20792083
battery_temp = self.get_battery_temperature(plant_id)
2084+
charge_discharge_power = self.get_charge_discharge_power_battery(plant_id)
20802085

20812086
# Battery SOC
20822087
self.dashboard_item(
@@ -2091,6 +2096,18 @@ async def publish_plant_info(self):
20912096
},
20922097
app="solax",
20932098
)
2099+
# Battery Charge/Discharge Power
2100+
self.dashboard_item(
2101+
f"sensor.{self.prefix}_solax_{plant_id}_battery_charge_discharge_power",
2102+
state=charge_discharge_power,
2103+
attributes={
2104+
"friendly_name": f"SolaX {plant_name} Battery Charge/Discharge Power",
2105+
"unit_of_measurement": "W",
2106+
"device_class": "power",
2107+
"state_class": "measurement",
2108+
},
2109+
app="solax",
2110+
)
20942111
# Battery SOC max sensor
20952112
self.dashboard_item(
20962113
f"sensor.{self.prefix}_solax_{plant_id}_battery_capacity",

0 commit comments

Comments
 (0)