|
2 | 2 | from pyomnilogic_local.decorators import dirties_state |
3 | 3 | from pyomnilogic_local.models.mspconfig import MSPPump |
4 | 4 | from pyomnilogic_local.models.telemetry import TelemetryPump |
5 | | -from pyomnilogic_local.omnitypes import PumpState |
| 5 | +from pyomnilogic_local.omnitypes import PumpSpeedPresets, PumpState |
6 | 6 | from pyomnilogic_local.util import OmniEquipmentNotInitializedError |
7 | 7 |
|
8 | 8 |
|
@@ -141,3 +141,62 @@ async def turn_off(self) -> None: |
141 | 141 | equipment_id=self.system_id, |
142 | 142 | is_on=False, |
143 | 143 | ) |
| 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