Skip to content

Commit 2e1a9d7

Browse files
Merge pull request #4080 from springfall2008/fix/ge_cloud_reset
Fix issue with ge cloud reset
2 parents 94028dc + 835be31 commit 2e1a9d7

4 files changed

Lines changed: 25 additions & 23 deletions

File tree

.claude/settings.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(git -C /Users/treforsouthwell/source/batpred diff HEAD -- apps/predbat/predbat.py)",
5+
"Bash(python3 -c ' *)"
6+
]
7+
}
8+
}

apps/predbat/gecloud.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,8 @@ async def publish_meter(self, device, meter):
604604
self.dashboard_item(entity_name + "_grid_export_total", state=meter[key][subkey].get("export", 0), attributes=attribute_table.get("grid_export_total", {}), app="gecloud")
605605

606606
async def enable_default_options(self, device, registers):
607+
"""Enable default options for the device."""
608+
changed = False
607609
for key in registers:
608610
reg_name = registers[key].get("name", "")
609611
value = registers[key].get("value", None)
@@ -616,10 +618,9 @@ async def enable_default_options(self, device, registers):
616618
if result and ("value" in result):
617619
registers[key]["value"] = result["value"]
618620
await self.publish_registers(device, self.settings[device], select_key=key)
619-
return True
621+
changed = True
620622
else:
621623
self.log("GECloud: Warn: Failed to set {} for {}".format(ha_name, device))
622-
return False
623624
if ("inverter_max_output_active_power_percent" in ha_name) or ("ac_charge_upper_percent_limit" in ha_name) or ("_upper_soc_percent_limit" in ha_name):
624625
if "enable_" in ha_name:
625626
continue
@@ -630,32 +631,29 @@ async def enable_default_options(self, device, registers):
630631
if result and ("value" in result):
631632
registers[key]["value"] = result["value"]
632633
await self.publish_registers(device, self.settings[device], select_key=key)
633-
return True
634+
changed = True
634635
else:
635636
self.log("GECloud: Warn: Failed to set {} for {}".format(ha_name, device))
636-
return False
637637
if "charge_up_to_percent" in ha_name:
638638
if not value or value < 100:
639639
self.log("GECloud: Setting {} to 100% for {}, previous value was {}".format(ha_name, device, value))
640640
result = await self.async_write_inverter_setting(device, key, 100)
641641
if result and ("value" in result):
642642
registers[key]["value"] = result["value"]
643643
await self.publish_registers(device, self.settings[device], select_key=key)
644-
return True
644+
changed = True
645645
else:
646646
self.log("GECloud: Warn: Failed to set {} for {}".format(ha_name, device))
647-
return False
648647
if "discharge_down_to_percent" in ha_name:
649648
if not value or value > 4:
650649
self.log("GECloud: Setting {} to 4% for {}, previous value was {}".format(ha_name, device, value))
651650
result = await self.async_write_inverter_setting(device, key, 4)
652651
if result and ("value" in result):
653652
registers[key]["value"] = result["value"]
654653
await self.publish_registers(device, self.settings[device], select_key=key)
655-
return True
654+
changed = True
656655
else:
657656
self.log("GECloud: Warn: Failed to set {} for {}".format(ha_name, device))
658-
return False
659657
# Reset AC charge start and end times to 00:00 to disable
660658
for charge_id in range(2, 11):
661659
if (
@@ -670,25 +668,24 @@ async def enable_default_options(self, device, registers):
670668
if result and ("value" in result):
671669
registers[key]["value"] = result["value"]
672670
await self.publish_registers(device, self.settings[device], select_key=key)
673-
return True
671+
changed = True
674672
else:
675673
self.log("GECloud: Warn: Failed to set {} for {}".format(ha_name, device))
676-
return False
677674
if "real_time_control" in ha_name:
678675
if value:
679676
self.log("GECloud: Real-time control already enabled for {}".format(device))
680-
return True
677+
changed = True
678+
continue
681679
else:
682680
self.log("GECloud: Enabling real-time control for {} as current value is {}".format(device, value))
683681
result = await self.async_write_inverter_setting(device, key, True)
684682
if result and ("value" in result):
685683
registers[key]["value"] = result["value"]
686684
await self.publish_registers(device, self.settings[device], select_key=key)
687-
return True
685+
changed = True
688686
else:
689687
self.log("GECloud: Warn: Failed to enable real-time control for {}".format(device))
690-
return False
691-
return False
688+
return changed
692689

693690
async def publish_registers(self, device, registers, select_key=None):
694691
"""

apps/predbat/predbat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
import requests
3737
import asyncio
3838

39-
THIS_VERSION = "v8.40.10"
39+
THIS_VERSION = "v8.40.11"
4040

4141
from download import predbat_update_move, predbat_update_download, check_install, resolve_predbat_repository, DEFAULT_PREDBAT_REPOSITORY
4242
from const import MINUTE_WATT

apps/predbat/tests/test_ge_cloud.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3401,7 +3401,7 @@ async def mock_write_fail(device, key, value):
34013401
print("ERROR: enable_default_options should return False when write fails")
34023402
return 1
34033403

3404-
# Test 10: Multiple settings - should process first match only
3404+
# Test 10: Multiple settings - should process all matching settings
34053405
write_calls = []
34063406
registers = {100: {"name": "Export_SOC_Percent_Limit", "value": 10, "validation_rules": []}, 102: {"name": "AC_Charge_Upper_Percent_Limit", "value": 80, "validation_rules": []}}
34073407

@@ -3410,14 +3410,11 @@ async def mock_write_fail(device, key, value):
34103410
result = await ge_cloud.enable_default_options("test123", registers)
34113411

34123412
if not result:
3413-
print("ERROR: enable_default_options should return True after processing first match")
3413+
print("ERROR: enable_default_options should return True after processing all matches")
34143414
return 1
3415-
# Should only process the first matching setting (export SOC limit)
3416-
if len(write_calls) != 1:
3417-
print("ERROR: Should only process first matching setting, got {} calls".format(len(write_calls)))
3418-
return 1
3419-
if write_calls[0]["key"] != 100:
3420-
print("ERROR: Should process first setting (key 100), got key {}".format(write_calls[0]["key"]))
3415+
# Should process all matching settings
3416+
if len(write_calls) != 2:
3417+
print("ERROR: Should process all matching settings, got {} calls".format(len(write_calls)))
34213418
return 1
34223419

34233420
# Test 11: AC charge slot 2 start time needs resetting

0 commit comments

Comments
 (0)