What's Changed
> [!WARNING]
> Please check out the Breaking Changes below if you use the Python API.
Tuner
* Support setting tuner frequency directly ff2161d1b7e6c76151d25ff16ca350ce7d4b58b8 252bcef2630956ba931be5f8bfda382412842490
* Fix frequency stepping when setting directly not supported 252bcef2630956ba931be5f8bfda382412842490 bbe1f669f5abc0cc26ce0011e3f9d86a2951827e bbe1f669f5abc0cc26ce0011e3f9d86a2951827e bbe1f669f5abc0cc26ce0011e3f9d86a2951827e 252bcef2630956ba931be5f8bfda382412842490
* Query and update tuner frequency before updating preset 55ae49d09cc536bd6d7f4a9543a0a276d100ef75 273b9d9ed7d268ecc6b17704d341e9c59ed3a574 9277b9773a4f96a26d99be44ec35283db36debe2 252bcef2630956ba931be5f8bfda382412842490 a3699eee9c497c886de8a5d287ee8342a70d0df8
* Invalidate cached preset when frequency changes dcf5a15b9206a25d70128888ff0382becefc01e3 49913149ea8fdb1443c31f884f882f263d9e4644
* Check band argument in `select_tuner_band` 0f75e4b7a00b9869005040ce6757b682bfe4db63
* Add `tuner_previous_preset` and `tuner_next_preset` commands 8455983caf24c2d2e8393836963b9d7e26b40164
* Add `select_tuner_band`, `tuner_next_preset` and `tuner_previous_preset` methods 4359b7ccc6a50564cea52b051a78fb9525bdf960 bd05c51844eec8670de1fcaeef85c7630d5cf1e2
Status polling
* Defer initial update if AVR Zone 1 is off on startup 4409e9a5e72c3e4f11d9c17bee7a0590cfcb2119 4ad2caa81cf76f5e0f348f60afd32dec0a008d1f 4409e9a5e72c3e4f11d9c17bee7a0590cfcb2119 12593eca7dec6f5ad8d85f9f1776d1c15634ef70 88a9050d249a617563657916ad53c3374254ae96
* Optimise queries on update 3d1baa2ee0a6786f357441dcc6d3b80c0fe74dc5 565e5c5b4ff82da43d66af1920db37d25501c08e b6b1c310fcd6e4c5333b66589f9f04fdc3cc248b 4409e9a5e72c3e4f11d9c17bee7a0590cfcb2119
* Fix query commands supporting multiple zones not being executed on zone 1 34329d38089b1428d78d640ac45900babf739b46
* Trigger update of `Zones.ALL` on power and input source changes 0c24787c4b3f0cd142248300ac6e5a4cb04cb5af
* Refactor command queue processing and introduce local commands fa1a6b9f3a863734a1a2b768956eb253d3a88ea4 273b9d9ed7d268ecc6b17704d341e9c59ed3a574 2fd6698bb4759e3173d95271475a068a13236168 32470bd2078e7811d7215336c87667d5aeeb7133 32470bd2078e7811d7215336c87667d5aeeb7133 12593eca7dec6f5ad8d85f9f1776d1c15634ef70 b852624cee81f439389bc16e24f9850bfaf32ca7
* Don't skip update if updates are locked 156c4b730bfd0325360749af4badc32b20d3b4fe
* Expose `command_queue_schedule` method 85eb6c5d92d4e842b638b30106219ca48bc31df9
Response parsing
* Restructured parsers functions and classes 8c657cdd9bb888fec7c5e6fa2b75bb568a1ac9f4 8c657cdd9bb888fec7c5e6fa2b75bb568a1ac9f4 32470bd2078e7811d7215336c87667d5aeeb7133
* Changed tuner response parser default zone to match commands dcf5a15b9206a25d70128888ff0382becefc01e3
* Remove tabs and newlines from display 0f74481b3dcd14d369aae7bc06fd81905dd3e830
* Include last character of display information 92ec86023f3db14ebf35f93389b19267383463b8
* Decode correct bytes for signal_input_resolution 92ec86023f3db14ebf35f93389b19267383463b8
* Fix video signal_input_resolution property parsing 575ad906ef06f15e7821d54b59289c7e58d1de3d
Miscellaneous
* Update Main Zone terminology to Zone 1 368b7d628517a3957a0d4c77071d709346073b66
* Return command response for `turn_on`, `turn_off` and `set_source_name` methods
dd31842b61ba98cdf450a2d4bfc41094bdf253db
* Abort on any command failure for `set_*_settings` dd31842b61ba98cdf450a2d4bfc41094bdf253db
* Reorder task cancellation on disconnect to avoid stale tasks af75081656ebbf10d31fab6b884dca53b12abfce
* Refactor `set_tone_settings` method 5edfb6b7d7a4a639de396806121eb08dd7f3fd40
* Add `SOURCE_TUNER` constant for detecting tuner source 797a2bfecd91fa3179ff3f785d86826321dc0c0b
* Return immutable dict in get_source_dict b66c73270ae6279f052d1f239f860eacb71ed5a4
* Use `copy.deepcopy` to return dict copy instead of merge a6b17ee34903eafa90b973d7988bc73690e5f7bb
* Use `StrEnum` for enums 9a785fb477911adbb15392ec049eb47d9fdeddf1
* Update `test_api.py` for recent aiopioneer changes 6f77c26524fe20823bf646d3fceecbb825449f08
* Disable power on volume bounce and video queries for VSX-930 by default 80431d94a80ca7acd24ef2edac034c363599f364 85d0161edb24cef58aabc89490d2434b9506f498
* Simplify zone checking for `set_video_settings` and `set_dsp_settings` 80c73c705156a277ed7be7596baba7b9f8b7dd70
* Misc comment updates 80c73c705156a277ed7be7596baba7b9f8b7dd70
* Fix zone argument type for `_update_zone` and `set_volume_level` 0f75e4b7a00b9869005040ce6757b682bfe4db63
* Ensure `send_command` optional arguments not specified positionally 7f6444140697329cab7b8b2af71b61fff0dfa5ff
* Clarified method docstrings 7f6444140697329cab7b8b2af71b61fff0dfa5ff
* Add function prototype for __init__ and use `DEFAULT_TIMEOUT` and `DEFAULT_SCAN_INTERVAL` db32e5ef911fd2208ceaf79823699bbd47051123
* get_param returns None for non-existent parameters edfdbd9ec6d999c28f3ec6c570c83303fa4f9c1d
:warning: Breaking Changes
* Python requirement bumped to 3.11 for StrEnum d986f2f619bd9c4270d06b6711d83f3f96070e79
* `Zones` enum now used on all methods accepting zone arguments (except in params) f6131b406048fa4b04fbe70c0c21cbaa3780e9a3 dd31842b61ba98cdf450a2d4bfc41094bdf253db
* Zone argument removed from tuner methods as tuner is independent of zone dcf5a15b9206a25d70128888ff0382becefc01e3
* `TunerBand` enum now used to specify a tuner band dcf5a15b9206a25d70128888ff0382becefc01e3
* `update` now waits for the update to finish by default 156c4b730bfd0325360749af4badc32b20d3b4fe ddc39a9cd732e9b3177745f5f873407f299f2a64
* `set_tuner_preset` renamed to `select_tuner_preset` 012e5718537b835d88788bbc3fec427e9a7afd5f
* Response codes marked `---` now return None 81d5869ddc24657c186c378a25129a53d1894373
* Dimmer mode, tone mode and dB strings have been updated 5edfb6b7d7a4a639de396806121eb08dd7f3fd40 bdc590aab535b6a355b354210132b5125926317c
* Reordered `send_command` suffix argument 7f6444140697329cab7b8b2af71b61fff0dfa5ff
* Rename `get_zone_listening_modes` -> `get_listening_modes` 80c73c705156a277ed7be7596baba7b9f8b7dd70
* Remove zone from `tuner_*`, `get_listening_modes`, `set_panel_lock`, `set_remote_lock` and `set_dimmer` methods c45055b6c93dce12ee73bc910d5dd56b6ab39f32
* Rename `set_listening_mode` -> `select_listening_mode` 4c7626b86974b0f865feb47c1eea55fb03015ca6