solarlog-cli 0.4.0__tar.gz → 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/.coverage +0 -0
  2. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/PKG-INFO +3 -2
  3. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/pyproject.toml +1 -1
  4. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/src/solarlog_cli/solarlog_client.py +11 -0
  5. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/src/solarlog_cli/solarlog_connector.py +23 -1
  6. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/src/solarlog_cli/solarlog_models.py +11 -0
  7. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/__snapshots__/test_solarlog_cli.ambr +6 -0
  8. solarlog_cli-0.5.0/tests/fixtures/battery_data.json +3 -0
  9. solarlog_cli-0.5.0/tests/fixtures/battery_data_without_battery.json +3 -0
  10. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/test_solarlog_cli.py +42 -0
  11. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/.devcontainer/devcontainer.json +0 -0
  12. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/.github/workflows/pylint.yml +0 -0
  13. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/.github/workflows/python-publish.yml +0 -0
  14. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/.github/workflows/ruff.yml +0 -0
  15. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/.github/workflows/tests.yml +0 -0
  16. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/.github/workflows/typing.yml +0 -0
  17. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/.gitignore +0 -0
  18. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/.vscode/settings.json +0 -0
  19. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/.vscode/tasks.json +0 -0
  20. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/LICENSE +0 -0
  21. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/README.md +0 -0
  22. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/pytest.ini +0 -0
  23. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/requirements.txt +0 -0
  24. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/src/solarlog_cli/__init__.py +0 -0
  25. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/src/solarlog_cli/py.typed +0 -0
  26. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/src/solarlog_cli/solarlog_exceptions.py +0 -0
  27. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/__init__.py +0 -0
  28. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/conftest.py +0 -0
  29. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/basic_data.json +0 -0
  30. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/basic_data_during_update.json +0 -0
  31. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/basic_data_no_power.json +0 -0
  32. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/device_data_1.json +0 -0
  33. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/device_data_2.json +0 -0
  34. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/device_data_3.json +0 -0
  35. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/device_data_4.json +0 -0
  36. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/device_list.json +0 -0
  37. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/device_list_access_denied.json +0 -0
  38. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/energy_per_inverter.json +0 -0
  39. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/extended_data.json +0 -0
  40. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/fixtures/power_per_inverter.json +0 -0
  41. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/ruff.toml +0 -0
  42. {solarlog_cli-0.4.0 → solarlog_cli-0.5.0}/tests/syrupy.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: solarlog_cli
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  Summary: Python library to access the Solar-Log
5
5
  Project-URL: Repository, https://github.com/dontinelli/solarlog_cli.git
6
6
  Project-URL: Issues, https://github.com/dontinelli/solarlog_cli/issues
@@ -8,6 +8,7 @@ Project-URL: Changelog, https://github.com/dontinelli/solarlog_cli/blob/master/C
8
8
  Project-URL: Solar-Log homepage, https://www.solar-log.com/
9
9
  Project-URL: API Documentation (inofficial), https://github.com/iobroker-community-adapters/ioBroker.solarlog/blob/master/docs/solarlog_dataobjects.md
10
10
  Author-email: dontinelli <73341522+dontinelli@users.noreply.github.com>
11
+ License-File: LICENSE
11
12
  Keywords: IoT,hass,home assistant,sensor,smart home,solar
12
13
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
13
14
  Classifier: Operating System :: OS Independent
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "solarlog_cli"
3
- version = "0.4.0"
3
+ version = "0.5.0"
4
4
  authors = [
5
5
  { name="dontinelli", email="73341522+dontinelli@users.noreply.github.com" },
6
6
  ]
@@ -179,6 +179,17 @@ class Client:
179
179
 
180
180
  return data
181
181
 
182
+ async def get_battery_data(self) -> list[float]:
183
+ """Get power data from Solar-Log"""
184
+
185
+ raw_data: dict = await self.parse_http_response(
186
+ await self.execute_http_request('{ "858": null }')
187
+ )
188
+
189
+ data: list[float] = raw_data["858"]
190
+
191
+ return data
192
+
182
193
  async def get_power_per_inverter(self) -> dict[int, float]:
183
194
  """Get power data from Solar-Log"""
184
195
 
@@ -12,7 +12,7 @@ from .solarlog_exceptions import(
12
12
  SolarLogConnectionError,
13
13
  SolarLogUpdateError,
14
14
  )
15
- from .solarlog_models import SolarlogData, InverterData
15
+ from .solarlog_models import BatteryData, InverterData, SolarlogData
16
16
 
17
17
  _LOGGER = logging.getLogger(__name__)
18
18
 
@@ -95,6 +95,8 @@ class SolarLogConnector:
95
95
  if self._device_list != {}:
