Skip to content

Commit c2d03ad

Browse files
committed
Add more data grabs
1 parent 7b8719d commit c2d03ad

3 files changed

Lines changed: 98 additions & 0 deletions

File tree

‎custom_components/sigenergy_cloud/api.py‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
DEFAULT_REGION,
1919
ENDPOINT_AUTH,
2020
ENDPOINT_CURRENT_LOCAL_WEATHER,
21+
ENDPOINT_ENERGY_CUSTOM,
2122
ENDPOINT_ENERGY_FLOW,
2223
ENDPOINT_MODE_CURRENT,
2324
ENDPOINT_MODE_SET,
@@ -26,6 +27,7 @@
2627
ENDPOINT_SMART_LOADS,
2728
ENDPOINT_STATION_HOME,
2829
ENDPOINT_SYSTEM_DEVICES,
30+
ENDPOINT_TARIFF_SOC_DAY,
2931
OAUTH_CLIENT_ID,
3032
OAUTH_CLIENT_SECRET,
3133
)
@@ -322,6 +324,46 @@ async def get_current_local_weather(self, station_sn_code: str) -> dict[str, Any
322324
params={"stationSnCode": station_sn_code},
323325
)
324326

327+
async def get_energy_custom(
328+
self,
329+
station_id: str,
330+
start_date: str,
331+
end_date: str,
332+
*,
333+
date_flag: int = 1,
334+
resource_ids: str = "energy_card",
335+
) -> dict[str, Any]:
336+
"""Get custom energy statistics for a station and date range."""
337+
return await self._request(
338+
"GET",
339+
ENDPOINT_ENERGY_CUSTOM,
340+
params={
341+
"stationId": station_id,
342+
"startDate": start_date,
343+
"endDate": end_date,
344+
"dateFlag": date_flag,
345+
"resourceIds": resource_ids,
346+
},
347+
)
348+
349+
async def get_tariff_soc_day(
350+
self,
351+
station_id: str,
352+
dt: str,
353+
*,
354+
need_prediction: bool = False,
355+
) -> dict[str, Any]:
356+
"""Get daily tariff and state-of-charge details for a station."""
357+
return await self._request(
358+
"GET",
359+
ENDPOINT_TARIFF_SOC_DAY,
360+
params={
361+
"stationId": station_id,
362+
"dt": dt,
363+
"needPrediction": str(need_prediction).lower(),
364+
},
365+
)
366+
325367
# ------------------------------------------------------------------
326368
# Convenience: fetch all data in one coordinator cycle
327369
# ------------------------------------------------------------------

‎custom_components/sigenergy_cloud/const.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
ENDPOINT_REALTIME_CONSUMPTION = (
4545
"data-process/sigen/station/statistics/real-time-consumption"
4646
)
47+
ENDPOINT_ENERGY_CUSTOM = "data-process/sigen/station/statistics/v1/energy/custom"
48+
ENDPOINT_TARIFF_SOC_DAY = "data-process/sigen/station/statistics/tariff-soc/day"
4749

4850
# Operational modes
4951
OPERATIONAL_MODES: dict[int, str] = {

‎tests/test_api.py‎

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,60 @@ async def test_get_current_local_weather(self, mock_session):
361361
call_kwargs = mock_session.request.call_args[1]
362362
assert call_kwargs["params"] == {"stationSnCode": "102026031800194"}
363363

364+
@pytest.mark.asyncio
365+
async def test_get_energy_custom(self, mock_session):
366+
client = await self._make_authed_client(mock_session)
367+
368+
energy_data = {"summary": {"pvDayNrg": 15.58}}
369+
api_resp = make_mock_response(
370+
200,
371+
json_data={"code": 0, "data": energy_data, "message": "success"},
372+
)
373+
mock_session.request.return_value = api_resp
374+
375+
result = await client.get_energy_custom(
376+
"102026031800194",
377+
"20260402",
378+
"20260402",
379+
date_flag=1,
380+
resource_ids="energy_card",
381+
)
382+
383+
assert result == energy_data
384+
call_kwargs = mock_session.request.call_args[1]
385+
assert call_kwargs["params"] == {
386+
"stationId": "102026031800194",
387+
"startDate": "20260402",
388+
"endDate": "20260402",
389+
"dateFlag": 1,
390+
"resourceIds": "energy_card",
391+
}
392+
393+
@pytest.mark.asyncio
394+
async def test_get_tariff_soc_day(self, mock_session):
395+
client = await self._make_authed_client(mock_session)
396+
397+
tariff_data = {"soc": [], "tariff": []}
398+
api_resp = make_mock_response(
399+
200,
400+
json_data={"code": 0, "data": tariff_data, "message": "success"},
401+
)
402+
mock_session.request.return_value = api_resp
403+
404+
result = await client.get_tariff_soc_day(
405+
"102026031800194",
406+
"20260402",
407+
need_prediction=False,
408+
)
409+
410+
assert result == tariff_data
411+
call_kwargs = mock_session.request.call_args[1]
412+
assert call_kwargs["params"] == {
413+
"stationId": "102026031800194",
414+
"dt": "20260402",
415+
"needPrediction": "false",
416+
}
417+
364418
@pytest.mark.asyncio
365419
async def test_set_operational_mode(self, mock_session):
366420
client = await self._make_authed_client(mock_session)

0 commit comments

Comments
 (0)