Skip to content

Commit c8328a5

Browse files
committed
feat: add more control methods to pumps and filters
1 parent a03a321 commit c8328a5

3 files changed

Lines changed: 92 additions & 1 deletion

File tree

pyomnilogic_local/filter.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,3 +187,29 @@ async def run_preset_speed(self, speed: FilterSpeedPresets) -> None:
187187
equipment_id=self.system_id,
188188
is_on=speed_value,
189189
)
190+
191+
@dirties_state()
192+
async def set_speed(self, speed: int) -> None:
193+
"""Set the filter to a specific speed.
194+
195+
Args:
196+
speed: Speed value (0-100 percent). A value of 0 will turn the filter off.
197+
198+
Raises:
199+
OmniEquipmentNotInitializedError: If bow_id or system_id is None.
200+
ValueError: If speed is outside the valid range.
201+
"""
202+
if self.bow_id is None or self.system_id is None:
203+
msg = "Filter bow_id and system_id must be set"
204+
raise OmniEquipmentNotInitializedError(msg)
205+
206+
if not 0 <= speed <= 100:
207+
msg = f"Speed {speed} is outside valid range [0, 100]"
208+
raise ValueError(msg)
209+
210+
# Note: The API validates against min_percent/max_percent internally
211+
await self._api.async_set_filter_speed(
212+
pool_id=self.bow_id,
213+
equipment_id=self.system_id,
214+
speed=speed,
215+
)

pyomnilogic_local/omnitypes.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,12 @@ class PumpFunction(StrEnum, PrettyEnum):
460460
CLEANER_IN_FLOOR = "PMP_CLEANER_IN_FLOOR"
461461

462462

463+
class PumpSpeedPresets(StrEnum, PrettyEnum):
464+
LOW = auto()
465+
MEDIUM = auto()
466+
HIGH = auto()
467+
468+
463469
# Relays
464470
class RelayFunction(StrEnum, PrettyEnum):
465471
WATER_FEATURE = "RLY_WATER_FEATURE"

pyomnilogic_local/pump.py

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pyomnilogic_local.decorators import dirties_state
33
from pyomnilogic_local.models.mspconfig import MSPPump
44
from pyomnilogic_local.models.telemetry import TelemetryPump
5-
from pyomnilogic_local.omnitypes import PumpState
5+
from pyomnilogic_local.omnitypes import PumpSpeedPresets, PumpState
66
from pyomnilogic_local.util import OmniEquipmentNotInitializedError
77

88

@@ -141,3 +141,62 @@ async def turn_off(self) -> None:
141141
equipment_id=self.system_id,
142142
is_on=False,
143143
)
144+
145+
@dirties_state()
146+
async def run_preset_speed(self, speed: PumpSpeedPresets) -> None:
147+
"""Run the pump at a preset speed.
148+
149+
Args:
150+
speed: The preset speed to use (LOW, MEDIUM, or HIGH)
151+
152+
Raises:
153+
OmniEquipmentNotInitializedError: If bow_id or system_id is None.
154+
ValueError: If an invalid speed preset is provided.
155+
"""
156+
if self.bow_id is None or self.system_id is None:
157+
msg = "Pump bow_id and system_id must be set"
158+
raise OmniEquipmentNotInitializedError(msg)
159+
160+
speed_value: int
161+
match speed:
162+
case PumpSpeedPresets.LOW:
163+
speed_value = self.low_speed
164+
case PumpSpeedPresets.MEDIUM:
165+
speed_value = self.medium_speed
166+
case PumpSpeedPresets.HIGH:
167+
speed_value = self.high_speed
168+
case _:
169+
msg = f"Invalid speed preset: {speed}"
170+
raise ValueError(msg)
171+
172+
await self._api.async_set_equipment(
173+
pool_id=self.bow_id,
174+
equipment_id=self.system_id,
175+
is_on=speed_value,
176+
)
177+
178+
@dirties_state()
179+
async def set_speed(self, speed: int) -> None:
180+
"""Set the pump to a specific speed.
181+
182+
Args:
183+
speed: Speed value (0-100 percent). A value of 0 will turn the pump off.
184+
185+
Raises:
186+
OmniEquipmentNotInitializedError: If bow_id or system_id is None.
187+
ValueError: If speed is outside the valid range.
188+
"""
189+
if self.bow_id is None or self.system_id is None:
190+
msg = "Pump bow_id and system_id must be set"
191+
raise OmniEquipmentNotInitializedError(msg)
192+
193+
if not 0 <= speed <= 100:
194+
msg = f"Speed {speed} is outside valid range [0, 100]"
195+
raise ValueError(msg)
196+
197+
# Note: The API validates against min_percent/max_percent internally
198+
await self._api.async_set_equipment(
199+
pool_id=self.bow_id,
200+
equipment_id=self.system_id,
201+
is_on=speed,
202+
)

0 commit comments

Comments
 (0)