python-omnilogic-local 0.12.0__tar.gz → 0.13.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.
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/PKG-INFO +2 -1
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/mspconfig.py +12 -1
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/telemetry.py +12 -1
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/types.py +6 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyproject.toml +2 -7
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/LICENSE +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/README.md +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/__init__.py +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/api.py +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/cli.py +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/exceptions.py +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/__init__.py +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/const.py +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/filter_diagnostics.py +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/leadmessage.py +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/util.py +0 -0
- {python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/protocol.py +0 -0
- {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.
|
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.
|
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.
|
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",
|
File without changes
|
File without changes
|
{python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/exceptions.py
RENAMED
File without changes
|
{python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/__init__.py
RENAMED
File without changes
|
{python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/const.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/models/util.py
RENAMED
File without changes
|
{python_omnilogic_local-0.12.0 → python_omnilogic_local-0.13.0}/pyomnilogic_local/protocol.py
RENAMED
File without changes
|
File without changes
|