python-pooldose 0.7.9__tar.gz → 0.8.1__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 (38) hide show
  1. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/PKG-INFO +4 -5
  2. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/README.md +3 -4
  3. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/__init__.py +1 -1
  4. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/mappings/model_PDHC1H1HAR1V1_FW539224.json +4 -8
  5. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/mappings/model_PDPR1H1HAR1V0_FW539224.json +4 -4
  6. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/values/instant_values.py +6 -0
  7. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/python_pooldose.egg-info/PKG-INFO +4 -5
  8. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/tests/test_instant_values.py +15 -0
  9. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/LICENSE +0 -0
  10. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/pyproject.toml +0 -0
  11. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/setup.cfg +0 -0
  12. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/__main__.py +0 -0
  13. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/client.py +0 -0
  14. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/constants.py +0 -0
  15. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/device_analyzer.py +0 -0
  16. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/mappings/__init__.py +0 -0
  17. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/mappings/mapping_info.py +0 -0
  18. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/mappings/model_PDPR1H1HAW100_FW539187.json +0 -0
  19. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/mock_client.py +0 -0
  20. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/py.typed +0 -0
  21. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/request_handler.py +0 -0
  22. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/request_status.py +0 -0
  23. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/type_definitions.py +0 -0
  24. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/values/__init__.py +0 -0
  25. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/pooldose/values/static_values.py +0 -0
  26. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/python_pooldose.egg-info/SOURCES.txt +0 -0
  27. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/python_pooldose.egg-info/dependency_links.txt +0 -0
  28. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/python_pooldose.egg-info/entry_points.txt +0 -0
  29. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/python_pooldose.egg-info/requires.txt +0 -0
  30. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/src/python_pooldose.egg-info/top_level.txt +0 -0
  31. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/tests/test_client.py +0 -0
  32. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/tests/test_device_analyzer.py +0 -0
  33. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/tests/test_device_analyzer_integration.py +0 -0
  34. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/tests/test_mapping_info.py +0 -0
  35. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/tests/test_mock_client_set_value.py +0 -0
  36. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/tests/test_request_handler.py +0 -0
  37. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/tests/test_ssl_support.py +0 -0
  38. {python_pooldose-0.7.9 → python_pooldose-0.8.1}/tests/test_static_values.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pooldose
3
- Version: 0.7.9
3
+ Version: 0.8.1
4
4
  Summary: Unoffical async Python client for SEKO PoolDose devices
5
5
  Author-email: Lukas Maertin <pypi@lukas-maertin.de>
6
6
  License-Expression: MIT
@@ -985,8 +985,7 @@ Data Classification:
985
985
 
986
986
  For detailed release notes and version history, please see [CHANGELOG.md](CHANGELOG.md).
987
987
 
988
- ### Latest Release (0.7.9)
988
+ ### Latest Release (0.8.1)
989
989
 
990
- - **Simplified Entity Types**: Moved read-only numeric values (`water_meter_total_permanent`, `water_meter_total_resettable`, `flow_rate_value`) from number to sensor type for better clarity
991
- - **Streamlined Configuration**: Reduced select entities to essential configuration options only
992
- - **Enhanced Organization**: Improved distinction between read-only sensors and configurable numbers
990
+ - **Unit Standardization**: Chlorine values now return "ppm" instead of "CL2"
991
+ - **Mapping Consistency**: OFA threshold mappings renamed for consistency (`ofa_orp_*`, `ofa_cl_*`)
@@ -966,8 +966,7 @@ Data Classification:
966
966
 
967
967
  For detailed release notes and version history, please see [CHANGELOG.md](CHANGELOG.md).
968
968
 
969
- ### Latest Release (0.7.9)
969
+ ### Latest Release (0.8.1)
970
970
 
971
- - **Simplified Entity Types**: Moved read-only numeric values (`water_meter_total_permanent`, `water_meter_total_resettable`, `flow_rate_value`) from number to sensor type for better clarity
972
- - **Streamlined Configuration**: Reduced select entities to essential configuration options only
973
- - **Enhanced Organization**: Improved distinction between read-only sensors and configurable numbers
971
+ - **Unit Standardization**: Chlorine values now return "ppm" instead of "CL2"
972
+ - **Mapping Consistency**: OFA threshold mappings renamed for consistency (`ofa_orp_*`, `ofa_cl_*`)
@@ -1,5 +1,5 @@
1
1
  """Async API client for SEKO Pooldose."""
2
2
  from .client import PooldoseClient
3
3
 
4
- __version__ = "0.7.9"
4
+ __version__ = "0.8.1"
5
5
  __all__ = ["PooldoseClient"]
@@ -119,22 +119,22 @@
119
119
  "type": "number",
120
120
  "field": "maxT"
121
121
  },
