* Add tests for several devices
* Update coveragerc
* Code review changes and minor clean up
* More code review changes
* Update manifest and minor test updates
* Add test for locks and covers
* Add tests for switch on and off
* Add more complete test for alarms
* Fix for camera test
* Patch abodepy.mode for tests
* Add test for unknown alarm state and minor cleanup
* Update to make tests more robust
* More specific tests
* Update quality scale to silver
* Remove integration quality scale
* Add config flow to Freebox
* Add manufacturer in device_tracker info
* Add device_info to sensor + switch
* Add device_info: connections
* Add config_flow test + update .coveragerc
* Typing
* Add device_type icon
* Remove one error log
* Fix pylint
* Add myself as CODEOWNER
* Handle sync in one place
* Separate the Freebox[Router/Device/Sensor] from __init__.py
* Add link step to config flow
* Make temperature sensors auto-discovered
* Use device activity instead of reachablility for device_tracker
* Store token file in .storage
Depending on host if list of Freebox integration on the future without breaking change
* Remove IP sensors + add Freebox router as a device with attrs : IPs, conection type, uptime, version & serial
* Add sensor should_poll=False
* Test typing
* Handle devices with no name
* None is the default for data
* Fix comment
* Use config_entry.unique_id
* Add async_unload_entry with asyncio
* Add and use bunch of data size and rate related constants (#31781)
* Review
* Remove useless "already_configured" error string
* Review : merge 2 device & 2 sensor classes
* Entities from platforms
* Fix unload + add device after setup + clean loggers
* async_add_entities True
* Review
* Use pathlib + refactor get_api
* device_tracker set + tests with CoroutineMock()
* Removing active & reachable from tracker attrs
* Review
* Fix pipeline
* typing
* typing
* typing
* Raise ConfigEntryNotReady when HttpRequestError at setup
* Review
* Multiple Freebox s
* Review: store sensors in router
* Freebox: a sensor story
* Add support for melcloud Air-to-Water devices
* Add water_heater entity for the water heater component.
* Add individual climate entities for 0-2 supported radiator zones.
* Add sensors for zone room temperatures, outdoor temperature and tank
temperature.
* Update .coveragerc
* Use device_state_attributes
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
* Apply suggestions from code review
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
* Complete state_attributes -> device_state_attributes migration
* Move constants to top of file
* Remove async_turn_on/off
* Drop mac from ATW unique_ids
* Add MAC to device_info connections
* Remove redundant ABC inheritance
* Update homeassistant/components/melcloud/water_heater.py
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add edl21 component for SML-based smart meters
* edl21: Remove unused variable
* [edl21] Add 1 minute throttle to the sensor
* Update homeassistant/components/edl21/manifest.json
Fix documentation URL
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* edl21: Move imports to top
* edl21: Remove special case for STATE_UNKNOWN, which replicated default behavior
* edl21: Implement blacklist for and warn about unhandled OBIS values
* edl21: Make blacklist global
* edl21: Add filter to issues URL
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* edl21: Rename device to entity
* edl21: Don't schedule async_add_entities
* edl21: Use dispatcher, implement own throttling mechanism
* edl21: Simplify keeping track of known obis
* edl21: Use whitelist for state attributes
* edl21: Remove dispatcher on shutdown
* edl21: Convert state attributes to snakecase
* edl21: Annotate handle_telegram with @callback
* edl21: Call async_write_ha_state instead of schedule_update_ha_state
Co-authored-by: David Straub <straub@protonmail.com>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Initial version
Parse configuration, but return a fixed value
* Add basic functionality
Request real data from the server
Currently the prices are not getting updated, but the petrol station
data is real
* Update values regularly
The tankerkoenig values get updated regularly with real data.
* Move base functionality for the sensor to a base class
And move that to an own file, so that it can be inherited
* Reduce calls to tankerkoenig api
Use a master/slave concept for sensors; one master gets the data and
updates it into the slaves.
* Update requirements files
* Update all gas stations at once
* Remove tests directory
Currently there are no tests for the integration; will be added in
a future commit.
* Fix slaves not being updated
Let the base class regularly poll, so that slaves are also updated
* Refactor entity creation
Create an auxiliary method to add a station to the entity list,
in preparation to allowing extra stations.
* Add possibility to manually add stations
Add a new configuration option "stations" to manually add extra stations
* Fix style issues
Make the code more pythonic
* Remove redundant code
Implement suggestions from the code review
* Change to platform component
Remove the master/slave concept, in favor of a platform with dummy sensors.
The platform takes care of contacting the server and fetching updates
atomically, and updating the data on the sensors.
* Rename ATTR_STATE
Rename the attribute to "IS_OPEN", to avoid confusion with the sensor state.
* Minor updates
Combine two consecutive error logs into a single one.
Update the sensor's icon
* Separate address into different fields
* Style updates
Use "[]" syntax instead of ".get()" for required parameters
Use warning log level for not available fuel types
* Implement review comments
Fix style issues
Improve error messages
Remove redundant options
* Refactor using DataUpdateCoordinator
Use the new DataUpdateCoordinator to fetch the global data from
the API, instead of implementing an own method.
Also fix comments from the PR
* Implement PR comments
Implement suggestions to improve code readability and keep the Home Assistant style.
Also separate fetching data to an async thread
* Add Avri waste collection sensor
* Apply black formatting
* Update manifest
* Add requirements
* Add sensor to coverage
* Update import order
* Bump dependency to include todays pickup
* Bump avri version in requirements_all.txt
* Code review comments
* Reduce scan interval to 4 hours
This makes sure that no matter what happens, in
the morning the correct dates have been pulled
without the old ones lingering for too long.
* Better logging
* Made scan interval a timedelta
* Fix import order
* Update homeassistant/components/avri/sensor.py
Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com>
* Update homeassistant/components/avri/sensor.py
Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com>
* Use filter instead of break statement
* Use positive int for house number extension
* Switch voluptuous types for house number and house number extension
* Update homeassistant/components/avri/sensor.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Implement `available`
* Bump avri api
* Code review comments
* Replace `postcode` with `zip_code`
* Update logic for `available`
* Remove variable for delimiter
Co-authored-by: springstan <46536646+springstan@users.noreply.github.com>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* hookid : isort fix
* New platform: Ezviz
* updated CODEOWNERS for ezviz
* proper test requirements
* resolved conflict
* regenerated requirements
* removed stale comments, only one call to add_entities, removed unnecessary attributes
* setup is sync, not async. Removed stale comments
* Compatible with pyezviz 0.1.4
* pyezviz 0.1.4 is now requiredf
* Added PTZ + switch management
* added services.yaml
* proper requirement
* PTZ working in async mode
* Now updates the entity
* Compatible with pyezviz 0.1.5.1
* Fixed switch ir service registering
* now requires pyezviz 0.1.5.2
* now requires pyezviz 0.1.5.2
* Revert "regenerated requirements"
This reverts commit 848b317cf9.
* Rollbacked to a simpler version
* snake_case names everywhere, logging sanatizing, voluptuous proper check
* pyezviz 0.1.5, reworked the PR so that it's intelligible
* no need for services.yaml for now
* proper voluptuous validation
* Removed stale code, use proper conf variable, describe attributes
* regenerated requirements
* stale
* removed status from attributes, since we use it for available we don't need it here then.
* Fixed log message
* Add ZHA core typing helper.
* Add aux_channels to ZHA rule matching.
* Add match rule claim_channels() method.
* Expose underlying zigpy device.
* Not sure we need this one.
* Move "base" channels.
* Framework for channel discovery.
* Make DEVICE_CLASS and REMOTE_DEVICE_TYPE default dicts.
* Remove attribute reporting configuration registry.
* Refactor channels.
- Refactor zha events
- Use compound IDs and unique_ids
- Refactor signal dispatching on attribute updates
* Use unique id compatible with entities unique ids.
* Refactor ZHA Entity registry.
Let match rule to check for the match.
* Refactor discovery to use new channels.
* Cleanup ZDO channel.
Remove unused zha store call.
* Handle channel configuration and initialization.
* Refactor ZHA Device to use new channels.
* Refactor ZHA Gateway to use new discovery framework.
Use hass.data for entity info intermediate store.
* Don't keep entities in hass.data.
* ZHA gateway new discovery framework.
* Refactor ZHA platform loading.
* Don't update ZHA entities, when restoring from zigpy.
* ZHA entity discover tests.
* Add AnalogInput sensor.
* Remove 0xFC02 based entity from Keen smart vents.
* Clean up IAS channels.
* Refactor entity restoration.
* Fix lumi.router entities name.
* Rename EndpointsChannel to ChannelPool.
* Make Channels.pools a list.
* Fix cover test.
* Fix FakeDevice class.
* Fix device actions.
* Fix channels typing.
* Revert update_before_add=False
* Refactor channel class matching.
* Use a helper function for adding entities.
* Make Pylint happy.
* Rebase cleanup.
* Update coverage for ZHA device type overrides.
* Use cluster_id for single output cluster registry.
* Remove ZHA typing from coverage.
* Fix tests.
* Address comments.
* Address comments.
* add oauth functionality and additional attributes
* Add tests WIP
* Make mocks work the correct way
* Use CONF_TOKEN constant for config
* Remove twitch from .coveragerc
* Update homeassistant/components/twitch/sensor.py
Lets be consistent
Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com>
Co-authored-by: springstan <46536646+springstan@users.noreply.github.com>
* Initial implementation of Vilfo router integration.
This commit is a combination of several commits, with commit messages in bullet form below.
* Added additional files to Vilfo integration.
* Added generated files.
* Fixed alphabetic order in generated config_flows.
* Continued implementation of config flow for Vilfo integration.
* Continued work on config_flow for Vilfo.
* Updated requirements in manifest for Vilfo Router integration.
* Some strings added to Vilfo Router integration.
* Vilfo Router integration updated with sensor support.
* Code style cleanup.
* Additional cleanup of config flow.
* Added additional UI strings for Vilfo Router
* Updated tests of config flow and fixed formatting
* Updated requirement upon vilfo-api-client.
* Sensor refactoring including support for icons
* Code style changes for Vilfo Router integration
* Code cleanup
* Fixed linting issues in Vilfo Router integration
* Fixed import order in test for Vilfo integration.
* Updates to Vilfo Router integration based on feedback
Based on the feedback received, updates have been made to the Vilfo Router integration.
A couple of the points mentioned have not been addressed yet, since the appropriate action has not yet been determined. These are:
* https://github.com/home-assistant/home-assistant/pull/31177#discussion_r371124477
* https://github.com/home-assistant/home-assistant/pull/31177#discussion_r371202896
This commit consists of:
* Removed unused folder/submodule
* Fixes to __init__
* Fixes to config_flow
* Fixes to const
* Refactored sensors and applied fixes
* Fix issue with wrong exception type in config flow
* Updated tests for Vilfo integration config_flow
* Updated dependency upon vilfo-api-client to improve testability
* Import order fixes in test
* Use constants instead of strings in tests
* Updated the VilfoRouterData class to only use the hostname as unique_id when it is the default one (admin.vilfo.com).
* Refactored based on feedback during review.
* Changes to constant names,
* Blocking IO separated to executor job,
* Data for uptime sensor changed from being computed to being a timestamp,
* Started refactoring uptime sensor in terms of naming and unit.
* Updated constants for boot time (previously uptime) sensor.
* Refactored test of Vilfo config flow to avoid patching code under test.
* UI naming fixes and better exception handling.
* Removed unused exception class.
* Various changes to Vilfo Router integration.
* Removed unit of measurement for boot time sensor,
* Added support for a sensor not having a unit,
* Updated the config_flow to handle when the integration is already configured,
* Updated tests to avoid mocking the code under test and also to cover the aforementioned changes.
* Exception handling in Vilfo Router config flow refactored to be more readable.
* Refactored constant usage, fixed sensor availability and fix API client library doing I/O in async context.
* Updated signature with hass first
* Update call to constructor with changed order of arguments
* 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>
* Add Minecraft Server integration
* Add unit test for config flow
* Fixed some review findings and increased unit test coverage
* Fixed docstrings of new test cases
* Removed unnecessary debug log messages
* Added unique IDs and device infos and removed duplicate name validation
* Attempt to fix unit test on CI
* Return state OFF instead of UNAVAILABLE in case connection to server drops
* Added property decorator to server properties, even less debug messages, improved sensor dispatcher connection and other review findings fixed
* Moved special property handling to sensors, fixed name confusion in sensor entity, switch to HA const for scan_interval, simplified building players list string
* Improved periodic update, speeded up unit tests
* Added type hints, added callback decorator to entity update callback, added const.py to unit test exclusions
* Changed state sensor to binary sensor, removed empty unit test file, added constants for icons and units
* Let HA handle unknown state, check for None in description and players list sensor
* Removed periods at end of log messages, removed constant for default host
* Updated requirements_test_pre_commit.txt, fixed codespell findings
* Use localhost as default host
* Removed passing hass to entities, moved log message from init, moved host lower to vol, use proper patch library, patch library instead of own code
* Replaced server properties with global instance attributes, removed config option scan_interval, switch back to async_track_time_interval
* Removed description and players list sensors, added players list as state attributes to online players sensor, raise OSError instead of deprecated IOError, other minor review findings fixed
* Use MAC address for unique_id in case of an IP address as host, added getmac to manifest.json, added invalid_ip to strings.json, added new test cases for changes in config_flow, replace all IOError's with OSError, other review findings fixed
* Removed double assignment
* Call get_mac_address async safe
* Handle unavailable and unknown states to reach silver quality scale, added quality scale to manifest.json
* Add salt component
* Update files from development checklist
* Use warning log level when data cannot be retrieved
Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com>
* Remove empty fields from manifest.json
* Remove default arguments for host and username
* Bump saltbox library version
* Refactor and improve error handling
* Dev checklist
* Fix linting errors
* Check for None and return empty list
* Log on debug level instead of info
* More compact None checks
* Remove redundant None check
* Return None on exception but store as empty list
* More compact syntax
Co-authored-by: springstan <46536646+springstan@users.noreply.github.com>
* added support for multiple attachments to signal_messenger integration
* updated pysignalclirestapi version in requirements_all.txt
* reworked multiple attachments feature in signal_messenger integration
* stay backwards compatible by both allowing the "attachment" and
the "attachments" attribute.
* reworked multiple attachments feature in signal_messenger integration
* stay backwards compatible by both allowing the "attachment" and
the "attachments" attribute.
* small change in signal_messenger integration
* added deprecation warning for 'attachment' attribute
* small changes in signal_messenger integration
* use 'warning' instead of 'warn' when logging the warning message
* re-generated requirements_test_pre_commit.txt
* added tests for signal_messenger integration
* regenerated requirements_test_all.txt for signal_messenger integration
* added more signal_messenger tests
* remove signal_messenger integration files from .coveragerc
* add media player test and update media player logic to qualify vizio for platinum quality score
* add SCAN_INTERVAL and log message once when device goes from available to unavailable and vice versa
* move test constants into one file to avoid defining dupes in each test file
* move constant to shrink diff
* move pytest fixtures to conftest.py
* remove commented out code
* move unload test to test_init
* updates to tests and logging based on review
* bypass notification service
* add fixture so component setup makes it through config flow
* split failure tests into two
* fix setup and entity check for test_init and setup failures in test_media_player
* make domain references consistent across test files
* remove logging steps that were introduced to help debug
* move common patches out to new fixture and use config entry everywhere appropriate
* fix docstring
* add test for update options to increase code coverage
* add one more assert
* refactor test_media_player to move boiler plate logic out of each test into _test_init function
* final refactor of test_media_player to move repeat logic into separate function
* update docstrings
* refactor setup failure tests to move shared logic into private function
* fix last new functions code to use variable instead of static config variable
* remove trailing comma
* test that volume_step gets properly passed to Vizio volume function
* fix comment language
* assert with unittest.mock.call in _test_service and use config_entries.async_setup instead of config_entries.async_add
* replace config_entries.async_add with config_entries.async_setup everywhere
* simplify if statement for argument assertion
* fix logging based on style guide
* remove accidentally committed changes
* update scan interval to something more reasonable and add tests for availability changes
* change filter function to list comprehension, simplify log messages, remove default entity id from logs since it is user configurable, fix docstrings
* Add OPNSense device_tracker
This commit adds a new component for using an OPNSense router as a
device tracker. It uses pyopnsense to query the api to look at the
arptable for a list of devices on the network.
* Run black formatting locally to appease azure
* Apply suggestions from code review
Co-Authored-By: Fabian Affolter <mail@fabian-affolter.ch>
* Fix issues identified during code review
This commit updates several issues found in the module during code
review.
* Update homeassistant/components/opnsense/__init__.py
Co-Authored-By: Fabian Affolter <mail@fabian-affolter.ch>
* Update CODEOWNERS for recent changes
* Fix lint
* Apply suggestions from code review
Co-Authored-By: Martin Hjelmare <marhje52@kth.se>
* More fixes from review comments
This commit fixes several issues from review comments, including
abandoning all the use of async code. This also completely reworks the
tests to be a bit clearer.
* Revert tests to previous format
* Add device detection to opnsense device_tracker test
This commit adds actual device detection to the unit test for the setup
test. A fake api response is added to mocks for both api clients so that
they will register devices as expected and asserts are added for that.
The pyopnsense import is moved from the module level to be runtime in
the class. This was done because it was the only way to make the
MockDependency() call work as expected.
* Rerun black
* Fix lint
* Move import back to module level
* Return false on configuration errors in setup
This commit updates the connection logic to return false if we're unable
to connect to the configured OPNsense API endpoint for any reason.
Previously we would not catch if an endpoint was incorrectly configured
until we first tried to use it. In this case it would raise an unhandled
exception. To handle this more gracefully this adds an api call early in
the setup and catches any exception raised by that so we can return
False to indicate the setup failed.
* Update tests
* Add pyopnsense to test requirements
* Rerun gen_requirements script
* Fix failing isort lint job step
Since opening the PR originally yet another lint/style checker was added
which failed the PR in CI. This commit makes the adjustments to have
this pass the additional tool's checks.
* Fix comment
* Update manifest.json
Co-authored-by: Fabian Affolter <mail@fabian-affolter.ch>
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Pascal Vizeli <pascal.vizeli@syshack.ch>
* Rewrite of Spotify integration
* Update homeassistant/components/spotify/config_flow.py
Co-Authored-By: Paulus Schoutsen <balloob@gmail.com>
* Remove configurator dependency
* Strip whitespace from device model in case Spotify product is missing
* Ensure domain dict exists in hass data on setup entry
* Simply config validation for client id and secret
* Abort flow on any exception from spotipy
* Add tests for config flow
* Gen requirements all
* Add test package __init__
* Remove Spotify from coveragerc
* Made alias handling more robuust
* Fix supported_features for Spotify free and open accounts
* Improve error message in the logs
* Re-implement Spotify media_player
* Change media content type when play a playlist
* Process review suggestions
* Move Spotify init, static current user and supported_features
* Remove unneeded me call
* Remove playlist content type due to frontend issues
* Improve playlist handling, when context is missing
* Handle entity disabled correctly
* Handle being offline/unavailable correctly
* Bump Spotipy to 2.7.1
* Update coverage RC, mark integration silver
* Remove URI limitation, lib supports all Spotify URI's now
* Final cleanup
* Addresses Pylint error
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* use media player defined device classes instead of custom ones, add options flow test, add timeout options parameter
* make options update error more generic
* fix config flow options update logic
* simplify logic for options update during import
* use platform list for load and unload
* update private config flow function name and description
* fix grammar in strings.json
* update mock config variable names to be more accurate
* remove timeout conf option, create device_class property
* update requirements
* update .coveragerc to indicate that config_flow has tests
* fix source of device_class property and move constants to const.py
* fix grammar in error message
* remove redundant device check in async_setup_entry since device connection is checked during config flow
* revert change to async_setup_entry, raise ConfigEntryNotReady if device can't be connected to
* update error text
* add more context to error text
* Refactor to use ids in data class
* Use station_id
* Refactor Netatmo to use oauth
* Remove old code
* Clean up
* Clean up
* Clean up
* Refactor binary sensor
* Add initial light implementation
* Add discovery
* Add set schedule service back in
* Add discovery via homekit
* More work on the light
* Fix set schedule service
* Clean up
* Remove unnecessary code
* Add support for multiple entities/accounts
* Fix MANUFACTURER typo
* Remove multiline inline if statement
* Only add tags when camera type is welcome
* Remove on/off as it's currently broken
* Fix camera turn_on/off
* Fix debug message
* Refactor some camera code
* Refactor camera methods
* Remove old code
* Rename method
* Update persons regularly
* Remove unused code
* Refactor method
* Fix isort
* Add english strings
* Catch NoDevice exception
* Fix unique id and only add sensors for tags if present
* Address comments
* Remove ToDo comment
* Add set_light_auto back in
* Add debug info
* Fix multiple camera issue
* Move camera light service to camera
* Only allow camera entities
* Make test pass
* Upgrade pyatmo module to 3.2.0
* Update requirements
* Remove list comprehension
* Remove guideline violating code
* Remove stale code
* Rename devices to entities
* Remove light platform
* Remove commented code
* Exclude files from coverage
* Remove unused code
* Fix unique id
* Address comments
* Fix comments
* Exclude sensor as well
* Add another test
* Use core interfaces
* move constants, move schema validation to init, prepare for zeroconf/config flow
* update requirements_all and make setup validation more pythonic
* mistake in refactor
* un-revert change from previous PR
* rename schema var
* update .coveragerc, move validate_auth to __init__, only attempt to get ESN if device setup is validated
* reinstate validate_setup but change logic to use new connection test function
* fix schema validation
* simplify string empty check logic
* missed commit
* add surepetcare
* cleanup
* remove unused imports and comments
* remove comment
* fix bug which prevented updating the sensors
* improve config validation
* fix voluptuous usage
* fix format & credential storage
* various fixes to hass-conform
* small format fixes
* change False to None
* still trying to be hass-conform
* remove unused class
* fix imports
* fix f-string
* add guard clause?!
* central data fetch
* do not pass in hass, will be provided automatically
* make the linters happy
* disable constant-test warning and add commas
* worksforme
* fix link in manifest
* remove icon
* bump surepy to 0.1.5
* worksforme
* small doc fixes
* add discovery_info guard
* result of another awesome review
* and again :)
* exclude surepetcare in .coveragerc