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.
- {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
|