96
96
  data.inverter_data = await self.update_inverter_data()
97
97
 
98
+ data.battery_data = await self.update_battery_data()
99
+
98
100
  _LOGGER.debug("Extended data updated: %s",data)
99
101
 
100
102
  #calculated values (for downward compatibility)
@@ -112,6 +114,26 @@ class SolarLogConnector:
112
114
 
113
115
  return data
114
116
 
117
+
118
+ async def update_battery_data(self) -> BatteryData | None:
119
+ """Update device specific data."""
120
+
121
+ raw_data = await self.client.get_battery_data()
122
+
123
+ if raw_data == []:
124
+ return None
125
+
126
+ battery_data = BatteryData(
127
+ voltage=raw_data[0],
128
+ level=raw_data[1],
129
+ charge_power=raw_data[2],
130
+ discharge_power=raw_data[3],
131
+ )
132
+
133
+ _LOGGER.debug("Battery data updated: %s",battery_data)
134
+
135
+ return battery_data
136
+
115
137
  async def update_device_list(self) -> dict[int, InverterData]:
116
138
  """Update list of devices."""
117
139
  if not self.extended_data:
@@ -4,6 +4,16 @@ from datetime import datetime
4
4
 
5
5
  from mashumaro import DataClassDictMixin
6
6
 
7
+ @dataclass
8
+ class BatteryData():
9
+ """Battery Data model."""
10
+
11
+ charge_power: float = 0
12
+ discharge_power: float = 0
13
+ level: float = 0
14
+ voltage: float = 0
15
+
16
+
7
17
  @dataclass
8
18
  class InverterData():
9
19
  """Inverter Data model."""
@@ -46,6 +56,7 @@ class SolarlogData(DataClassDictMixin):
46
56
  usage: float | None = None
47
57
 
48
58
  #extended data
59
+ battery_data: BatteryData | None = None
49
60
  inverter_data: dict[int, InverterData] = field(default_factory=dict)
50
61
  production_year: float | None = None
51
62
  self_consumption_year: float | None = None
@@ -2,6 +2,12 @@
2
2
  # name: test_update_data[asyncio]
3
3
  dict({
4
4
  'alternator_loss': 100,
5
+ 'battery_data': dict({
6
+ 'charge_power': 1074,
7
+ 'discharge_power': 0,
8
+ 'level': 79,
9
+ 'voltage': 0,
10
+ }),
5
11
  'capacity': 27.901119402985074,
6
12
  'consumption_ac': 3110,
7
13
  'consumption_day': 47819,
@@ -0,0 +1,3 @@
1
+ {
2
+ "858": [0,79,1074,0]
3
+ }
@@ -176,6 +176,10 @@ async def test_update_data(
176
176
  "http://solarlog.com/getjp",
177
177
  body=load_fixture("energy_per_inverter.json"),
178
178
  )
179
+ responses.post(
180
+ "http://solarlog.com/getjp",
181
+ body=load_fixture("battery_data.json"),
182
+ )
179
183
 
180
184
  solarlog_connector = SolarLogConnector(
181
185
  "http://solarlog.com",
@@ -191,6 +195,44 @@ async def test_update_data(
191
195
  await solarlog_connector.client.close()
192
196
  assert solarlog_connector.client.session.closed
193
197
 
198
+ async def test_update_data_without_battery(
199
+ responses: aioresponses,
200
+ ) -> None:
201
+ """Test update data."""
202
+ responses.post(
203
+ "http://solarlog.com/getjp",
204
+ body=load_fixture("basic_data.json"),
205
+ )
206
+ responses.post(
207
+ "http://solarlog.com/getjp",
208
+ body=load_fixture("extended_data.json"),
209
+ )
210
+ responses.post(
211
+ "http://solarlog.com/getjp",
212
+ body=load_fixture("power_per_inverter.json"),
213
+ )
214
+ responses.post(
215
+ "http://solarlog.com/getjp",
216
+ body=load_fixture("energy_per_inverter.json"),
217
+ )
218
+ responses.post(
219
+ "http://solarlog.com/getjp",
220
+ body=load_fixture("battery_data_without_battery.json"),
221
+ )
222
+
223
+ solarlog_connector = SolarLogConnector(
224
+ "http://solarlog.com",
225
+ True,
226
+ "UTC",
227
+ {0: True, 1: True, 2: False, 3: True},
228
+ )
229
+
230
+ data = await solarlog_connector.update_data()
231
+
232
+ assert data.battery_data is None
233
+
234
+ await solarlog_connector.client.close()
235
+ assert solarlog_connector.client.session.closed
194
236
 
195
237
  @pytest.mark.parametrize(
196
238
  ("status", "request_timeout", "error"),
File without changes
File without changes
File without changes
File without changes