Skip to content

Commit 0fd2b41

Browse files
committed
Fixed SPH creation
1 parent 63b376c commit 0fd2b41

6 files changed

Lines changed: 29 additions & 27 deletions

File tree

docs/openapiv1.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ Convenience methods that wrap the core SPH methods above for common use cases.
9898
|:---|:---|:---|
9999
| `api.sph_write_ac_charge_times(...)` | device_sn, charge_power, charge_stop_soc, mains_enabled, periods | Helper: wraps `sph_write_parameter()` with type `mix_ac_charge_time_period`. see: [details](./openapiv1/sph_settings.md) |
100100
| `api.sph_write_ac_discharge_times(...)` | device_sn, discharge_power, discharge_stop_soc, periods | Helper: wraps `sph_write_parameter()` with type `mix_ac_discharge_time_period`. see: [details](./openapiv1/sph_settings.md) |
101-
| `api.sph_read_ac_charge_times(...)` | device_sn (optional), settings_data (optional) | Helper: parses charge config from `sph_detail()` response. see: [details](./openapiv1/sph_settings.md) |
102-
| `api.sph_read_ac_discharge_times(...)` | device_sn (optional), settings_data (optional) | Helper: parses discharge config from `sph_detail()` response. see: [details](./openapiv1/sph_settings.md) |
101+
| `api.sph_read_ac_charge_times(...)` | device_sn, settings_data (optional) | Helper: parses charge config from `sph_detail()` response. see: [details](./openapiv1/sph_settings.md) |
102+
| `api.sph_read_ac_discharge_times(...)` | device_sn, settings_data (optional) | Helper: parses discharge config from `sph_detail()` response. see: [details](./openapiv1/sph_settings.md) |
103103

104104
#### Classic methods
105105

docs/openapiv1/sph_settings.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ For SPH (hybrid inverter) systems, the public V1 API provides methods to read an
184184
### Read: `api.sph_read_ac_charge_times`
185185

186186
* parameters:
187-
* `device_sn`: The device serial number (not used if settings_data is provided)
187+
* `device_sn`: The device serial number
188188
* `settings_data`: Settings data from sph_detail() (not used if device_sn is provided)
189189
* note: Either `device_sn` or `settings_data` must be provided
190190
* returns: Dict with `charge_power`, `charge_stop_soc`, `mains_enabled`, and `periods` list

examples/sph_example.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676

7777
# Read AC charge time periods using helper function and inverter_data to avoid rate limiting
7878
charge_config = api.sph_read_ac_charge_times(
79+
device_sn=inverter_sn,
7980
settings_data=inverter_data,
8081
)
8182
print("AC Charge Configuration:")
@@ -86,6 +87,7 @@
8687

8788
# Read AC discharge time periods using helper function and inverter_data to avoid rate limiting
8889
discharge_config = api.sph_read_ac_discharge_times(
90+
device_sn=inverter_sn,
8991
settings_data=inverter_data,
9092
)
9193
print("AC Discharge Configuration:")

