* Initial commit after scaffold setup
* Add initial config flow
* Create initial entity
* Ready for testing
* Can browse, no result yet
* Further improvements. Browsing is working.
Now need to work on proper stream URL
* Two valid URLs. Do not play in HA
* First working version for music
* Add thumbnail
* Includes Artist->Album hierarchy
* Add sorting of artists, albums and tracks
* Remove code for video libraries
* Improved code styling
* Optimize configuration flow
* Fix unit tests for config flow
* Fix import order
* Conform to style requirements
* Use empty string as media type for non playables
* 100% code coverage config_flow
* Type async_get_media_source
* Final docsctring fix after rebase
* Add __init__ and media_source files to .coveragerc
* Fix testing issues after rebase
* Fix string format issues and relative const import
* Remove unused manifest entries
* Raise ConfigEntry exceptions, not log errors
* Upgrade dependency to avoid WARNING on startup
* Change to builtin tuple and list (deprecation)
* Log broad exceptions
* Add strict typing
* Further type fixes after rebase
* Retry when cannot connect, otherwise fail setup
* Remove unused CONFIG_SCHEMA
* Enable strict typing checks
* FlowResultDict -> FlowResult
* Code quality improvements
* Resolve mypy.ini merge conflict
* Use unique userid generated by Jellyfin
* Update homeassistant/components/jellyfin/config_flow.py
Remove connection class from config flow
Co-authored-by: Milan Meulemans <milan.meulemans@live.be>
* Minor changes for additional checks after rebase
* Remove title from string and translations
* Changes wrt review
* Fixes based on rebase and review suggestions
* Move client initialization to separate file
* Remove persistent_notification, add test const.py
Co-authored-by: Milan Meulemans <milan.meulemans@live.be>
* Switch to UpdateCoordinator for eight sleep
* use super call
* add self as codeowner
* Call API update method directly when creating coordinator
* Update homeassistant/components/eight_sleep/__init__.py
Co-authored-by: J. Nick Koston <nick@koston.org>
* Update homeassistant/components/eight_sleep/__init__.py
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: J. Nick Koston <nick@koston.org>
* Add config_flow to Environment Canada
* Add unique_id
* Remove erroneous directory.
* Tests working!!
* Add back setup.
* First cut of import.
* Temp
* Tweak names.
* Import config.yaml.
* Clean up imports.
* Import working! Some refactor to clean it up.
* Add import test.
* Small optimization.
* Fix comments from code review.
* Remove CONF_NAME and config_flow for it.
* Fixup strings to match new config_flow.
* Fixes for comments from last review.
* Update tests to match new import code.
* Clean up use of CONF_TITLE; fix lint error on push.
* Phew. More cleanup on import. Really streamlined now!
* Update tests.
* Fix lint error.
* Fix lint error, try 2.
* Revert unique_id to use location as part of ID.
* Fix code review comments.
* Fix review comments.
Co-authored-by: Milan Meulemans <milan.meulemans@live.be>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
* added keyboard event type to keyboard_remote
* fix emulated hold event
* Update homeassistant/components/keyboard_remote/__init__.py
Co-authored-by: Erik Montnemery <erik@montnemery.com>
* removed event value
* set key_hold to use string constant
* don't use dict.get() for keyboard event type
Co-authored-by: Erik Montnemery <erik@montnemery.com>
* Add Amber Electric integration
* Linting
* Fixing some type hinting
* Adding docstrings
* Removing files that shouldn't have been changed
* Splitting out test helpers
* Testing the price sensor
* Testing Controlled load and feed in channels
* Refactoring mocks
* switching state for native_value and unit_of_measurement for native_unit_of_measurement
* Fixing docstrings
* Fixing requiremennts_all.txt
* isort fixes
* Fixing pylint errors
* Omitting __init__.py from test coverage
* Add missing config_flow tests
* Adding more sensor tests
* Applying suggested changes to __init.py__
* Refactor coordinator to return the data object with all of the relevent data already setup
* Another coordinator refactor - Better use the dictionary for when we build the sensors
* Removing first function
* Refactoring sensor files to use entity descriptions, remove factory
* Rounding renewable percentage, return icons correctly
* Cleaning up translation strings
* Fixing relative path, removing TODO
* Coordintator tests now accept new (more accurate) fixtures
* Using a description placeholder
* Putting missing translations strings back in
* tighten up the no site error logic - self._site_id should never be None at the point of loading async_step_site
* Removing DEVICE_CLASS, replacing the units with AUD/kWh
* Settings _attr_unique_id
* Removing icon function (it's already the default)
* Apply suggestions from code review
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Adding strings.json
* Tighter wrapping for try/except
* Generating translations
* Removing update_method - not needed as it's being overriden
* Apply suggestions from code review
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Fixing tests
* Add missing description placeholder
* Fix warning
* changing name from update to update_data to match async_update_data
* renaming [async_]update_data => [async_]update_price_data to avoid confusion
* Creating too man renewable sensors
* Override update method
* Coordinator tests use _async_update_data
* Using $/kWh as the units
* Using isinstance instead of __class__ test. Removing a zero len check
* Asserting self._sites in second step
* Linting
* Remove useless tests
Co-authored-by: jan iversen <jancasacondor@gmail.com>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Modernize dlna_dmr component: configflow, test, types
* Support config-flow with ssdp discovery
* Add unit tests
* Enforce strict typing
* Gracefully handle network devices (dis)appearing
* Fix Aiohttp mock response headers type to match actual response class
* Fixes from code review
* Fixes from code review
* Import device config in flow if unavailable at hass start
* Support SSDP advertisements
* Ignore bad BOOTID, fix ssdp:byebye handling
* Only listen for events on interface connected to device
* Release all listeners when entities are removed
* Warn about deprecated dlna_dmr configuration
* Use sublogger for dlna_dmr.config_flow for easier filtering
* Tests for dlna_dmr.data module
* Rewrite DMR tests for HA style
* Fix DMR strings: "Digital Media *Renderer*"
* Update DMR entity state and device info when changed
* Replace deprecated async_upnp_client State with TransportState
* supported_features are dynamic, based on current device state
* Cleanup fully when subscription fails
* Log warnings when device connection fails unexpectedly
* Set PARALLEL_UPDATES to unlimited
* Fix spelling
* Fixes from code review
* Simplify has & can checks to just can, which includes has
* Treat transitioning state as playing (not idle) to reduce UI jerking
* Test if device is usable
* Handle ssdp:update messages properly
* Fix _remove_ssdp_callbacks being shared by all DlnaDmrEntity instances
* Fix tests for transitioning state
* Mock DmrDevice.is_profile_device (added to support embedded devices)
* Use ST & NT SSDP headers to find DMR devices, not deviceType
The deviceType is extracted from the device's description XML, and will not
be what we want when dealing with embedded devices.
* Use UDN from SSDP headers, not device description, as unique_id
The SSDP headers have the UDN of the embedded device that we're interested
in, whereas the device description (`ATTR_UPNP_UDN`) field will always be
for the root device.
* Fix DMR string English localization
* Test config flow with UDN from SSDP headers
* Bump async-upnp-client==0.22.1, fix flake8 error
* fix test for remapping
* DMR HA Device connections based on root and embedded UDN
* DmrDevice's UpnpDevice is now named profile_device
* Use device type from SSDP headers, not device description
* Mark dlna_dmr constants as Final
* Use embedded device UDN and type for unique ID when connected via URL
* More informative connection error messages
* Also match SSDP messages on NT headers
The NT header is to ssdp:alive messages what ST is to M-SEARCH responses.
* Bump async-upnp-client==0.22.2
* fix merge
* Bump async-upnp-client==0.22.3
Co-authored-by: Steven Looman <steven.looman@gmail.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
* Add phone_modem integration
* Use original domain
* Add init tests for Modem Caller ID
* Clean up tests
* Clean up tests
* apply suggestions
* Fix tests
* Make only one instance possible
* Allow more than 1 device and remove hangup service
* simplify already configured
* Update sensor.py
* Update config_flow.py
* Fix manifest
* More cleanup
* Fix tests
* Ue target
* Clean up sensor.py
* Minor tweaks
* Close modem on restart and unload
* Update requirements
* fix tests
* Bump phone_modem
* rework
* add typing
* use async_setup_platform
* typing
* tweak
* cleanup
* fix init
* preserve original name
* remove callback line
* use list of serial devices on host
* tweak
* rework
* Rework for usb dicsovery
* Update requirements_test_all.txt
* Update config_flow.py
* tweaks
* tweak
* move api out of try statement
* suggested tweaks
* clean up
* typing
* tweak
* tweak
* async name the service
* Add Whirlpool integration
* Apply suggestions from code review
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Apply suggestions from code review
* Fix lint
* Fix lint and tests
* Apply suggestions from code review
Co-authored-by: J. Nick Koston <nick@koston.org>
* Use dict lookups
* Lint
* Apply code changes from PR review
* Do real integration setup in tests
* Apply suggestions from review & fix test
* Replace get with array operator
* Add suggestions from code review
* Rename test var
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: J. Nick Koston <nick@koston.org>
* Add sensor platform
* Add extra_state_attributes
* Add more constants
* Add sensor.py to .coveragerc file
* Use native value
* Suggested change
* Move SENSOR_TYPES to sensor platform
* Add domain as prefix to the signal
* Use TractiveEntity class
* Add model.py to .coveragerc file
* Clean up files
* Add entity_class attribute to TractiveSensorEntityDescription class
* TractiveEntity inherits from Entity
* Suggested change
* Define _attr_icon as class attribute
Co-authored-by: Daniel Hjelseth Høyer <mail@dahoiv.net>
* Init integration P1 Monitor
* Fix build error
* Add quality scale
* Remove last_reset and icon
* Change list to tuple
* Close client on connection exception
* Change min value to 5 (seconds)
* the used python package will close it
* Remove the options flow
* Add session and close client
* Smash to a single DataUpdateCoordinator
* Make a custom update coordinator class
* await the coordinator close
* Add second await the coordinator close
* Close when exit scope
* Removed unused code
* Fix test_sensor on entity_id change
* Fix test on test_sensor
* Transfer SENSOR dict to sensor platform
* device class for cost entity update entity_name
* Revert name in unique id and update sensor test
* Update code based on suggestions
* Fix typing
* Change code to fix mypy errors
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* New binary sensor for connectivity
* Add binary_sensor
* New binary sensor for connectivity
* Add binary_sensor
* Handle values returned as None
* Small text update for Uptime
* Update homeassistant/components/upnp/binary_sensor.py
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
* Update homeassistant/components/upnp/binary_sensor.py
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
* Update homeassistant/components/upnp/binary_sensor.py
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
* Update homeassistant/components/upnp/binary_sensor.py
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
* Update homeassistant/components/upnp/binary_sensor.py
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
* Update homeassistant/components/upnp/binary_sensor.py
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
* Update homeassistant/components/upnp/binary_sensor.py
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
* Update homeassistant/components/upnp/binary_sensor.py
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
* Updates based on review
* Update homeassistant/components/upnp/binary_sensor.py
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
* Further updates based on review
* Set device_class as a class atribute
* Create 1 combined data coordinator
and UpnpEntity class
* Updates on coordinator
* Update comment
* Fix in async_step_init for coordinator
* Add async_get_status to mocked device
and set times polled for each call seperately
* Updated to get device through coordinator
Check polling for each status call seperately
* Use collections.abc instead of Typing for Mapping
* Remove adding device to hass.data as coordinator
is now saved
* Removed setting _coordinator
* Added myself as codeowner
* Update type in __init__
* Removed attributes from binary sensor
* Fix async_unload_entry
* Add expected return value to is_on
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
* Upgrade honeywell from platform to integration
* Add codeowner and run code formatter
* Add sensors for current indoor temp and humidity
* Fix tests and away temp
* Spring cleaning of honeywell tests
* Add config flow to honeywell integration
* Add config flow test
* Tie in honeywell service update
* Simplify config flow and add import
* Remove unnecessary platform schema
* Clean up based on PR comments
* Use new helper method
* Force single device and fix linter errors
* Address PR feedback
* Update translations
* Change string key and remove logger message
* Always add first device
* Fix test assertion
* Put PLATFORM_SCHEMA back
* Skip code coverage check on honeywell init
* add some tests for honeywell
* Make retry async
* Make device private
* Use _attr_ instead of properties
* Code cleanup from PR feedback
* Fix test and cleanup code
* Make description better
Co-authored-by: Matt Zimmerman <mdz@alcor.net>
* Add siren platform
* add more supported flags and an ability to set siren duration
* tone can be int or string
* fix typing
* fix typehinting
* fix typehints
* implement a proposed approach based on discussion
* Address comments
* fix tests
* Small fix
* Update homeassistant/components/demo/siren.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/components/demo/siren.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/components/demo/siren.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/components/demo/siren.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/components/demo/siren.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* typing
* use class attributes
* fix naming
* remove device from service description
* Filter out params from turn on service
* fix tests
* fix bugs and tests
* add test
* Combine is_on test with turn on/off/toggle service tests
* Update homeassistant/components/siren/__init__.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* fix filtering of turn_on attributes
* none check
* remove services and attributes for volume level, default duration, and default tone
* Update homeassistant/components/siren/__init__.py
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
* Update homeassistant/components/siren/__init__.py
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
* Update homeassistant/components/siren/__init__.py
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
* import final
* Update homeassistant/components/siren/__init__.py
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
* Fix typing and used TypedDict for service parameters
* remove is_on function
* remove class name redundancy
* remove extra service descriptions
* switch to positive_int
* fix schema for tone
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
* Initial commit for new musiccast integration
* Add zone support
* Get/set volume level
* Remove volume step
* Create custom MusicCastData type
* Create MusicCastDevice
* Fix await
* Add power and mute control
* Implement all basic media_player parts
* Support input switching
* Add duration/position support
* Add advanced tuner functions
* Basic media browser
* Add layer in media browser to see all available list_infos
* Added join/unjoin services and group informations. Known issue: You can not link zone 2 to main at the moment (WIP)
* Many fixes to make multiple zones and grouping work. Next step: implement error handling and remove debugging information
* WIP: Added Multizone Support and allows clients to directly jump from one group to another. Known issue: If a server tries to join a group as client, he has to close his group first. Sometimes the device that was a server previously jumps out of the group directly after joining.
* Updated group management to make it wait for the updated group information before performing the next actions - Timeouts after 1 second, then polls the distribution data. If the data are still not updated, there will be one retry before an Exception is thrown. Extended the state attributes for clients to make them return group details from their servers (leads to inactive group management buttons for the client). Added documentation and restructured the code.
* Make the service handle function name for group specific service calls unique
* Added service descriptions for set_sleep_timer, set_alarm, recall_netusb_preset, store_netusb_preset
* Added data entries for alarm specific values and a netusb preset list. Implemented fetching function for clock and netusb presets.
* Registered and implemented services for set_sleep_timer, set_alarm, recall_netusb_preset, store_netusb_preset. The set_alarm service works with a special mediaplayer alarm lovelace card, I am currently working on.
The NetUSB Presets are also available using the media browser. Maybe we could also add the Tuner presets in the future for both setting up the alarm and recalling them via service and media browser.
* Removed some debug prints
* Moved MusicCast Integration to the aiomusiccast library. This library supports media browsers with multiple pages. Added ssdp support for the discovery
* Minor fix in the group management and tidied up a bit
* Updated manifest of yamaha musiccast
* Update library
* Minor fix in the media browser. get_distribution_num does not have to be async, so it has been changed. Adjusted the client join function to turn on the client before joining a group - the musiccast app does so, so hopefully this fixes the rare errors when adding a turned off client to a group. Some reformating and by hooks fixed most of the requirements of the hooks. Known exception from this: mypy throws an error for line 116.
* Removed some old out commented code. Fixed some error handling, when the user enters a non reachable or non yamaha host in the manual setup. Fixed linting/styling errors. Implemented tests to bring the coverage for the config flow to 100%.
* Fixed linting/styling errors. Return a DeviceInfo object instead of a dict.
* Fixed linting/styling errors. Added a new error type to the translations.
* In the yamaha API the system_id is equal to the serial number in the DLNA description. Due to that it was possible to configure a device twice, because the serial number from the yamaha API was different. This issue was fixed.
* Updated tests and added a test for adding a device manually, which is already present in the system
* Remove print statements
* Fix sleep timer service call
* Fix yamllint error
* Shrink PR down to just new library + config flow with discovery
* Add __init__.py to .coveragerc
* Apply suggestions from code review
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
* Implement suggestions from code review
* Improve identifiers and connections, remove event loop parameter
* Add coordinator back
* Better exception handling
* Fix unique id in ssdp step
* Remove abc.ABC from MusicCasteDeviceEntity
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/components/yamaha_musiccast/config_flow.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Replace the repeat mode mapping from mc to ha by a generic solution
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* add coordinator to the super call of the mediaplayer
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* add the coordinator to the init function of the MusicCastEntity
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Pass the coordinator from the MusicCastEntity init function to the CoordinatorEntity init function
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* merged _handle_config_flow into async_step_user
* reformated the exception handling of the user step. In the case that the device already exists, the AbortFlow will be raised.
* Removed model from the config entry. It was neither set nor used anymore.
* Fixed the test for the config flow.
* Use async_write_ha_state instead of schedule_update_ha_state.
* Add default value for the system ID gotten in the user step
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update tests/components/yamaha_musiccast/test_config_flow.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Added a fixture to avoid IO in the test_user_input_device_not_found test
* Use absolute imprt to import data_entry_flow.
* Use local vars for host and serial_number in async_step_user.
* Remove ip_address and zone_id properties.
* Use device id for the unique ID of an entity instead of the macs
* Removed entry_id from the MusicCastEntity init function.
* Updated strings and English translation.
* don't set the coordinator in the mediaplayer init.
* Implemented legacy configuration.yaml support for existing configurations.
* Added tests for the newly added config flow step.
* Use device_id as identifier
* Fix an accidentally relative import
* Fix pylint warnings
* use logger.error instead of logger.exception in the import step.
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Use CONF_HOST instead of 'host'
* Only support the import from configuration.yaml if no config entries are setup for musiccast. If there are already config entries in HA and none of them is a representation of a config given in configuration.yaml (e.g. config added after the first import), an error will be logged.
* Update homeassistant/components/yamaha_musiccast/media_player.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Readded PLATFORM_SCHEMA for configuration.yaml
* Raise an exception for all services, which are only supported for specific sources.
* Bump aiomusiccast to 0.6 to support asyncio sockets
Co-authored-by: Michael Harbarth <michael.harbarth@gmx.de>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
* Modern Forms integration initial pass
* cleanup of typing and nits
* Stripped PR down to Fan only
* Review cleanup
* Set sleep_time to be required for service
* Adjust minimum sleep time to one minute.
* Code review changes
* cleanup icon init a little