Skip to content

Releases: jrigling/python-jebao

v0.1.7

Choose a tag to compare

@jrigling jrigling released this 20 Jul 05:59

Fixes on top of 0.1.6:

  • protocol: fix AttributeError: 'NoneType' object has no attribute 'readexactly' crash — _read_raw/_drain_garbage_bytes now bind the StreamReader locally so a concurrent disconnect() can't null it mid-read.
  • protocol: treat ConnectionResetError like IncompleteReadError and 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

Choose a tag to compare

@jrigling jrigling released this 30 May 01:01

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

Pre-release

Choose a tag to compare

@jrigling jrigling released this 05 Jan 08:11
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

Choose a tag to compare

@jrigling jrigling released this 05 Jan 07:30
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

Pre-release

Choose a tag to compare

@jrigling jrigling released this 05 Jan 06:57
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

Pre-release

Choose a tag to compare

@jrigling jrigling released this 05 Jan 06:25
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

Pre-release

Choose a tag to compare

@jrigling jrigling released this 05 Jan 05:15

Initial implementation for MDP-20000