Skip to content

Commit e3229b8

Browse files
Auto config fixes (#2723)
* Auto config fixes * [pre-commit.ci lite] apply automatic fixes * Update custom-dictionary-workspace.txt --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent aabac95 commit e3229b8

2 files changed

Lines changed: 62 additions & 18 deletions

File tree

‎.cspell/custom-dictionary-workspace.txt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ pytz
219219
rarr
220220
recp
221221
Redownload
222+
regname
222223
remotecontrol
223224
resetmidnight
224225
resultid

‎apps/predbat/gecloud.py‎

Lines changed: 61 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,14 @@
192192
OPTIONS_TIME_FULL = [((BASE_TIME + timedelta(seconds=minute * 60)).strftime("%H:%M") + ":00") for minute in range(0, 24 * 60, 1)]
193193

194194

195+
def regname_to_ha(name):
196+
"""
197+
Convert register name to HA style
198+
"""
199+
name = name.lower().replace(" ", "_").replace("%", "percent").replace("-", "_")
200+
return name
201+
202+
195203
class GECloudDirect:
196204
def __init__(self, api_key, automatic, base):
197205
"""
@@ -527,9 +535,10 @@ async def publish_meter(self, device, meter):
527535

528536
async def enable_real_time_control(self, device, registers):
529537
for key in registers:
530-
reg_name = registers[key].get("name", None)
538+
reg_name = registers[key].get("name", "")
531539
value = registers[key].get("value", None)
532-
if "real-time control" in reg_name.lower():
540+
ha_name = regname_to_ha(reg_name)
541+
if "real_time_control" in ha_name:
533542
if value:
534543
self.log("GECloud: Real-time control already enabled for {}".format(device))
535544
return True
@@ -556,7 +565,7 @@ async def publish_registers(self, device, registers, select_key=None):
556565
validation_rules = registers[key].get("validation_rules", None)
557566
validation = registers[key].get("validation", None)
558567
value = registers[key].get("value", None)
559-
ha_name = reg_name.lower().replace(" ", "_").replace("%", "percent").replace("-", "_")
568+
ha_name = regname_to_ha(reg_name)
560569
attributes = {}
561570
attributes["friendly_name"] = reg_name
562571

@@ -653,6 +662,28 @@ async def async_automatic_config(self, devices):
653662
num_inverters = 1
654663
batteries = [devices["gateway"]]
655664

665+
# Do we have a charge power percentage setting?
666+
has_charge_power_percent = False
667+
has_pause_start_time = False
668+
has_discharge_target_soc = False
669+
has_pause_battery = False
670+
for device in batteries:
671+
registers = self.settings.get(device, {})
672+
for key in registers:
673+
reg_name = registers[key].get("name", "")
674+
ha_name = regname_to_ha(reg_name)
675+
if "inverter_charge_power_percentage" in ha_name:
676+
has_charge_power_percent = True
677+
if "pause_battery_start_time" in ha_name:
678+
has_pause_start_time = True
679+
if "dc_discharge_1_lower_soc_percent_limit" in ha_name:
680+
has_discharge_target_soc = True
681+
if "pause_battery" in ha_name:
682+
has_pause_battery = True
683+
684+
self.log("GECloud: Auto-config detected features - charge power percent: {}, pause battery: {}, pause start time: {}, discharge target soc: {}".format(has_charge_power_percent, has_pause_battery, has_pause_start_time, has_discharge_target_soc))
685+
print("GECloud: Auto-config detected features - charge power percent: {}, pause battery: {}, pause start time: {}, discharge target soc: {}".format(has_charge_power_percent, has_pause_battery, has_pause_start_time, has_discharge_target_soc))
686+
656687
self.base.args["inverter_type"] = ["GEC" for _ in range(num_inverters)]
657688
self.base.args["num_inverters"] = num_inverters
658689
self.base.args["load_today"] = ["sensor.predbat_gecloud_" + device + "_consumption_today" for device in batteries]
@@ -675,24 +706,36 @@ async def async_automatic_config(self, devices):
675706
self.base.args["charge_limit"] = ["number.predbat_gecloud_" + device + "_ac_charge_upper_percent_limit" for device in batteries]
676707
self.base.args["discharge_start_time"] = ["select.predbat_gecloud_" + device + "_dc_discharge_1_start_time" for device in batteries]
677708
self.base.args["discharge_end_time"] = ["select.predbat_gecloud_" + device + "_dc_discharge_1_end_time" for device in batteries]
678-
self.base.args["discharge_target_soc"] = ["number.predbat_gecloud_" + device + "_dc_discharge_1_lower_soc_percent_limit" for device in batteries]
679709
self.base.args["scheduled_charge_enable"] = ["switch.predbat_gecloud_" + device + "_ac_charge_enable" for device in batteries]
680710
self.base.args["scheduled_discharge_enable"] = ["switch.predbat_gecloud_" + device + "_enable_dc_discharge" for device in batteries]
681-
self.base.args["pause_mode"] = ["select.predbat_gecloud_" + device + "_pause_battery" for device in batteries]
682-
self.base.args["pause_start_time"] = ["select.predbat_gecloud_" + device + "_pause_battery_start_time" for device in batteries]
683-
self.base.args["pause_end_time"] = ["select.predbat_gecloud_" + device + "_pause_battery_end_time" for device in batteries]
684711

685-
# Do we have a charge power percentage setting?
686-
for device in batteries:
687-
registers = self.settings.get(device, {})
688-
for key in registers:
689-
reg_name = registers[key].get("name", None)
690-
value = registers[key].get("value", None)
691-
if "inverter_charge_power_percentage" in reg_name.lower():
692-
self.log("GECloud: Found charge power percentage setting for {}, using this".format(device))
693-
self.base.args["charge_rate_percent"] = ["number.predbat_gecloud_" + device + "_inverter_charge_power_percentage" for device in batteries]
694-
self.base.args["discharge_rate_percent"] = ["number.predbat_gecloud_" + device + "_inverter_discharge_power_percentage" for device in batteries]
695-
break
712+
if has_pause_battery:
713+
self.base.args["pause_mode"] = ["select.predbat_gecloud_" + device + "_pause_battery" for device in batteries]
714+
if has_pause_start_time:
715+
self.base.args["pause_start_time"] = ["select.predbat_gecloud_" + device + "_pause_battery_start_time" for device in batteries]
716+
self.base.args["pause_end_time"] = ["select.predbat_gecloud_" + device + "_pause_battery_end_time" for device in batteries]
717+
else:
718+
if "pause_mode" in self.base.args:
719+
del self.base.args["pause_mode"]
720+
if "pause_start_time" in self.base.args:
721+
del self.base.args["pause_start_time"]
722+
if "pause_end_time" in self.base.args:
723+
del self.base.args["pause_end_time"]
724+
725+
if has_discharge_target_soc:
726+
self.base.args["discharge_target_soc"] = ["number.predbat_gecloud_" + device + "_dc_discharge_1_lower_soc_percent_limit" for device in batteries]
727+
else:
728+
if "discharge_target_soc" in self.base.args:
729+
del self.base.args["discharge_target_soc"]
730+
731+
if has_charge_power_percent:
732+
self.base.args["charge_rate_percent"] = ["number.predbat_gecloud_" + device + "_inverter_charge_power_percentage" for device in batteries]
733+
self.base.args["discharge_rate_percent"] = ["number.predbat_gecloud_" + device + "_inverter_discharge_power_percentage" for device in batteries]
734+
else:
735+
if "charge_rate_percent" in self.base.args:
736+
del self.base.args["charge_rate_percent"]
737+
if "discharge_rate_percent" in self.base.args:
738+
del self.base.args["discharge_rate_percent"]
696739

697740
if "givtcp_rest" in self.base.args:
698741
del self.base.args["givtcp_rest"]

0 commit comments

Comments
 (0)