cryptk / cryptk/python-omnilogic-local
Telemetry parse fails: TelemetryColorLogicLight.special_effect required but MSP R4.4 omits @specialEffect
- Ngôn ngữ chính
- Python
- Star
- 10
- Fork
- 13
- Merge trung bình
- 5 phút
- Pull request đã merge (30 ngày)
- 2
Mô tả
## 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.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu trong models/telemetry.py tại TelemetryColorLogicLight và theo dõi Telemetry.load_xml qua Telemetry.model_validate(). Tái hiện việc phân tích cú pháp với phần tử ColorLogic-Light được示示 và không có @specialEffect; hoàn thành khi telemetry được xác thực thành công mà không có thuộc tính đó, đồng thời giữ nguyên hành vi mặc định không có hiệu ứng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- backend
- Loại issue
- Lỗi
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 88/100