* 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
* 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>
* 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>
* Dimming duration fix
Fixes#38068 - allows dimming duration to 7620 (default of 7621)
* Forgot to commit my test updates
* Added backwards compatibility with pre-150+ builds
Added tests for backwards compatibility
* Upped the build number cut off
* Add check for major.minor version as well
* Fix major.minor detection
* Adjust variable name
* Adjust version checking logic
* Math is hard
* Rename files, adjust test names
* Update doc string
* Initial commit for Dexcom integration
* Dexcom config flow testing
* Clarify errors during setup
* Resolve minor test issues
* Update sensor availability, resolve linting issues
* Add sensor tests
* Remove title due to 0.109, add abort
* >94.97% codecov/patch
* Move .translations/ to translations/
* Add constants for servers and unit of measurements
* Bump pydexcom version
* Updated domain schema, Dexcom creation
* Support for different units of measurement
* Update tests
* Remove empty items from manifest
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Raise UpdateFailed if fetching new session fails
* Switch everything over to required
* Simplify state information
* Simplify async_on_remove
* Pydexcom package now handles fetching new session
* Only allow config flow
* Remove ternary operator
* Bump version, pydexcom handling session refresh
* Using common strings
* Import from test.async_mock
* Shorten variable names
* Resolve tests after removing yaml support
* Return false if credentials are invalid
* Available seems to handle if data is empty
* Now using option flow, remove handling import
* Add fixture for JSON returned from API
* Overhaul testing
* Revise update options
* Bump pydexcom version
* Combat listener repetition
* Undo update listener using callback
* Change sensor availability to use last_update_success
* Update sensor availability and tests
* Rename test
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Refactor / update Awair integration
This commit does a few things, all in service of making the Awair
integration more modern and reliable. Specifically we do the following:
- Update to python_awair 0.1.1
- Begin using config entries / flow for setting up the integration.
- YAML support is completely removed.
- The integration now allows adding multiple Awair accounts, should a
user wish to do so (I found it _very_ useful in development).
- Group various Awair sensors into devices, using the device registry.
- Renames various sensors and treats the "dust" sensor as a particulate sensor.
- Device update rate-limits are no longer dynamically calculated; the
Awair API now separates rate-limits on a per-device basis.
- Supports sound pressure and illuminance sensors found on some Awair devices.
- We report the "awair index" for certain sensors as part of device_state_attributes.
The "index" is a subjective measure of whether or not a sensor reading
is "good" or "bad" (and to what extent). It's a component of the Awair
score, and it is useful on its own as an input for those who wish to
do things like "display this color if the value is 'bad'".
This is a breaking change, and requires updates to documentation and a
warning in the README. The breaking changes in detail, are:
- Support for all YAML configuration is removed, and users will need to
re-add the integration via the UI.
- We no longer support overriding device discovery via manual
configuration of device UUIDs. This was previously supported because
the Awair API had severe limits on the device list endpoints; however
those have since been removed.
- Gen 1 devices no longer show a "dust" sensor; rather we create a PM2.5
sensor and a PM10 sensor and just keep the values in sync. This better
reflects the sensor capabilities: it can detect particles in a range
from 2.5 -> 10, but cannot differentiate between sizes.
- Sensors are renamed as follows:
- "sensor.devicename_co2" -> "sensor.devicename_carbon_dioxide"
- "sensor.devicename_voc" -> "sensor.devicename_volatile_organic_compounds"
- "sensor.devicename_score" -> "sensor.devicename_air_quality_index"
- I've chosen to call the "Awair Score" an "air quality index" sensor,
because fundamentally the "Awair Score" and other air quality indices
(such as CAQI) do the same thing: they calculate a value based on a
variety of other inputs.
Under the hood, the integration has seen some improvements:
- We use the DataUpdateCoordinator class to handle updates, rather than
rolling our own update class.
- The code no longer tracks availability based on a timestamp returned
from the Awair service; we assert that if we have received a response
and the response has data for our device, then we are available (and
otherwise, not available). We don't need to test the actual Awair API
so heavily.
- Test coverage has been expanded to handle a variety of products that
Awair produces, not just the one I happen to own.
- Test coverage no longer concerns itself with testing behavior that is
now handled by the DataUpdateCoordinator; nor is it concerned with
ensuring that the overall component sets up and registers properly.
These are assumed to be well-tested functionaity of the core and not
things we need to re-test ourselves.
Finally - between library updates and integration updates, this
integration is well-positioned to support future updates. I have a
proof-of-concept patch for device automations, and the underlying
library now supports subclassing authentication (which clears the way
for us to use OAuth authentication for Awair).
* Wrap test fixture in mock_coro
Truthfully I'm not sure why this was passing on my local dev
environment, but I was developing with python 3.8 before. After
installing python 3.7, I was able to reproduce the CI failures and fix
them.
* Fix broken tests after #34901 and/or #34989
* Do not rename sensors so broadly
We're going to keep the sensors named as they were before, pending the
outcome of any decisions around the air_quality component and what names
should be standardized for air-quality-like devices.
If standardized names are selected (which does seem likely), then we
will update this integration to match them - at which point, it would be
a breaking change.
But for now, we'll keep names mostly identical to what users had before.
Notable in this commit is that we generate the entity_id ourselves,
rather than just allowing it to be auto-generated from the name
attribute. This allows us to provide more human friendly names, while
keeping the old format for entity ids. For example, given an Awair
device called "Living Room", we'll generate an entity id of
"sensor.living_room_voc" but show set the name of the device to "Living
Room Volatile organic compounds".
* Support import from config.yaml
We'll create a config entry from config.yaml the first time we're
loaded, and then defer to it from then on.
We ignore all keys other than the access_token, since we no longer need
to deal with per-account rate-limits (rather, everything is per-device
now).
* Add myself to CODEOWNERS
Since I wrote the initial integration, and now this re-write, it feels
appropriate for me to take care of the integration along with `danielsjf`.
* Remove name mangling
* Update homeassistant/components/awair/manifest.json
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/components/awair/config_flow.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/components/awair/sensor.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/components/awair/sensor.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Address some review feedback
* Set up reauth flow in a job, rather than awaiting
* Remove unnecessary title string
* Remove unnecessary config schema checking
As pointed out in review, because this comes in via import from
`configuration.yaml`, we can rely on the `PLATFORM_SCHEMA` validation instead.
* Fix tests
* Set unique_id appropriately for legacy devices
For users who have had this integration already installed (and who have
updated their home assistant installation sometime in recent history),
we want to ensure that unique_id's are set to the same thing as before,
to facilitate the upgrade process.
To do that, we add an additional property to the `SENSOR_TYPES` dict
(`ATTR_UNIQUE_ID`) which allows us to map modern sensor names from
python_awair to what older versions called them - ie: `humidity` ->
`HUMID`. We then use that value when constructing the unique ID. This
should allow users to upgrade and not lose configuration even if entity
IDs would otherwise change (because we have changed the name format that
generates entity IDs).
One note is that for the gen1 `DUST` sensor, we have to treat it
differently. This integration used to call that a "PM2.5" sensor, but
the unique_id generated would be something like `awair_12345_DUST`. So
we special-case that sensor, and do the same thing. We do not need to
special-case the PM10 sensor for gen1 devices, because we didn't create
a PM10 sensor in the past (we do now, because the "DUST" sensor is
really a hybrid PM2.5/PM10 sensor).
* Patch async_setup_entry for two tests
* Update awair config_flow to require / use an email address for unique_id
Also, only start one re-auth flow.
* Add a few more tests, try to get coverage up.
* Add another test
* Move attribution to device_state_attributes
* Don't require email
* Switch from Union[dict, None] to Optional[dict]
* Use a mock where requested
* Fix missing constant rename
* Use async_create_task
* Bump test coverage a bit for config_flow
* s/CONF_UNIQUE_ID/UNIQUE_ID/g
* Add warning about deprecated platform config
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add fan platform
* Add fan discovery schema
* Use constants for dispatcher signal
* Move fan platform to ozw
* Fix fan discovery schema
* Add previous speed to handle value 255
* Make fixture reading more robust
* Add fan tests
* Remove not needed fixture info
* Validate speed
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* add binary sensor platform to zwave_mqtt
* add tests for binary_sensor
* fix tests
* device class is required value
* Update homeassistant/components/zwave_mqtt/binary_sensor.py
use colon as separator
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* extend tests
* code optimize
* add test for enabling a legacy binary sensor
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Initial commit for BSBLan Climate component
The most basic climate functions work.
* Delete manifest 2.json
wrongly added to commit
* fix incorrect name
current_hvac_mode
* update coverage to exclude bsblan
* sorted and add configflow
* removed unused code, etc
* fix hvac, preset mix up
now it sets hvac mode to none and preset to eco
* fix naming
* removed commented code and cleaned code that isn't needed
* Add test for the configflow
* Update requirements
fixing some issues in bsblan Lib
* Update coverage file to include configflow bsblan
* Fix hvac preset is not in hvac mode
rewrote how to handle presets.
* Add passkey option
My device had a passkey so I needed to push this functionality to do testing
* Update constants
include passkey and added some more for device indentification
* add passkey for configflow
* Fix use discovery_info instead of user_input
also added passkey
* Fix name
* Fix for discovery_info[CONF_PORT] is None
* Fix get value CONF_PORT
* Fix move translation to new location
* Fix get the right info
* Fix remove zeroconf and fix the code
* Add init for mockConfigEntry
* Fix removed zeroconfig and fix code
* Fix changed ClimateDevice to ClimatEntity
* Fix log error message
* Removed debug code
* Change name of device.
* Remove check
This is done in the configflow
* Remove period from logging message
* Update homeassistant/components/bsblan/strings.json
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add passkey
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add sensor platform
* Fix signal name
* Add sensor discovery schema
* Add test for disabled entities
* Add test for enabling advanced sensor
* Add additional fake sensors and tests for device classes
* More device class tests
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add NUT tests for an Eaton 5E650I UPS
* add a test to make sure multiple ups get setup
* Add a few more upses
* fix missing status key
* cover
* Force CI run
* Handle all zero serial numbers in NUT
* Add additional nut tests
* Update homeassistant/components/nut/__init__.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* remove re
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Fix setting zone overlays for tados that support swing
* Support for changing swing mode will come at a later
time as another upstream update is required.
* remove debug
* style
* Create __init__.py
* Create manifest.json
* Update zeroconf.py
* more work on integration
* more work on integration.
* add more sensor tests.
* Update const.py
* Update sensor.py
* more work on ipp.
* Update test_config_flow.py
* more work on ipp.
* Update config_flow.py
* Update config_flow.py
* Tado climate state moved to python-tado
* Resolve various incorrect states and add tests for known tado zone states
* Write state instead of calling for an update
This is a redux of pr #32564 with all of the zone state now moved into
python-tado and tests added for the various states.
* stale string
* add missing undos to dispachers
* remove unneeded hass
* naming
* rearrange
* fix water heater, add test
* fix water heater, add test
* switch hvac mode when changing temp if in auto/off/smart
* Use new labels for HomematicIP Cloud multi devices
* Update homeassistant/components/homematicip_cloud/device.py
Co-Authored-By: springstan <46536646+springstan@users.noreply.github.com>
* Update name composition
Co-authored-by: springstan <46536646+springstan@users.noreply.github.com>
* Add new integration: pvpc_hourly_pricing
to add a sensor with the current hourly price of electricity in Spain.
Configuration is done by selecting one of the 3 reference tariffs, with
1, 2, or 3 billing periods.
* Features config flow, entity registry, RestoreEntity, options flow
to change tariff, manual yaml config as integration or sensor platform
* Cloud polling sensor with minimal API calls (3/hour at random times)
and smart retry; fully async
* Only 1 state change / hour (only when the price changes)
* At evening, try to download published tomorrow prices, to always store
prices info for a window of [3, 27] hours in the future.
* Include useful state attributes to program automations to be run
at best electric prices.
* Add spanish and english translations.
* Requires `xmltodict` to parse official xml file with hourly prices
for each day.
* Update requirements and add to codeowners
* Avoid passing in hass as a parameter to the entity
Instead, create time change listeners in async_added_to_hass and
call async_generate_entity_id before async_add_entities
* Fix lint issues
* Add tests for config & options flow
* Add tests for manual yaml config
with entity definition as integration and also as a sensor platform
* Fix placement of PLATFORM_SCHEMA and update generated config_flows
* Store prices internally linked to UTC timestamps
- to deal with days with DST changes
- and work with different local timezones
* Add availability to sensor
to 'expire' the sensor if there is no connection available
and current hour is not in the stored prices.
Also, turn off logging and retrying if prices can't be downloaded
repeatedly, by flagging `data_source_available` as False, so there is no
log-flood mess.
* Add more tests
- to cover behavior in DST changes and complete coverage of sensor logic
- to cover abort config flow
* fix linter
* Better handling of sensor availability and minor enhancements
- Emmit 1 error if data source is marked as unavailable
(after some retries), and be silent until cloud access is recovered,
then emmit 1 warning.
- Follow standard of camel_case keys in attributes
* Mock aiosession to not access real API, store fixture data
- Store a set of daily xml files to test sensor logic for all situations
- Mock time and session to run tests with stored API responses
- Add availability test to simulate a lost + recovery of cloud access,
checking that logging is reasonable: 1 error to flag the continued
disconnection + 1 warning in recovery.
* Change API endpoint to retrieve JSON data
and remove xmltodict from reqs.
It seems that this endpoint is more reliable than the XML.
* Adapt tests to new API endpoint
* Translate tariff labels to plain English
and sync the default timeout value for all ways of configuration.
* Relax logging levels to meet silver requirements
- 1 warning when becoming unavailable, another warning when recovered.
- Warnings for unexpected TimeoutError or ClientError
- Move the rest to debug level, leaving info for HA internals
Also reduce number of API calls from 3 to 2 calls/hour.
* Fix requirements
* Mod tests to work with timezone Atlantic/Canary
and fix state attributes for timezones != reference, by using 3 price
prefixes: 'price_last_day_XXh', 'price_next_day_XXh' and 'price_XXh',
all generated with local time (backend timezone)
* Try to fix CI tests
* Externalize pvpc data and simplify sensor.py
* add new `aiopvpc` to requirements
* Remove data parsing and price logic from here
* Replace some constant properties with class variables
* Simplify tests for pvpc_hourly_pricing
* Fix updater for options flow
* Updater always reloads
* `tariff` value comes 1st from entry.options, 2nd from entry.data
* Fix lint
* Bump aiopvpc
* Remove options flow and platform setup
- Remove PLATFORM_SCHEMA and async_setup_platform
- Generate config_entry.unique_id with tariff instead of entity_id, in flow step.
- Remove TariffSelectorConfigFlow
- Adapt tests to maintain full coverage
* Fix docstring on test
and rename SENSOR_SCHEMA to SINGLE_SENSOR_SCHEMA to avoid confusion
* Remove timeout manual config, fix entry.options usage, simplify unique_id
* Simplify tests
- No need for a test_setup now, as platform setup is removed and integration
setup is already used in `test_availability`
- Simplified `_process_time_step`: only one async_fire(EVENT_TIME_CHANGED)/hour
* Fix possible duplicated update
when source is not available.
* Do not access State last_changed for log messages
* Do not update until entity is added to hass
and call to async_update after 1st download or when recovering access, so
async_write_ha_state is not called twice on those.
* minor changes
* Rename method to select current price and make it a callback
* Add support for nexia automations
Bump nexia to 0.7.1
Start adding tests
Fix some of the climate attributes that were wrong (discovered while adding tests)
Pass the name of the instance so the nexia UI does not display "My Mobile"
* fix mocking
* faster asserts, scene
* scene makes so much more sense
* pylint
* Update homeassistant/components/nexia/scene.py
Co-Authored-By: Martin Hjelmare <marhje52@gmail.com>
* docstring cleanup
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add tests for states of the sensors
* Revert async_update method
* Tests improvement
* Fix icon name
* Tests improvement
* Simplify tests
* Test improvement
* Patch the library instead of the coordinator
* Suggested change
* Remove return_value
* 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
* adkj
* reduce
* Convert august to async
Async io was added to py-august 0.24
* Fix lint
* Lock operation sensors for august
* Tracking lock operation method allows user presence detection at the lock
* revert lock changes
* fix activity count merge conflict reversion
* Fix revert that come back with the conflict
* Add griddy integration
* Griddy is a wholesale power provider in Texas
* Supports all four load zones in Texas
* Provides real time power price which is useful for automations to handle demand response
* Update homeassistant/components/griddy/sensor.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Update homeassistant/components/griddy/config_flow.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Add ability request updated via entity update service.
* Improve error message about already configured
* Remove DEVICE_CLASS_POWER since we do not have a device class for cost
* remove setdefault that was left from previous refactor
* More detail on data naming
* Bump translation for testing
* git add the config flow tests
* s/PlatformNotReady/ConfigEntryNotReady/
* Review items
* git add the other missing file
* Patch griddypower
* reduce
* adjust target
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Breakout tado zone code into a single place
* Resolve various incorrect states and add tests for known tado zone states
* Fix home and away presets
* Upgrade to PyTado 0.4.0 which improves http performance and fixes setting fan speed.
* Write state instead of calling for an update
* adjust codeowners
* Add tests for michael's tado and fix heatingPower.value
* Guards are much cleaner
* Adjust per review
* Remove hass passing
* Update Yandex transport after API change (home-assistant#32431)
* Update mocked response for test (home-assistant#32431)
* Codestyle fixes (home-assistant#32431)
* Move keypad battery implementation details into py-august
* Upgrade to py-august 0.22.0 which also adds gen2 doorbell battery data
* remove cruft from previous refactor
* Various code review items from previous PRs
* Add a test for fetching the doorbell camera image
* Switch to using UNIT_PERCENTAGE for battery charge unit
* Add tests for changed_by
* Reduce August doorbell detail updates
* Doorbell images now get updates from the activity feed
* Tests for activity updates
* py-august now provides bridge_is_online for available state
* py-august now provides is_standby for available state
* py-august now provides get_doorbell_image (eliminate requests)
* remove debug
* black after merge conflict
* Add battery sensors for August devices
* Additional tests and cleanup in prep for config flow
and device registry
* pylint
* update name for new style guidelines - https://developers.home-assistant.io/docs/development_guidelines/#use-new-style-string-formatting
* Config Flow for august push
* Update homeassistant/components/august/__init__.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Address review items
* Update tests
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Deduplicate code in the august integration
* Add additional tests for august (more coming)
* Door state is now updated when a lock or unlock call returns
as the state is contained in the response which avoids
the confusing out of sync state
* revert
* document known issue with doorsense and lock getting out of sync (pre-existing)
* Address review comments
* Additional review comments
* Significantly reduce code in august integration
* Activity updates can now be processed by py-august
this allows us to eliminate the activity sync
code for the door sensors and locks
* Lock and door state can now be consumed from
the lock detail api which allows us to
remove the status call apis and reduce
the number of API calls to august
* Refactor the testing method for locks (part #1)
* Update homeassistant/components/august/binary_sensor.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Switch to asynctest instead of unittest for mock.patch
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Adjust tests after speed up to restore coverage for HomematicIP Cloud
* Fix test data
* Fixes after review
* remove duplicate cade
* remove service marker
* Add Elgato Key Light integration
* Remove passing in of hass loop
* Tweaks a comment
* Tweaks a function name
* Ensure domain namespace in data exists in entry setup
* Add WLED integration
* Use f-string for uniq id in sensor platform
* Typing improvements
* Removes sensor & light platform
* Remove PARALLEL_UPDATES from integration level
* Correct type in code comment 'themselves'
* Use async_track_time_interval in async context
* Remove stale code
* Remove decorator from Flow handler
* Remove unused __init__ from config flow
* Move show form methods to sync
* Only wrap lines that can raise in try except block
* Remove domain and platform from uniq id
* Wrap light state in bool object in is_on method
* Use async_schedule_update_ha_state in async context
* Return empty dict in device state attributes instead of None
* Remove unneeded setdefault call in setup entry
* Cancel update timer on entry unload
* Restructure config flow code
* Adjust tests for new uniq id
* Correct typo AdGuard Home -> WLED in config flow file comment
* Convert internal package imports to be relative
* Reformat JSON files with Prettier
* Improve tests based on review comments
* Add test for zeroconf when no data is provided
* Cleanup and extended tests
* Add climate service to Homematic IP Cloud to select the active profile
* Add profiles ass presets
* fix spelling
* Re-Add PRESET_NONE for selection
* Boost is a manual mode
* Fixes based on review
* Fixes after review
* Add here_travel_time
* Bump herepy version to 0.6.2
* Update requirements_all.txt
* Disable pylint and catch errors
* Add herepy to requirements_test_all
* Correctly place test req for herepy
* use homeassistant.const.LENGTH_METERS
* Implemented Requested Changes
* Better error message for cryptic error code
* add requested changes
* add_entities instead of async
* Add route attr and distance in km instead of m
* fix linting errors
* attribute duration in minutes instead of seconds
* Correct pattern for longitude
* dont split attribute but rather local var
* move strings to const and use travelTime
* Add tests
* Add route for pedestrian and public
* fix public transport route generation
* remove print statement
* Standalone pytest
* Use hass fixture and increase test cov
_resolve_zone is redundant
* Clean up redundant code
* Add type annotations
* Readd _resolve_zone and add a test for it
* Full test cov
* use caplog
* Add origin/destination attributes
According to https://github.com/home-assistant/home-assistant/pull/24956
* Add mode: bicycle
* black
* Add mode: publicTransportTimeTable
* Fix error for publicTransportTimeTable
Switch route_mode and travel_mode in api request.
* split up config options
* More type hints
* implement *_entity_id
* align attributes with google_travel_time
* route in lib
apply requested changes
* Update requirements_all.txt
* remove DATA_KEY
* Use ATTR_MODE
* add attribution
* Only add attribution if not none
* Add debug log for raw response
* Add _build_hass_attribution
* clearer var names in credentials check
* async _are_valid_client_credentials
* adding feature obtaining Moscow transport data from maps.yandex.ru api
* extracting the YandexMapsRequester to pypi
* fix code review comments
* fix stop_name, state in datetime, logger formating
* fix comments
* add docstring to init
* rename, because it works not only Moscow, but many another big cities in Russia
* fix comments
* Try to solve relative view in sensor timestamp
* back to isoformat
* add tests, update external library version
* flake8 and black tests for sensor.py
* fix manifest.json
* update tests, migrate to pytest, async, Using MockDependency
* move json to tests/fixtures
* script/lint fixes
* fix comments
* removing check_filter function
* fix typo
* up version on manifest.json
* up version to 0.3.7 in requirements_all.txt
* adding feature obtaining Moscow transport data from maps.yandex.ru api
* extracting the YandexMapsRequester to pypi
* fix code review comments
* fix stop_name, state in datetime, logger formating
* fix comments
* add docstring to init
* rename, because it works not only Moscow, but many another big cities in Russia
* fix comments
* Try to solve relative view in sensor timestamp
* back to isoformat
* add tests, update external library version
* flake8 and black tests for sensor.py
* fix manifest.json
* update tests, migrate to pytest, async, Using MockDependency
* move json to tests/fixtures
* script/lint fixes
* fix comments
* removing check_filter function
* fix typo
* Add simple battery sensor
* Add test for battery sensor based on a real device
* Vary icon based on battery state
* Add test for battery sensory
* Read other battery related states from accessory
* Add a device class to the battery sensor
* Respect the low battery flag from the device
* Add nws weather.
* Hassfest
* Address multiple comments
* Add NWS icon weather code link
* Add metar fallback.
Use metar code from nws observation if normal api is missing data.
* only get 1 observation - we dont use more than 1
* add mocked metar for tests
* lint
* mock metar package for all tests
* add check for metar attributes
* catch errors in setup
* add timeout error
* handle request exceptions
* check and test for missing observations
* refactor to new pynws
* change to simpler api
* Make py3.5 compatible
Remove f string
* bump pynws version
* gen_requirements
* fix wind bearing observation
* Revert "Make py3.5 compatible"
This reverts commit 4946d91779.
* Precommit black missed a file?
* black test
* add exceptional weather condition
* bump pynws version
* update requirements_all
* address comments
* move observation and forecast outside try-except-else
* Revert "move observation and forecast outside try-except-else"
This reverts commit 53b78b3283.
* remove else from update forecast block
* remove unneeded ConfigEntryNotReady import
* add scan_interval, reduce min_time_between_updates
* pytest tests
* lint test docstring
* use async await
* lat and lon inclusive in config
* Add in a switch platform to ring.
* Changes following code review
* remove tests for now
* remove the request to call update
* support the new type of test
* update after running black
* fix comment
* fixes following code review
* Remove ring cache file
* patch out io code
* Move the patches to within a fixture
* missing period
* Add in a switch to control lights and sirens
* Improve the way sensors are updated
* fixes following flake8
* remove light platform, and fix breaking test.
* Resolve issues with tests
* add tests for the switch platform
* fix up flake8 errors
* fix the long strings
* fix naming on private method.
* updates following p/r
* further fixes following pr
* removed import
* add additional tests to improve code coverage
* forgot to check this in
* Add severe weather alert sensor to Dark Sky
* fixup test case
* address review comments and fixup testcases
* address comments, fix assertion order
* remove extra line
* remove index increment
* Update sleepyq to 0.7
Fixes crash when working with a single sleeper.
* sleepiq: Handle null side definitions
These happen if no sleeper is defined for a side of the bed. Don't
create sensors for null sides; they'll crash every time we try to use
them.
* sleepiq: Fix urls mocked to match sleepyq 0.7
* sleepi: Fix test_sensor.TestSleepIQSensorSetup
Sleepyq 0.7 throws on empty strings, so we have to specify them.
* sleepiq: Test for ValueError thrown by sleepyq 0.7
* sleepiq: Drop no longer used HTTPError import
* sleepiq: Add tests for single sleeper case
* sleepiq: Shorten comments to not overflow line length
* sleepiq: Use formatted string literals for adding suffixes to test files
* sleepiq: Use str.format() for test suffixing
* The Great Migration
* removed outdated tests
* Upgraded enturclient to v0.2.0
- client has gone async
- configurable if non boarding departures should be omitted from result
- configurable how many departures should be shown
- more clear which attributes are included and when
* reduced nesting and clearing of attributes
* Removed test data
* ensure attribution and stop id in attributes
* docstring fixes
* fix rebase errors
went a bit too fast on continue on one of the conflicts..
* fix test requirements comment from gen
* Moving existing sensor file
* Initial functionality in place
* Added test for config flow
* Updated coverage and CODEOWNERS
* Linting
* Linting
* Member comments
* Hound
* Moving socket disconnect on HASS stop
* Member comments
* Removed unnecessary dispatcher call
* Config entry fix
* Added support in config flow for good accounts with no devices
* Hound
* Updated comment
* Member comments
* Stale docstrings
* Stale docstring
* Added Entur departure information sensor.
* Fixed houndci-bot comments.
* Removed tailing whitespace.
* Fixed some comments from tox lint.
* Improved docstring, i think.
* Fix for C1801
* Unit test for entur platform setup
* Rewritten entur component to have pypi dependecy.
* Propper client id for api usage.
* Minor cleanup of usage of constants.
* Made location output configurable.
* Cleaned up usage of constants.
* Moved logic to be contained within setup or update methods.
* Moved icon consts to root in module.
* Using config directly in test
* Minor changes
* Awair Sensor Platform
This commit adds a sensor platform for Awair devices, by accessing
their beta API. Awair heavily rate-limits this API, so we throttle
updates based on the number of devices found. We also allow for the
user to bypass API device listing entirely, because the device list
endpoint is limited to only 6 calls per day. A crashing or restarting
server would quickly hit that limit.
This sensor platform uses the python_awair library (also written
as part of this PR), which is available for async usage.
* Disable pylint warning for broad try/catch
It's true that this is generally not a great idea, but we really don't
want to crash here. If we can't set up the platform, logging it and
continuing is the right answer.
* Add space to satisfy the linter
* Awair platform PR feedback
- Bump python_awair to 0.0.2, which has support for more granular exceptions
- Ensure we have python_awair available in test
- Raise PlatformNotReady if we can't set up Awair
- Make the 'Awair score' its own sensor, rather than exposing it other ways
- Set the platform up as polling, and set a sensible default
- Pass in throttling parameters to the underlying data class, rather
than use hacky global variable access to dynamically set the interval
- Switch to dict access for required variables
- Use pytest coroutines, set up components via async_setup_component,
and test/modify/assert in generally better ways
- Commit test data as fixtures
* Awair PR feedback, volume 2
- Don't force updates in test, instead modify time itself and let
homeassistant update things "normally".
- Remove unneeded polling attribute
- Rename timestamp attribute to 'last_api_update', to better reflect
that it is the timestamp of the last time the Awair API servers
received data from this device.
- Use that attribute to flag the component as unavailable when data
is stale. My own Awair device periodically goes offline and it really
hardly indicates that at all.
- Dynamically set fixture timestamps to the test run utcnow() value,
so that we don't have to worry about ancient timestamps in tests
blowing up down the line.
- Don't assert on entities directly, for the most part. Find desired
attributes in ... the attributes dict.
* Patch an instance of utcnow I overlooked
* Switch to using a context manager for timestream modification
Honestly, it's just a lot easier to keep track of patches. Moreover,
the ones I seem to have missed are now caught, and tests seem to
consistently pass.
Also, switch test_throttle_async_update to manipulating time more
explicitly.
* Missing blank line, thank you hound
* Fix pydocstyle error
I very much need to set up a script to do this quickly w/o tox, because
running flake8 is not enough!
* PR feedback
* PR feedback
* SMHI Component
* Clean up typos
* Fixed default values first config to home location (tests will follow)
* Fixed tests and removed unused function
* Minor fixup after comments from @kane610
* add support for precipitation in forecast
* Removed old async_step_init not needed.
* moved regular updates definition to own method to be able to override behaviour in subclass
* moved filter by max entries to own method to be able to override behaviour in subclass
* event type used when firing events to the bus now based on variable to be able to override behaviour in subclass
* feed id introduced instead of url for storing meta-data about the feed to be able to fetch the same feed from different configs with different filtering rules applied
* keep the status of the last update; continue processing the entries retrieved even if a recoverable error was detected while fetching the feed
* added test cases for feedreader component
* better explanation around breaking change
* fixing lint issues and hound violations
* fixing lint issue
* using assert_called_once_with instead of assert_called_once to make it compatible with python 3.5
* Added Foobot device sensor
* Added error handling tests
* Corrections after PR review.
* Migrated to async/await syntax
* lint fixes
* stop raising HomeAssistantError
* debug log for number of requests
* Moved shared data between sensors from a class attribute to a separate class
* Made test more async-aware
disabled setup error test for now as it's not working
* Working failure scenarios tests
* 🐎 Async WUnderground
* ∞ Them lines be too long
* Fix pylint warnings
* Changes according to comments
* Remove STATE_UNKNOWN
* 🔬 Fix tests
* Improve tests
* Initial commit of Vultr components
Have a working Vultr hub and binary sensor which pulls down the
following attributes of your VPS:
- Date created
- Subscription id (server id)
- Cost per month (in US$)
- Operating System installed
- IPv4 address
- label (human readable name)
- region
- number of vcpus
- which storage package chosen
- IPV6 address (if applicable)
- RAM amount
Working next on sensor and then testing / coverage.
* Added Vultr sensor for pending charges and current bandwidth. Refactored binary_sensor and hub too
* Corrected is_on bases
* Added basic tests for Vultr binary & platform
* Updated require files
* Changing test fixture to highlight different cases
* Written basic test for sensor.vultr
* Resolved linting errors and broken test
* Increase test coverage and corrected docs
* Resolved hound issues
* Revert back negative binary test
* Another hound resolve
* Refactoring and adding is switch, moving over to vultr branch
* Made Vultr components more resiliant to invalid configs
* Added negetive test for vultr binary sensor
* Added better testing of vultr sensor
* Resolved vultr platform test affecting subsequent vultr tests
* Moving VULTR components to single use design
* Added in sensor name config
* Added missing sensors var
* Resolved init data setting of sensors, added in name conf to switch
* Made the Vultr component more resiliant to startup failure with better alerting
* Various Vultr component changes
- Refactored sensor, binary_sensor, and switch to reference one subscription
- Renamed CURRENT_BANDWIDTH_GB monitored condition to CURRENT_BANDWIDTH_USED
- Improved test coverage
* Resolved local tox linting issue
* Added more testing for Vultr switch
* Improved test coverage for Vultr components
* Made PR comment changes to vultr binary sensor
* Made PR comment changes to Vultr sensor
* resolved PR comments for Vultr Switch
* Resolved vultr sensor name and improved tests
* Improved Vultr switch testing (default name formatting)
* Removed vultr hub failure checking
* Add support for different display currencies in CoinMarkerCap sensor.
* Add test for CoinMarketCap sensor.
* Add test dependency to gen_requirements_all.
* Fix review comments: use string formatting and less string case chanes.
* Extended Ring DoorBell to support camera playback and wifi sensors
* Bump python-ringdoorbell to version 0.1.6
* Support to camera playback via ffmpeg
* Extended ringdoorbell sensors to report WiFi attributes
* Extended unittests
* Makes lint happy
* Added support to stickup cameras and fixed logic
* Fixed unittests for stickup cameras
* Makes lint happy
* Refactored attributions and removed extra refresh method.
* new geo rss events sensor
* SCAN_INTERVAL instead of DEFAULT_SCAN_INTERVAL
* removed redefinition CONF_SCAN_INTERVAL
* definition of self._name not required
* removed unnecessary check and unnecessary parameter
* changed log levels
* fixed default name not used
* streamlined sensor name and entity id generation, removed unnecessary parameter
* fixed issue for entries without geometry data
* fixed tests after code changes
* simplified code
* simplified code; removed unnecessary imports
* fixed invalid variable name
* shorter sensor name and in turn entity id
* increasing test coverage for previously untested code
* fixed indentation and variable usage
* simplified test code
* merged two similar tests
* fixed an issue if no data could be fetched from external service; added test case for this case
* Add tube_state
Add tube_state sensor
* Final cleanup
* Make corrections
Correct PLATFORM_SCHEMA
* Fix space
* Make test pass
* Correct format of test
Test still failing, don’t understand why
* correct description
* Make test pass
Preferred method below returns None
state = self.hass.states.get('sensor.london_overground')
* Format for hound
* indent
* Make requested changes to test, not working
Test fails with:
AssertionError: assert 0 > 0
where 0 = len([])
Surely I need tube_state.setup_platform ?
* Fixed test
Config was wrong
* Change component name to london_tube
* Update name to london_underground
Make consistent
* cleanup
* Open Hardware Monitor sensor
Platform which is able to connect to the JSON API of Open Hardware Monitor and adds sensors for the devices.
* Remove copyright in header, not needed.
* - Removed old code
- Fixed typo’s in comments
- Removed log spamming
- Removed code that was unnecessary
- Use requests instead of urllib
- Moved sensor update functionality to data handler, to remove unwanted constructor parameters
* Fixed typo in comment
Added tests
* Added default fixture, to stabilize tests
* - Fix for values deeper than 4 levels, no longer relies on fixed level
- Fixed tests
* Removed timer in preference of helper methods
* Moved update functionality back to Entity….
Updated SCAN INTERVAL
* Added timeout to request
Removed retry when Open Hardware Monitor API is not reachable
Fixed naming of sensors
Flow optimalisations
Fixed tests to use states
* Remove unused import
* - Introduced Ring binary_sensor.
- Added unittest for Ring binary_sensor.
- Bumped ring_doorbell 3rd party module.
* Updated requirements
* Added correct file for unittest
* - Introduced Ring binary_sensor.
- Added unittest for Ring binary_sensor.
- Bumped ring_doorbell 3rd party module.
* Updated requirements
* Added correct file for unittest
* Added extra sensors last_ding and last_motion
* Modified Ring binary_sensor and sensor to inherit DOMAIN configuration
* Moved static to top ring.py
* Fixed requirements
* Bump version ring_doorbell to 0.1.2
* testing unittests
* Use hass.data dict instead GLOBALS
* Fixed unittests
* Bump ring_doorbell to 0.1.3
* Updated unittest and coverted to use decorator @requests_mock.Mocker()
* Updated ring_session with lower case
* Added support for multiple efergy sensors in the same household.
Also added inital tests for the efergy platform.
* Fixed current_values units.
Changed name to include efergy_ prefix.
* Add aurora sensor
* allow custom forecast threshold for aurora binary sensor
* move AuroraGateway functionality to Aurora data object to conform with HA standards
* [image_processing/microsoft_face_verify] face recognition for automation
* Add platform for microsoft face identify
* add unittest for demo
* Add unittest for platform