* Add Google Calendar create/delete support
Includes editing for recurring events
* Fix default calendar access role
* Formatting improvements
* Address other details that have changed due to local sync
* Update tests/components/google/test_calendar.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update tests/components/google/test_calendar.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update tests/components/google/test_calendar.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Increase test coverage
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add matter base (#79372)
Co-authored-by: Marcel van der Veldt <m.vanderveldt@outlook.com>
* Add matter server add-on flow (#82698)
* Add matter server add-on flow
* Fix stale error argument
* Clean docstrings
* Use localhost as default address
* Add matter websocket api foundation (#82848)
* Add matter config entry add-on management (#82865)
* Use matter refactored server/client library (#83003)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Bump python-matter-server to 1.0.6 (#83059)
* Extend matter websocket api (#82948)
* Extend matter websocket api
* Finish docstring
* Fix pin type
* Adjust api after new client
* Adjust api to frontend for now
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add TLD option support to google_translate
* Fix tests for added TLD option in google_translate
* Add Language to TLD mapping, Make tld configurable in google_translate
* Move const to dedicated file in google_translate
* Add translation_key attribute to entity state
* Update accuweather test
* Index entity translation keys by platform
* Store translation key in entity registry
If the keys changed for the yale locks, the locks would be
slow to setup. Because august had yalexs_ble as an
after dep, it would be waiting with the new keys but not
able to setup because it was waiting for the locks to setup
which would be trying over and over until they failed because
the key had changed out from under it.
This change moves some more code into the lib to avoid
the dep and allows both to startup at the same time so
the cloud service can feed the new keys in if needed without
waiting for the lock to fail to setup
changelog: https://github.com/bdraco/yalexs-ble/compare/v1.9.8...v1.10.0
* bump python-bsblan version to 0.5.8
* add static_state
this holds values that only needs retrieving once in a while
* update diagnostics json with the right info
* Upgrade pytest-aiohttp
* Make sure executors, tasks and timers are closed
Some test will trigger warnings on garbage collect, these warnings
spills over into next test.
Some test trigger tasks that raise errors on shutdown, these spill
over into next test.
This is to mimic older pytest-aiohttp and it's behaviour on test
cleanup.
Discussions on similar changes for pytest-aiohttp are here:
https://github.com/pytest-dev/pytest-asyncio/pull/309
* Replace loop with event_loop
* Make sure time is frozen for tests
* Make sure the ConditionType is not async
/home-assistant/homeassistant/helpers/template.py:2082: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited
def wrapper(*args, **kwargs):
Enable tracemalloc to get traceback where the object was allocated.
See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.
* Increase litejet press tests with a factor 10
The times are simulated anyway, and we can't stop the normal
event from occuring.
* Use async handlers for aiohttp
tests/components/motioneye/test_camera.py::test_get_still_image_from_camera
tests/components/motioneye/test_camera.py::test_get_still_image_from_camera
tests/components/motioneye/test_camera.py::test_get_stream_from_camera
tests/components/motioneye/test_camera.py::test_get_stream_from_camera
tests/components/motioneye/test_camera.py::test_camera_option_stream_url_template
tests/components/motioneye/test_camera.py::test_camera_option_stream_url_template
/Users/joakim/src/hass/home-assistant/venv/lib/python3.9/site-packages/aiohttp/web_urldispatcher.py:189: DeprecationWarning: Bare functions are deprecated, use async ones
warnings.warn(
* Switch to freezegun in modbus tests
The tests allowed clock to tick in between steps
* Make sure skybell object are fully mocked
Old tests would trigger attempts to post to could services:
```
DEBUG:aioskybell:HTTP post https://cloud.myskybell.com/api/v3/login/ Request with headers: {'content-type': 'application/json', 'accept': '*/*', 'x-skybell-app-id': 'd2b542c7-a7e4-4e1e-b77d-2b76911c7c46', 'x-skybell-client-id': '1f36a3c0-6dee-4997-a6db-4e1c67338e57'}
```
* Fix sorting that broke after rebase
* Validate common statistics db schema errors on start
* Fix test
* Add tests
* Adjust tests
* Disable statistics schema validation in tests
* Update after rebase
* Minimize wait time for interface discovery
* fix OptionsFlow when connection failed
there is no `self.hass.data["KNX"]` when we are in retry mode after failed integration setup
* review changes
* fix new tests
* Add support for Identify feature
* Add tests for button
* Use only identifiers for device_info
* Update homeassistant/components/homewizard/button.py
* always use instance variable for new entry data
- change `self._tunneling_config` to non-optional `self.new_entry_data`
- always use self.new_entry_data in `finish_flow()`
* support secure routing
* amend current tests
* use sync latency tolerance
* test secure routing config flow
* diagnostics redact backbone_key
* test xknx library setup
* check length of backbone_key
* better readable key validation
* Add helper to calculate statistic period start and end
* Don't parse values in resolve_period
* Add specific test for resolve_period
* Improve typing
* Move to recorder/util.py
* Extract period schema
* Announce a deprecated callback will stop working
* Use 2 months grace period
* Use 2 months grace period
* Use 2 months grace period
* Add deprecation comment to tests
* Allow configuring country and language in core config
* Add script for updating list of countries
* Use black for formatting
* Fix quoting
* Move country codes to a separate file
* Address review comments
* Add generated/countries.py
* Get default language from owner account
* Remove unused variable
* Add script to generate list of supported languages
* Add tests
* Fix stale docsring
* Use format_python_namespace
* Correct async_user_store
* Improve typing
* Fix with_store decorator
* Initialize language in core store migration
* Fix startup
* Tweak
* Apply suggestions from code review
Co-authored-by: Franck Nijhof <git@frenck.dev>
* Update storage.py
Co-authored-by: Franck Nijhof <git@frenck.dev>
* Fire events when long term statistics is updated
* Allow the new events to be subscribed to by anyone
* Address review comments
* Finish renaming events
* Finish renaming events
* Fix do_adhoc_statistics
* Adjust tests
* Adjust tests
* Add ReauthFlow
* Update homeassistant/components/whirlpool/config_flow.py
Darn it - thought I caught all of these.
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>
* Update homeassistant/components/whirlpool/config_flow.py
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>
* Update homeassistant/components/whirlpool/config_flow.py
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>
* Update homeassistant/components/whirlpool/config_flow.py
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>
* Update homeassistant/components/whirlpool/config_flow.py
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>
* Update homeassistant/components/whirlpool/config_flow.py
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>
* Add custom device_class for select entity
* Update tests
* Make the state PowerOff translatable
* Update strings.select.json file
* add select.en.json
Co-authored-by: J. Nick Koston <nick@koston.org>
* Withing trigger a call to coordinator after init
* Stop discovery task on STOP event
* Stop dsmr connection task on STOP
* Use autospec in modem_serial tests
close on AioSerial is non async, and should not be mocked as a coroutine
* Make sure responder is specced correctly
tests/components/emulated_hue/test_init.py::test_setup_works
/Users/joakim/src/hass/home-assistant/homeassistant/components/emulated_hue/__init__.py:119: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited
protocol.close()
* Don't assume Pymodbus is the only thing logging
* Use gather instead of wait
```
homeassistant/components/homeassistant/__init__.py:208: DeprecationWarning: The explicit passing of coroutine objects to asyncio.wait() is deprecated since Python 3.8, and scheduled for removal in Python 3.11.
```
* Increase wait time for automation tests
Assuming exit within 1 seconds is unreasonable on a potentially loaded
test machine.
* Avoid changing app state after startup
* Add control option for Energy Socket status LED
* Add tests for number
* Fix failing tests in switch
* Fix comments
* Adjust name
* Simplify device_info
* Add Mqtt WebSockets support
* Fix tests
* Add testing websockets options
* Add tests transport settings
* Do not use templates for ws_headers
* Use json helper - small corrections
Co-authored-by: Sebastian Lövdahl <slovdahl@hibox.fi>
Co-authored-by: Andre Richter <andre-richter@users.noreply.github.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Migrate ZHA when enabling multi-PAN support on HA Yellow
* Refactor BaseZhaFlow.async_step_maybe_confirm_ezsp_restore
* Change data passed to ZHA to initiate migration
* Catch errors during ZHA migration
* Fix ZhaMigrationHelper.async_prepare_yellow_migration return value
* Improve test coverage
* Improve test coverage
* Fix spelling
* Rename some none HA yellow specifics
* Rename again
* Increase number of migration retries + refactor
* Suppress OperationNotAllowed when reloading
* Adjust tests
* Prevent powerwall from switching addresses if its online
If the wifi interface was discovered we would switch the
ip address in the entry to the wifi ip even if it was
connected via ethernet
* cover
* more cover
* Switch entity
* adding missing function for tests
* Apply suggestions from code review
Co-authored-by: Sebastian Lövdahl <slovdahl@hibox.fi>
* Review
* fix
* Update homeassistant/components/vallox/switch.py
Co-authored-by: Andre Richter <andre-richter@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Adding a separate parameter for the expected state
Co-authored-by: Sebastian Lövdahl <slovdahl@hibox.fi>
Co-authored-by: Andre Richter <andre-richter@users.noreply.github.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Offload platform specific bluetooth code to bluetooth-adapters
* adjust
* fix some more patch targets
* more test fixes
* almost there
* may not be setup yet
* more fixes
* fixes
* fix test
* fix merge
* Use parameterized test for better code readability
* Use parameterized test for better code readability
* Update tests/components/fibaro/test_config_flow.py
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
* Addition of battery level sensor. Correction of pylint errors
* Review improvement for typing
* Review improvement for typing
* Correction following review
* Use HERE API v8
Signed-off-by: Kevin Stillhammer <kevin.stillhammer@gmail.com>
* Add migration
Signed-off-by: Kevin Stillhammer <kevin.stillhammer@gmail.com>
* Catch correct voluptuous error
Signed-off-by: Kevin Stillhammer <kevin.stillhammer@gmail.com>
* Use list comprehension for transit values
* Add migration alternative
Signed-off-by: Kevin Stillhammer <kevin.stillhammer@gmail.com>
* Add Picnic services for searching products and adding products to the cart
* Improve the Picnic services implementation and add unit tests
* Fix pre-commit check issues
* Fix comments and example product name
* Remove search service, update add_product service schema
* Fix pylint suggestion
* Add more tests and removed unused code
* Remove code needed for the removed service, clean tests from obvious comments and add type hints
* Remove unused import
* Remove unnecessary comments and simplify getting the config entry id
Co-authored-by: Allen Porter <allen.porter@gmail.com>
* Don't use hass.data in tests, make device id mandatory for service
* Rewrite all service tests so using lru.cache is not needed
* Add test for uncovered line in _product_search()
* Require a config entry id as service parameter instead of device id
* Use explicit check in get_api_client() and raise HomeAssistantError
* Fix HomeAssistantError import, fix services tests
* Change HomeAssistantError to ValueError when config entry is not found
Co-authored-by: Allen Porter <allen.porter@gmail.com>
* Add option to include attachments from remote URL to Discord notifications
* Use aiohttp instead of requests for Discord Notify URL retrieval
* Refactor discord notifications code
* Remove unecessary images check in discord notifier
* Implemented RestoreEntity
Merged commit conflict
* removed accidental change
* Update homeassistant/components/dynalite/dynalitebase.py
Co-authored-by: Erik Montnemery <erik@montnemery.com>
* added tests for the state
* added tests for switch state
* moved to ATTR_x and STATE_x instead of strings
some fixes to test_cover
* moved blind to DEVICE_CLASS_BLIND
* used correct constant instead of deprecated
* Implemented RestoreEntity
* removed accidental change
* added tests for the state
* added tests for switch state
* moved to ATTR_x and STATE_x instead of strings
some fixes to test_cover
* fixed isort issue from merge
Co-authored-by: Erik Montnemery <erik@montnemery.com>
* Revert google calendar back to old API for free/busy readers
* Update homeassistant/components/google/calendar.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Bump gcal_sync to 4.0.1
This reverts test chagnes from PR #81562 that were actually incorrect given
the calendar "get" API returns less information that the "CalendarList" api.
* deconz: Use partition instead of split where possible
With a smattering of code deduplication
Split out of #81493
* Update homeassistant/components/deconz/util.py
Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>
Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>
* Initial support for modbus
* Complete test coverage of config flow
* Bump to 1.1.0 with corrected numbers
* Handle missing mapping for reset-alarm
* Fixup type checks after library bump
* Adjust coil number
* Move word_swap to nibegw
* Adjust to 1.1.2 with fixes
* Add series property
* Add S series models
* Correct test for invalid host
* Apply suggestions from code review
Co-authored-by: J. Nick Koston <nick@koston.org>
* Move some things into library
* Adjust strings somewhat
* Correct black
* Correct test after validation change
Co-authored-by: J. Nick Koston <nick@koston.org>
* Consolidate switch entities to one class
* Move turn on/off into UnifiSwitchEntity
* Add event subscription
Remove storing entity for everything but legacy poe switch
* Only one entity class
* Improve generics naming
* Rename loader to description
* Improve control_fn naming
* Move wrongfully placed method that should only react to dpi apps being emptied
* Improve different methods
* Minor renaming and sorting
* Mark callbacks properly
* Support case-insensitive matching
* Revert "Support case-insensitive matching"
This reverts commit 0fdb2aa6bc.
* Explicitly check the case of matcher fields in `async_is_plugged_in`
The CI sets the timezone to US/Pacific and the logbook
uses start_of_local_day when called without a time.
We now call the logbook api with a specific time to
avoid them being out of sync since the test would
fail at CET 8:55am on Mon Nov 7th 2022 (and probably
other dates)
* Added initial files for air-Q integration
* Allow FIXME comments in pylint (temporary)
Also reintroduce --ignore-missing-annotations=y
* Set up air-q entry to connect to aioairq's API (initial attempt)
Also add necessary constants
* Implement a class for sensors and its update logic
Very early stage, WIP
* Zeroconf and authentication are working
* Complete the bare-bone minimal working version
Specifically, make AirQSensor update its values.
* Handle invalid authentication gracefully
* Handle ClientConnectionError gracefully
* Add field hint for the login form
The key in the schema, which defines the form in
`ConfigFlow.async_show_form` is looked up in both `airq/strings/json`
and `airq/translations/en.json`. I am still not 100% sure how this
lookup is performed. WIP
* Minor cleanups
* Extend sensor list to all supported by SensorDeviceClass
Also manage warming up sensors
* aioairq is published to PyPI and mentioned in requirements
* Reordered constants and list content alphabetically
As required by style guides. Also turned SENSOR_TYPES to a list
* Updated file docstrings for a dev unfamiliar w/homeassistant like myself
* Adding a bit of logging for the integration setup process
* Expose scan interval & smoothing flag
Also streamline test_authentication in config_flow.
* Fix a type annotation mistake
* Use as many constants from homeassistant.const as possible
My only concern is using CONST_IP_ADDRESS = "ip_address" for smth which
stands for both IP address and mDNS...
* Temporarily rollback ConfigFlow.async_step_configure and use defaults
TODO: implement OptionFlowHandler instead
* Define custom Coordinator, w subset of airq config
The latter is then accessed from entity / sensor constructors to define
correct DeviceInfo
* Provide translations to de & fr + minor changes to en
* Provide translations to ru + a minor en changes
* Make translation a little more helpful and polite
* Fix devicename and entry title
* Remove stale commented out code
* Test config_flow
At this point two helper functions which interact with the external
library are not tested
* Clean up unrelated and meant as temporary changes
* Clean up unnecessary comments meant for internal use
* Move fetching config to a dedicated async coordinator method
As opposed to it being a potentially poorly justified step in
async_setup_entry
* Remove zeroconf support since it is not yet ready
* Remove translations other than en
* Remove unnecessary comments, manifest.json entries, and constants
* Improve exception handling
- `_LOGGER` uses `debug` and not `error` levels.
- Drop `ClientConnect` and catch `aiohttop.ClientConnectError` directly
- Drop `Exception` as it is not expected from `aioairq` (remove the
corresponding test too)
* Drop strings for obsolete errors and steps
Specifically, `unknown` error isn't caught any more. `configure` step
has also been removed.
* Refactor en.json to be consistent with strings.json
* Move target_route from a coordinator argument to a constant
At this point a user cannot configure the target_route route, thus it
does not make sense to expose it half-heartedly in
`AirQCoordinator.__init__`, since it cannot be accessed.
* Fix an async call in `AirQCoordinator.async_setup_entry`
* Refactor underlying aioairq API
- Use `homeassistant.helpers.aiohttp.async_get_clientsession` and pass a
single persistent session to `aioariq.AirQ.__init__`
- `aioairq.AirQ.fetch_device_info` now returns a `DeviceInfo` object heavily
inspired and almost compatible with `homeassistant.helpers.entity.DeviceInfo`.
Make heavier use of this object and define a single `DeviceInfo` in the
`AirQCoordinator` (instead of recreating the same object for each sensor
of the device in `sensor.AirQSensor`)
- Drop two helper functions in `config_flow.py` and operate on `aioariq.AirQ`
methods directly
* Fix the version of aioairq
* Add 15 more sensors + icons
* Remove cnt* & TypPS, change units of health & performance
* Add 12 more sensors
* Add a missing icon
* Gracefully handle device not being available on setup
If the device and the host are not on the same WiFi,
ServerTimeoutError is raised, which is caught by
ClientConnectionError.
If the device is powered off, ClientConnectionError is expected.
In both cases, ConfigEntryNotReady is raised, as prescribed by the docs.
Newer version of aioairq times-out far quicker than the default 5 mins.
* Rename two sensors
* Validate provided IP address / mDNS
aioairq now raises InvalidInput if provided IP / mDNS does not seem
valid. Handle this exception correctly
* Apply suggestions from code review
Clean up the comments and rename the logger
Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: Artem Draft <Drafteed@users.noreply.github.com>
* Only fetch device info during the first refresh
- Fetched info is stored in AirQCoordinator.device_info.
- In `AirQSensor.native_value` only multiply by the factor if
the sensor reading is not None
- Fix the tests for ConfigFlow for aioairq==0.2.3. Specifically
make the dummy data pass the new validation step upstream
+ add a test which fails it
* Drop custom device classes for now
* Apply suggestions from code review
Co-authored-by: Artem Draft <Drafteed@users.noreply.github.com>
* Only fetch device info during ConfigFlow.async_step_user
Store the result obtained by `airq.fetch_device_info` it in
`config_entry.data`. Pass the entire config entry to `AirQCoordinator`
and build the entire `homeassistant.helpers.entity.DeviceInfo` in the
`AirQCoordinator.__init__`. This makes
`AirQCoordinator._async_fetch_device_info` and overloaded
`AirQCoordinator._async_config_entry_first_refresh` obsolete.
Bump aioairq version.
Turn update_interval from `AirQCoordinator.__init__` argument into a
contestant.
* Custom entity description exposing a hook to modify sensor value
Use a `AirQEntityDescription` with a callable `value_fn` which allows to
change the sensor value retrieved from the device. Note that the
callable does not handle data retrieval itself (even from
`coordinator.data`). Instead it is purely a hook to transform obtained
value.
* Avoid duplicated use of unique_id
Device info is fetched during the `ConfigFlow.async_user_step`.
`unique_id` is taken from the device info and is **not** stored
in `config_entry.data`. Subsequently `config_entry.unique_id` is
used instead.
* Drop unnecessary try-except
Co-authored-by: Artem Draft <Drafteed@users.noreply.github.com>
* Clarify the use of value_transform_fn
* Refactor the use of lambdas in AirQEntityDescription
Now it is the job of the callable under `value` to get the sensor
reading from the coordinator's data. Factoring this functionality into a
callback decouples the key of the description from the key of dict,
returned by the API, so `AirQEntityDescription` no longer requires its key
to be set to smth clearly internal (e.g. `nh3_MR100`).
* Use a callback to update native_value
Since all `native_value`s are updated synchronously, it can as well be
done in a callback for better state consistency (right?)
* Revert the description keys to match data keys
Must match given the current way of identifying available sensors. On a
broader scale, they must match to be able to relate the descriptions to
sensors, unless a separate lookup table is maintained.
* Reduce number of loops when adding sensors
Filtering warming up sensors and non-sensor keys can be combined with
adding entities.
* Remove obsolete imports
* Update integrations.json
* Add integration_type
Integration supports multiple devices => hub
Co-authored-by: dl2080 <daniel.lehmann@runbox.com>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: Artem Draft <Drafteed@users.noreply.github.com>
Co-authored-by: Daniel Lehmann <43613560+dl2080@users.noreply.github.com>
Co-authored-by: Martin Selbmann <job@martin-selbmann.de>
* use DataUpdateCoordinator for glances
add tests to increase coverage
fix test_config_flow.py
fix codecov/patch
remove unused const, minor tweaks
remove invalid_auth test as it is not implemented
fix type hints
* change to async_forward_entry_setups
* Use Dataupdatecoordinator for glances
* minor fixex
* minor fixes
* minor fix
* remove support_versions const
* coe cleanup
* address comments
* fix sensor native_value
* Rename entry to entry_data in `get_api`
* Remove whitespace in sensor name