Skip to content

Commit

Permalink
feat: add support for CSAD units (#47)
Browse files Browse the repository at this point in the history
  • Loading branch information
cryptk committed Jun 7, 2024
1 parent 2288dc7 commit 7e1f189
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
12 changes: 11 additions & 1 deletion pyomnilogic_local/models/mspconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
ChlorinatorDispenserType,
ColorLogicLightType,
ColorLogicShow,
CSADType,
FilterType,
HeaterType,
OmniType,
Expand Down Expand Up @@ -162,6 +163,13 @@ def __init__(self, **data: Any) -> None:
self.chlorinator_equipment = [MSPChlorinatorEquip.parse_obj(equip) for equip in chlorinator_equip_data[OmniType.CHLORINATOR_EQUIP]]


class MSPCSAD(OmniBase):
omni_type: OmniType = OmniType.CSAD
enabled: Literal["yes", "no"] = Field(alias="Enabled")
csad_type: CSADType | str = Field(alias="Type")
target_value: float = Field(alias="TargetValue")


class MSPColorLogicLight(OmniBase):
omni_type: OmniType = OmniType.CL_LIGHT
type: ColorLogicLightType | str = Field(alias="Type")
Expand All @@ -174,7 +182,7 @@ def __init__(self, **data: Any) -> None:


class MSPBoW(OmniBase):
_sub_devices = {"filter", "relay", "heater", "sensor", "colorlogic_light", "pump", "chlorinator"}
_sub_devices = {"filter", "relay", "heater", "sensor", "colorlogic_light", "pump", "chlorinator", "csad"}

omni_type: OmniType = OmniType.BOW
type: BodyOfWaterType | str = Field(alias="Type")
Expand All @@ -186,6 +194,7 @@ class MSPBoW(OmniBase):
colorlogic_light: list[MSPColorLogicLight] | None = Field(alias="ColorLogic-Light")
pump: list[MSPPump] | None = Field(alias="Pump")
chlorinator: MSPChlorinator | None = Field(alias="Chlorinator")
csad: list[MSPCSAD] | None = Field(alias="CSAD")

# 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
# itself is initialized
Expand Down Expand Up @@ -232,6 +241,7 @@ def load_xml(xml: str) -> MSPConfig:
force_list=(
OmniType.BOW_MSP,
OmniType.CHLORINATOR_EQUIP,
OmniType.CSAD,
OmniType.CL_LIGHT,
OmniType.FAVORITES,
OmniType.FILTER,
Expand Down
12 changes: 12 additions & 0 deletions pyomnilogic_local/models/telemetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
ColorLogicPowerState,
ColorLogicShow,
ColorLogicSpeed,
CSADMode,
FilterState,
FilterValvePosition,
FilterWhyOn,
Expand Down Expand Up @@ -79,6 +80,15 @@ class TelemetryChlorinator(BaseModel):
# return self.status_raw & 4 == 4 # Check if bit 4 is set, which means the chlorinator is currently chlorinating


class TelemetryCSAD(BaseModel):
omni_type: OmniType = OmniType.CSAD
system_id: int = Field(alias="@systemId")
status_raw: int = Field(alias="@status")
ph: float = Field(alias="@ph")
orp: int = Field(alias="@orp")
mode: CSADMode | int = Field(alias="@mode")


class TelemetryColorLogicLight(BaseModel):
omni_type: OmniType = OmniType.CL_LIGHT
system_id: int = Field(alias="@systemId")
Expand Down Expand Up @@ -172,6 +182,7 @@ class Telemetry(BaseModel):
bow: list[TelemetryBoW] = Field(alias="BodyOfWater")
chlorinator: list[TelemetryChlorinator] | None = Field(alias="Chlorinator")
colorlogic_light: list[TelemetryColorLogicLight] | None = Field(alias="ColorLogic-Light")
csad: list[TelemetryCSAD] | None = Field(alias="CSAD")
filter: list[TelemetryFilter] | None = Field(alias="Filter")
group: list[TelemetryGroup] | None = Field(alias="Group")
heater: list[TelemetryHeater] | None = Field(alias="Heater")
Expand Down Expand Up @@ -223,6 +234,7 @@ def xml_postprocessor(path: Any, key: Any, value: SupportsInt | Any) -> tuple[An
force_list=(
OmniType.BOW,
OmniType.CHLORINATOR,
OmniType.CSAD,
OmniType.CL_LIGHT,
OmniType.FILTER,
OmniType.GROUP,
Expand Down
6 changes: 6 additions & 0 deletions pyomnilogic_local/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ class OmniType(str, Enum):
BOW_MSP = "Body-of-water"
CHLORINATOR = "Chlorinator"
CHLORINATOR_EQUIP = "Chlorinator-Equipment"
CSAD = "CSAD"
CL_LIGHT = "ColorLogic-Light"
FAVORITES = "Favorites"
FILTER = "Filter"
Expand Down Expand Up @@ -162,6 +163,11 @@ class ColorLogicLightType(str, PrettyEnum):
TWO_FIVE = "COLOR_LOGIC_2_5"


class CSADType(str, PrettyEnum):
ACID = "ACID"
CO2 = "CO2"


# Chemistry Sense and Dispense
class CSADStatus(PrettyEnum):
NOT_DISPENSING = 0
Expand Down

0 comments on commit 7e1f189

Please sign in to comment.