Skip to content

Handle unknown OffReason and AlarmReason values gracefully#86

Open
rajlaud wants to merge 2 commits into
keshavdv:mainfrom
rajlaud:fix-unknown-enum-values
Open

Handle unknown OffReason and AlarmReason values gracefully#86
rajlaud wants to merge 2 commits into
keshavdv:mainfrom
rajlaud:fix-unknown-enum-values

Conversation

@rajlaud
Copy link
Copy Markdown
Contributor

@rajlaud rajlaud commented Jan 27, 2026

Problem

When a Victron device sends an enum value that isn't defined in the library (e.g., a new OffReason or AlarmReason value from a firmware update), the library raises a ValueError. This causes the entire advertisement to be dropped, losing all sensor data from that reading.

This became more likely after #74 changed OffReason and AlarmReason from Flag to Enum, since previously unknown combinations could still be represented as flag combinations.

Solution

Added a parse_enum() helper function and UNKNOWN members to OffReason and AlarmReason. When an unrecognized value is encountered, the enum now returns UNKNOWN instead of raising an exception.

Changes

  • Added parse_enum(enum_class, value) helper in base.py
  • Added UNKNOWN member to OffReason and AlarmReason
  • Updated parsing to use parse_enum for these enums

Affected devices:

  • DcDcConverter, SmartBatteryProtect, OrionXS (OffReason)
  • BatteryMonitor, SmartBatteryProtect, DcEnergyMeter (AlarmReason)

Testing

All existing tests pass. The change is backward-compatible—known enum values behave identically, only unknown values now return UNKNOWN instead of raising an exception.

Add parse_enum helper function and UNKNOWN members to OffReason and
AlarmReason enums. These were changed from Flag to Enum in v0.9.3,
which means unknown values now raise ValueError instead of being
representable as flag combinations.

Changes:
- Added parse_enum(enum_class, value) helper in base.py
- Added UNKNOWN member to OffReason and AlarmReason
- Updated parsing to use parse_enum for these enums

Affected devices:
- DcDcConverter, SmartBatteryProtect, OrionXS (OffReason)
- BatteryMonitor, SmartBatteryProtect, DcEnergyMeter (AlarmReason)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant