* Prevent TypeError when KNX RGB(W) light value contains None.
* Pylint doesn't like 'w' as variable name, therefore using 'white' instead.
* Simplified code as suggested by pvizeli.
The new release fixes a single regression from requests to aiohttp conversion.
Some devices do not respond with the correct mimetype which was not enforced
by requests but is enforced by aiohttp.
Related PR https://github.com/rytilahti/python-songpal/pull/59
* Imported homeassistant.util and slugified address if no name is specified
* Added a custom validator function in case name is not set in config
* Removed logger.debug line only used for testing
* Add above and below to sensor condition extra_fields
* Change unit_of_measurement to suffix in extra_fields
* Check if sensor has unit when getting capabilities
* Improve tests
* Update pycsspeechtts
From 1.0.2 to 1.0.3 as the old one is using an api that doesn't work
* Give a option to choose region
Api is now region dependent, so gave it a config
* Save client identifier from auth for future use
* Use websocket events to update Plex
* Handle websocket disconnections
* Use aiohttp, shut down socket cleanly
* Bad rebase fix
* Don't connect websocket during config_flow validation, fix tests
* Move websocket handling to external library
* Close websocket session on HA stop
* Use external library, revert unnecessary test change
* Async & lint fixes
* Clean up websocket stopper on entry unload
* Setup websocket in component, pass actual needed object to library
* Config entry and device for Coolmaster integration
* Lint/isort/flake/etc...
* Black formatting
* Code review fixes
* Config flow tests for coolmaster
* Add pycoolmaster requirement to test
* Remove port selection from Coolmaster config flow
* Update config_flow.py
* More idoimatic hash concat
* Correctly compute the supported_features in cover.mqtt
* Update homeassistant/components/mqtt/cover.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Correctly compute the supported_features in cover.mqtt
* Format
* Support for additional timeline events
* Update __init__.py
* Expose details on user
These lines expose apptype and event_by, which can be used to give information on events initiated by keypad users (vs. users on the mobile app, web app, or those initiated from HA through abodepy).
* removed a nesting level
* Lutron Pico fix
* Reverted logging change
Was unaware that f-strings aren't used in logging commands, reverted the usage
* Reverted logging change
Was unaware that f-strings aren't used in logging commands, reverted the usage
* fixed logic
* Move imports in nuheat component
* Fix tox tests
* Fix tox tests
* Update tests/components/nuheat/test_init.py
@Balloob suggested the change because direct replacement, the mock would never be reverted and impact the other tests.
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Added missing Alexa.ChannelController functions. Specifically ChangeChannel
and SkipChannel commands. These functions will call the play_media function
in a media_player app if it has the capability published and pass on the
channel# or channel name. The selected media player can then use this to
select the channel on the device it is associated to.
Modified the existing Alexa.StepSpeaker Setvolume function to actually do
a stepped volume change using the steps sent by Alexa. The Alexa default
step of 10 for a simple volume up/down can be changed via an exposed
media_player attribute called volume_step_default.
The default is set to 1. Any other value then default will be sent
as sequential volume up /down to the media_player.
* The test code has some weird behaviour with passed boolean values. Had to surround them in quotes for the tests to pass properly.
* Reverted test_smart_home.py change. Issue was not the boolean value but the behavior in the handler. The test suite does not like multiple await calls in a loop. Will investigate further. The handler code works though.
* Added ChannelController/SkipChannels test in test_smart_home.py
Added test for callSign payload attribute.
* Modified smart home test to allow more than one call to services
* Added more tests for ChannelChange functions for various payload options.
Removed name options from metadata payload section. not needed.
* Reverted assert call change in alexa test __init__.py back to ==1. Not sure if it was the cause of the pytest's failing on github
* Corrected a comment. First commit after a rebase.
* Comment line change. Also wanted to force a code check on github.
* Added a loop delay in StepSpeaker and SkipChannel functions for safety
* Removed uneeded sleep from for loops. Let remote handle delays
Moved service type decision out of for loops in ChannelController and StepSpeaker
Used constants instead of numeric values for support options in test module
* Change media_player const import to be more specific in source
* Modifed test_smart_home to use media_play constants instead of hardcode valu
* Removed unecessary test volume_step_default attribute from test_smart_home
* Removed uneeded comment in StepSpeaker function.
Re-ordered constants in test_smart_home.py
* Modified call to media_player play_media service to use media_player constant instead of hard coded value.
* Changed constant use to be consistant with rest of function.
* Correct merge conflicts in handlers.py and capablities.py
* Fix#28104 - CalDav support for floating datetimes
Timzones are optional in CalDav
It is possible that an entry contains neither a TZID, nor is an UTC time.
When this is the case, it should be treated as a floating date-time value,
which represent the same hour, minute, and second value regardless of which
time zone is currently being observed.
For Home-Assistant the correct timezone therefore is whatever is configured
as local time in the settings.
See https://www.kanzaki.com/docs/ical/dateTime.html
* Revert "Fix #28104 - CalDav support for floating datetimes"
This reverts commit cf32a6e390.
* add test case: floating events fail with error without patch
* Fix#28104 - CalDav support for floating datetimes
Timzones are optional in CalDav
It is possible that an entry contains neither a TZID, nor is an UTC time.
When this is the case, it should be treated as a floating date-time value,
which represent the same hour, minute, and second value regardless of which
time zone is currently being observed.
For Home-Assistant the correct timezone therefore is whatever is configured
as local time in the settings.
See https://www.kanzaki.com/docs/ical/dateTime.html
* style fix
* Add support for SmartStrip type devices (HS300, HS107) to tplink component
* Incorporate feedback from @MartinHjelmare using changes suggested by @shbatm
- Setting `_state` now uses a list comprehension
- `_alias` will use aliases from the Kasa app
- `_device_id` will be set to `_mac` for single plugs to retain backwards compatibility
* Add options to specify advertised IP and MAC for HomeKit Bridge
This makes use of HAP-python's new feature in version 2.6.0
that allows to specify the mDNS advertised IP and MAC address.
This is a requirement for the following use cases:
- Running Home Assistant behind a NAT, e.g. inside Docker.
- Running it on a system with multiple interfaces there
the default IP address, DNS entry and hostname diverge.
The forwarding of the required mDNS packets can be done with
an avahi-daemon based gateway, e.g. by using enable-reflector=yes.
Specifying the MAC address makes it possible to identify an
accessory in case HA is run inside a ephemeral docker container.
Whitespace changes were performed due to black and flake8.
* Update tests for HomeKit Bridge due to IP and MAC advertising
Whitespace changes were performed due to black and flake8.
* Remove the possibility to set the MAC address of the HomeKit Bridge
Since the MAC address is a random device ID, there is no need
for the user to be able to set a custom MAC address value for it.
Whitespace changes were performed due to black and flake8.
* Implement AlexaToggleController, AlexaRangeController, and AlexaModeController interfaces.
* Implement AlexaToggleController, AlexaRangeController, and AlexaModeController interfaces.
* Unkerfuffled comments to please the pydocstyle gods.
* Unkerfuffled comments in Tests to please the pydocstyle gods.
* Added additional test for more coverage.
* Removed OSCILLATING property check from from ModeController.
* Added capability report tests for ModeController, ToggleController, RangeController, PowerLevelController.
* Update homeassistant/components/alexa/capabilities.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Update homeassistant/components/alexa/capabilities.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* Corrected mis-spelling of AlexaCapability class.
* Changed instance from method to property in AlexaCapability class.
* Refactored to add {entity.domain}.{entity.attribute} to the instance name.
* Improved type handling for configuration object.
Added additional test for configuration object.
* Added Tests for unsupported domains for ModeController and RangeController
* Made changes to improve future scaling for other domains.
* Split fan range to speed maps into multiple constants.
* Code cleanup for orangepi_gpio
* Move constants to const.py
* Use async wherever possible
* Remove obsolute functions
* Use relative package integration imports
* Move callbacks to async_added_to_hass
* Avoid side effects in init
* Prevent blocking I/O in coroutines
* Make sure entity is setup before added
* Fixes the buienradar component and add smoke tests
* Fix errors due to circular imports after imports were moved.
* Add smoke test so this situation will be caught in the future.
* Add buienradar.util to coveragerc
* Refactor tests to standalone pytest test function style
* Add __init__ to buienradar tests
* Remove tplink device tracker
Version 0.94 added a distress signal and since then nothing has happened.
This commit removes the device tracker which should have never been
a part of tplink integration in the first place as it does not share
anything with this pyhs100-based integration / kasa smarthome.
* add updated requirements_test_all that was forgotten
* remove unit tests
* Update Plex platforms together
* Remove unnecessary methods
* Overhaul of Plex update logic
* Apply suggestions from code review
Use set instead of list
Co-Authored-By: Martin Hjelmare <marhje52@kth.se>
* Review suggestions and cleanup
* Fixes, remove sensor throttle
* Guarantee entity name, use common scheme
* Keep name stable once set
* Bump adguardhome to 0.3.0
* Add a more user friendly version handling and added logs
* ✏️ Fixes spelling error in abort messages
* ✏️ Error messages improvements, suggested by cgtobi
* 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
* [homematic] Split color and effect support
There are homematic devices (like HmIP-BSL) that support color but
do not support effects.
Split the support, so that color can be supported even if effects are not.
* Make effect fully independent of color
If a device supports effects for e.g. just brightness, it shouldn't be coupled to the color
* Add report state config
* Add initial steps for local report state
* Use owner of system as user_id
* First working prototype
* Only report state if requested
* Add some good logging and adjust constant name
* Move jwt generation out to non member
* Move cache out to caller
* Remove todo about cache
* Move getting token out of class
* Add timeout on calls
* Validate config dependency
* Support using service key to do sync call when api_key is not set
* Make sure timezone is fixed for datetime dummy
* Use exact expire_in time
* Support renewing token on 401
* Test retry on 401
* No need to declare dummy key twice
* Correct some docs on functions
* Add test for token expiry
* Refactor the Somfy auth implementation
* Typing
* Migrate Somfy to OAuth2 flow helper
* Add tests
* Add more tests
* Fix tests
* Fix type error
* More tests
* Remove side effect from constructor
* implementation -> auth_implementation
* Make get_implementation async
* Minor cleanup + Allow picking implementations.
* Add support for extra authorize data
* move imports to top-level in recorder init
* move imports to top-level in recorder migration
* move imports to top-level in recorder models
* move imports to top-level in recorder purge
* move imports to top-level in recorder util
* fix pylint
* Added sinch integration (notify component)
* Updated requirements
* Fixes according to lint
* Update homeassistant/components/sinch/notify.py
Co-Authored-By: Andrew Sayre <6730289+andrewsayre@users.noreply.github.com>
* Update homeassistant/components/sinch/notify.py
Co-Authored-By: Andrew Sayre <6730289+andrewsayre@users.noreply.github.com>
* Update homeassistant/components/sinch/notify.py
Co-Authored-By: Andrew Sayre <6730289+andrewsayre@users.noreply.github.com>
* Adds @bendikrb as codeowner
* Imports to the top. Catching specific exceptions. Logic fixes
* Updated CODEOWNERS
* Reformatting (black)
* Added sinch component to .coveragerc
* Conform to pylintrc
* Okay, Mr. Black
* Fixed: Catching too general exception Exception
* add ability for MQTT device tracker to map nondefault topic payloads to zones
* update new parameter name and add abbreviation
* support for payload_home, payload_not_home, and payload_custom
* use constants STATE_NOT_HOME and STATE_HOME as defaults
* reference state constants directly
* add empty dict as default for payload_custom
* change parameter name for custom mapping of payloads to non-home zones to be more descriptive
* removed 'payload_other_zones' per ballobs review
* remove abbreviation for 'payload_other_zones'
* add tests for feature
* Add grid sensors
* Formatting
* Add possibility to add attributes
* Add optimizer attribute
* Remove bare 'except'
* add proper exception
* Remove return attribution 0
* Ad inverter attribution
* Style change
* Add attribute name to sensors constants
* SENSOR_TYPES alphabetical and snake_case lower
* Formatting
* forgot snake_case lower
* Add extra meter sensors
* add critical error for debugging
* Update sensor.py
* swam meter sensors
* Add suitable icons to meter reading
* Fix for pointless-statement
homeassistant/components/solaredge_local/sensor.py:173:8: W0104: Statement seems to have no effect (pointless-statement)
homeassistant/components/solaredge_local/sensor.py:192:8: W0104: Statement seems to have no effect (pointless-statement)
homeassistant/components/solaredge_local/sensor.py:349:16: W0104: Statement seems to have no effect (pointless-statement)
homeassistant/components/solaredge_local/sensor.py:356:16: W0104: Statement seems to have no effect (pointless-statement)
* Rename import energy sensor
* Insert feadback
* Change to debug info
* Add check if attribute name exist
* Remove unnecessary else
* Add return None if no attributes
* flake
* Install our core dependencies for mypy in azure
To match local setups and tox.
* Use "system" mypy in pre-commit instead of the "real" mypy hook
The results of mypy depend on what is installed. And the mypy hook
runs in a virtualenv of its own, meaning we'd need to install and
maintain another set of our dependencies there... no. Use the "system"
one and reuse the environment that is set up anyway already instead.
* Reintroduce needed ruamel.yaml type ignore
This ignore is required when ruamel.yaml is installed, and we want it
to be as it's part of the core dependency set.
* move imports to top-level in mqtt server
* move imports to top-level in mqtt configflow
* move imports to top-level in mqtt init
* move imports to top-level in mqtt vacuum
* move imports to top-level in mqtt light
* Added a new configuration boolean parameter on_off_inverted to KNX Climate component.
* Remove unexpected spaces around equals.
* Parameter name changed to on_off_invert and modified to new version of XKNX library.
* Dict[key] for required config keys and keys with default config schema values.
When an amcrest camera was unplugged and then plugged again
it was impossible to reconnect to it, since the old
auth token was reused while we need to use a new one.
In fact, the method that is called every minute to check
the camera availability is going to fail always since we're
reusing an old token.
By forgetting the token (setting it to None) when going offline,
we ensure that we'll regenerate it in the next commands thus allowing
to reconnect to the camera when it comes back online.
* add high_precision (current) temperatures
* bump client to use aiohttp for v1 client
* token saving now event-driven rather than scheduled
* protection against invalid tokens that cause issues
* tweak error message
* New sensor platform integration for Orange and Rockland Utility smart energy meter
* New sensor platform integration for Orange and Rockland Utility smart energy meter
* bumped the oru py version to 0.1.9
* Added PLATFORM_SCHEMA
Adde unique_id property
Changed logger level from info to debug when printing the updated sensor value
Set the SCAN_INTERVAL to 15 mins
Added exception handling durin init when creating the oru meter instance
* Various fixes base on the PR review
+ Added SCAN_INTERVAL for 15 mins
* fixed path to documentation
* Add improved scene support for input_select
* Add tests for reproducing input_select states.
* Add some comments.
* Add support for set_options
Allows defining the options for an input_select in a scene.
* Add tests for set_options in test_reproduce_state
* Execute for real instead of mock execution.
* Improve tests for HomematicIP Cloud
* create fixtures remove decorators
* removed further decorators
* remove last decorator
* improve exception handling
* removed not required coroutine
* use the correct place for mock
marker-high-levels and marker-low-levels may not exist in printer
attributes returned by CUPS, so we'll use .get() to avoid this and
default to None:
KeyError: 'marker-high-levels'
Fixes#27518
* Added apprise notification component
* flake-8 fixes; black formatting + import merged to 1 line
* pylint issues resolved
* added github name to manifest.json
* import moved to top as per code review request
* manifest formatting to avoid failing ci
* .coveragerc updated to include apprise
* removed block for written tests
* more test coverage
* formatting as per code review
* tests converted to async style as per code review
* increased coverage
* bumped version of apprise to 0.8.1
* test that mocked entries are called
* added tests for hass.service loading
* support tags for those who identify the TARGET option
* renamed variable as per code review
* 'assert not' used instead of 'is False'
* added period (in case linter isn't happy)
* Update the Alexa.LockController Unlock directive to include the lockState property in the context of the response.
* Added Test for Alexa.LockController Unlock directive to include the lockState property in the context of the response.
* Refactoring imports for tensorflow
* Removing whitespace spaces on blank line 110
* Moving tensorflow to try/except block
* Fixed black formatting
* Refactoring try/except to if/else
* MQTT json light: allow floating point transition
Allow to use floating point values for the transition time of the MQTT json light.
In this way transitions shorter than 1s can be used (0.5 seconds for instance) if the MQTT light supports it.
* Always sent a float
* Adds support for config entries and device registry
* Fixing string formatting for logger
* Add unit test for abode config flow
* Fix for lights, only allow one config, add ability to unload entry
* Fix for subscribing to hass_events on adding abode component
* Several fixes from code review
* Several fixes from second code review
* Several fixes from third code review
* Update documentation url to fix branch conflict
* Fixes config flow and removes unused constants
* Fix for switches, polling entry option, improved tests
* Update .coveragerc, disable pylint W0611, remove polling from UI
* Multiple fixes and edits to adhere to style guidelines
* Removed unique_id
* Minor correction for formatting error in rebase
* Resolves issue causing CI to fail
* Bump abodepy version
* Add remove device callback and minor clean up
* Fix incorrect method name
* Docstring edits
* Fix duplicate import issues from rebase
* Add logout_listener attribute to AbodeSystem
* Add additional test for complete coverage
* Fix Onkyo when using pioneer AV receiver so it can use max volume of 164
* Update media_player.py
Change to make receiver max volume configurable
* Update manifest.json
Update to latest onkyo-eiscp with a fix required for Pionner AVR
* Fix Onkyo when using pioneer AV receiver so it can use max volume of 164
* Fix Onkyo when using pioneer AV receiver so it can use max volume of 164
* Format
* Requirements all
* Fix CI errors
* Black
* Fixing connection issues with withings API by switching to a maintained client codebase.
* Updating requirements files.
* Adding withings api to requirements script.
* Using version of withings api with static version in setup.py.
* Updating requirements files.
* Move imports in dht component
* remove empty line
* Move imports for pushbullet component
* revert unwanted changes
* Move imports for pushbullet component
* remove dht change from that branch
* remove dht changes from this branch
* Added improved scene support to the input_number integration.
* Minor fix in test.
* Use snake case for variable names in test_reproduce_state.
* Remove redundant tests.
* Standardize times in time sensors Jewish calendar
* Fix pylint errors
* Add non-default time format test
* Make black happy
* Remove timestamp device class
Timestamp device class requires ISO 8601 format
* Revert "Remove timestamp device class"
This reverts commit 8a2fda39831bc750c3a77aa774b84b054d78032c.
* Remove time_format
As this is part of the UI decision, it should be decided by lovelace.
A nice addition for a future PR, might be the option to hint to lovelace the preferred way to display some data.
* Update name of state_attributes
* State of timestamp variable to be shown in UTC
Although I don't understand it, I give up :)
* Remove unnecessary attributes
I don't really see the value in these attributes, if there are any they should be implemented in
the sensor component for the timestamp device class
* Fixing connection issues with withings API by switching to a maintained client codebase.
* Updating requirements files.
* Adding withings api to requirements script.
* Using version of withings api with static version in setup.py.
* Updating requirements files.
* Install requirements for all deps with tests
* Remove unused REQUIREMENTS var
* Print diff if not the same
* Simplify
* Update command line
* Fix detecting empty dirs
* Install non-integration
* Fix upnp tests
* Lint
* Fix ZHA test
* Fixing connection issues with withings API by switching to a maintained client codebase.
* Updating requirements files.
* Adding withings api to requirements script.
* Fixing connection issues with withings API by switching to a maintained client codebase.
* Updating requirements files.
* Adding withings api to requirements script.
* Don't force extra update on startup
* Skip on entity add instead
* Conditional update based on HA state
* Only force entity state update when postponed
* Clean up state updating
* Delay YAML import
* Add PTZ support to Foscam camera component
* Address review comments:
- Move service to foscam domain
- Use `dict[key]` for required schema keys or with defaults
- Fix sync operations in async context
- Remove excessive logging
* Fix import order
* Move all the initialization to setup_platform and fix motion detection status logic
* Move function dictionary out of the function.
* Change user input to lowercase snake case
* Change user input to lowercase snake case
* Fix service example value
* Omit foscam const module from code coverage tests
* Add myself to foscam codeowners
* Add more device info data
* Add attributes to device_info
* Refactor sensor
* Filter
devices
* Update following review
* Update following review
* Add device_Class
* Switch on/off all lights, and wait for the result
Reuses the parallel_updates semaphore.
This is a small crutch which serializes platforms which already do tis
for updates. Platforms which can parallelize everything, this makes it
go faster
* Fix broken unittest
With manual validation, with help from @frenck, we found out that the
assertions are wrong and the test should be failing.
The sequence requested is
OFF
ON
without cancelation, this code should result in:
off,off,off,on,on,on
testable, by adding a `await hass.async_block_till_done()` between the
off and on call.
with cancelation. there should be less off call's so
off,on,on,on
* Adding tests for async_request_call
* Process review feedback
* Switch gather with wait
* 👕 running black
* initial commit
* Minor changes
* add async setup entry
* Add translations and some other stuff
* add and remove entry
* use async_setup_entry
* Update config_flows.py
* dshokouhi's changes
* Improve workflow
* Add valid_vendors
* Add entity registry
* Add device registry
* Update entry from configuration.yaml
* Revert unneccesary changes
* Update .coveragerc
* Prepared tests
* Add dshokouhi and Santobert as codeowners
* Fix unload entry and abort when already_configured
* First tests
* Add test for abort cases
* Add test for invalid credentials on import
* Add one last test
* Add test_init.py with some tests
* Address reviews, part 1
* Update outdated entry
* await instead of add_job
* run IO inside an executor
* remove faulty test
* Fix pylint issues
* Move IO out of constructur
* Edit error translations
* Edit imports
* Minor changes
* Remove test for invalid vendor
* Async setup platform
* Edit login function
* Moved IO out if init
* Update switches after added to hass
* Revert update outdated entry
* try and update new entrys from config.yaml
* Add test invalid vendor
* Default to neato
* TRV-Support
* pyhive import update
* Moved HVAC to new line
* updated pyhiveapi version
* Update for pylint errors
* Fix Pylint Errors
* Fixed Pylint 2
* removed whitespace
* Black
* Updates following review
* updated phyhive to 0.2.19.3
* Corrected logic on TRV name
* updated requirements as requested
* Black run
* Guard against network errors for Dark Sky
- Prevents network errors from throwing an exception during
state updates for the Dark Sky weather component.
* Implement `available` for Dark Sky component
* unknown -> unavailable
* Add support for the contains flags on areas to allow specifying overlap vs contains
* Remove draw_box
* Add timeout option
* Fix import for CONF_TIMEOUT
* Change contains to covers
* Add config flow support to opentherm_gw.
Bump pyotgw to 0.5b0 (required for connection testing)
Existing entries in configuration.yaml will be converted to config entries and ignored in future runs.
* Fix not connecting to Gateway on startup.
Pylint fixes.
* Add tests for config flow.
Remove non-essential options from config flow.
Restructure config entry data.
* Make sure gw_id is slugified
* Fix template fan turn_on action
The turn_on action of a template fan should
receive the 'speed' attribute in order to give
the user the possibility of define the behaviour
of this action as he desires
Fixes#27176
* Format
* Update fan.py
* Add manufacturer const
* Add device_info to binary sensor
* Add device info to climate
* Add device info to sensor
* Add device info to weather
* Add constant for device info
* Fix log messages
* Use guard clauses
* Fix homekit temperature sensor for round with one decimal
* Removing unnecesary operations
* Adapting tests for new temperature_to_homekit() result precision
* Added retry capability to the component initialization.
* Removed extra chars
* Black formatting.
* Removed issue with block upon setup. Now setup will only fail if auth failed to the device.
* Don't force extra update on startup
* Skip on entity add instead
* Conditional update based on HA state
* Only force entity state update when postponed
* Clean up state updating
* Delay YAML import
* Fixes#26405 Return None if light state is off since attribute is unavailable, prevents property from being reported with invalid value of 0.
* Update Test to check property is not reported when light state is off.
* Added Fan to display categories.
* Added Doorbell to display categories.
* Added Microwave to display categories.
* Added Security Panel to display categories.
* Updated FanCapabilities to use FAN display category.
* Updated Tests for FanCapabilities to use FAN display category.
* Return None for AlexaThermostatController and AlexaTemperatureSensor properties if climate state is unavailable. Preserves raising an error for UnsupportedProperty, and allows Alexa.EndpointHealth to handle the unavailable state.
* Added additional tests for climate state reporting.
* Add controls to catch when client goes offline and UniFi bug marks client as wired
* Device trackers shouldn't jump between going away and home
* POE control shouldn't add normally wireless clients as POE control switches
* Add in attributes to track when a user unlocks the lock with a PIN, and when the battery runs low.
* Vera attributes for who entered PIN on lock, and low battery warning.
* Changed last_user_id to use changed_by interface.
* Bump pyvera version to 0.3.6; remove guard code for earlier pyvera versions.
* Bump pyvera version to 0.3.6
* Add unique id to platforms
Add unique id for binary sensor, climate, and sensor.
* Add unique id to weather platform
* Simplify unique_id for weather platform
* Fix lint for unique_id in sensor
* Fix lint for unique_id in binary sensor
* Added availability_template to Template Lock platform
* Added to test for invalid values in availability_template
* Black and Lint fix
* black formatting
* Updated AVAILABILITY_TEMPLATE Rendering error
* Moved const to package Const.py
* Fix import order (pylint)
* Moved availability_template rendering to common loop
* Brought contant into line
* Cleaned up const and compare lowercase result to 'true'
* reverted _available back to boolean
* Fixed tests (async, magic values and state checks)
* Add saj component
* Performed requested changes after review
* Performed requested changes after review 2
* Performed requested changes after review 3
* Black
* Bump pysaj library version
* Changes after review
* Fix flake8
* Review changes + isort
* address issues #25984, #25985
* small tweak
* refactor - fix bugs, coding erros, consolidate
* some zones don't have schedules
* some zones don't have schedules 2
* some zones don't have schedules 3
* fix water_heater, add away mode
* readbility tweak
* bugfix: no refesh after state change
* bugfix: no refesh after state change 2
* temove dodgy wrappers (protected-access), fix until logic
* remove dodgy _set_zone_mode wrapper
* tweak
* tweak docstrings
* refactor as per PR review
* refactor as per PR review 3
* refactor to use dt_util
* small tweak
* tweak doc strings
* remove packet from _refresh
* set_temp() don't have until
* add unique_id
* add unique_id 2
* Add Soma integration
* Fixed cover position get/set
* Try to list devices before creating config entries to see if Soma Connect can be polled
* Style fixes
* Updated requirements
* Updated .coveragerc to ignore Soma component
* Fixed linter errors
* Implemented stop command
* Test coverage fixes according to feedback
* Fixes to code according to feedback
* Added error logging and tested config from yaml
* Indentation fix
* Removed unnecessary method
* Wrong indentation
* Added some tests
* Added test for import step leading to entry creation
* Added feedback to user form in case of connection error
* Minor fixes according to feedback
* Changed exception type in error handling for connection to Connect
* To keep API consistent for Google Home and Alexa we swapped the open/closed position values back and I reversed them in this integration as well
* regenerated requirements, ran black, addde __init__.py to ignore file
* Added pysoma library to gen_requirements_all.py
* Added missing test case
* removed useless return value
* fix rest_command when server is unreachable
When a server doesn't exist, the connection fails immediately, rather
than waiting for a timeout. This means that the async handler is never
reached, and the request variable never filled, yet it's used in the
client error exception handler, so this one bugs out.
By using the command_config, we avoid using the potentially unassigned
request variable, avoiding this problem.
This patch makes scripts work that have a rest_command in them which
fails due to a server being offline.
* render template_url
instead of printing the template object
* fix formatting
* fix format using black
* only render url once
* blacken...
* Type hint additions
* Remove optional from sidebar_icon comment
Co-Authored-By: Franck Nijhof <frenck@frenck.nl>
* Remove optional from sidebar_title comment
Co-Authored-By: Franck Nijhof <frenck@frenck.nl>
* Fix issues after rebase and mypy 0.730
* Added availability_template to Template Vacuum platform
* Added to test for invalid values in availability_template
* Updated AVAILABILITY_TEMPLATE Rendering error
* Moved const to package Const.py
* Removed 'Magic' string
* Cleaned up const and compare lowercase result to 'true'
* reverted _available back to boolean
* Fixed tests (async, magic values and state checks)
* Added availability_template to Template Light platform
* Added to test for invalid values in availability_template
* Updated AVAILABILITY_TEMPLATE Rendering error
* Moved const to package Const.py
* Fix import order (pylint)
* Moved availability_template rendering to common loop
* Removed 'Magic' string
* Cleaned up const and compare lowercase result to 'true'
* reverted _available back to boolean
* Fixed tests (async, magic values and state checks)
* Added availability_template to Template Fan platform
* Added to test for invalid values in availability_template
* fixed component ID in test
* Made availability_template redering erorr more concise
* Updated AVAILABILITY_TEMPLATE Rendering error
* Moved const to package Const.py
* Fix import order (pylint)
* Removed 'Magic' string
* Cleaned up const and compare lowercase result to 'true'
* reverted _available back to boolean
* Fixed tests (magic values and state checks)
* Added availability_template to Template Binary Sensor platform
* Added to test for invalid values in availability_template
* black
* simplified exception handler
* Updated AVAILABILITY_TEMPLATE Rendering error
* Moved const to package Const.py
* Fix import order (pylint)
* Moved availability_template rendering to common loop
* Removed 'Magic' string
* Cleaned up const and compare lowercase result to 'true'
* reverted _available back to boolean
* Fixed tests (magic values and state checks)
* Added availability_template to Template Cover platform
* Added to test for invalid values in availability_template
* Updated AVAILABILITY_TEMPLATE Rendering error
* Moved const to package Const.py
* Fix import order (pylint)
* Moved availability_template rendering to common loop
* Removed 'Magic' string and removed duplicate code
* Cleaned up const and compare lowercase result to 'true'
* reverted _available back to boolean
* Fixed tests (async, magic values and state checks)
* bump yessssms version to 0.4.0
adds 'provider' config parameter
adds support for providers:
* billitel
* EDUCOM
* fenercell
* georg
* goood
* kronemobile
* kuriermobil
* SIMfonie
* teleplanet
* WOWWW
* yooopi
* black formatting
* moved CONF_PROVIDER to component
* black formatting
* moved error handling on init to get_service
* return None, init logging moved to get_service
* moved YesssSMS import to top of module
* test login data on init. add flag for login data test. removed KeyError
* catch connection error, remove CONF_TEST_LOGIN_DATA config flag
* requirements updated
* lint
* lint: use getters for protected members, bump version to 0.4.1b4
* requirements updated to 0.4.1b4
* fix logging messages, info to warning, clear up login_data check
* change valid login data message to debug
* fix tests
* add tests for get_service
* bump yessssms version 0.4.1
* tests for get_service refurbished
* test refactoring with fixtures
* polish fixtures ✨
* replace Mock with patch 🔄
* tiny string fixes, removed unused return_value 🐈
* Validate date and time in create vaction
Improve validation with utility functions.
* Improve validate ATTR_VACATION_NAME
* Add tests for ecobee.util functions
* Revise tests as standalone functions
* Add xbox_live custom update schedule
* Set a default update interval that is within the free limit. Consider
number of users per api key when setting interval.
* Add codeowner
* Add callback decorator
* Added support for more ebus "bai" sensors.
* Using common constants for measuring unit names.
Fixed review item
* dummy commit to restart CI
* Fixed review item
* Fixed formatting
black --fast homeassistant
* Removed trailing spaces
* Fixed black formatting
* trigger new build
* Bump pyecobee to 0.1.3
* Add functions, attrs, and services to climate
Fixes
* Update requirements
* Update service strings
* Fix typo
* Fix log msg string formatting for lint
* Change some parameters to Inclusive
start_date, start_time, end_date, and end_time must be specified together.
* Use built-in convert util for temps
* Match other service variable names
* Update pyrainbird to version 0.2.0 to fix zone number issue:
- home-assistant/home-assistant/issues/24519
- jbarrancos/pyrainbird/issues/5
- https://community.home-assistant.io/t/rainbird-zone-switches-5-8-dont-correspond/104705
* requirements_all.txt regenerated
* code formatting
* pyrainbird version 0.3.0
* zone id
* rainsensor return state
* updating rainsensor
* new version of pyrainbird
* binary sensor state
* quiet in check format
* is_on instead of state for binary_sensor
* no unit of measurement for binary sensor
* no monitored conditions config
* get keys of dict directly
* removed redundant update of state
* simplified switch
* right states for switch
* raindelay sensor
* raindelay sensor
* binary sensor state
* binary sensor state
* reorganized imports
* doc on public method
* reformatted
* add irrigation service to rain bird, which allows you to set the duration
* rebased on konikvranik and solved some feedback
* add irrigation service to rain bird
* sensor types to constants
* synchronized register service
* patform discovery
* binary sensor as wrapper to sensor
* version 0.4.0
* new config approach
* sensors cleanup
* bypass if no zones found
* platform schema removed
* Change config schema to list of controllers
some small code improvements as suggested in CR:
- dictionary acces by []
- just return instead of return False
- import order
- no optional parameter name
* some small code improvements as suggested in CR:
- supported platforms in constant
- just return instead of return False
- removed unused constant
* No single controller configuration
Co-Authored-By: Martin Hjelmare <marhje52@kth.se>
* pyrainbird 0.4.1
* individual switch configuration
* imports order
* generate default name out of entity
* trigger time required for controller
* incorporated CR remarks:
- constant fo rzones
- removed SCAN_INTERVAL
- detection of success on initialization
- removed underscore
- refactored if/else
- empty line on end of file
- hass as first parameter
* import of library on top
* refactored
* Update homeassistant/components/rainbird/__init__.py
Co-Authored-By: Martin Hjelmare <marhje52@kth.se>
* validate time and set defaults
* set defaults on right place
* pylint bypass
* iterate over values
* codeowner
* reverted changes:
* irrigation time just as positive integer. Making it complex does make
sense
* zone edfaults fullfiled at runtime. There is no information about
available zones in configuration time.
* codeowners updated
* accept timedelta in irrigation time
* simplified time calculation
* call total_seconds
* irrigation time as seconds.
* simplified schema
* Add config options support
* Actually copy dict
* Move media_player options to PlexServer class
* Handle updated config options
* Move callback out of server
* Add MySensors ACK
The addition of the ACK will ask sensors to respond to commands sent to them which will update the MySensors device in Home Assistant.
Currently, if a default MySensors sketch is used the device will update but Home Assistant does not reflect the update and custom code has to be added to tell Home Assistant the command was received. With the ACK set to 1 in the message all this is taken care of by MySensors.
* Run black
* Add basic config flow
* Fix json files
* Update __init__.py
* Fix json errors
* Move constants to const.py
* Add ecobee to generated config flows
* Update config_flow for updated API
* Update manifest to include new dependencies
Bump pyecobee, add aiofiles.
* Update constants for ecobee
* Modify ecobee setup to use config flow
* Bump dependency
* Update binary_sensor to use config_entry
* Update sensor to use config_entry
* Update __init__.py
* Update weather to use config_entry
* Update notify.py
* Update ecobee constants
* Update climate to use config_entry
* Avoid a breaking change on ecobee services
* Store api key from old config entry
* Allow unloading of config entry
* Show user a form before import
* Refine import flow
* Update strings.json to remove import step
Not needed.
* Move third party imports to top of module
* Remove periods from end of log messages
* Make configuration.yaml config optional
* Remove unused strings
* Reorganize config flow
* Remove unneeded requirement
* No need to store API key
* Update async_unload_entry
* Clean up if/else statements
* Update requirements_all.txt
* Fix config schema
* Update __init__.py
* Remove check for DATA_ECOBEE_CONFIG
* Remove redundant check
* Add check for DATA_ECOBEE_CONFIG
* Change setup_platform to async
* Fix state unknown and imports
* Change init step to user
* Have import step raise specific exceptions
* Rearrange try/except block in import flow
* Convert update() and refresh() to coroutines
...and update platforms to use async_update coroutine.
* Finish converting init to async
* Preliminary tests
* Test full implementation
* Update test_config_flow.py
* Update test_config_flow.py
* Add self to codeowners
* Update test_config_flow.py
* Use MockConfigEntry
* Update test_config_flow.py
* Update CODEOWNERS
* pylint fixes
* Register services under ecobee domain
Breaking change!
* Pylint fixes
* Pylint fixes
* Pylint fixes
* Move service strings to ecobee domain
* Fix log message capitalization
* Fix import formatting
* Update .coveragerc
* Add __init__ to coveragerc
* Add option flow test
* Update .coveragerc
* Act on updated options
* Revert "Act on updated options"
This reverts commit 56b0a859f2e3e80b6f4c77a8f784a2b29ee2cce9.
* Remove hold_temp from climate
* Remove hold_temp and options from init
* Remove options handler from config flow
* Remove options strings
* Remove options flow test
* Remove hold_temp constants
* Fix climate tests
* Pass api key to user step in import flow
* Update test_config_flow.py
Ensure that the import step calls the user step with the user's api key as user input if importing from ecobee.conf/validating imported keys fails.
* add alarm_control_panel to google_assistant
* add cancel arming option
* raise error if requested state is same as current
* rework executing command logic
* Add tests
* fixed tests
* fixed level synonyms
* Added availability_template to Template Switch platform
* Fixed Entity discovery big and coverage
* flake8
* Cleaned template setup
* I'll remember to run black every time one of these days...
* Updated AVAILABILITY_TEMPLATE Rendering error
* Moved const to package Const.py
* Fix import order (pylint)
* Refactored availability_tempalte rendering to common loop
* Cleaned up const and compare lowercase result to 'true'
* reverted _available back to boolean
* Fixed tests (async, magic values and state checks)
* Fixed Enity Extraction
* Added availability_template to Template Sensor platform
* Added to test for invalid values in availability_template
* Updated AVAILABILITY_TEMPLATE Rendering error
* Moved const to package Const.py
* Fix import order (pylint)
* Moved availability_template rendering to common loop
* Removed 'Magic' string
* Cleaned up const and compare lowercase result to 'true'
* Device is unavailbale if value template render fails
* Converted test ot Async and fixed states
* Comverted back to using boolean for _availability
* Fixed state check in test
* Use light's on_level in ZHA to turn on at the correct brightness
Previously, if the light is turned off with a time transition, the
brightness level stored in the light will be 1. The next time the light
is turned on with no explicit brightness, it will be at 1.
This is solved by storing the current brightness in on_level before
turning off, and then using that when turning on (by calling the
onOff cluster 'on' command).
* store off light level locally to avoid wearing device's flash memory
* store off brightness in HA attributes
* improve set/clear of off_brightness
* fix device_state_attributes; clear off_brightness when light goes on
* fix tests
* 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
* Add Ombi integration
* Black
* Remove trailing comma
* Change dict.get to dict[key] for known keys
* Remove monitored conditions from config
* Define SCAN_INTERVAL for default scan interval
* Adjust requests syntax and add music_requests
* Remove Ombi object initialization
* Move constants to const.py
* Fix imports
* Set pyombi requirement to version 0.1.3
* Add services.yaml
* Add config schema and setup for integration
* Set pyombi requirement to version 0.1.3
* Fix syntax for scan interval
* Fix datetime import
* Add all files from ombi component
* Move imports around
* Move imports around
* Move pyombi import to top of module
* Move scan_interval to sensor module
* Add custom validator for urlbase
* Add guard clause for discovery_info
* Add service validation schemas and constants
* Bump pyombi version
* Adjust urlbase validation
* Add exception warnings for irretrievable media
* Bump pyombi
* Change from .get to dict[key]
* Change schema and conf variable names
* Set return to return false
* Remove unneeded return
* Add basic support for IKEA Fyrtur blinds
* Update coveragerc
* Fix typo
* Fix typos
* Update following review
* Fix incorrect rebase
* Fix error
* Update to new format of unique id
* Add cover
* Remove reference to cover in unique id
* Update Vivotek camera component
Load model name to instance attribute
* Update Vivotek camera component
Ensure `update` is called when the entity is added.
* Update libpyvivotek to 0.2.2
https://pypi.org/project/libpyvivotek/0.2.2/
- Retrieve camera model name anonymously
- Raise a more helpful error for invalid creds
* fixed latitude/longitude keys to be conform with spaceapi specification
* version is now a string as required by the spaceapi specification
* add spacefed
* fixed lat/lon in spaceapi tests
* extended tests
* add feeds
* extended tests
* add cache
* add more tests
* add projects
* more tests
* add radio_show
* more tests
* add additional contact attributes
* corrected valid issue_repoer_channel options
* validate min length of contact/keymasters
* fixed location as address is not required by spec
* Update homeassistant/components/spaceapi/__init__.py
Co-Authored-By: Fabian Affolter <mail@fabian-affolter.ch>
* Update homeassistant/components/spaceapi/__init__.py
Co-Authored-By: Fabian Affolter <mail@fabian-affolter.ch>
* fixed issue with name change for longitude/latitude
* Added expire_after to mqtt binary_sensor. Updated mqtt test_binary_sensor test.
* Cleanup MQTT Binary Sensor and tests after suggestions
* Updated to not alter state at all
* Change to include custom expired variable, and override available property to check expired
* Added # pylint: disable=no-member
* making SENSOR_TYPES universal
* bump solaredge-local version 0.2.0
* add maintenance data
* add calculations for optimizer data
* add new sensors
* add statistics lib
* update sensor data setting
* making api requests universal
* fix Cl
* Update requirements_all.txt
* fix temperature
* fix f-strings
* Style guidelines
* shortening line length
* PEP8 test
* flake8
* Black test
* revert line length to 80
* Repair line 12
* black
* style change
* Black
* black using pip
* fix for pylint
* added proper variable name
* for loop cleanup
* fix capitals
* Update units
* black
* add check for good connection to inverter
* Roundig large numbers
* Add myself to codeowners
* Fix layout manifest
* Fix layout manifest
* Update manifest.json
* repair manifest layout
* remove newline in manifest
* add myself to CODEOWNERS
* 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
* Improve gateway tests
* Harmonize all tests to use the same gateway initialization method
* Improve scene tests
* Add gateway resync call to platform tests
* Forgot to change switch tests to use common gateway method
* Improve event tests
* 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
* iZone component
* Rename constants to const.
* Changes as per code review.
* Stop listening if discovery times out.
* Unload properly
* Changes as per code review
* Climate 1.0
* Use dispatcher instead of listener
* Free air settings
* Test case for config flow.
* Changes as per code review
* Fix error on shutdown
* Changes as per code review
* Lint fix
* Black formatting
* Black on test
* Fix test
* Lint fix
* Formatting
* Updated requirements
* Remaining patches
* Per code r/v
* Add config flow support
* Log error on failed connection
* Review comments
* Unused errors
* Move form to step
* Use instance var instead of passing argument
* Only share servers created by component
* Return errors early to avoid try:else
* Separate debug for validation vs setup
* Unnecessary
* Unnecessary checks
* Combine import flows, move logic to component
* Use config entry discovery handler
* Temporary lint fix
* Filter out servers already configured
* Remove manual config flow
* Skip discovery if a config exists
* Swap conditional to reduce indenting
* Only discover when no configs created or creating
* Un-nest function
* Proper async use
* Move legacy file import to discovery
* Fix, bad else
* Separate validate step
* Unused without manual setup step
* Async oops
* First attempt at tests
* Test cleanup
* Full test coverage for config_flow, enable tests
* Lint
* Fix lint vs black
* Add test init
* Add test package requirement
* Actually run script
* Use 'not None' convention
* Group exceptions by result
* Improve logic, add new error and test
* Test cleanup
* Add more asserts
Referencing issue #26418.
Prometheus metric names can only contain chars a-zA-Z0-9, : and _
(https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
HA currently generates invalid prometheus names, e.g. if the unit for a
sensor is a non-ASCII character containing ° or μ. To resolve, we need
to sanitize the name before creating, replacing non-valid characters
with a valid representation. In this case, I've used
"u{unicode-hex-code}".
Also updated the test case to make sure that the ° case is handled.
Referencing issue #26418.
Prometheus metric names can only contain chars a-zA-Z0-9, : and _
(https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
HA currently generates invalid prometheus names, e.g. if the unit for a
sensor is a non-ASCII character containing ° or μ. To resolve, we need
to sanitize the name before creating, replacing non-valid characters
with a valid representation. In this case, I've used
"u{unicode-hex-code}".
Also updated the test case to make sure that the ° case is handled.
* Change datetime.now() to dt_util.now() in cases where the functionality should stay the same
These changes should not affect the functionality, rather cleanup our codebase.
In general we would like integrations to not to use datetime.now() unless there's a very good
reason for it, rather use our own dt_util.now() which makes the code aware of our current time
zone.
* Use datetime.utcnow() for season sensor to get offset-naive utc time
* Revert "Use datetime.utcnow() for season sensor to get offset-naive utc time"
This reverts commit 5f36463d9c7d52f8e11ffcec7e57dfbc7b21bdd1.
* BOM sensor last_updated should be UTC as well
* Run black
* Remove unused last_partition_update variable
* Improve binary sensor tests
* Fix sensor tests
* Improve readability of binary sensor
* Fix climate tests
Fix sensor platform not loading climate devices as sensors
* Add test to verify adding new sensor after start up
* Fix typo in translations
* Work on bug #26619
* readd the homeassistant.start event
* Remove the callback
* Added the executor_job for _test_connection
* Update test_config_flow.py
* Fix typo in translations
* Work on bug #26619
* readd the homeassistant.start event
* Remove the callback
* Added the executor_job for _test_connection
* Update test_config_flow.py
* Composite entities require multiple value types to be present in
child values to function. Any of those value types should trigger an
entity update if updated.
* Always write platform v names as sets.
* Run black.
* velux KLF200 device did not disconnect properly when rebooting the hass device.
disconnect is now being called on the 'EVENT_HOMEASSISTANT_STOP' event
* removed comment
* removed comment
* trigger bot
* trigger bot
* trigger bot
* logging casing fixed. code moved from init.
* logger level debug
logger level moved from info to debug
only config[DOMAIN] exposed to module
imports moved to top
* DOMAIN part of config passed to module.
* removed trailing whitespaces etc.
* black --fast changes
* added missing docstring
* D400 First line should end with a period
* black formatting
Allow turning a light on instantly, with no transition time.
This is actually required for IKEA lights to be able to set brightness
and color temp in a single call.
* Improve configure service tests
* Add refresh device service test
* Add tests for setup and unload services
* Remove refresh device test from test_init
* Extra verification of deconz services existance in hass.data
* Emulate color temperature for non-ct lights in light groups
* fix tests
* Address review comments
* Fix black formatting
* Fix for pylint
* Address comments
* Fix black formatting
* Address comments
* Initial implementation of ZCL color loop effect
* Fix linter complaints
* Use const for action
* Reformat with Black
* Cleanup after review.
* Handle effect being None
* Improve bluetooth device tracker code
* Don't use set operations
* Fix logging template interpolation
* Warn if not tracking new devices and not devices to track
* Updates due to CR
* Fix pylint warning
* Fix pylint import warning
* Merge with dev
* Add support for doods
* Move connection to external module
* Fix for CI
* Another update for CI
* Reformatted via black
* Updated linting stuff
* Updated per code review
* Removed none check for something with a default
* Updated config parsing
* Updated if statements, need to disable lint check
* Fixed formatting and bug that should make linter happy
* Fixed one more issue with box drawing for areas
* removed extra imports
* Reworked per suggestion
* Changed output to debug for informational detection message
* Early draft
* Getting there
* Working fully with Hue dimmer remote
* Fix Balloobs comments
* No side effects in constructor
* Improve hue dimmer
* Add Ikea remote control
* Add xiaomi button support
* Refactor getting deconz event
* Added xiaomi devices and tradfri wireless dimmer
* Resolve unique id from device id
* Add Hue Tap and Tradfri on off switch
* More triggers for ikea on off switch and Aqara double wall switch
* Add support for Tradfri open close remote
* Fix changes after rebase
* Initial test
* Change id to event_id
* Fix translations and add subtypes
* Try if tests pass without the new tests
* Revert disabling tests
Add new exception InvalidDeviceAutomationConfig
* Ignore places calling remotes
* Enable all gateway tests
* Found the issue, now to identify which test creates it
* Remove block till done
* See if device automation test passes in azure
* Register event to device registry
* Enable test sensors
* Skip deconz event tests currently failing
* Added reason why skipping tests
* Add Météo France icons
* Add Météo France device_class (temperature) + use constants
* Fix weather alert info log
* Use new f"{...} {...}" format for sensor name
* Added growatt server integration
* Ran black formatter
* Processed feedback.
* Made attributes more readable.
* Create a sensor for each property.
* Added unique_ids
* Accidentally flipped functions
* Added dynamic device classes.
* Fixed stale session.
* Move config and connections to component
* Separate imports
* Set a unique_id on sensor
* Set a platforms const
* Add SERVERS dict, hardcode to single server
* Move to debug
* Return false
* More debug
* Import at top to fix lint
* Guard against legacy setup attempts
* Refactor to add setup callback
* Review comments
* Log levels
* Return result of callback
* Store CONFIGURING in hass.data
* Set up discovery if no config data
* Use schema to set defaults
* Remove media_player options to remove entities
* Improve error handling
* Initial commit for the solaredge configflow
* rerun the hassfest script
* Adding testcases
* Rerun hassfest, problem with black?
* Requirements for the tests
* Remove CONF_MONITORED_CONDITIONS from configuration.yaml
* Remove the options flow strings
* Resolve some comments
* Comments
* More comments
* Move the config from the sensor platform to the component itself
* More comments
* More comments
* Added solaredge __init__
* Added more test to increase coverage
* Add vivotek camera component
* Update vivotek camera compontent
Use async request to enable/disable motion detection
* Update Vivotek camera
- Use HTTPS
- Use IP address for still and stream
* Update vivotek component
- Add brand and model properties
- Add state property
- Use attribute to save motion detection status
* Add vivotek camera to .coveragerc
* Update vivotek camera
Fix lint errors
* Update vivotek camera
Remove unused method
* Update Vivotek integration to use libpyvivotek
Use libpyvivotek instead of directly making HTTPS API calls.
* Update Vivotek component
Address code review.
- Remove unused code
- Replace async methods with synchronous methods
- Update docstrings
* Linter fixes for Vivotek component
* Update Vivotek camera component
- Add SSL option
- Remove authentication options as only basic authentication
is currently working
* Update Vivotek camera component
- Make frame rate configurable
- Require username and password
* Remove unused constants in Vivotek component
* Update Vivotek camera integration
- Use libpyvivotek v0.2.1 with better response parsing
- Use add_entities instead of async_add_entities
* Update Vivotek camera component
- Build camera and stream source ouside VivotekCam
- Remove unnecessary _stream_source attribute
* Update Vivotek camera component
- Move brand to constant
- Move _supported_features to property
* Update Vivotek camera compontent to remove unused property
The PyVicare API can return the string "error" in case of connection
or authentication errors.
The current_temperature value could be set to "error" instead of a
nueric value or None which breaks the climate component.
This commit sets the current_temperature to None instead.
* KNX light - tunable white rounding error
mitigate rounding errors in kelvin - mired conversion for lights with relative color temperature
fixes https://github.com/home-assistant/home-assistant/issues/26357
* typo _min_kelvin <> _max_kelvin
* black
* Add protocl and model as restriction for tellstick sensors
A tellstick sensors is uniq identified by id, protocol and model, not
just the id.
This will add an optional restriction for "named sensors" for protocol
and model.
* Don't default config to empty string
* Compare None with 'is not'
* Import new iaqualink component with climate platform.
* Style and unittest changes, fix async_step_import.
* Reorder imports.
* Fix stale doctstrings and add unittest.
* Update radiotherm for lovelace
-Adds hvac_action property to better support the Lovelace Climate card.
-Clean up "fan" attribute. Now called "fan_action", as "mode" is supported via hvac_action.
-Update current operation label from "Off" to "Idle".
* black formatting
* unifi DSA for Homematic IP Cloud
* sabotage is not relevant for state
* TODAY_SUNSHINE_DURATION is not a group attribute
* Separated the words as requested
* add missing underscores
* Move jewish calendar to its own platform
* Fix tests for Jewish Calendar platform
As part of this, move tests to use async_setup_component instead of
testing JewishCalendarSensor as suggested by @MartinHjelmare here:
https://github.com/home-assistant/home-assistant/pull/24958#pullrequestreview-259394226
* Get sensors to update during test
* Use hass.config.set_time_zone instead of directly calling set_default_time_zone in tests
* Cleanup log messages
* Rename result from weekly_portion to parshat_hashavua
* Fix english/hebrew tests
* Fix updating of issue melacha binary sensor
* Fix docstrings of binary sensor
* Reset timezones before and after each test
* Use correct entity_id for day of the omer tests
* Fix omer tests
* Cleanup and rearrange tests
* Remove the old issur_melacha_in_effect sensor
* Rename variables to make the code clearer
Instead of using lagging_date, use after_tzais and after_shkia
* Use dt_util.set_default_time_zone instead of hass.config.set_time_zone so as not to break other tests
* Remove should_poll set to false (accidental copy/paste)
* Remove _LOGGER messaging during init and impossible cases
* Move binary tests to standalone test functions
Move sensor tests to standalone test functions
* Collect entities before calling add_entities
* Fix pylint errors
* Simplify logic in binary sensor until a future a PR adds more sensors
* Rename test_id holyness to holiday_type
* Fix time zone for binary sensor tests
Fix time zone for sensor tests
* Don't use unnecessary alter_time in sensors
Don't use unnecessary alter time in binary sensor
Remove unused alter_time
* Simply set hass.config.time_zone instead of murking around with global values
* Use async_fire_time_changed instead of directly calling async_update_entity
* Removing debug messaging during init of integration
* Capitalize constants
* Collect all Entities before calling async_add_entities
* Revert "Don't use unnecessary alter_time in sensors"
This reverts commit 74371740eaeb6e73c1a374725b05207071648ee1.
* Use test time instead of utc_now
* Remove superfluous testing
* Fix triggering of time changed
* Fix failing tests due to side-effects
* Use dt_util.as_utc instead of reimplementing it's functionality
* Use dict[key] for default values
* Move 3rd party imports to the top of the module
* Fix imports
* First draft
* Support enabling disabled entities
* Clean up
* Move import
* Local entity enabled replaced during rebase
* Add option flow test
* Mark options properties with option
* Common connection class
* Omit tests for new Plex files
* Oops
* Add missing properties
* Remove redundant log message
* Stopgap to avoid duplicate setups
* Cleaner check for server setup
Co-Authored-By: Martin Hjelmare <marhje52@kth.se>
* Cleaner check for server setup
Co-Authored-By: Martin Hjelmare <marhje52@kth.se>
* Not needed with previous setup check
* Remove username/password support
* Reduce log level
Co-Authored-By: Martin Hjelmare <marhje52@kth.se>
* Don't do setup in __init__
* Oops
* Committing too fast...
* Connect after init
* Catch update exceptions like media_player
* Pass in validated PlexServer instance
* Remove unnecessary check
* Counter should be unknown on init
* Remove servername config option
* Atome sensor platform - provides live data from Linky energy meters with Atome device from Total/Direct energie
* Proper requirements, added code ownership
* Do not cover atome component
* Proper PEP8 import, proper use of const, added missing docstring etc
* Proper PEP8 import, proper use of const, added missing docstring etc
* Integrate recommendations from MartinHjelmare
* Init shall remain as clean as possible, we don't want side effect
* Add daily,weekly,monthly,yearly sensors. Now depends on pyatome 0.1
* Requirements regenerated for atome component
* Refactored the way we update sensors
* Removed some un-necessary returns and unused variable
* Add X10 devices as switches
Signed-off-by: Taylor Silva <taylorsilva@outlook.com>
* Add logging message for when unsupported device is found.
This will help a user figure out why they aren't seeing all devices.
Signed-off-by: Taylor Silva <taylorsilva@outlook.com>
* Update homeassistant/components/isy994/__init__.py
Co-Authored-By: Martin Hjelmare <marhje52@kth.se>
* Update homeassistant/components/isy994/__init__.py
100 is too generic of an ISY uom. We don't want to accidentally add non-switch devices.
* changed conf_host to template
Changed conf_host to template to accommodate dynamic ips
* Update camera.py
* Updated per comment
* update for black formatter
* black changes
* Adds tests for pi_hole integration
* Refactor pi_hole component to an integration supporting multiple platforms
* Adds mock of Hole dependency
* Aborts platform setup when discovery_info is none
* Removes use of monitored_conditions
* Adds integration setup test
* Removes PlatformNotReady check
* Adds sensor test
* Code review updates
* Refactor tests to assert state through hass
* Reorder imports
* Add support GoSlide cover
* Fixed Parameters differ from overridden
Fixed Removed other pylint warnings
* Renamed GoSlide to Slide, because of Innovation in Motion rebranding
* Fixed codeowners file
* Fixed requirements file
* Removed pylint: disable=unused-argument
Removed DOMAIN not exist check
Changed if to min/max
Changed 3rd party import to top of the module
Removed timeout/retry parameters
Removed unused constants
Added check for discovery_info is none
Changed pass slide object instead of full hass object
Changed pass api object instead of full hass object
Added unique_id functionality
Removed entity_id/name properties
Removed supported_features/state functions
* Fixed unused variables
* Changed Slide API uses snake names
Changed Improved exception handling
Changed Updated Slide API to 0.50.0
* Changed moved exceptions into goslide-api
Changed retry setup into coroutine
* Changed str(err) to err
Changed invert if result to if not result
* working version of status sensor
* changed unit of measurement
* align naming with feed source
* simplified sensor name
* fix potential issue during initialisation
* fixed tests
* changed icon to constant
* added tests for new sensor
* split tests for geolocation vs sensor
* fixed lint
* fixed pylint
* fixed test
* removed config entry id from attributes
* moved entity manager to component
* fix issue with multiple config entries overriding each other's data
* creating async tasks instead of awaiting each unloading
* moved manager to component
* correctly triggering update only when this component is loaded
* fixed tests after major code refactorings
* fixed pylint
* moved actual creation of new events to geolocation platform
* changed all timestamps to utc
* changed the way platforms are setup and manager is updated
* simplify assert statement
* changed the way waiting for unloading platforms
* Move the patchers to a separate file
* Got a pytest test working (mostly)
* Checkpoint
* Switch to pytest for all tests
* Bump androidtv to 0.0.26 and update tests
* More robust patching
* Remove unused constants
* Combine two lines
* Add 2 additional checks
* Check that state objects are not None; add more description to tests
* Use f strings
* updated sensor and test files
* Formatting fixes
* Updated attribute template code
* Black formatting
* Code improvements based on feedback on binary_sensor pull request
* Updated tests
* Remove duplicated code and fix tests
* Black formatting on tests
* Remove link from docstring
* Moved default to schema
* Formatting fix and change to use dict[key] to retrieve attribute_templates
* Added InvertedRflinkCover class to support COCO/KAKU ASUN-650 devices
* Rename TYPE_NORMAL to TYPE_STANDARD
* Cleaning up code and removed unused imports
* Added unit tests for InvertedRflinkCover
* less if/else statements
* Autoresolve type for newkaku
* Updated tests for InvertedRflinkCover
* Added unit test for standard cover without specifying type
* Updated comments in unit tests
* Updated unit test configuration and comments to be more explanatory
* Restore variable names in first part of the unit test that have been changed during a search and replace
* Reformated the code according to 4de97ab
* remove blank lines at end of rflink test_cover.py
* Replace single with double quote in test_cover.py
* Replaced single quotes with double qoutes and fixed formatting
* Black improvements
* Reformated the code of the unit test.
* entity_type_for_device_id should return 'TYPE_STANDARD' instead of 'None'
* add support for Supla switches
* remove blank line at the end of file
* Add comma on last element of a list
* Remove unnecessary supla dependencies variable
* Move ignoring logic to entity registry enabled default
* Handle config to option import better
* Properly enable and disable entity registry entries on changes from config entry options
* Fix balloobs comments
* Fix some tests
* Fix tests
* Simplify updating disable on entities
* Simplify device tracker update function
* Local entity disabled replaced on rebase
* Only alter entities with changed options
* Proper tracking of changed options
* Back to straightforward updating of disabled
* 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
* Fixed logger name to allow selective logging
* Fixed thermostat mode ('off' and 'heat' modes were not consistent with Eurotronic Spirit Zigbee Thermostat state) and added 'auto' to supported mode
* Added required blank lines in code
* Black formatting
* Revert logging code added to each files. Instead, only replaced "." by __package__ in const.py
* Added a test on self._device.state_on to determine hvac_mode
* Black formatting
* Added debug message when unsupported hvac_mode is encountered
* Applied formatting recommandations
* Updated tests for 'auto' hvac_mode
* Add two new methods to the OpenUV component that consume only a single API call
* Two lines after class
* Rename methods to better reflect what they do, and DRY copy and pasted code
* More error handling down into methods, run api calls in parallel
* Fix import order
* Add new methods to services.yaml, and update error messages
* Add tests for androidtv
* Test that the error and reconnection attempts are logged correctly.
> "Handles device/service unavailable. Log a warning once when
> unavailable, log once when reconnected."
https://developers.home-assistant.io/docs/en/integration_quality_scale_index.html
* Clarify comment
* Add test for when the ADB shell command returns None
* Bump androidtv to 0.0.25
* Enable cert_expiry config entries
* add black
* lint fixes
* Rerun black
* Black on json files is a bad idea
* Work on comments
* Forgot the lint
* More comment work
* Correctly set defaults
* More comments
* Add codeowner
* Fix black
* More comments implemented
* Removed the catch
* Add helper.py from cert_expiry to .coveragerc
* get single device web socket command
* test get single device
* add not found error
* fix handling when device doesn't exist
* add test for zha device not found
* Nightly docker builds / Hass.io dev HA
* use same style
* Finish nightly build
* Update builder version
* Fix style
* fix style part 2
* Last one
* Fix order
* Speed up history `get_states`
Adding a boundary of the start of the recorder run the point is in, significantly increases the time of the query. This speeds up the fetching of the history of 1 entity.
* Make single entity query easier
no need for joins with single entity
* Lint
I was getting the following error when i set the scan_interval
```
self.scan_interval = timedelta(seconds=config.get(CONF_SCAN_INTERVAL, 60))
TypeError: unsupported type for timedelta seconds component: datetime.timedelta
```
it turns out `config.get(CONF_SCAN_INTERVAL)` already returns `timedelta`
```('scan_interval', datetime.timedelta(seconds=180))```
* 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
* define success for all branches
* add operation_mode to error when unexpected value
* fix black linting
* black linting
* fix weird black linting result
* Load user-provided descriptions for python_scripts
* Import SERVICE_DESCRIPTION_CACHE
* Use async_set_service_schema to register service descriptions
* Add python_script tests for loading service descriptions
* Use async/await in test
"adguard_home_addon_outdated":"Aquesta integraci\u00f3 necessita la versi\u00f3 d'AdGuard Home {minimal_version} o una superior, tens la {current_version}. Actualitza el complement de Hass.io d'AdGuard Home.",
"adguard_home_outdated":"Aquesta integraci\u00f3 necessita la versi\u00f3 d'AdGuard Home {minimal_version} o una superior, tens la {current_version}.",
"existing_instance_updated":"S'ha actualitzat la configuraci\u00f3 existent.",
"single_instance_allowed":"Nom\u00e9s es permet una \u00fanica configuraci\u00f3 d'AdGuard Home."
"adguard_home_addon_outdated":"This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}. Please update your Hass.io AdGuard Home add-on.",
"adguard_home_outdated":"This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}.",
"existing_instance_updated":"Se ha actualizado la configuraci\u00f3n existente."
}
"adguard_home_addon_outdated":"Esta integraci\u00f3n requiere AdGuard Home {minimal_version} o superior, usted tiene {current_version}. Por favor, actualice su complemento Hass.io AdGuard Home.",
"adguard_home_outdated":"Esta integraci\u00f3n requiere AdGuard Home {minimal_version} o superior, usted tiene {current_version}.",
"existing_instance_updated":"Se ha actualizado la configuraci\u00f3n existente.",
"single_instance_allowed":"S\u00f3lo se permite una \u00fanica configuraci\u00f3n de AdGuard Home."
},
"error":{
"connection_error":"No se conect\u00f3."
},
"step":{
"hassio_confirm":{
"description":"\u00bfDesea configurar Home Assistant para conectarse al AdGuard Home proporcionado por el complemento Hass.io: {addon} ?",
"title":"AdGuard Home a trav\u00e9s del complemento Hass.io"
},
"user":{
"data":{
"host":"Host",
"password":"Contrase\u00f1a",
"port":"Puerto",
"ssl":"AdGuard Home utiliza un certificado SSL",
"username":"Nombre de usuario",
"verify_ssl":"AdGuard Home utiliza un certificado apropiado"
},
"description":"Configure su instancia de AdGuard Home para permitir la supervisi\u00f3n y el control.",
"adguard_home_addon_outdated":"Cette int\u00e9gration n\u00e9cessite AdGuard Home {minimal_version} ou une version ult\u00e9rieure, vous disposez de {current_version}. Veuillez mettre \u00e0 jour votre compl\u00e9ment Hass.io AdGuard Home.",
"adguard_home_outdated":"Cette int\u00e9gration n\u00e9cessite AdGuard Home {minimal_version} ou une version ult\u00e9rieure, vous disposez de {current_version}.",
"existing_instance_updated":"La configuration existante a \u00e9t\u00e9 mise \u00e0 jour.",
"single_instance_allowed":"Une seule configuration d'AdGuard Home est autoris\u00e9e."
"adguard_home_addon_outdated":"D\u00ebs Integratioun ben\u00e9idegt AdgGuard Home {minimal_version} oder m\u00e9i, dir hutt {current_version}. Aktualis\u00e9iert w.e.g. \u00e4ren Hass.io AdGuard Home Add-on.",
"adguard_home_outdated":"D\u00ebs Integratioun ben\u00e9idegt AdgGuard Home {minimal_version} oder m\u00e9i, dir hutt {current_version}.",
"existing_instance_updated":"D\u00e9i bestehend Konfiguratioun ass ge\u00e4nnert.",
"single_instance_allowed":"N\u00ebmmen eng eenzeg Konfiguratioun vun AdGuard Home ass erlaabt."
"adguard_home_addon_outdated":"Deze integratie vereist AdGuard Home {minimal_version} of hoger, u heeft {current_version}. Update uw Hass.io AdGuard Home-add-on.",
"adguard_home_outdated":"Deze integratie vereist AdGuard Home {minimal_version} of hoger, u heeft {current_version}.",
"adguard_home_addon_outdated":"Denne integrasjonen krever AdGuard Home {minimal_version} eller h\u00f8yere, du har {current_version}. Vennligst oppdater Hass.io AdGuard Home-tillegget.",
"adguard_home_outdated":"Denne integrasjonen krever AdGuard Home {minimal_version} eller h\u00f8yere, du har {current_version}.",
"adguard_home_addon_outdated":"Za to integracijo je potrebna AdGuard Home {minimal_version} ali vi\u0161ja, vi imate {current_version}. Prosimo posodobite va\u0161 hass.io AdGuard Home dodatek.",
"adguard_home_outdated":"Za to integracijo je potrebna AdGuard Home {minimal_version} ali vi\u0161ja, vi imate {current_version}.",
"adguard_home_addon_outdated":"\u6574\u5408\u9700\u8981 AdGuard Home {minimal_version} \u6216\u66f4\u65b0\u7248\u672c\uff0c\u60a8\u76ee\u524d\u4f7f\u7528\u7248\u672c\u70ba {current_version}\u3002\u8acb\u66f4\u65b0 Hass.io AdGuard Home \u5143\u4ef6\u3002",
"adguard_home_outdated":"\u6574\u5408\u9700\u8981 AdGuard Home {minimal_version} \u6216\u66f4\u65b0\u7248\u672c\uff0c\u60a8\u76ee\u524d\u4f7f\u7528\u7248\u672c\u70ba {current_version}\u3002",
"adguard_home_outdated":"This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}.",
"adguard_home_addon_outdated":"This integration requires AdGuard Home {minimal_version} or higher, you have {current_version}. Please update your Hass.io AdGuard Home add-on.",
"auth":"Der API-Schl\u00fcssel ist nicht korrekt.",
"name_exists":"Name existiert bereits",
"wrong_location":"Keine Airly Luftmessstation an diesem Ort"
},
"step":{
"user":{
"data":{
"api_key":"Airly API-Schl\u00fcssel",
"latitude":"Breitengrad",
"longitude":"L\u00e4ngengrad",
"name":"Name der Integration"
},
"description":"Einrichtung der Airly-Luftqualit\u00e4t Integration. Um einen API-Schl\u00fcssel zu generieren, registriere dich auf https://developer.airly.eu/register",
"wrong_location":"No hay estaciones de medici\u00f3n Airly en esta zona."
},
"step":{
"user":{
"data":{
"api_key":"Clave API de Airly",
"latitude":"Latitud",
"longitude":"Longitud",
"name":"Nombre de la integraci\u00f3n"
},
"description":"Establecer la integraci\u00f3n de la calidad del aire de Airly. Para generar la clave de la API vaya a https://developer.airly.eu/register",
"wrong_location":"Aucune station de mesure Airly dans cette zone."
},
"step":{
"user":{
"data":{
"api_key":"Cl\u00e9 API Airly",
"latitude":"Latitude",
"longitude":"Longitude",
"name":"Nom de l'int\u00e9gration"
},
"description":"Configurez l'int\u00e9gration de la qualit\u00e9 de l'air Airly. Pour g\u00e9n\u00e9rer une cl\u00e9 API, rendez-vous sur https://developer.airly.eu/register.",
"title":"Airly"
}
},
"title":"Airly"
}
}
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.