cryptk / cryptk/python-omnilogic-local

Telemetry parse fails: TelemetryColorLogicLight.special_effect required but MSP R4.4 omits @specialEffect

Open Beginner friendly
#160 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
10
Forks
13
Avg merge
5m
Merged PRs (30d)
2

Description

## Summary

`Telemetry.load_xml()` raises `OmniParsingError` for a controller whose `` telemetry element does **not** include a `specialEffect` attribute. `TelemetryColorLogicLight.special_effect` is declared as a required field with no default, so `Telemetry.model_validate()` fails with a pydantic `missing` error and the whole telemetry fetch dies. For the `haomnilogic-local` HA integration this makes setup impossible — the config flow is permanently stuck on `cannot_connect`.

## Environment

- `python-omnilogic-local` **5.0.2** (also present on `main` — `models/telemetry.py` line ~269)
- Hayward OmniLogic, **MSP firmware R4.4**
- Equipment: 1 variable-speed filter pump, 1 ColorLogic light, 1 valve-actuator water feature, 1 HydraPure, unconfigured CSAD slot, virtual heater (no physical heater)
- Consumed via `cryptk/haomnilogic-local` 2.0.2 on Home Assistant

## Actual telemetry element from this controller

```xml

```

No `specialEffect` attribute. (`Backyard`, `BodyOfWater`, `Filter`, `VirtualHeater`, `Relay`, `CSAD`, `Group` all parse fine — this is the only failure, so `CSAD` empty `ph`/`orp` is *not* currently an issue for this system.)

## Traceback

```
File ".../pyomnilogic_local/models/telemetry.py", line 559, in load_xml
instance = Telemetry.model_validate(data["STATUS"])
pydantic_core._pydantic_core.ValidationError: 1 validation error for Telemetry
ColorLogic-Light.0.@specialEffect
Field required [type=missing, input_value={'@systemId': 4, '@lightState': 0, '@currentShow': 11, '@speed': 4, '@brightness': 4}, input_type=dict]

The above exception was the direct cause of the following exception:
...
pyomnilogic_local.models.exceptions.OmniParsingError: Failed to parse Telemetry: 1 validation error for Telemetry
ColorLogic-Light.0.@specialEffect
Field required [type=missing, ...]
```

## Suggested fix

`special_effect` isn't required for correct operation (the HA light entity doesn't read it). Give it a default:

```python
# pyomnilogic_local/models/telemetry.py (class TelemetryColorLogicLight)
special_effect: ColorLogicSpecialEffect = Field(
alias="@specialEffect", default=ColorLogicSpecialEffect.NO_EFFECT
)
```

Older / simple-mode ColorLogic configs and some MSP firmwares just don't send the attribute. A quick audit of the other `Telemetry*` models for required fields that older firmware may omit (e.g. `@lastSpeed`, CSAD `@ph`/`@orp` when empty-string) would likely prevent similar reports.

## Workaround (in case it helps others)

Monkey-patched `Telemetry.load_xml` in the HA custom component's `__init__.py` to catch the `specialEffect` `OmniParsingError`, inject `specialEffect="0"` into ``, and re-parse. Integration then sets up and all entities (light, valve, pump speed/presets, HydraPure, schedules, sensors) work.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start in models/telemetry.py at TelemetryColorLogicLight and follow Telemetry.load_xml through Telemetry.model_validate(). Reproduce parsing with the shown ColorLogic-Light element lacking @specialEffect; done means telemetry validates successfully without that attribute while preserving the default no-effect behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
88/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.