122
- "orp_ph_lower": {
122
+ "ofa_orp_lower": {
123
123
  "key": "w_1g1l13bkn",
124
124
  "type": "number",
125
125
  "field": "minT"
126
126
  },
127
- "orp_ph_upper": {
127
+ "ofa_orp_upper": {
128
128
  "key": "w_1g1l13bkn",
129
129
  "type": "number",
130
130
  "field": "maxT"
131
131
  },
132
- "cl_ph_lower": {
132
+ "ofa_cl_lower": {
133
133
  "key": "w_1g1l13dke",
134
134
  "type": "number",
135
135
  "field": "minT"
136
136
  },
137
- "cl_ph_upper": {
137
+ "ofa_cl_upper": {
138
138
  "key": "w_1g1l13dke",
139
139
  "type": "number",
140
140
  "field": "maxT"
@@ -290,9 +290,5 @@
290
290
  "|PDPR1H1HAR1V0_FW539224_COMBO_w_1f0j0qe9q_ON_OFF|": "on / off",
291
291
  "|PDPR1H1HAR1V0_FW539224_COMBO_w_1f0j0qe9q_TIMED|": "timed"
292
292
  }
293
- },
294
- "flow_rate_value": {
295
- "key": "w_1f0iv4ls4",
296
- "type": "sensor"
297
293
  }
298
294
  }
@@ -11,6 +11,10 @@
11
11
  "key": "w_1f0invtg9",
12
12
  "type": "sensor"
13
13
  },
14
+ "flow_rate": {
15
+ "key": "w_1f0iv4ls4",
16
+ "type": "sensor"
17
+ },
14
18
  "ph_type_dosing": {
15
19
  "key": "w_1f0it2vcf",
16
20
  "type": "sensor",
@@ -122,9 +126,5 @@
122
126
  "|PDPR1H1HAR1V0_FW539224_COMBO_w_1f3dfp59r_LITERS__L_|": "L",
123
127
  "|PDPR1H1HAR1V0_FW539224_COMBO_w_1f3dfp59r_CUBIC_METER__M__|": "m³"
124
128
  }
125
- },
126
- "flow_rate_value": {
127
- "key": "w_1f0iv4ls4",
128
- "type": "sensor"
129
129
  }
130
130
  }
@@ -251,6 +251,9 @@ class InstantValues:
251
251
  # Get unit
252
252
  units = raw_entry.get("magnitude", [""])
253
253
  unit = units[0] if units and units[0].lower() not in ("undefined", "ph") else None
254
+ # Convert CL2/Chlorine to ppm
255
+ if unit and unit.lower() in ("cl2", "chlorine"):
256
+ unit = "ppm"
254
257
 
255
258
  return (value, unit)
256
259
 
@@ -318,6 +321,9 @@ class InstantValues:
318
321
  # Get unit
319
322
  units = raw_entry.get("magnitude", [""])
320
323
  unit = units[0] if isinstance(units, (list, tuple)) and units and str(units[0]).lower() not in ("undefined", "ph") else None
324
+ # Convert CL2/Chlorine to ppm
325
+ if unit and str(unit).lower() in ("cl2", "chlorine"):
326
+ unit = "ppm"
321
327
 
322
328
  return (value, unit, abs_min, abs_max, resolution)
323
329
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-pooldose
3
- Version: 0.7.9
3
+ Version: 0.8.1
4
4
  Summary: Unoffical async Python client for SEKO PoolDose devices
5
5
  Author-email: Lukas Maertin <pypi@lukas-maertin.de>
6
6
  License-Expression: MIT
@@ -985,8 +985,7 @@ Data Classification:
985
985
 
986
986
  For detailed release notes and version history, please see [CHANGELOG.md](CHANGELOG.md).
987
987
 
988
- ### Latest Release (0.7.9)
988
+ ### Latest Release (0.8.1)
989
989
 
990
- - **Simplified Entity Types**: Moved read-only numeric values (`water_meter_total_permanent`, `water_meter_total_resettable`, `flow_rate_value`) from number to sensor type for better clarity
991
- - **Streamlined Configuration**: Reduced select entities to essential configuration options only
992
- - **Enhanced Organization**: Improved distinction between read-only sensors and configurable numbers
990
+ - **Unit Standardization**: Chlorine values now return "ppm" instead of "CL2"
991
+ - **Mapping Consistency**: OFA threshold mappings renamed for consistency (`ofa_orp_*`, `ofa_cl_*`)
@@ -20,6 +20,12 @@ class TestInstantValues: # pylint: disable=too-many-public-methods
20
20
  assert value == 25.5
21
21
  assert unit == "°C"
22
22
 
23
+ def test_getitem_sensor_chlorine_unit(self, instant_values_fixture):
24
+ """Test getting chlorine sensor values with ppm unit conversion."""
25
+ value, unit = instant_values_fixture["chlorine"]
26
+ assert value == 0.5
27
+ assert unit == "ppm"
28
+
23
29
  def test_getitem_sensor_with_conversion(self, instant_values_fixture):
24
30
  """Test getting sensor values with string conversion."""
25
31
  value, unit = instant_values_fixture["ph_type_dosing"]
@@ -35,6 +41,15 @@ class TestInstantValues: # pylint: disable=too-many-public-methods
35
41
  assert max_val == 8.0
36
42
  assert step == 0.1
37
43
 
44
+ def test_getitem_number_chlorine_unit(self, instant_values_fixture):
45
+ """Test getting chlorine number values with ppm unit conversion."""
46
+ value, unit, min_val, max_val, step = instant_values_fixture["chlorine_target"]
47
+ assert value == 0.6
48
+ assert unit == "ppm"
49
+ assert min_val == 0.3
50
+ assert max_val == 3.0
51
+ assert step == 0.1
52
+
38
53
  def test_getitem_switch(self, instant_values_fixture):
39
54
  """Test getting switch values."""
40
55
  value = instant_values_fixture["pump_switch"]
File without changes