Releases: jrigling/python-jebao
Releases · jrigling/python-jebao
Release list
v0.1.7
Fixes on top of 0.1.6:
- protocol: fix
AttributeError: 'NoneType' object has no attribute 'readexactly'crash —_read_raw/_drain_garbage_bytesnow bind the StreamReader locally so a concurrentdisconnect()can't null it mid-read. - protocol: treat
ConnectionResetErrorlikeIncompleteReadErrorand downgrade the expected idle-disconnect log from ERROR to DEBUG (reconnect is still logged by the coordinator/retry layer). - discovery: recognize product key
04D30Q34(newer MDP-20000 hardware revision) as an MDP-20000 instead of warning "Unknown product key".
v0.1.6
Fix unsolicited type 0x00 message draining
The pump emits periodic type 0x00 status broadcasts. If one arrived in the 10ms drain window before a request, _drain_garbage_bytes consumed the 5-byte header + length bytes but left the trailing 129-byte padding frame in the socket buffer. The next _read_raw then saw padding bytes instead of a valid header, triggered byte-by-byte resync, and raced the pump's connection close — surfacing as IncompleteReadError on every poll.
Drain now reads the full frame (header + body + 129-byte padding for type 0x00) via readexactly.
v0.1.5 - Reconnect in retries
Release v0.1.5 - Add device identifiers to all log messages for multi-device support - Add automatic reconnection in retry logic for self-healing operations - Add request serialization to prevent concurrent operations - Fix connection handling with proper disconnect on errors - Fix protocol padding handling for type 0x00 messages Network efficiency: Auto-reconnect uses 29% less traffic than keepalive pings for typical Home Assistant polling intervals (30s). Log format now includes device identifier: [10.20.20.12] or [device_id]
v0.1.3 - Add request serialization to prevent concurrent operations
Release v0.1.3 - Add request serialization to prevent concurrent operations - Fix connection handling with proper disconnect on errors - Fix protocol padding handling for type 0x00 messages - Add automatic reconnection in coordinator - Improve retry behavior for transient failures
v0.1.2 - Improved status packet padding
Release v0.1.2 - Fix protocol padding handling - Properly read 129-byte padding for message type 0x00 - Eliminate resync loops and log spam - Validate padding integrity - Keep drain as fallback for edge cases Tested successfully with real hardware.
v0.1.1 - Improve retries
Add retry logic to update() and ensure_manual_mode() Fixed "Lost message synchronization" errors during device setup by adding automatic retry to critical methods that can hit the garbage byte issue: - device.update(): Now retries up to 3 times (was failing immediately) - mdp20000.ensure_manual_mode(): Now retries up to 3 times - Imported async_retry decorator in device.py This resolves setup failures when connecting to devices, making initial connection much more reliable. Version bumped to 0.1.1. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
v0.1.0 - Initial Release
Initial implementation for MDP-20000