python-omnilogic-local 0.12.0__tar.gz → 0.13.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (18) hide show
  1. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/PKG-INFO +2 -1
  2. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/mspconfig.py +12 -1
  3. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/telemetry.py +12 -1
  4. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/types.py +6 -0
  5. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyproject.toml +2 -7
  6. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/LICENSE +0 -0
  7. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/README.md +0 -0
  8. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/__init__.py +0 -0
  9. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/api.py +0 -0
  10. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/cli.py +0 -0
  11. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/exceptions.py +0 -0
  12. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/__init__.py +0 -0
  13. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/const.py +0 -0
  14. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/filter_diagnostics.py +0 -0
  15. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/leadmessage.py +0 -0
  16. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/util.py +0 -0
  17. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/protocol.py +0 -0
  18. {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-omnilogic-local
3
- Version: 0.12.0
3
+ Version: 0.13.0
4
4
  Summary: A library for local control of Hayward OmniHub/OmniLogic pool controllers using their local API
5
5
  Home-page: https://github.com/cryptk/python-omnilogic-local
6
6
  License: Apache-2.0
@@ -15,6 +15,7 @@ Classifier: Operating System :: OS Independent
15
15
  Classifier: Programming Language :: Python :: 3
16
16
  Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
18
19
  Classifier: Topic :: Software Development :: Libraries
19
20
  Requires-Dist: pydantic (>=1.10.7,<2.0.0)
20
21
  Requires-Dist: xmltodict (>=0.13.0,<0.14.0)
@@ -18,6 +18,7 @@ from ..types import (
18
18
  ChlorinatorDispenserType,
19
19
  ColorLogicLightType,
20
20
  ColorLogicShow,
21
+ CSADType,
21
22
  FilterType,
22
23
  HeaterType,
23
24
  OmniType,
@@ -162,6 +163,13 @@ class MSPChlorinator(OmniBase):
162
163
  self.chlorinator_equipment = [MSPChlorinatorEquip.parse_obj(equip) for equip in chlorinator_equip_data[OmniType.CHLORINATOR_EQUIP]]
163
164
 
164
165
 
166
+ class MSPCSAD(OmniBase):
167
+ omni_type: OmniType = OmniType.CSAD
168
+ enabled: Literal["yes", "no"] = Field(alias="Enabled")
169
+ csad_type: CSADType | str = Field(alias="Type")
170
+ target_value: float = Field(alias="TargetValue")
171
+
172
+
165
173
  class MSPColorLogicLight(OmniBase):
166
174
  omni_type: OmniType = OmniType.CL_LIGHT
167
175
  type: ColorLogicLightType | str = Field(alias="Type")
@@ -174,10 +182,11 @@ class MSPColorLogicLight(OmniBase):
174
182
 
175
183
 
176
184
  class MSPBoW(OmniBase):
177
- _sub_devices = {"filter", "relay", "heater", "sensor", "colorlogic_light", "pump", "chlorinator"}
185
+ _sub_devices = {"filter", "relay", "heater", "sensor", "colorlogic_light", "pump", "chlorinator", "csad"}
178
186
 
179
187
  omni_type: OmniType = OmniType.BOW
180
188
  type: BodyOfWaterType | str = Field(alias="Type")
189
+ supports_spillover: Literal["yes", "no"] = Field(alias="Supports-Spillover")
181
190
  filter: list[MSPFilter] | None = Field(alias="Filter")
182
191
  relay: list[MSPRelay] | None = Field(alias="Relay")
183
192
  heater: MSPVirtualHeater | None = Field(alias="Heater")
@@ -185,6 +194,7 @@ class MSPBoW(OmniBase):
185
194
  colorlogic_light: list[MSPColorLogicLight] | None = Field(alias="ColorLogic-Light")
186
195
  pump: list[MSPPump] | None = Field(alias="Pump")
187
196
  chlorinator: MSPChlorinator | None = Field(alias="Chlorinator")
197
+ csad: list[MSPCSAD] | None = Field(alias="CSAD")
188
198
 
189
199
  # We override the __init__ here so that we can trigger the propagation of the bow_id down to all of it's sub devices after the bow
190
200
  # itself is initialized
@@ -231,6 +241,7 @@ class MSPConfig(BaseModel):
231
241
  force_list=(
232
242
  OmniType.BOW_MSP,
233
243
  OmniType.CHLORINATOR_EQUIP,
244
+ OmniType.CSAD,
234
245
  OmniType.CL_LIGHT,
235
246
  OmniType.FAVORITES,
236
247
  OmniType.FILTER,
@@ -13,6 +13,7 @@ from ..types import (
13
13
  ColorLogicPowerState,
14
14
  ColorLogicShow,
15
15
  ColorLogicSpeed,
16
+ CSADMode,
16
17
  FilterState,
17
18
  FilterValvePosition,
18
19
  FilterWhyOn,
@@ -79,6 +80,15 @@ class TelemetryChlorinator(BaseModel):
79
80
  # return self.status_raw & 4 == 4 # Check if bit 4 is set, which means the chlorinator is currently chlorinating
80
81
 
81
82
 
83
+ class TelemetryCSAD(BaseModel):
84
+ omni_type: OmniType = OmniType.CSAD
85
+ system_id: int = Field(alias="@systemId")
86
+ status_raw: int = Field(alias="@status")
87
+ ph: float = Field(alias="@ph")
88
+ orp: int = Field(alias="@orp")
89
+ mode: CSADMode | int = Field(alias="@mode")
90
+
91
+
82
92
  class TelemetryColorLogicLight(BaseModel):
83
93
  omni_type: OmniType = OmniType.CL_LIGHT
84
94
  system_id: int = Field(alias="@systemId")
@@ -172,6 +182,7 @@ class Telemetry(BaseModel):
172
182
  bow: list[TelemetryBoW] = Field(alias="BodyOfWater")
173
183
  chlorinator: list[TelemetryChlorinator] | None = Field(alias="Chlorinator")
174
184
  colorlogic_light: list[TelemetryColorLogicLight] | None = Field(alias="ColorLogic-Light")
185
+ csad: list[TelemetryCSAD] | None = Field(alias="CSAD")
175
186
  filter: list[TelemetryFilter] | None = Field(alias="Filter")
176
187
  group: list[TelemetryGroup] | None = Field(alias="Group")
177
188
  heater: list[TelemetryHeater] | None = Field(alias="Heater")
@@ -185,7 +196,6 @@ class Telemetry(BaseModel):
185
196
 
186
197
  @staticmethod
187
198
  def load_xml(xml: str) -> Telemetry:
188
-
189
199
  TypeVar("KT")
190
200
  TypeVar("VT", SupportsInt, Any)
191
201
 
@@ -224,6 +234,7 @@ class Telemetry(BaseModel):
224
234
  force_list=(
225
235
  OmniType.BOW,
226
236
  OmniType.CHLORINATOR,
237
+ OmniType.CSAD,
227
238
  OmniType.CL_LIGHT,
228
239
  OmniType.FILTER,
229
240
  OmniType.GROUP,
@@ -46,6 +46,7 @@ class OmniType(str, Enum):
46
46
  BOW_MSP = "Body-of-water"
47
47
  CHLORINATOR = "Chlorinator"
48
48
  CHLORINATOR_EQUIP = "Chlorinator-Equipment"
49
+ CSAD = "CSAD"
49
50
  CL_LIGHT = "ColorLogic-Light"
50
51
  FAVORITES = "Favorites"
51
52
  FILTER = "Filter"
@@ -162,6 +163,11 @@ class ColorLogicLightType(str, PrettyEnum):
162
163
  TWO_FIVE = "COLOR_LOGIC_2_5"
163
164
 
164
165
 
166
+ class CSADType(str, PrettyEnum):
167
+ ACID = "ACID"
168
+ CO2 = "CO2"
169
+
170
+
165
171
  # Chemistry Sense and Dispense
166
172
  class CSADStatus(PrettyEnum):
167
173
  NOT_DISPENSING = 0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "python-omnilogic-local"
3
- version = "0.12.0"
3
+ version = "0.13.0"
4
4
  description = "A library for local control of Hayward OmniHub/OmniLogic pool controllers using their local API"
5
5
  authors = ["cryptk <cryptk@users.noreply.github.com>", "djtimca", "garionphx"]
6
6
  license = "Apache-2.0"
@@ -91,7 +91,7 @@ warn_required_dynamic_aliases = true
91
91
  warn_untyped_fields = true
92
92
 
93
93
  [tool.pylint.MAIN]
94
- py-version = "3.10"
94
+ py-version = "3.11"
95
95
  ignore = [
96
96
  "tests",
97
97
  ]
@@ -105,11 +105,6 @@ load-plugins = [
105
105
  persistent = false
106
106
  extension-pkg-allow-list = [
107
107
  "pydantic",
108
- "av.audio.stream",
109
- "av.stream",
110
- "ciso8601",
111
- "orjson",
112
- "cv2",
113
108
  ]
114
109
  fail-on = [
115
110
  "I",