python-omnilogic-local 0.20.7__tar.gz → 0.20.9__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.20.7 → python_omnilogic_local-0.20.9}/PKG-INFO +1 -1
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/colorlogiclight.py +20 -10
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/models/mspconfig.py +5 -5
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/models/telemetry.py +3 -2
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/sensor.py +1 -1
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyproject.toml +1 -1
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/LICENSE +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/README.md +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/__init__.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/_base.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/api/__init__.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/api/api.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/api/constants.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/api/exceptions.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/api/protocol.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/backyard.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/bow.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/chlorinator.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/chlorinator_equip.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/__init__.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/cli.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/debug/__init__.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/debug/commands.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/__init__.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/backyard.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/bows.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/chlorinators.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/commands.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/csads.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/filters.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/groups.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/heaters.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/lights.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/pumps.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/relays.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/schedules.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/sensors.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/valves.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/pcap_utils.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/utils.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/collections.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/csad.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/csad_equip.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/decorators.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/filter.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/groups.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/heater.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/heater_equip.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/models/__init__.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/models/const.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/models/exceptions.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/models/filter_diagnostics.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/models/leadmessage.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/omnilogic.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/omnitypes.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/pump.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/py.typed +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/relay.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/schedule.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/system.py +0 -0
- {python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-omnilogic-local
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.9
|
|
4
4
|
Summary: A library for local control of Hayward OmniHub/OmniLogic pool controllers using their local API
|
|
5
5
|
Author: Chris Jowett, djtimca, garionphx
|
|
6
6
|
Author-email: Chris Jowett <421501+cryptk@users.noreply.github.com>
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/colorlogiclight.py
RENAMED
|
@@ -117,7 +117,7 @@ class ColorLogicLight(OmniEquipment[MSPColorLogicLight, TelemetryColorLogicLight
|
|
|
117
117
|
super().__init__(omni, mspconfig, telemetry)
|
|
118
118
|
|
|
119
119
|
@property
|
|
120
|
-
def
|
|
120
|
+
def equip_type(self) -> ColorLogicLightType:
|
|
121
121
|
"""Returns the model of the light."""
|
|
122
122
|
return self.mspconfig.equip_type
|
|
123
123
|
|
|
@@ -168,12 +168,17 @@ class ColorLogicLight(OmniEquipment[MSPColorLogicLight, TelemetryColorLogicLight
|
|
|
168
168
|
@property
|
|
169
169
|
def show(self) -> LightShows:
|
|
170
170
|
"""Returns the current light show."""
|
|
171
|
-
return self.telemetry.
|
|
171
|
+
return self.telemetry.show_name(self.equip_type, self.v2_active)
|
|
172
172
|
|
|
173
173
|
@property
|
|
174
174
|
def speed(self) -> ColorLogicSpeed:
|
|
175
175
|
"""Returns the current speed."""
|
|
176
|
-
if self.
|
|
176
|
+
if self.equip_type in [
|
|
177
|
+
ColorLogicLightType.SAM,
|
|
178
|
+
ColorLogicLightType.TWO_FIVE,
|
|
179
|
+
ColorLogicLightType.FOUR_ZERO,
|
|
180
|
+
ColorLogicLightType.UCL,
|
|
181
|
+
]:
|
|
177
182
|
return self.telemetry.speed
|
|
178
183
|
# Non color-logic lights only support 1x speed
|
|
179
184
|
return ColorLogicSpeed.ONE_TIMES
|
|
@@ -181,7 +186,12 @@ class ColorLogicLight(OmniEquipment[MSPColorLogicLight, TelemetryColorLogicLight
|
|
|
181
186
|
@property
|
|
182
187
|
def brightness(self) -> ColorLogicBrightness:
|
|
183
188
|
"""Returns the current brightness."""
|
|
184
|
-
if self.
|
|
189
|
+
if self.equip_type in [
|
|
190
|
+
ColorLogicLightType.SAM,
|
|
191
|
+
ColorLogicLightType.TWO_FIVE,
|
|
192
|
+
ColorLogicLightType.FOUR_ZERO,
|
|
193
|
+
ColorLogicLightType.UCL,
|
|
194
|
+
]:
|
|
185
195
|
return self.telemetry.brightness
|
|
186
196
|
# Non color-logic lights only support 100% brightness
|
|
187
197
|
return ColorLogicBrightness.ONE_HUNDRED_PERCENT
|
|
@@ -262,17 +272,17 @@ class ColorLogicLight(OmniEquipment[MSPColorLogicLight, TelemetryColorLogicLight
|
|
|
262
272
|
and a warning will be logged.
|
|
263
273
|
"""
|
|
264
274
|
# Non color-logic lights do not support speed or brightness control
|
|
265
|
-
if self.
|
|
275
|
+
if self.equip_type not in [
|
|
266
276
|
ColorLogicLightType.SAM,
|
|
267
277
|
ColorLogicLightType.TWO_FIVE,
|
|
268
278
|
ColorLogicLightType.FOUR_ZERO,
|
|
269
279
|
ColorLogicLightType.UCL,
|
|
270
280
|
]:
|
|
271
281
|
if speed is not None:
|
|
272
|
-
_LOGGER.warning("Non colorlogic lights do not support speed control %s", self.
|
|
282
|
+
_LOGGER.warning("Non colorlogic lights do not support speed control %s", self.equip_type.name)
|
|
273
283
|
speed = ColorLogicSpeed.ONE_TIMES
|
|
274
284
|
if brightness is not None:
|
|
275
|
-
_LOGGER.warning("Non colorlogic lights do not support brightness control %s", self.
|
|
285
|
+
_LOGGER.warning("Non colorlogic lights do not support brightness control %s", self.equip_type.name)
|
|
276
286
|
brightness = ColorLogicBrightness.ONE_HUNDRED_PERCENT
|
|
277
287
|
|
|
278
288
|
if self.bow_id is None or self.system_id is None:
|
|
@@ -282,7 +292,7 @@ class ColorLogicLight(OmniEquipment[MSPColorLogicLight, TelemetryColorLogicLight
|
|
|
282
292
|
await self._api.async_set_light_show(
|
|
283
293
|
self.bow_id,
|
|
284
294
|
self.system_id,
|
|
285
|
-
show
|
|
286
|
-
speed
|
|
287
|
-
brightness
|
|
295
|
+
show if show is not None else self.show, # use current value if None
|
|
296
|
+
speed if speed is not None else self.speed, # use current value if None
|
|
297
|
+
brightness if brightness is not None else self.brightness, # use current value if None
|
|
288
298
|
)
|
|
@@ -289,14 +289,13 @@ class MSPColorLogicLight(OmniBase):
|
|
|
289
289
|
|
|
290
290
|
omni_type: OmniType = OmniType.CL_LIGHT
|
|
291
291
|
|
|
292
|
-
equip_type: ColorLogicLightType = Field(alias="Type")
|
|
293
292
|
v2_active: bool = Field(alias="V2-Active", default=False)
|
|
293
|
+
equip_type: ColorLogicLightType = Field(alias="Type")
|
|
294
294
|
effects: list[LightShows] | None = None
|
|
295
295
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
# Get the available light shows depending on the light type.
|
|
296
|
+
@model_validator(mode="after")
|
|
297
|
+
def set_effects(self) -> Any:
|
|
298
|
+
"""Set the available light shows based on the light type."""
|
|
300
299
|
match self.equip_type:
|
|
301
300
|
case ColorLogicLightType.TWO_FIVE:
|
|
302
301
|
self.effects = list(ColorLogicShow25)
|
|
@@ -311,6 +310,7 @@ class MSPColorLogicLight(OmniBase):
|
|
|
311
310
|
self.effects = list(PentairShow)
|
|
312
311
|
case ColorLogicLightType.ZODIAC_COLOR:
|
|
313
312
|
self.effects = list(ZodiacShow)
|
|
313
|
+
return self
|
|
314
314
|
|
|
315
315
|
|
|
316
316
|
class MSPGroup(OmniBase):
|
|
@@ -267,7 +267,7 @@ class TelemetryColorLogicLight(BaseModel):
|
|
|
267
267
|
|
|
268
268
|
def show_name(
|
|
269
269
|
self, model: ColorLogicLightType, v2: bool
|
|
270
|
-
) -> ColorLogicShow25 | ColorLogicShow40 | ColorLogicShowUCL | ColorLogicShowUCLV2 | PentairShow | ZodiacShow
|
|
270
|
+
) -> ColorLogicShow25 | ColorLogicShow40 | ColorLogicShowUCL | ColorLogicShowUCLV2 | PentairShow | ZodiacShow:
|
|
271
271
|
"""Get the current light show depending on the light type.
|
|
272
272
|
|
|
273
273
|
Returns:
|
|
@@ -287,7 +287,8 @@ class TelemetryColorLogicLight(BaseModel):
|
|
|
287
287
|
return PentairShow(self.show)
|
|
288
288
|
case ColorLogicLightType.ZODIAC_COLOR:
|
|
289
289
|
return ZodiacShow(self.show)
|
|
290
|
-
|
|
290
|
+
msg = f"Unknown ColorLogicLightType {model} for show name parsing"
|
|
291
|
+
raise OmniParsingError(msg)
|
|
291
292
|
|
|
292
293
|
|
|
293
294
|
class TelemetryFilter(BaseModel):
|
|
@@ -86,7 +86,7 @@ class Sensor(OmniEquipment[MSPSensor, None]):
|
|
|
86
86
|
super().__init__(omni, mspconfig, telemetry)
|
|
87
87
|
|
|
88
88
|
@property
|
|
89
|
-
def
|
|
89
|
+
def equip_type(self) -> SensorType | str:
|
|
90
90
|
"""Returns the type of sensor.
|
|
91
91
|
|
|
92
92
|
Can be AIR_TEMP, SOLAR_TEMP, WATER_TEMP, FLOW, ORP, or EXT_INPUT.
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/api/__init__.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/api/api.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/api/constants.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/api/exceptions.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/api/protocol.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/backyard.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/chlorinator.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/__init__.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/cli.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/bows.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/csads.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/filters.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/groups.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/heaters.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/lights.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/pumps.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/relays.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/sensors.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/get/valves.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/pcap_utils.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/cli/utils.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/collections.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/csad_equip.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/decorators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/heater_equip.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/models/__init__.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/models/const.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/omnilogic.py
RENAMED
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/omnitypes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_omnilogic_local-0.20.7 → python_omnilogic_local-0.20.9}/pyomnilogic_local/schedule.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|