Is your feature request related to a problem? Please describe.
OpenDisplay now has firmware and Python client support for partial image updates, but the Home Assistant integration does not yet expose or persist the state needed to use it.
This is related to #20. That issue introduces desired/current image state for queued rendering and sleeping devices. The same old/new image state is also needed for partial updates, because the client must know what image is currently believed to be on the display and must track the display etag used by the partial-update protocol.
Without this, every drawcustom call has to behave like a full upload, even when only a small part of the screen changed.
Describe the solution you'd like
Add integration support for opt-in partial updates when calling drawcustom.
The integration should persist enough per-device state to allow partial updates when possible:
When a caller requests mode=partial, the integration should attempt a partial upload if state, etag, device support, and image compatibility allow it. If partial upload is not possible, the integration should transparently perform a full upload instead and refresh the stored current image/etag state.
Important API behavior:
mode=partial should mean "try partial when possible", not "partial is guaranteed".
- A
mode=partial request may still result in mode=full if this is the first upload, the etag is stale/missing, the device rejects the partial, the panel does not support partial updates, or the stored image state is unavailable.
- If the caller does not explicitly request
mode=partial, the integration must not perform a partial update.
- This lets callers deliberately schedule full refreshes on their own cadence, which is important for e-paper quality and ghosting management.
Describe alternatives you've considered
Callers could manage their own previous image and etag state outside Home Assistant, but that duplicates state that the integration already needs for #20 and makes sleeping-device behavior harder to coordinate.
Additional context
Protocol/client work:
The primary use case is fast updates when only a small part of the displayed image changes.
Is your feature request related to a problem? Please describe.
OpenDisplay now has firmware and Python client support for partial image updates, but the Home Assistant integration does not yet expose or persist the state needed to use it.
This is related to #20. That issue introduces desired/current image state for queued rendering and sleeping devices. The same old/new image state is also needed for partial updates, because the client must know what image is currently believed to be on the display and must track the display etag used by the partial-update protocol.
Without this, every
drawcustomcall has to behave like a full upload, even when only a small part of the screen changed.Describe the solution you'd like
Add integration support for opt-in partial updates when calling
drawcustom.The integration should persist enough per-device state to allow partial updates when possible:
When a caller requests
mode=partial, the integration should attempt a partial upload if state, etag, device support, and image compatibility allow it. If partial upload is not possible, the integration should transparently perform a full upload instead and refresh the stored current image/etag state.Important API behavior:
mode=partialshould mean "try partial when possible", not "partial is guaranteed".mode=partialrequest may still result inmode=fullif this is the first upload, the etag is stale/missing, the device rejects the partial, the panel does not support partial updates, or the stored image state is unavailable.mode=partial, the integration must not perform a partial update.Describe alternatives you've considered
Callers could manage their own previous image and etag state outside Home Assistant, but that duplicates state that the integration already needs for #20 and makes sleeping-device behavior harder to coordinate.
Additional context
Protocol/client work:
The primary use case is fast updates when only a small part of the displayed image changes.