growattServer/open_api_v1/__init__.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -320,9 +320,9 @@ def get_device(self, device_sn: str, device_type: int) -> AbstractDevice|None:
320320
"""Get the device class by serial number and device_type id."""
321321
match device_type:
322322
case Sph.DEVICE_TYPE_ID:
323-
return Sph(device_sn)
323+
return Sph(self, device_sn)
324324
case Min.DEVICE_TYPE_ID:
325-
return Min(device_sn)
325+
return Min(self, device_sn)
326326
case _:
327327
warnings.warn(f"Device for type id: {device_type} has not been implemented yet.", stacklevel=2)
328328
return None
@@ -524,7 +524,7 @@ def sph_detail(self, device_sn):
524524
requests.exceptions.RequestException: If there is an issue with the HTTP request.
525525
526526
"""
527-
return Sph(device_sn).detail()
527+
return Sph(self, device_sn).detail()
528528

529529
def sph_energy(self, device_sn):
530530
"""
@@ -541,7 +541,7 @@ def sph_energy(self, device_sn):
541541
requests.exceptions.RequestException: If there is an issue with the HTTP request.
542542
543543
"""
544-
return Sph(device_sn).energy()
544+
return Sph(self, device_sn).energy()
545545

546546
def sph_energy_history(self, device_sn, start_date=None, end_date=None, timezone=None, page=None, limit=None):
547547
"""
@@ -564,7 +564,7 @@ def sph_energy_history(self, device_sn, start_date=None, end_date=None, timezone
564564
requests.exceptions.RequestException: If there is an issue with the HTTP request.
565565
566566
"""
567-
return Sph(device_sn).energy_history(start_date, end_date, timezone, page, limit)
567+
return Sph(self, device_sn).energy_history(start_date, end_date, timezone, page, limit)
568568

569569
def sph_read_parameter(self, device_sn, parameter_id=None, start_address=None, end_address=None):
570570
"""
@@ -585,7 +585,7 @@ def sph_read_parameter(self, device_sn, parameter_id=None, start_address=None, e
585585
requests.exceptions.RequestException: If there is an issue with the HTTP request.
586586
587587
"""
588-
return Sph(device_sn).read_parameter(parameter_id, start_address, end_address)
588+
return Sph(self, device_sn).read_parameter(parameter_id, start_address, end_address)
589589

590590
def sph_write_parameter(self, device_sn, parameter_id, parameter_values=None):
591591
"""
@@ -607,7 +607,7 @@ def sph_write_parameter(self, device_sn, parameter_id, parameter_values=None):
607607
requests.exceptions.RequestException: If there is an issue with the HTTP request.
608608
609609
"""
610-
return Sph(device_sn).write_parameter(parameter_id, parameter_values)
610+
return Sph(self, device_sn).write_parameter(parameter_id, parameter_values)
611611

612612
def sph_write_ac_charge_times(self, device_sn, charge_power, charge_stop_soc, mains_enabled, periods):
613613
"""
@@ -647,7 +647,7 @@ def sph_write_ac_charge_times(self, device_sn, charge_power, charge_stop_soc, ma
647647
requests.exceptions.RequestException: If there is an issue with the HTTP request.
648648
649649
"""
650-
return Sph(device_sn).write_ac_charge_times(charge_power, charge_stop_soc, mains_enabled, periods)
650+
return Sph(self, device_sn).write_ac_charge_times(charge_power, charge_stop_soc, mains_enabled, periods)
651651

652652
def sph_write_ac_discharge_times(self, device_sn, discharge_power, discharge_stop_soc, periods):
653653
"""
@@ -685,7 +685,7 @@ def sph_write_ac_discharge_times(self, device_sn, discharge_power, discharge_sto
685685
requests.exceptions.RequestException: If there is an issue with the HTTP request.
686686
687687
"""
688-
return Sph(device_sn).write_ac_discharge_times(discharge_power, discharge_stop_soc, periods)
688+
return Sph(self, device_sn).write_ac_discharge_times(discharge_power, discharge_stop_soc, periods)
689689

690690
def sph_read_ac_charge_times(self, device_sn, settings_data=None):
691691
"""
@@ -729,7 +729,7 @@ def sph_read_ac_charge_times(self, device_sn, settings_data=None):
729729
requests.exceptions.RequestException: If there is an issue with the HTTP request.
730730
731731
"""
732-
return Sph(device_sn).read_ac_charge_times(settings_data)
732+
return Sph(self, device_sn).read_ac_charge_times(settings_data)
733733

734734
def sph_read_ac_discharge_times(self, device_sn, settings_data=None):
735735
"""
@@ -772,4 +772,4 @@ def sph_read_ac_discharge_times(self, device_sn, settings_data=None):
772772
requests.exceptions.RequestException: If there is an issue with the HTTP request.
773773
774774
"""
775-
return Sph(device_sn).read_ac_discharge_times(device_sn, settings_data)
775+
return Sph(self, device_sn).read_ac_discharge_times(device_sn, settings_data)

growattServer/open_api_v1/devices/min.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""Min/TLX device file."""
2-
from datetime import datetime, timedelta
2+
from datetime import UTC, datetime, timedelta
33
from typing import Any
44

55
from growattServer.exceptions import GrowattParameterError
@@ -84,8 +84,8 @@ def energy_history(self, start_date=None, end_date=None, timezone=None, page=Non
8484
8585
"""
8686
if start_date is None and end_date is None:
87-
start_date = datetime.now(datetime.UTC).date()
88-
end_date = datetime.now(datetime.UTC).date()
87+
start_date = datetime.now(UTC).date()
88+
end_date = datetime.now(UTC).date()
8989
elif start_date is None:
9090
start_date = end_date
9191
elif end_date is None:

growattServer/open_api_v1/devices/sph.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""SPH/MIX device file."""
2-
from datetime import datetime, timedelta
2+
from datetime import UTC, datetime, timedelta
33

44
from growattServer.exceptions import GrowattParameterError
55

@@ -27,7 +27,7 @@ def detail(self):
2727
2828
"""
2929
# API: https://www.showdoc.com.cn/262556420217021/6129763571291058
30-
response = self.session.get(
30+
response = self.api.session.get(
3131
self.get_url("device/mix/mix_data_info"),
3232
params={
3333
"device_sn": self.device_sn
@@ -52,7 +52,7 @@ def energy(self):
5252
5353
"""
5454
# API: https://www.showdoc.com.cn/262556420217021/6129764475556048
55-
response = self.session.post(
55+
response = self.api.session.post(
5656
url=self.get_url("device/mix/mix_last_data"),
5757
data={
5858
"mix_sn": self.device_sn,
@@ -83,8 +83,8 @@ def energy_history(self, start_date=None, end_date=None, timezone=None, page=Non
8383
8484
"""
8585
if start_date is None and end_date is None:
86-
start_date = datetime.now(datetime.UTC).date()
87-
end_date = datetime.now(datetime.UTC).date()
86+
start_date = datetime.now(UTC).date()
87+
end_date = datetime.now(UTC).date()
8888
elif start_date is None:
8989
start_date = end_date
9090
elif end_date is None:
@@ -95,7 +95,7 @@ def energy_history(self, start_date=None, end_date=None, timezone=None, page=Non
9595
raise GrowattParameterError("date interval must not exceed 7 days")
9696

9797
# API: https://www.showdoc.com.cn/262556420217021/6129765461123058
98-
response = self.session.post(
98+
response = self.api.session.post(
9999
url=self.get_url("device/mix/mix_data"),
100100
data={
101101
"mix_sn": self.device_sn,
@@ -144,7 +144,7 @@ def read_parameter(self, parameter_id=None, start_address=None, end_address=None
144144
parameter_id = "set_any_reg"
145145

146146
# API: https://www.showdoc.com.cn/262556420217021/6129766954561259
147-
response = self.session.post(
147+
response = self.api.session.post(
148148
self.get_url("readMixParam"),
149149
data={
150150
"device_sn": self.device_sn,
@@ -208,7 +208,7 @@ def write_parameter(self, parameter_id, parameter_values=None):
208208
request_data[f"param{i}"] = str(parameters[i])
209209

210210
# API: https://www.showdoc.com.cn/262556420217021/6129761750718760
211-
response = self.session.post(
211+
response = self.api.session.post(
212212
self.get_url("mixSet"),
213213
data=request_data
214214
)
@@ -281,7 +281,7 @@ def write_ac_charge_times(self, charge_power, charge_stop_soc, mains_enabled, pe
281281
request_data[f"param{base + 4}"] = "1" if period["enabled"] else "0"
282282

283283
# API: https://www.showdoc.com.cn/262556420217021/6129761750718760
284-
response = self.session.post(
284+
response = self.api.session.post(
285285
self.get_url("mixSet"),
286286
data=request_data
287287
)
@@ -351,7 +351,7 @@ def write_ac_discharge_times(self, discharge_power, discharge_stop_soc, periods)
351351
request_data[f"param{base + 4}"] = "1" if period["enabled"] else "0"
352352

353353
# API: https://www.showdoc.com.cn/262556420217021/6129761750718760
354-
response = self.session.post(
354+
response = self.api.session.post(
355355
self.get_url("mixSet"),
356356
data=request_data
357357
)

0 commit comments

Comments
 (0)