cryptk / cryptk/python-omnilogic-local

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

Aperta Adatta ai principianti
#160 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Python
Stelle
10
Fork
13
Merge medio
5m
PR unite (30g)
2

Descrizione

## 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.

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
backend
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Attiva
Chiarezza
Specificata chiaramente
Idoneità per principianti
88/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.