cryptk / cryptk/python-omnilogic-local
Telemetry parse fails: TelemetryColorLogicLight.special_effect required but MSP R4.4 omits @specialEffect
- 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