python-omnilogic-local 0.12.0__py3-none-any.whl → 0.13.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
  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)
@@ -6,14 +6,14 @@ pyomnilogic_local/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
6
6
  pyomnilogic_local/models/const.py,sha256=j4HSiPJW5If296yJ-AiIsBI9EdlckF4QkVFIpTLb5C4,51
7
7
  pyomnilogic_local/models/filter_diagnostics.py,sha256=N4YWl9aEMKcWZ4QOlqR68WV9H1WjTtxjs0wHrNojAaU,1532
8
8
  pyomnilogic_local/models/leadmessage.py,sha256=9r6PbIHHzD0tyeKiFUve3WLcjS8uL2Gj6r_96X7l5H8,407
9
- pyomnilogic_local/models/mspconfig.py,sha256=MZ45ZQBlzTyQP2bx1_VgTo47AZBymkHZwIGVOsOFKwo,9703
10
- pyomnilogic_local/models/telemetry.py,sha256=ZGhnKZObSKk6ayreItFqnusIdja7mgW-bucEdhgr1HQ,10243
9
+ pyomnilogic_local/models/mspconfig.py,sha256=CZGbFfjYJeTYA2yB3NS1SSNsA_mWJ6njKIc8n9HJQxo,10121
10
+ pyomnilogic_local/models/telemetry.py,sha256=86WPCmemNLwXAg-dHp1EvgpJzqQIHfwkNtO1eGF4eZk,10629
11
11
  pyomnilogic_local/models/util.py,sha256=3Qch98NOl5eO-KIOUBnE9ar86MlzbZ0g2LRApMgj-co,1476
12
12
  pyomnilogic_local/protocol.py,sha256=1Z7U70mV0sUlqrp3XK1Fvj6NuChRKLz0ejzKaQLSPE8,10194
13
- pyomnilogic_local/types.py,sha256=bN1E-6l5JjNGc9w2IRNffxD9Tr8LubLZv0E1mZ4l7ww,7177
13
+ pyomnilogic_local/types.py,sha256=km_tagtJ43m4_cIynalis7oiDa1LUUR-ta5B9HQUG1Q,7264
14
14
  pyomnilogic_local/util.py,sha256=agbRBKnecrYycC9iUmo1aJDjbVg9VxHyq4QY0D8-bfA,359
15
- python_omnilogic_local-0.12.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
16
- python_omnilogic_local-0.12.0.dist-info/METADATA,sha256=a4Gltv3ruBJPU6h5UVBbiubb91JsY53Tubvnnk63aQA,2888
17
- python_omnilogic_local-0.12.0.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
18
- python_omnilogic_local-0.12.0.dist-info/entry_points.txt,sha256=PUvdumqSijeB0dHH_s5oE2TnWtPWdJSNpSOsn8yTtOo,56
19
- python_omnilogic_local-0.12.0.dist-info/RECORD,,
15
+ python_omnilogic_local-0.13.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
16
+ python_omnilogic_local-0.13.0.dist-info/METADATA,sha256=ymUxzO4Q3irovtg1g2IVUQkuNdiVaJ6Rg62mjKapwB8,2939
17
+ python_omnilogic_local-0.13.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
18
+ python_omnilogic_local-0.13.0.dist-info/entry_points.txt,sha256=PUvdumqSijeB0dHH_s5oE2TnWtPWdJSNpSOsn8yTtOo,56
19
+ python_omnilogic_local-0.13.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.6.1
2
+ Generator: poetry-core 1.9.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any