* Add password length restriction
* Bump reolink-aio to 0.12.3
* Add repair issue for too long password
* finish password too long repair issue
* add test
* Add remote_calendar with storage
* Use coordinator and remove storage
* cleanup
* cleanup
* remove init from config_flow
* add some tests
* some fixes
* test-before-setup
* fix error handling
* remove unneeded code
* fix updates
* load calendar in the event loop
* allow redirects
* test_update_failed
* tests
* address review
* use error from local_calendar
* adress more comments
* remove unique_id
* add unique entity_id
* add excemption
* abort_entries_match
* unique_id
* add ,
* cleanup
* deduplicate call
* don't raise for status end de-nest
* multiline
* test
* tests
* use raise_for_status again
* use respx
* just use config_entry argument that already is defined
* Also assert on the config entry result title and data
* improve config_flow
* update quality scale
* address review
---------
Co-authored-by: Allen Porter <allen@thebends.org>
* Aded Generate Content Service for OpenAI to match Google AI
* Fixed code for commit checks
* Addressed code review comments
* Address review comments
* Addressed @balloob review comments.
* Address futher review comments from @balloob
* Initial implementation of hardware update model
* Fixes
* WIP: change the `homeassistant_sky_connect` integration type
* More fixes
* WIP
* Display firmware info in the device page
* Make progress more responsive
* WIP: Yellow
* Abstract the bootloader reset type
* Clean up comments
* Make the Yellow integration non-hardware
* Use the correct radio device for Yellow
* Avoid hardcoding strings
* Use `FIRMWARE_VERSION` within config flows
* Fix up unit tests
* Revert integration type changes
* Rewrite hardware ownership context manager name, for clarity
* Move manifest parsing logic into a new package
Pass the correct type to the firmware API library
* Create and delete entities instead of mutating the entity description
* Move entity replacement into a `async_setup_entry` callback
* Change update entity category from "diagnostic" to "config"
* Have the client library handle firmware fetching
* Switch from dispatcher to `async_on_state_change`
* Remove unnecessary type annotation on base update entity
* Simplify state recomputation
* Remove device registry code, since the devices will not be visible
* Further simplify state computation
* Give the device-less update entity a more descriptive name
* Limit state changes to integer increments when sending firmware update progress
* Re-raise `HomeAssistantError` if there is a problem during flashing
* Remove unnecessary state write during entity creation
* Rename `_maybe_recompute_state` to `_update_attributes`
* Bump the flasher to 0.0.30
* Add some tests
* Ensure the update entity has a sensible name
* Initial ZBT-1 unit tests
* Replace `_update_config_entry_after_install` with a more explicit `_firmware_info_callback` override
* Write the firmware version to the config entry as well
* Test the hardware update platform independently
* Add unit tests to the Yellow and ZBT-1 integrations
* Load firmware info from the config entry when creating the update entity
* Test entity state restoration
* Test the reloading of integrations marked as "owning"
* Test installation failure cases
* Test firmware type change callback failure case
* Address review comments