* Refresh the august access token
when needed.
Currently august will stop working when the token
expires about every six month.
This resolves issue #23788
* Make refresh_access_token_if_needed private since we do not want additional callers
* Add init
* Suppress data get timeout exceptions for 30s after notify attempts
At least SMS send failures may put the API in a state where it times out
some (but not all) data get operations for some time, e.g. 25s.
Closes https://github.com/home-assistant/home-assistant/issues/30827
* Do not pile up duplicate data requests
Do not add another request for a piece of data for which a previous
request is still in progress. For example failing SMS sends are known to
stall some (but not all) requests for some time, and firing up more is
not going to help.
As polling for lock status is every 15 minutes,
we read lock and unlock events from the activity log.
An upstream update of py-august was needed to
expose the door open and close events.
Door open and close events are now seen within
a few seconds instead of delayed 15+ minutes.
* fix unique_id computation for switches
* update konnected component to use async, config entries, registries. Pro board support and tests
* clean up formatting comments from PR
* use standard interfaces in tests
* migrate config flow to use options
* address latest pr feedback
* format for import as part of config schema validation
* address pr feedback
* lint fix
* simplify check based on pr feedback
* clarify default schema validation
* fix other schema checks
* fix translations
Co-authored-by: Nate Clark <nate@nateclark.com>
* Significantly reduce the number of API calls that the august integration
makes.
The poll interval for the lock status API is now 15 minutes
instead of every 10 seconds because we can use the activity
API to see changes in lock state. The interval for the
activity API is 10 seconds which allows for the same
frequency of state monitoring without all the additional API calls.
With four locks, this change results in an ~80% reduction in the number
of API calls.
The result of the lock and unlock APIs now update the lock state instead
of waiting for the next poll. This change also has the added benefit of
making the UI appear far more responsive.
* Convert to using UTC times
* Added support of multiple Tado accounts
Changed geberation of sensor unique id (breaking change)
* Fixed lints
* Fixed error detecting opened window
* Changed gereration of unique id of climate
* Removed commented code and added comments
* Initial commit
* ran hassfest and gen_requirements_all scripts
* fixes per request from Paulus Schoutsen
* ran gen_requirements_all
* updated library version - removed some debug leftover
* get_requirements again...
* added documentation URL
* ran isort
* changed storage in hass.data[DOMAIN] to use entry_id instead of host
* adopted unit tests to latest fix
* Update const.py
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Add MELCloud integration
* Provides a climate and sensor platforms. Multiple platforms on one go
is not the best option, but it does not make sense to remove them and
commit them later either.
* Email and access token are stored to the ConfigEntry. The token can be
updated by adding the integration again with the same email address. The
config flow is aborted and the update is performed on the background.
* Run isort
* Fix pylint errors
* Run black
* Increase coverage
* Update pymelcloud dependency
* Add HVAC_MODE_OFF emulation
* Remove print
* Update pymelcloud to enable device type filtering
* Collapse except blocks and chain ClientNotReadys
* Add preliminary documentation URL
* Use list comp for creating model info
Filters out empty model names form units.
* f-string galore
Dropped 'HVAC' from AtaDevice name template.
* Delegate fan mode mapping to pymelcloud
* Fix type annotation
* Access AtaDevice through self._device
* Prefer list comprehension
* Update pymelcloud to leverage device type grouping
The updated backend lib returns devices in a dict grouped by the device
type. The devices do not necessarily need to be in a single list and
this way isinstance is not required to extract devices by type.
* Remove DOMAIN presence check
This does not seem to make much sense after all.
* Fix async_setup_entry
Entry setup used half-baked naming from few experimentations back.
The naming conventiens were unified to match the platforms.
A redundant noneness check was also removed after evaluating the
possible return values from the backend lib.
* Simplify empty model name check
* Improve config validation
* Use config_validation strings.
* Add CONF_EMAIL to config schema. The value is not strictly required
when configuring through configuration.yaml, but having it there makes
things more consistent.
* Use dict[key] to access required properties.
* Add DOMAIN in config check back to async_setup. This is required if an
integration is configured throught config_flow.
* Remove unused manifest properties
* Remove redundant ClimateDevice property override
* Add __init__.py to coverage exclusion
* Use CONF_USERNAME instead of CONF_EMAIL
* Use asyncio.gather instead of asyncio.wait
* Misc fixes
* any -> Any
* Better names for dict iterations
* Proper dict access with mandatory/known keys
* Remove unused 'name' argument
* Remove unnecessary platform info from unique_ids
* Remove redundant methods from climate platform
* Remove redundant default value from dict get
* Update ConfigFlow sub-classing
* Define sensors in a dict instead of a list
* Use _abort_if_unique_id_configured to update token
* Fix them tests
* Remove current state guards
* Fix that gather call
* Implement sensor definitions without str manipulation
* Use relative intra-package imports
* Update homeassistant/components/melcloud/config_flow.py
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Fix ViCare water_heater set_temperature
This fixes a obvious but undiscovered bug in the water heater component:
Instead of the commanded value the prvious value was set on the API
* Bump PyVicare to 0.1.7
* add typing
* 100% battery_level is enough
* human-friendly datetime
* better enum usage
* add online and learning mode attrs
* use max two decimals in attrs
* use legacy style debug logging
* remove str usage of enums
* add feeder
* add feeder and adapt to new surepy version
* use ProductID instead of ThingID
* various changes and improvements
* add connectivity sensors for all devices & proper support for multiple hubs
* remove "side effects"/exception catching in attribs
* correct unique ids, reorder classes
* move Flap class from binary_sensor to sensor and add a sensore base class
* comments cleanup, minor typing and logging fixes
* remove commented code
* remove commented code
* add typing
* 100% battery_level is enough
* human-friendly datetime
* better enum usage
* add online and learning mode attrs
* use max two decimals in attrs
* use legacy style debug logging
* remove str usage of enums
* add feeder
* add feeder and adapt to new surepy version
* use ProductID instead of ThingID
* various changes and improvements
* add connectivity sensors for all devices & proper support for multiple hubs
* remove "side effects"/exception catching in attribs
* correct unique ids, reorder classes
* move Flap class from binary_sensor to sensor and add a sensore base class
* comments cleanup, minor typing and logging fixes
* remove commented code
* remove commented code
* fix spelling in comment to make the CI happy (seriously?!)
* fix manifest file
* fix requirements_all.txt file
* add missing docstrings
* fix available property
* remove typing from self
* remove commented code
* remove is_on property from sensor
* jump to new surepy version
* remove useles init methods
* added recorder vars db_max_retries and db_retry_wait
* fixed test_recorder_setup_failure
I failed because it was missing the two new variables. I simply added these with default values.
* fixed syntax error in test_recorder_setup_failure
* fixed formatting error in test_init_py for recorder component
* fixed typo in test case
* Updated the way the default keys for db_,max_wait and db_retry_wait is set
Implemented based on suggestions from @springstan
* Updated config_schema call to adhere to Black
* changed conf.get to conf[dict] for var retrieval
* removed 2 blank lines
* Add unique ID and device info data
* Don't get power info on switch models lacking it
* Move info fetching to update, update before adding
* Upgrade pyedimax to get device info
* Remove device info
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Only auth on enter_learning in response to errors.
* Remove extra newline.
* Add missing break on successful attempt.
* Avoid logging success message when auth is unsuccessful.