Some new HomeKit climate devices, like XiaoMi Air Conditioning Controller P3 are heater-cooler devices rather than
thermostat devices. This commit adds support for the heater-cooler class via homekit_controller.
* Include the context_entity_id in the logbook api
context_entity_id is the first entity seen during
a time period that includes the context
* update test
* more of them
* include friendly name
* pylint wants a ternary
* Refactor
* performance
* fix homekit context
* Fix self describing events
* Fix external_events
* Add ZwaveStringSensor to OZW integration
* Remove unnecessary new line
* Set enabled default to false for ZwaveStringSensor
* Add missing decorator for property
* Add a test for ZwaveStringSensor
* Also test state of ZWaveStringSensor
* Remove entity type check
* Add binary sensors to Risco integration
* Minor cleanups
* RiscoEntity base class
* Platinum score
* Remove alarm parameter in _setup_risco
* Avoid zones and partitions sharing unique ids
* Wait for broker to ACK MQTT operations
* Deduplicate new code
* Fix tests
* Improve test
* Don't hold PAHO lock when waiting for ACK
* Fix tests
* Add constant for ACK timeout
Now that python 3.7 is the minimum supported version, we can
use the more efficient SimpleQueue in the recorder as it does
not have to use threading.Lock
* Implement config flow in the Broadlink integration
* General improvements to the Broadlink config flow
* Remove unnecessary else after return
* Fix translations
* Rename device to device_entry
* Add tests for the config flow
* Improve docstrings
* Test we do not accept more than one config entry per device
* Improve helpers
* Allow empty packets
* Allow multiple config files for switches related to the same device
* Rename mock_device to mock_api
* General improvements
* Make new attempts before marking the device as unavailable
* Let the name be the template for the entity_id
* Handle OSError
* Test network unavailable in the configuration flow
* Rename lock attribute
* Update manifest.json
* Import devices from platforms
* Test import flow
* Add deprecation warnings
* General improvements
* Rename deprecate to discontinue
* Test device setup
* Add type attribute to mock api
* Test we handle an update failure at startup
* Remove BroadlinkDevice from tests
* Remove device.py from .coveragerc
* Add tests for the config flow
* Add tests for the device
* Test device registry and update listener
* Test MAC address validation
* Add tests for the device
* Extract domains and types to a helper function
* Do not patch integration details
* Add tests for the device
* Set device classes where appropriate
* Set an appropriate connection class
* Do not set device class for custom switches
* Fix tests and improve code readability
* Use RM4 to test authentication errors
* Handle BroadlinkException in the authentication
* Convert template lock to use async_track_template_result
* Convert template switch to use async_track_template_result
* Convert template fan to use async_track_template_result
* Convert template binary_sensor to use async_track_template_result
Co-Authored-By: Penny Wood <Swamp-Ig@users.noreply.github.com>
* Convert template cover to use async_track_template_result
* Convert template light to use async_track_template_result
* Convert template vacuum to use async_track_template_result
Co-authored-by: Penny Wood <Swamp-Ig@users.noreply.github.com>
* Convert template lock to use async_track_template_result
* Convert template switch to use async_track_template_result
* Convert template fan to use async_track_template_result
* Convert template alarm_control_panel to use async_track_template_result
* Convert template lock to use async_track_template_result
* Convert template switch to use async_track_template_result
* Convert template fan to use async_track_template_result
* Add audio to stream component
* Use container options to do most fmp4 formatting
* Add test for treatment of different audio inputs
* Add test for treatment of different audio inputs
* pcm_mulaw frames should be s16
* Use seek to get BytesIO length
* Remove unused utcnow
* Remove peek_next_audio_pts
* only demux audio and video packets - ignoring data and subtitle streams
Co-authored-by: Jason Hunter <hunterjm@gmail.com>
* Run scaffold script
* Update version
* Bump version
* Initial commit
* Move meter and ESIID to device attributes
* Update internal to hourly due to api limit
* Format with Black
* Fix typo
* Update tests
* Update description
* Disable Pylint error
* Don't commit translations
* Remove meter number from sensor name
* Allow multiple meters per account
* Move data updates to a DataUpdateCoordinator
* Use setdefault to setup the component
* Move strings to const.py
* Fix tests
* Remove meter last updated attribute
* Bump smart-meter-texas version
* Fix logger call
Co-authored-by: J. Nick Koston <nick@koston.org>
* Remove unneeded manifest keys
Co-authored-by: J. Nick Koston <nick@koston.org>
* Remove icon property
Co-authored-by: J. Nick Koston <nick@koston.org>
* Handle instance where user already setup an account
Co-authored-by: J. Nick Koston <nick@koston.org>
* Remove icon constant
* Fix indentation
* Handle config flow errors better
* Use ESIID + meter number as unique ID for sensor
* Update config flow tests to reach 100% coverage
* Avoid reading meters on startup
Cherrypick @bdraco's suggestion
* Run scaffold script
* Update version
* Bump version
* Initial commit
* Move meter and ESIID to device attributes
* Update internal to hourly due to api limit
* Format with Black
* Fix typo
* Update tests
* Update description
* Disable Pylint error
* Don't commit translations
* Remove meter number from sensor name
* Allow multiple meters per account
* Move data updates to a DataUpdateCoordinator
* Use setdefault to setup the component
* Move strings to const.py
* Fix tests
* Remove meter last updated attribute
* Bump smart-meter-texas version
* Fix logger call
Co-authored-by: J. Nick Koston <nick@koston.org>
* Remove unneeded manifest keys
Co-authored-by: J. Nick Koston <nick@koston.org>
* Remove icon property
Co-authored-by: J. Nick Koston <nick@koston.org>
* Handle instance where user already setup an account
Co-authored-by: J. Nick Koston <nick@koston.org>
* Remove icon constant
* Fix indentation
* Handle config flow errors better
* Use ESIID + meter number as unique ID for sensor
* Update config flow tests to reach 100% coverage
* Remove unnecessary try/except block
This checks for the same exception just prior in execution on L51.
* Remove unused return values
* Add tests
* Improve tests and coverage
* Use more pythonic control flow
* Remove all uses of hass.data
Co-authored-by: J. Nick Koston <nick@koston.org>
* Verify and case
* Review comments
* Update homeassistant/helpers/event.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/helpers/event.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Merge original changes from #23590
* guard
* adjust
* adjust
* adjust
* Update async_render_to_info for recent codebase changes
* no more protected access
* do not fire right away per review comments
* update test to not fire right away
* closer
* rework tests for non firing first
* augment coverage
* remove cruft
* test for complex listen add/remove
* update docs to match review feedback to not fire right away
* preserve existing behavior
* fix test
* Ensure listeners are cleaned up
* de-dupe and comment
* de-dupe and comment
* coverage
* test to login again if we go from exception to ok to exception
* Update homeassistant/core.py
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Update homeassistant/helpers/event.py
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* rename _boolean_coerce to result_as_boolean and move it out of event
* additional coverage
* Add more tests (may still be able to trim this down)
Co-authored-by: Swamp-Ig <github@ninjateaparty.com>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Adjust homekit controller pairing errors back to a single step
* adjust test
* Revert "Adjust homekit controller pairing errors back to a single step"
This reverts commit e5ed89bbbb.
* Revert "adjust test"
This reverts commit c2e9f21a8401c144315260f6fdf71ea8060f8ca3.
* adjust
* prune
* prune
* merge
* Update tests
* remove debug
* adjust
* Multiple steps
* adjust the test
If a device on the network presented a bad name, zeroconf
would throw zeroconf.BadTypeInNameException and the service
browser would die off. We now trap the exception and continue.
* Bump pysyncthru version to 0.7.0
This change includes a heavier refactoring, using a more reliable source for the device status and parsing display strings only for additional details
* Fix test flow to ensure a status is set
* Don't allow duplicate nightscout configs
* Fix nightscout translations
* Remove unnecessary should_poll method
* Remove SVG attribute, as it was duplicating the state
* Use aiohttp client session from HA
* Move validate_input outside the config class
* Use the entry unique_id on the sensor
* Move create entity logic
* Handle unexpected exception on Nightscout config
* update device
* add binary sensor
* updates post rebase
* fix entity type post rebase
* fix post rebase
* fix add entities
* fix name
* review comments
* Add ozw refresh_node_info websocket api
* Remove extra unsubs definition
* Remove unused bits from refresh_node_info websocket
* Add tests
* Add unsubscribe test
* Wait for response in unsubscribe test
* Squashed
* Fix requirements_all
* Update homeassistant/components/insteon/__init__.py
Only update options if the result is to create the entry.
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/insteon/__init__.py
No return value needed.
Co-authored-by: J. Nick Koston <nick@koston.org>
* Ref RESULT_TYPE_CREATE_ENTRY correctly
* Return result back to import config process
* Make DOMAIN ref more clear
Co-authored-by: J. Nick Koston <nick@koston.org>
* Add hourly forecast
* fix tests to assert for 2 entities created
* fix test to assert for 4 calls
* correct test tracking home number of calls
* fox tests
* fix test
* Apply suggestions from code review
* black
Co-authored-by: Chris Talkington <chris@talkingtontech.com>
* Fix homekit_controller pairing retry
If the device was busy on the first pairing attempt, it
was not possible to retry.
* always restart pairing on recoverable execptions
* move code
* malformed pin is safe to restart
* make busy_error an abort
* switch max retries, simplify tests
* try pairing later
* try pairing later
* merge
* s/tlv_error/protocol_error/g
* Adjust wording
* Add missing Short type to set_config_param
* Forgot to fix the for loop
* Remove leftover return
* Guard the for loop
* Changed from if to else
* Fixed list iteration for validating input
* Adjusted per linter
* Add more tests
* Add tests for sensor platform
* Add more tests
* More tests
* Simplify parsing of attributes
* Change Quality scale to platinum
* Patch the library in the manual update entity test
* Add unsupported condition icon test
* Do not patch _async_get_data
* Apply suggestions from code review
* Update config_flow.py
* Apply suggestions from code review
* Apply suggestions from code review
* Apply suggestions from code review
* Update tests/components/accuweather/test_weather.py
* Apply suggestions from code review
* Add return_value
Co-authored-by: Chris Talkington <chris@talkingtontech.com>
Support the action.devices.commands.mute intent to mute and unmute
media_players that declare support for mute/unmute.
For media players with support for volume up/down, but no support for
setting the volume to a specific number, allow use of the
action.devices.commands.relativeMute intent to control volume up/down.
This will improve support for IR blasters and other open-loop
media_player integrations.
* Make sure groups are initialized before template sensors
This way users may use the `expand` function in templates to expand
groups and have HA listen for changes to group members.
Fixes#35872
* Patch async_setup_platform instead of async_setup
* Cleanup
* Use an event to avoid sleep
* Update tests/components/template/test_sensor.py
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: J. Nick Koston <nick@koston.org>
* Don't set SUPPORT_EFFECT on DemoLight if there are no effects
This requires an update to the group test - previously the other lights
instantiated by the DemoLight component had nothing in ATTR_EFFECT_LIST, but
still had SUPPORT_EFFECT set. This appears to have resulted in the light
group test code setting an effect on the group and expecting it to apply to
all lights, but given that two of the bulbs didn't actually support any
effects (due to the empty ATTR_EFFECT_LIST) this seems like a broken
assumption and updating the test to verify only the bulb that supports
effects has had one applied seems reasonable.
* Add support for exposing light effects via Google Assistant
The LightEffects trait only supports a fixed (and small) list of lighting
effects, but we can expose them via the Modes trait - this requires saying
"Set (foo) effect to (bar)" which is a little clumsy, but at least makes it
possible.
* added device classes for electrical measurement
(cherry picked from commit 2409fe19ed43bef568a0cca826652867d3a2d71a)
* upadte power factor unit (%)
* update power factor unit (%)
* Add support for reload_on_update to _abort_if_unique_id_configured
async_update_entry now avoids firing update listeners and writing
the storage if there are no actual changes.
* Actually add the tests
* collapse branch
* Update homeassistant/config_entries.py
Co-authored-by: Franck Nijhof <git@frenck.dev>
* handle entries that lack the ability to reload
* reduce
* adjust konnected tests
* update axis tests
* fix blocking
* more mocking
* config flow tests outside of test_config_flow
* reduce
* volumio
* Update homeassistant/config_entries.py
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* set reload_on_update=False for integrations that implement self._abort_if_unique_id_configured(updates= and a reload listen
* get rid of copy
* revert test change
Co-authored-by: Franck Nijhof <git@frenck.dev>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
* track all settings and add service to update a setting
* sort setting types
* reduce frequency of updates due to the increase in API calls per update
* change dict call to a get in case audio settings aren't available
unlikely to occur but less error prone
* Update if statement to be more consistent
* revert changes to track all settings and store in state machine
* revert one more change
* force setting_type and setting_name to lowercase to make it easier to understand how to make service call
* make service calls even simpler by attempting to transform certain parameters as much as possible
* Support Next/Previous for InputSelector
* Update homeassistant/components/google_assistant/trait.py
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Adjust to match new version of _next_selected
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Fix webhook registration
* Only load camera platform with valid scope
* Add initial data handler and netatmo base class
* Update camera to use data handler
* Update init
* Parallelize API calls
* Remove cruft
* Minor tweaks
* Refactor data handler
* Update climate to use data handler
* Fix pylint error
* Fix climate update not getting fresh data
* Update climate data
* update to pyatmo 4.0.0
* Refactor for pyatmo 4.0.0
* Exclude from coverage until tests are written
* Fix typo
* Reduce parallel calls
* Add heating request attr
* Async get_entities
* Undo parallel updates
* Fix camera issue
* Introduce individual scan interval per device class
* Some cleanup
* Add basic webhook support for climate to improve responsiveness
* Replace ClimateDevice by ClimateEntity
* Add support for turning camera on/off
* Update camera state upon webhook events
* Guard data class registration with lock
* Capture errors
* Add light platform
* Add dis-/connect handling
* Fix set schedule service
* Remove extra calls
* Add service to set person(s) home/away
* Add service descriptions
* Improve service descriptions
* Use LightEntity instead of Light
* Add guard if no data is retrieved
* Make services entity based
* Only raise platform not ready if there is a NOC
* Register webhook even during runtime
* Fix turning off event
* Fix linter error
* Fix linter error
* Exclude light platform from coverage
* Change log level
* Refactor public weather sensor to use data handler
* Prevent too short coordinates
* Ignore modules without _id
* Code cleanup
* Fix test
* Exit early if no home data is retrieved
* Prevent discovery if already active
* Add services to (un-)register webhook
* Fix tests
* Not actually a coroutine
* Move methods to base class
* Address pylint comment
* Address pylint complaints
* Address comments
* Address more comments
* Add docstring
* Use single instance allowed
* Extract method
* Remove cruft
* Write state directly
* Fix test
* Add file to coverage
* Move nested function
* Move nested function
* Update docstring
* Clean up code
* Fix webhook bug
* Clean up listeners
* Use deque
* Clean up prints
* Update homeassistant/components/netatmo/sensor.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/sensor.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/sensor.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/sensor.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/sensor.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/sensor.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/camera.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/camera.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/camera.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/camera.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/camera.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/netatmo/camera.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Rename data_class variable
* Break when match
* Extract method
* Extract methods
* Rename variable
* Improve comment
* Some refinements
* Extra
* Extract method
* Simplify code
* Improve reability
* Code simplification
* Simplify code
* Simplify code
* Code cleanup
* Fix import
* Clean up
* Clean up magic strings
* Replace data_class_name with CAMERA_DATA_CLASS_NAME
* Replace data_class_name with CAMERA_DATA_CLASS_NAME
* Replace data_class_name with HOMEDATA_DATA_CLASS_NAME
* Replace data_class_name in public weather sensor
* Clean up
* Remove deprecated config options
* Schedule immediate update on camera reconnect
* Use UUID to clearly identify public weather areas
* Use subscription mode
* Move clean up of temporary data classes
* Delay data class removal
* Fix linter complaints
* Adjust test
* Only setup lights if webhook are registered
* Prevent crash with old config entries
* Don't cache home ids
* Remove stale code
* Fix coordinates if entered mixed up by the user
* Move nested function
* Add test case for swapped coordinates
* Only wait for discovery entries
* Only use what I need
* Bring stuff closer to where it's used
* Auto clean up setup data classes
* Code cleanup
* Remove unneccessary lock
* Update homeassistant/components/netatmo/sensor.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update tests/components/netatmo/test_config_flow.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Clean up dead code
* Fix formating
* Extend coverage
* Extend coverage
Co-authored-by: J. Nick Koston <nick@koston.org>
* Wait for the state of the entity to actually change before resolving PUT request
Additionally, we cache the entity's properties for up to two seconds for the successive GET state request
When Alexa issues a command to a Hue hub; it immediately queries the hub for the entity's state to confirm if the command was successful.
It expects the state to be effective immediately after the PUT request has been completed.
There may be a delay for the new state to actually be active, this is particularly obvious when using group lights.
This leads Alexa to report that the light had an error.
So we wait for the state of the entity to actually change before responding to the PUT request.
Due to rounding issue when converting the HA range (0..255) to Hue range (1..254) we now cache the state sets by Alexa and return those cached values for up to two seconds so that Alexa gets the same value as it originally set.
Fixes#38446
* Add new tests verifying emulated_hue behaviour.
* Increase code test coverage.
The remaining uncovered lines can't be tested as they mostly check that the hass framework or the http server properly work.
This commit doesn't attempt to fix exposed issues as it would be out of scope ; it merely create the tests to exercise the whole code.
* Update homeassistant/components/emulated_hue/hue_api.py
* Add test for state change wait timeout
* Preserve the cache long enough for groups to change
* Update tests/components/emulated_hue/test_hue_api.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Reduce time to reload yaml and check configuration
We spend a significant amount of time compiling templates
that we have already compiled.
Use an LRU cache to avoid re-compiling templates that
we frequently use.
* pylint
* switch to WeakValueDictionary
* preen
* Add config flow to HLK-SW16
* Use entry_id for unique_id
* Add options update capability
* Refactor entry_id under domain
* Remove name from config
* Set options
* Remove options flow
* remove unneccesary else block from validate_input and move domain cleanup to async_unload_entry
* Add tests and config import
* Add back config schema
* Remove config import
* Refactor unload
* Add back config import
* Update coveragerc
* Don't mock validate_input
* Test duplicate configs
* Add import test
* Use patch for timeout test
* Use mock for testing timeout
* Use MockSW16Client for tests
* Check mock_calls count
* Remove unused NameExists exception
* Remove title from strings.json
* Mock setup for import test
* Set PARALLEL_UPDATES for switch
* Move hass.data.setdefault(DOMAIN, {}) to async_setup_entry