cryptk / cryptk/python-omnilogic-local

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

Đang mở Phù hợp với người mới
#160 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
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

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.