Repository navigation
1.0.0
First release of the j5lien/enocean fork of
kipe/enocean, whose last release was 0.60.1.
Breaking changes
- Python 3.10 or later is required; Python 2 compatibility code is gone.
EEP.xmlis loaded with the standard library'sxml.etreeinstead of BeautifulSoup:EEP.soupis replaced by
EEP.xml_root, andEEP.telegramsholdsxml.etree.ElementTree.Elementobjects.- The
beautifulsoup4andenum-compatdependencies are dropped;pyserial>=3.5is the only dependency. RadioPacket.create()raisesValueErrorfor an unknown VLD profile (wasAttributeError).
Added
- EEP profiles: A5-04-02, A5-09-06, A5-09-07, A5-09-0C, A5-12-00, A5-13-01, D2-01-12, D2-14-30, D2-14-41,
F6-02-03, F6-02-04. TCPCommunicatoracceptscallbackandteach_in, likeSerialCommunicator.- Type annotations for the whole package (
py.typed); decoded fields are typed asFieldValue.
Fixed
- ESP3 parser: a corrupted header or a stray
0x55no longer makes the parser drop the valid packets that follow; it
now resynchronizes on the next sync byte after any CRC error. - Radio packets without optional data (allowed by ESP3, omitted by some gateways) no longer crash the parser.
- Packets too short for their type are returned unparsed instead of raising or being reported as CRC errors.
- Decoding a telegram shorter than its EEP profile no longer raises.
- UTE teach-in received before the base ID is known: the base ID is now requested and the teach-in answered, instead of
blocking the communicator thread, raisingTypeErrorand losing the packet. Communicator.base_idworks with a callback, and no longer reorders the receive queue while fetching the base ID.TCPCommunicatorcrashed on every client connection, and only parsed data once the client disconnected.communicators.utils.send_to_tcp_socketwas broken on Python 3.SerialCommunicatorlogs write errors before stopping.- EEP definitions: D2-01-12 enum values written in binary (default state, external button mode), out-of-range dim
timers and measurement delta ranges; missing telegram length on D2-14-30 and D2-14-41 (create()failed); an
attribute on A5-13-01 that only worked with a case-insensitive parser. SUPPORTED_PROFILES.mdlists every profile again.
Changed
- Loading
EEP.xmlis about 20× faster and packet creation/decoding about 5× faster. - Development: uv, pytest (with end-to-end communicator tests on a pseudo-terminal, property-based parser tests and
tests over every EEP profile), ruff, mypy, pre-commit hooks, GitHub Actions CI and Dependabot.