Compare commits

...

2110 Commits

Author SHA1 Message Date
Franck Nijhof
7a62574360 Bumped version to 2023.5.0b9 2023-05-03 18:59:42 +02:00
Erik Montnemery
0251d677d8 Migrate cloud settings for all Google entities (#92416) 2023-05-03 18:59:32 +02:00
Michael Hansen
2cd9b94ecb Skip unexposed entities in intent handlers (#92415)
* Filter intent handler entities by exposure

* Add test for skipping unexposed entities
2023-05-03 18:59:29 +02:00
Erik Montnemery
3cd2ab2319 Migrate cloud settings for all Alexa entities (#92413)
* Migrate cloud settings for all Alexa entities

* Also set settings for unknown entities
2023-05-03 18:59:25 +02:00
J. Nick Koston
4f0d403393 Bump bluetooth-auto-recovery to 1.1.1 (#92412)
* Bump bluetooth-auto-recovery to 1.1.0

https://github.com/Bluetooth-Devices/bluetooth-auto-recovery/releases/tag/v1.1.0

In https://github.com/home-assistant/operating-system/issues/2485 is was discovered that a more aggressive reset strategy is needed due to a yet unsolved bug in the linux 6.1.x kernel series

* bump to 1.1.1 since event 47 cannot be decoded (newer kernels only)
2023-05-03 18:59:22 +02:00
Bram Kragten
b558cf8b59 Update frontend to 20230503.1 (#92410) 2023-05-03 18:59:18 +02:00
Erik Montnemery
820c7b77ce Update cloud WS API for getting entity (#92409)
* Update cloud WS API for getting entity

* Adjust comment
2023-05-03 18:59:15 +02:00
Erik Montnemery
9d0fc916fc Use exposed_entities API in cloud tests (#92408) 2023-05-03 18:59:11 +02:00
Erik Montnemery
387f07a97f Include all entities in cloud lists (#92406) 2023-05-03 18:59:08 +02:00
J. Nick Koston
44968cfc7c Handle webhook URL rejection in onvif (#92405) 2023-05-03 18:59:04 +02:00
Erik Montnemery
c6751bed86 Allow setting google disable 2fa flag on any entity (#92403)
* Allow setting google disable 2fa flag on any entity

* Fix test

* Include disable_2fa flag in cloud/google_assistant/entities/get
2023-05-03 18:59:01 +02:00
Bram Kragten
b87e3860d9 Update frontend to 20230503.0 (#92402) 2023-05-03 18:58:57 +02:00
David F. Mulcahey
8ef6bd85f5 Bump ZHA quirks (#92400) 2023-05-03 18:58:54 +02:00
Erik Montnemery
ad4fed4f60 Allow exposing any entity to the default conversation agent (#92398)
* Allow exposing any entity to the default conversation agent

* Tweak

* Fix race, update tests

* Update tests
2023-05-03 18:58:51 +02:00
Erik Montnemery
1050895657 Don't use storage collection helper in ExposedEntities (#92396)
* Don't use storage collection helper in ExposedEntities

* Fix tests
2023-05-03 18:58:47 +02:00
Erik Montnemery
c31d657206 Improve exposed entities tests (#92389) 2023-05-03 18:58:44 +02:00
repaxan
88343bed77 Add ZHA binding for window coverings (#92387) 2023-05-03 18:58:40 +02:00
Artem Draft
51a10a84da Bump pybravia to 0.3.3 (#92378) 2023-05-03 18:58:35 +02:00
Paulus Schoutsen
5f3bbf2804 Bumped version to 2023.5.0b8 2023-05-02 22:39:38 -04:00
Paulus Schoutsen
b8eebf085c Fix deserialize bug + add test coverage (#92382) 2023-05-02 22:39:33 -04:00
Franck Nijhof
cdfd53e1cc Bumped version to 2023.5.0b7 2023-05-02 22:44:32 +02:00
Bram Kragten
ca147dd97e Update frontend to 20230502.0 (#92373) 2023-05-02 22:43:23 +02:00
Erik Montnemery
5b1278d885 Allow exposing entities not in the entity registry to assistants (#92363) 2023-05-02 22:43:19 +02:00
J. Nick Koston
0db28dcf4d Start onvif events later (#92354) 2023-05-02 22:43:15 +02:00
Raman Gupta
7c651665c5 Clean up zwave_js.cover (#92353) 2023-05-02 22:43:12 +02:00
J. Nick Koston
2f3964e3ce Bump ulid-transform to 0.7.2 (#92344) 2023-05-02 22:43:08 +02:00
John Pettitt
eef95fa0d4 Increase default timeout in sense (#90556)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-05-02 22:43:03 +02:00
Franck Nijhof
43a1eb043b Bumped version to 2023.5.0b6 2023-05-01 22:55:49 +02:00
Bram Kragten
6b77775ed5 Update frontend to 20230501.0 (#92339) 2023-05-01 22:55:34 +02:00
Michael Hansen
7077d23127 Bump voip-utils to 0.0.6 (#92334) 2023-05-01 22:55:31 +02:00
J. Nick Koston
c7eac0ebbb Avoid starting ONVIF PullPoint if the camera reports its unsupported (#92333) 2023-05-01 22:55:27 +02:00
David F. Mulcahey
7f13033f69 Don't poll ZHA electrical measurement sensors unnecessarily (#92330) 2023-05-01 22:55:23 +02:00
Paulus Schoutsen
eba201e71b Add voip configuration url (#92326) 2023-05-01 22:55:20 +02:00
G Johansson
1e9d777201 Fix db_url issue in SQL (#92324)
* db_url fix

* Add test

* assert entry.options
2023-05-01 22:55:16 +02:00
J. Nick Koston
030b7f8a37 Bump sqlalchemy to 2.0.12 (#92315)
changelog: https://docs.sqlalchemy.org/en/20/changelog/changelog_20.html#change-2.0.12
2023-05-01 22:55:12 +02:00
J. Nick Koston
8cbc69fc92 Retry onvif setup when it is unexpectedly cancelled (#92313)
* Retry onvif setup when it is unexpectedly cancelled

fixes #92308

* Retry onvif setup when it is unexpectedly cancelled

fixes #92308
2023-05-01 22:55:08 +02:00
J. Nick Koston
2a5f5ea039 Reduce size of migration transactions to accommodate slow/busy systems (#92312)
* Reduce size of migration transactions to accommodate slow/busy systems

related issue #91489

* handle overloaded RPIs better
2023-05-01 22:55:04 +02:00
Michael Hansen
0ba662e7bc Allow configuring SIP port in VoIP (#92210)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-05-01 22:54:59 +02:00
Franck Nijhof
05530d656a Bumped version to 2023.5.0b5 2023-04-30 20:16:39 +02:00
Jan Bouwhuis
2b2be6a333 Fix mqtt not available when starting snips (#92296) 2023-04-30 20:16:28 +02:00
J. Nick Koston
5bd54490ea Ensure onvif webhook can be registered (#92295) 2023-04-30 20:16:25 +02:00
J. Nick Koston
00a28caa6d Bump bleak to 0.20.2 (#92294) 2023-04-30 20:16:21 +02:00
J. Nick Koston
c4aa6ba262 Bump beacontools to fix conflict with construct<2.10 and >=2.8.16 (#92293) 2023-04-30 20:16:18 +02:00
J. Nick Koston
7a90db903b Prevent pysnmp from being installed as it does not work with newer python (#92292) 2023-04-30 20:16:14 +02:00
Robert Hillis
fe279c8593 Add missing fstrings in Local Calendar (#92288) 2023-04-30 20:16:10 +02:00
Maximilian
ddf5a9fbcc Bump pynina to 0.3.0 (#92286) 2023-04-30 20:16:07 +02:00
J. Nick Koston
093d5d6176 Fix august lock state when API reports locking and locked with the same timestamp (#92276) 2023-04-30 20:16:01 +02:00
Paulus Schoutsen
eb586c7144 Bumped version to 2023.5.0b4 2023-04-29 21:23:22 -04:00
J. Nick Koston
ec15a03706 Handle AttributeError from wrong port in ONVIF config flow (#92272)
* Handle AttributeError from wrong port in ONVIF config flow

fixes
```
2023-04-29 19:17:22.289 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request
    resp = await request_handler(request)
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/aiohttp/web_app.py", line 504, in _handle
    resp = await handler(request)
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/aiohttp/web_middlewares.py", line 117, in impl
    return await handler(request)
  File "/Users/bdraco/home-assistant/homeassistant/components/http/security_filter.py", line 85, in security_filter_middleware
    return await handler(request)
  File "/Users/bdraco/home-assistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware
    return await handler(request)
  File "/Users/bdraco/home-assistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
    return await handler(request)
  File "/Users/bdraco/home-assistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
    return await handler(request)
  File "/Users/bdraco/home-assistant/homeassistant/components/http/auth.py", line 235, in auth_middleware
    return await handler(request)
  File "/Users/bdraco/home-assistant/homeassistant/components/http/view.py", line 146, in handle
    result = await result
  File "/Users/bdraco/home-assistant/homeassistant/components/config/config_entries.py", line 180, in post
    return await super().post(request, flow_id)
  File "/Users/bdraco/home-assistant/homeassistant/components/http/data_validator.py", line 72, in wrapper
    result = await method(view, request, data, *args, **kwargs)
  File "/Users/bdraco/home-assistant/homeassistant/helpers/data_entry_flow.py", line 110, in post
    result = await self._flow_mgr.async_configure(flow_id, data)
  File "/Users/bdraco/home-assistant/homeassistant/data_entry_flow.py", line 271, in async_configure
    result = await self._async_handle_step(
  File "/Users/bdraco/home-assistant/homeassistant/data_entry_flow.py", line 367, in _async_handle_step
    result: FlowResult = await getattr(flow, method)(user_input)
  File "/Users/bdraco/home-assistant/homeassistant/components/onvif/config_flow.py", line 233, in async_step_configure
    errors, description_placeholders = await self.async_setup_profiles()
  File "/Users/bdraco/home-assistant/homeassistant/components/onvif/config_flow.py", line 277, in async_setup_profiles
    await device.update_xaddrs()
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/onvif/client.py", line 433, in update_xaddrs
    capabilities = await devicemgmt.GetCapabilities({"Category": "All"})
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/zeep/proxy.py", line 64, in __call__
    return await self._proxy._binding.send_async(
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/zeep/wsdl/bindings/soap.py", line 164, in send_async
    return self.process_reply(client, operation_obj, response)
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/zeep/wsdl/bindings/soap.py", line 204, in process_reply
    doc = parse_xml(content, self.transport, settings=client.settings)
  File "/Users/bdraco/home-assistant/venv/lib/python3.10/site-packages/zeep/loader.py", line 51, in parse_xml
    docinfo = elementtree.getroottree().docinfo
AttributeError: NoneType object has no attribute getroottree
```

* port

* Revert "port"

This reverts commit 4693f3f33a.

* misfire
2023-04-29 21:23:16 -04:00
J. Nick Koston
24b851c184 Auto repair incorrect collation on MySQL schema (#92270)
* Auto repair incorrect collation on MySQL schema

As we do more union queries in 2023.5.x if there is a mismatch
between collations on tables, they will fail with an error
that is hard for the user to figure out how to fix

`Error executing query: (MySQLdb.OperationalError) (1271, "Illegal mix of collations for operation UNION")`

This was reported in the #beta channel and by PM from others
so the problem is not isolated to a single user

https://discord.com/channels/330944238910963714/427516175237382144/1100908739910963272

* test with ascii since older maraidb versions may not work otherwise

* Revert "test with ascii since older maraidb versions may not work otherwise"

This reverts commit 787fda1aefcd8418a28a8a8f430e7e7232218ef8.t

* older version need to check collation_server because the collation is not reflected if its the default
2023-04-29 21:23:15 -04:00
Michael
a8539b89e8 Fix call deflection update in Fritz!Tools (#92267)
fix
2023-04-29 21:23:14 -04:00
Jan Bouwhuis
8cf1ed81a8 Fix MQTT certificate files setup (#92266) 2023-04-29 21:23:13 -04:00
Robert Hillis
fe452452e6 Fix Google Mail Sensor key error (#92262)
Fix Google Mail key error
2023-04-29 21:23:13 -04:00
Michael Hansen
c632d27197 Add VoIP error tone (#92260)
* Play error tone when pipeline error occurs

* Play listening tone at the start of each cycle
2023-04-29 21:23:12 -04:00
J. Nick Koston
6a6eba1ca3 Handle onvif errors when detail is returned as bytes (#92259) 2023-04-29 21:23:11 -04:00
J. Nick Koston
a5241b3118 Pin pyasn1 and pysnmplib since pyasn1 0.5.0 has breaking changes and pysnmp-pyasn1 and pyasn1 are both using the pyasn1 namespace (#92254) 2023-04-29 21:23:10 -04:00
Franck Nijhof
3bab40753d Bumped version to 2023.5.0b3 2023-04-29 19:03:08 +02:00
J. Nick Koston
546c68196e Bump pyunifiprotect to 4.8.3 (#92251) 2023-04-29 19:02:59 +02:00
Bouwe Westerdijk
379db033af Bump plugwise to v0.31.1 (#92249) 2023-04-29 19:02:55 +02:00
Franck Nijhof
4b9355e1ca Fix unknown/unavailable source sensor in Filter entities (#92241) 2023-04-29 19:02:52 +02:00
Franck Nijhof
89eca22b93 Fix history YAML deprecation (#92238) 2023-04-29 19:02:48 +02:00
Allen Porter
2cb665a1d9 Add more detail to invalid rrule calendar error message (#92222)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-04-29 19:02:45 +02:00
Michael Davie
1d54a0ed3d Bump env_canada to 0.5.34 (#92216)
Bump env_canada to v.0.5.34
2023-04-29 19:02:41 +02:00
jjlawren
7af1521812 Bump sonos-websocket to 0.1.0 (#92209)
Bump sonos-websocket to 0.1.0
2023-04-29 19:02:38 +02:00
Tom Harris
c8cc6bfbb7 Fix Insteon scenes with disabled entities (#92137) 2023-04-29 19:02:34 +02:00
Rajeevan
401e61588c Fix solaredge-local protobuf exception (#92090) 2023-04-29 19:02:31 +02:00
Michael
3f948da2af Turn AVM FRITZ!Box Tools call deflection switches into coordinator entities (#91913)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-04-29 19:02:27 +02:00
Mick Vleeshouwer
aafbc64e02 Revert "Add silent option for DynamicShutter (ogp:Shutter) in Overkiz" (#91354) 2023-04-29 19:02:24 +02:00
rikroe
e460bc7ecb Move BMW Target SoC to number platform (#91081)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2023-04-29 19:02:19 +02:00
Franck Nijhof
1b39abe3bc Bumped version to 2023.5.0b2 2023-04-28 21:42:27 +02:00
J. Nick Koston
29bff59707 Fix missing preset_mode feature in bond fans (#92202) 2023-04-28 21:42:18 +02:00
Jean-François Roy
faa8f38fa8 Add missing PRESET_MODE feature to BAF fans (#92200) 2023-04-28 21:42:15 +02:00
Paul Bottein
1f6dbe96f6 Update frontend to 20230428.0 (#92190) 2023-04-28 21:42:12 +02:00
Jan Bouwhuis
98075da069 Fix mqtt subscribe debouncer initial delay too long when birth message is disabled (#92188)
Fix mqtt subscribe deboucer initial delay
2023-04-28 21:42:08 +02:00
David F. Mulcahey
652bb8ef95 Fix ZHA device triggers (#92186)
* Fix missing endpoint data on ZHA events

* revert to flat structure

* update test
2023-04-28 21:42:05 +02:00
Nolan Gilley
96d2b53798 Upgrade lakeside to 0.13 (#92173) 2023-04-28 21:42:01 +02:00
Raman Gupta
25d621ab94 Bump pyvizio to 0.1.61 (#92161) 2023-04-28 21:41:58 +02:00
Erik Montnemery
fa3f19e7bf Keep expose setting in sync for assist (#92158)
* Keep expose setting in sync for assist

* Fix initialization, add test

* Fix tests

* Add AgentManager.async_setup

* Fix typo

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-04-28 21:41:53 +02:00
jjlawren
412ea937ff Properly resolve media_source URLs for Sonos announcements (#92154)
Properly resolve media_source URLs for Sonos announcements
2023-04-28 21:41:46 +02:00
Luke
b7f5c144a8 Bump Roborock to 0.8.3 (#92151) 2023-04-28 21:41:42 +02:00
J. Nick Koston
658128c892 Fix ignored apple tvs being scanned over and over (#92150) 2023-04-28 21:41:38 +02:00
J. Nick Koston
ff2f6029ce Ensure purge can cleanup old format detached states in the database (#92145) 2023-04-28 21:41:35 +02:00
puddly
8017a04efe Fix ZHA startup failure with the Konke button (#92144)
* Ensure devices with bad cluster subclasses do not prevent startup

* Explicitly unit test an affected SML001 device

* Do not use invalid `hue_occupancy` attribute name

* Actually remove `hue_occupancy`

* Bump ZHA dependencies
2023-04-28 21:41:31 +02:00
G Johansson
ef350949fd Fix options flow Workday (#92140)
* Fix options flow workday

* simpler
2023-04-28 21:41:26 +02:00
Luke
7b1b3970b1 Bump roborock to 0.8.1 for beta fixes (#92131)
* bump to 0.8.1

* add tests for new config flow errors

* removed logs for known errors
2023-04-28 21:40:35 +02:00
Franck Nijhof
e03f3c05b3 Bumped version to 2023.5.0b1 2023-04-27 19:59:11 +02:00
Franck Nijhof
3e8e2c68b9 Add add-on discovery URL and title to Wyoming integration (#92129) 2023-04-27 19:58:56 +02:00
J. Nick Koston
54e52182ab Bump sqlalchemy to 2.0.11 to fix a critical regression with postgresql (#92126) 2023-04-27 19:58:53 +02:00
Paul Bottein
c35872531f Update frontend to 20230427.0 (#92123) 2023-04-27 19:58:49 +02:00
Erik Montnemery
7d5c90a81e Add WS command cloud/alexa/entities/get (#92121)
* Add WS command cloud/alexa/entities/get

* Fix bugs, add test
2023-04-27 19:58:46 +02:00
Thijs W
1f52b71477 Fix frontier_silicon not retrying setup and missing strings (#92111)
Address late review comments for frontier_silicon config flow
2023-04-27 19:58:43 +02:00
Erik Montnemery
9a7f7ef35c Avoid exposing unsupported entities to Alexa (#92107)
* Avoid exposing unsupported entities to Alexa

* Update homeassistant/components/cloud/alexa_config.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-27 19:58:39 +02:00
Erik Montnemery
a41128dae3 Avoid exposing unsupported entities to Google Assistant (#92105)
* Avoid exposing unsupported entities to Google Assistant

* Add Google Assistant specific support sets

* Add test
2023-04-27 19:58:36 +02:00
Raman Gupta
5c3094520d Fix vizio integration_type (#92103) 2023-04-27 19:58:32 +02:00
Paulus Schoutsen
8db1d13c71 Use pipeline ID in event (#92100)
* Use pipeline ID in event

* Fix tests
2023-04-27 19:58:28 +02:00
Paulus Schoutsen
47c6cb88a4 Fix capitalization names Assist entities (#92098)
* Fix capitalization names Assist entities

* Adjust names to be 'in progress'

* Update tests/components/esphome/test_binary_sensor.py

Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>

---------

Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
2023-04-27 19:58:25 +02:00
Michael
a1d4740785 Fix reconfigure by SSDP or Zeroconf discovery in Synology DSM (#92088) 2023-04-27 19:58:22 +02:00
Franck Nijhof
b3d685cc31 Update YARL to 1.9.2 (#92086) 2023-04-27 19:58:19 +02:00
avee87
019f26a17c Remove name attribute from transmission services manifest (#92083) 2023-04-27 19:58:15 +02:00
puddly
9970af5fe9 Add a channel changing API to ZHA (#92076)
* Expose channel changing over the websocket API

* Expose channel changing as a service

* Type annotate some existing unit test fixtures

* Add unit tests

* Rename `api.change_channel` to `api.async_change_channel`

* Expand on channel migration in the service description

* Remove channel changing service, we only really need the websocket API

* Update homeassistant/components/zha/websocket_api.py

* Black

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-27 19:58:12 +02:00
Michael Hansen
f7e72ef62b Bump intents to 2023.4.26 (#92070)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-04-27 19:58:08 +02:00
Jesse Hills
a445e29bca ESPHome voice assistant: Version 2 - Stream raw tts audio back to device for playback (#92052)
* Send raw audio back

* Update tests

* More tests

* Fix docstrings and remove unused patches

* More tests

* MORE

* Only set raw for v2
2023-04-27 19:58:04 +02:00
Jesse Hills
ba69e29e8f Set pipeline_id from pipeline select (#92085) 2023-04-27 19:57:23 +02:00
Franck Nijhof
45d826c941 Bumped version to 2023.5.0b0 2023-04-26 21:56:02 +02:00
Franck Nijhof
583453f327 Merge branch 'master' into dev 2023-04-26 21:53:40 +02:00
Arturo
75be1b4ff9 Remove bridged matter devices when matter bridge is removed (#91995)
* Removes bridged matter devices when matter bridge is removed

* Didn't have the fetch the config entry since that is already provided to us

* Switched to a safer method of removing the child devices
2023-04-26 21:44:40 +02:00
puddly
2bbebeb925 Add a warning step to ZHA's config flow to advise against some radios (#92078) 2023-04-26 21:40:46 +02:00
puddly
4f660cc5f5 Allow the ZHA default light transition time to be configured as a float (#92075) 2023-04-26 21:24:06 +02:00
Marcel van der Veldt
3c44c7416f Fix Matter cover deviceclass and inverted position (#92063) 2023-04-26 21:21:31 +02:00
Bram Kragten
e7e50243d1 Update frontend to 20230426.0 (#92074) 2023-04-26 21:19:06 +02:00
Franck Nijhof
b6a3ffb20f Revert "Fail TTS tests if default TTS cache dir exists (#92023)" (#92079) 2023-04-26 21:18:17 +02:00
Jan Bouwhuis
5a78684998 Fix large imap_content event warning by truncating the email text body to 2 KiB (#92066) 2023-04-26 18:44:22 +02:00
J. Nick Koston
ead761dfa2 Ensure device_automation can handle RequirementsNotFound (#92037) 2023-04-26 18:43:38 +02:00
Erik Montnemery
330a7afdfc Teach switch_as_x about exposed entities (#92059) 2023-04-26 18:42:49 +02:00
J. Nick Koston
ec5f50913a Retry creating esphome update entities later if dashboard is unavailable (#92042) 2023-04-26 18:41:00 +02:00
J. Nick Koston
f33e8c518f Ensure lutron_caseta logbook platform does not raise when integration is not loaded (#91978) 2023-04-26 18:39:42 +02:00
Bram Kragten
aa4544accb Add assist pipeline and language selectors (#92030) 2023-04-26 18:39:02 +02:00
Jan Bouwhuis
f6d8859dd2 Add codeowner for imap integration (#92067) 2023-04-26 18:21:58 +02:00
Erik Montnemery
ce99319ea5 Add LED settings support to Home Assistant Yellow (#86451)
* Add LED control support to Home Assistant Yellow

* Fix the handlers

* Remove switch platform

* Allow configuring LED settings from the options flow

* Add missing translations

* Add tests

* Add tests
2023-04-26 11:02:52 -04:00
Ondřej Kolenatý
64e4414a5e Add today's remaining production estimate (#91965) 2023-04-26 15:58:28 +02:00
Erik Montnemery
32ffedd365 Fail TTS tests if default TTS cache dir exists (#92023)
Fail tests if default tts cache dir exists
2023-04-26 15:28:48 +02:00
Erik Montnemery
904ce226fb Tweak response of /api/cloud/login (#92058) 2023-04-26 15:28:08 +02:00
Franck Nijhof
565b26e884 Fix tts add-on discovery for Wyoming (#92064) 2023-04-26 08:04:46 -05:00
Matthias Alphart
0b9fbb1800 Fix typo in Nextcloud YAML deprecation message (#92060) 2023-04-26 13:51:47 +02:00
Erik Montnemery
2750a5c3e6 Make assist_pipeline an after dependency of cloud (#92057) 2023-04-26 13:45:32 +02:00
Erik Montnemery
ed737f306b Remove cloud assist pipeline setup from cloud client (#92056) 2023-04-26 06:53:58 -04:00
J. Nick Koston
6b931b208f Small cleanups to bluetooth internals (#92045)
* Small cleanups to bluetooth internals

Improve the performance of _async_on_advertisement

Fixes

```
tests/components/bluetooth/test_models.py::test_ble_device_with_proxy_client_out_of_connections_uses_best_available
tests/components/bluetooth/test_models.py::test_ble_device_with_proxy_client_out_of_connections_uses_best_available_macos
  /Users/bdraco/home-assistant/homeassistant/components/bluetooth/wrappers.py:226: FutureWarning: This method will be removed future version, pass the callback to the BleakClient constructor instead.
    self._backend.set_disconnected_callback(

tests/components/bluetooth/test_models.py::test_ble_device_with_proxy_client_out_of_connections_uses_best_available_macos
  /Users/bdraco/home-assistant/tests/components/bluetooth/test_models.py:506: FutureWarning: BLEDevice.metadata is deprecated and will be removed in a future version of Bleak, use AdvertisementData instead
    switchbot_proxy_device_no_connection_slot.metadata["delegate"] = 0

tests/components/bluetooth/test_models.py::test_ble_device_with_proxy_client_out_of_connections_uses_best_available_macos
  /Users/bdraco/home-assistant/tests/components/bluetooth/test_models.py:521: FutureWarning: BLEDevice.metadata is deprecated and will be removed in a future version of Bleak, use AdvertisementData instead
    switchbot_proxy_device_has_connection_slot.metadata["delegate"] = 0

tests/components/bluetooth/test_models.py::test_ble_device_with_proxy_client_out_of_connections_uses_best_available_macos
  /Users/bdraco/home-assistant/tests/components/bluetooth/test_models.py:535: FutureWarning: BLEDevice.metadata is deprecated and will be removed in a future version of Bleak, use AdvertisementData instead
    switchbot_device.metadata["delegate"] = 0

```

* put back kwargs
2023-04-26 11:16:34 +02:00
Joakim Sørensen
c429bfae3e Bump hass-nabucasa from 0.66.1 to 0.66.2 (#92054) 2023-04-26 10:47:41 +02:00
J. Nick Koston
cf69da40f3 Only check support_entry_unload/support_remove_from_device once (#92041) 2023-04-26 10:23:18 +02:00
Ondřej Kolenatý
5399dfd39d Set forecast-solar energy sensor's units of measurement to Wh (#92022)
* All energy units of measurement changed to Wh.

* All energy units of measurement changed to Wh.
2023-04-26 10:09:30 +02:00
Robert Svensson
09109d093e Allow UniFi control PoE passthrough properly (#92028) 2023-04-26 09:16:18 +02:00
J. Nick Koston
828aed73af Bump zeroconf to 0.58.2 (#92049) 2023-04-26 09:14:34 +02:00
J. Nick Koston
5f1fc3259c Bump aioesphomeapi to 13.7.2 (#92027) 2023-04-26 09:12:52 +02:00
Michael Hansen
8dfecac013 Time out TTS based on audio length (#92032)
* Time out TTS based on audio length

* Use async mock
2023-04-26 00:35:14 -04:00
Michael Hansen
257944c3b7 Allow numbers in TTS engine part of cache key (#92031) 2023-04-26 00:33:45 -04:00
Raman Gupta
3190e5d7cf Add button entities to manually idle zwave notification values (#91446)
* Add button entities to manually idle zwave notification values

* Update discovery.py

* Improve discovery check

* fix tests

* make unique ID more clear
2023-04-25 21:41:29 -04:00
Erik Montnemery
57a59d808b Automaticially create an assist pipeline using cloud stt + tts (#91991)
* Automaticially create an assist pipeline using cloud stt + tts

* Return the id of the cloud enabled pipeline

* Wait for platforms to load

* Fix typing

* Fix startup race

* Update tests

* Create a cloud pipeline only when logging in

* Fix tests

* Tweak _async_resolve_default_pipeline_settings

* Improve assist_pipeline test coverage

* Improve cloud test coverage
2023-04-25 20:40:01 -05:00
J. Nick Koston
74e0341d83 Bump yalexs-ble to 2.1.16 (#92034) 2023-04-25 18:53:08 -05:00
puddly
6842cdcb65 Clean up default ZHA entity names (#91841)
* Always use `Light` for lights, including subclasses

* Clean up other platforms

* Add a unit test to ensure all future entity classes have names

* Remove stale `_name`

* Address review feedback and rename `Open` to `Opening`
2023-04-25 19:51:39 -04:00
shbatm
da05763a5c ISY994 remove value when calling open cover with no position (#92036) 2023-04-25 18:17:11 -05:00
shbatm
969db343bd Invert ISY994 dusk/dawn sensors to match expected state (#92035) 2023-04-25 17:15:48 -05:00
nachonam
2d510bfe0d Add camera platform to Freebox (#88104)
* Add Freebox cameras

* Apply suggestions from code review

add code corrections after PR review

Co-authored-by: Quentame <polletquentin74@me.com>

* Update base_class.py

* add some code syntax corrections add unit tests

* add unit tests

* add syntax changes

* Update homeassistant/components/freebox/router.py

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/router.py

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/base_class.py

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/router.py

Co-authored-by: Quentame <polletquentin74@me.com>

* clear code  and add minor changes

* correct syntax error and check home granted access

* typing functions

* Update tests/components/freebox/conftest.py

don't needed, and will fix tests.

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/camera.py

Rename _volume_micro variable

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/camera.py

Use const not literal

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/camera.py

set to true not needed

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/camera.py

use _attr_supported_features instead _supported_features

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/camera.py

overload the entity with command_flip property and set_flip not needed

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/camera.py

Cameras does not default to False,

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/camera.py

delete this function because is not needed

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/camera.py

Co-authored-by: Quentame <polletquentin74@me.com>

* consts,  rollback _command flip is protected var

* VALUE_NOT_SET does not exists anymore

* Use HOME_COMPATIBLE_PLATFORMS

* Rename FreeboxHomeBaseClass to FreeboxHomeEntity

* Update Freebox Home comment

* Use CATEGORY_TO_MODEL to set model attr of FreeboxHomeEntity

* Use Home API from the router

* Add SERVICE_FLIP const

* Use SERVICE_FLIP const

* Fix typo in HOME_COMPATIBLE_PLATFORMS

* fix somme code issues

* use SERVICE_FLIP (lost in merge)

* use _attr_device_info

* clear code

* HOME_COMPATIBLE_PLATFORMS is a list

* Update homeassistant/components/freebox/home_base.py

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/home_base.py

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/config_flow.py

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/home_base.py

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/home_base.py

Co-authored-by: Quentame <polletquentin74@me.com>

* clear config_flow permission

* Update homeassistant/components/freebox/home_base.py

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/camera.py

Co-authored-by: Quentame <polletquentin74@me.com>

* add untested files to. coveragerc

* clear unused attributes

* add not tested file camera.py

* clear unusued const

* add extra_state_attributes

* Update .coveragerc

Co-authored-by: Quentame <polletquentin74@me.com>

* Update homeassistant/components/freebox/camera.py

Co-authored-by: Quentame <polletquentin74@me.com>

* fetch _flip

* del flip service

* add device_info via_device

* Update .coveragerc

* Update .coveragerc

* Update .coveragerc

* Update .coveragerc

* Remove flip reference

* Fix issue on router without Home API

* Fix "Home access is not granted" log repeats every 30s

* Fix sensor device_info

---------

Co-authored-by: Quentame <polletquentin74@me.com>
2023-04-26 00:03:39 +02:00
Jan Bouwhuis
62bb584522 Add note for using xfail on test for mqtt_statestream (#91999)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-04-25 22:49:47 +02:00
Jan Bouwhuis
aab7dffdb9 Only expose MQTT advanced settings in advanced mode (#91996) 2023-04-25 22:23:17 +02:00
Martin Hjelmare
0594fefb0c Clean up tts fixtures (#92025) 2023-04-25 22:21:18 +02:00
Maciej Bieniek
5244f5731e Do not reload Shelly TRV config entry (#92000) 2023-04-25 22:20:59 +02:00
Michel van de Wetering
ee3cebe37b Enable open,close,stop device actions for all covers (#92006) 2023-04-25 22:19:37 +02:00
Erik Montnemery
18f7b92438 Fall back to domain for conversation agents without title (#92014) 2023-04-25 22:14:44 +02:00
Raman Gupta
78a49ecbce Bump zwave-js-server-python to 0.48.0 (#91989)
* Bump zwave-js-server-python to 0.48.0

* Add handling of FailedZWaveCommand exception

* Reset mock to avoid unintentional side effects

* Fix bump
2023-04-25 15:41:37 -04:00
Dave T
dedb3f8b6b Fix comment typos (#92021) 2023-04-25 21:04:36 +02:00
Erik Montnemery
64cbc91697 Use addon uuid as wyoming config entry unique id (#92008) 2023-04-25 21:04:11 +02:00
Arjan
74e3cac8b5 Fix timezone issue (#92005) 2023-04-25 21:02:02 +02:00
Joakim Sørensen
083f42cce6 Bump hass-nabucasa from 0.65.0 to 0.66.1 (#92020) 2023-04-25 21:00:23 +02:00
Daniel Hjelseth Høyer
9d3a0d676a Update tibber lib to 0.27.1 (#92016) 2023-04-25 13:40:48 -05:00
J. Nick Koston
2354f8194e Add reauth to onvif (#91957)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-04-25 12:20:17 -05:00
Erik Montnemery
8e70446ef8 Tweak a couple of stt and tts related asserts (#92012)
Tweak a couple of stt and tts related asserts
2023-04-25 11:50:37 -05:00
Erik Montnemery
933761d425 Fix cloud connected signal only firing once (#92009) 2023-04-25 12:15:27 -04:00
Alberto Geniola
dae05a0c93 Add check on disarm code for Alarm Control Panel - Elmax (#91158) 2023-04-25 17:56:01 +02:00
Erik Montnemery
792ea92e55 Remove fuzzy language matching from stt and tts (#92002)
* Remove fuzzy language matching from stt and tts

* Update tests
2023-04-25 17:54:42 +02:00
Clay Benson
d1e6e4078c Bump asyncsleepiq lib to 1.3.4 (#91860) 2023-04-25 09:54:32 -05:00
J. Nick Koston
e7e7990b60 Bump sqlalchemy to 2.0.10 (#91982) 2023-04-25 09:45:49 -05:00
Alberto Geniola
aa1304e93a Elmax/sensors improvements (#74323)
* Address suggestions in PR #64090

* Remove redundant force-refresh at discovery time

* Improve re-auth UX

* Resolve linting warning

* Cover reauth case when no entry is in place

* Add missing reauth_successful message

* Use ad-hoc schema for reauth flow

* Align test cases with latest modifications

* Improve re-authentication flow, align tests

* Remove None check (as it can never happen)

* Remove panel_id from reauth dialog

* Remove panel_id from reauth dialog

* Simplify try-catch block

* Address suggestions in PR #64090

* Remove redundant force-refresh at discovery time

* Improve re-auth UX

* Resolve linting warning

* Cover reauth case when no entry is in place

* Add missing reauth_successful message

* Use ad-hoc schema for reauth flow

* Align test cases with latest modifications

* Improve re-authentication flow, align tests

* Remove None check (as it can never happen)

* Remove panel_id from reauth dialog

* Remove panel_id from reauth dialog

* Simplify try-catch block

* Improve type handling

* Remove translations

* Add unique-id attribute within context object

* Optimize local variable usage
2023-04-25 15:40:46 +02:00
Diogo Gomes
a3048234d3 Support for multiple contracts in Prosegur (#89097)
* support for multiple contracts - tested live

* update tests

* address review

* address review

* fix
2023-04-25 15:16:51 +02:00
G Johansson
1fa82fa886 Move TriggerBaseEntity into helpers (#91945)
* Move TriggerBaseEntity

* mypy
2023-04-25 09:56:40 +02:00
Stephan Uhle
b56f0ad668 Remove unused attributes in EDL21 integration (#91922) 2023-04-25 09:50:23 +02:00
Diogo Gomes
48546c77b5 Follow the unavailability of the source sensor (#91975) 2023-04-25 09:49:58 +02:00
Erik Montnemery
63f3767a29 Include UUID in hassio discovery data (#91970) 2023-04-25 09:48:47 +02:00
puddly
0b0573c387 Bump ZHA dependencies (#91969) 2023-04-25 09:47:22 +02:00
Michael Hansen
ebabf504da Play pre-recorded message if pipeline is misconfigured (#91985)
* Play pre-recorded message if pipeline is misconfigured

* Use voip_device
2023-04-24 21:48:40 -05:00
J. Nick Koston
5114a1400f Ensure logbook still responds if describe event throws (#91961)
* Ensure logbook still responds if describe event throws

If describe fails, the logbook stream should not collapse

* Ensure logbook still responds if describe event throws

If describe fails, the logbook stream should not collapse
2023-04-24 22:22:53 -04:00
J. Nick Koston
18532e453a Bump home-assistant-bluetooth to 1.10.0 (#91977)
changelog: https://github.com/home-assistant-libs/home-assistant-bluetooth/blob/main/CHANGELOG.md
2023-04-24 22:22:11 -04:00
Robert Svensson
cecd657a09 Bump aiounifi to v47 (#91966) 2023-04-24 18:06:12 -05:00
Luke
b5bf88215c Add mopping abilities to Roborock (#91766)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-04-24 22:53:45 +02:00
J. Nick Koston
e3a110f04f Bump yalexs to 1.3.2 (#91963) 2023-04-24 22:13:30 +02:00
Michael Hansen
b4bd3b97f8 Use order in preferred regions list (#91959)
* Use order in preferred regions list

* Use float for score (inf = exact match)
2023-04-24 14:12:38 -04:00
Erik Montnemery
b601fb17d3 Create a default assist pipeline on start (#91947)
* Create a default assist pipeline on start

* Minor adjustments

* Address review comments

* Remove tts.async_get_agent

* Fix bugs, improve test coverage
2023-04-24 14:00:52 -04:00
Franck Nijhof
4b619f7251 Relax polling rate on Rituals Perfume Genie (#91949) 2023-04-24 19:28:14 +02:00
Michael Hansen
5a57602163 Wait for TTS before restarting pipeline (#91962) 2023-04-24 13:27:13 -04:00
Ondřej Kolenatý
36f90cda92 Dependency upgrade to forecast-solar 3.0.0 (#91951) 2023-04-24 19:18:18 +02:00
Alberto Geniola
f104bba683 Elmax -Handle 422 busy error with a retry approach (#91926) 2023-04-24 18:51:40 +02:00
J. Nick Koston
e2d2aeadaa Fix typo in powerwall strings (#91956) 2023-04-24 17:54:22 +02:00
Michael
2ba2c6c6ab Correct entity categories in AVM FRITZ!SmartHome (#91073) 2023-04-24 16:57:34 +02:00
Erik Montnemery
a956f16f73 Suppress pylint error related to audioop deprecation (#91950)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-04-24 16:56:20 +02:00
Michael Hansen
5075281add Fix zh Hant/Hans (#91390)
* Fix zh Hant/Hans

* Fix comments
2023-04-24 16:55:08 +02:00
Luke
1ae7610622 Add Vacuum test for Roborock (#91870) 2023-04-24 16:46:00 +02:00
Jan Bouwhuis
88f0e4000b Cleanup unreachable code where device_entry will never be None on an update event (#91855) 2023-04-24 16:09:36 +02:00
Jan Bouwhuis
3f6541a6db Add cipher list option to IMAP config flow (#91896)
* Add cipher list option to IMAP config flow

* Use client_context to get the ssl_context

* Formatting

* Add ssl error no make error handling more specific

* Make ssl_ciper_list an advanced option
2023-04-24 15:37:21 +02:00
J. Nick Koston
c3262ebdb3 Add rule parser for onvif LineDetector and CountAggregation (#91885) 2023-04-24 15:23:59 +02:00
J. Nick Koston
e25885b943 Improve error reporting in onvif in config flow (#91876) 2023-04-24 15:20:37 +02:00
Erik Montnemery
1c3e1d2e13 Don't resolve default tts engine in assist pipelines (#91943)
* Don't resolve default tts engine in assist pipelines

* Set tts engine when creating default pipeline

* Update tests
2023-04-24 14:40:11 +02:00
J. Nick Koston
392a9f32c9 Add fallback to device zone time or no timezone to onvif when setting time fails (#91882) 2023-04-24 14:37:56 +02:00
J. Nick Koston
ddb3955a23 Add guards to onvif for when the PullPoint to Webhook url changes (#91886) 2023-04-24 14:35:45 +02:00
J. Nick Koston
6c024405a6 Ensure onvif can still be unloaded if camera fails to unsubscribe (#91887) 2023-04-24 14:13:04 +02:00
Erik Montnemery
c5d0c392a9 Don't resolve default stt engine in assist pipelines (#91936)
* Don't resolve default stt engine in assist pipelines

* Apply suggestion from code review

* Add tests

* Tweak

* Add test

* Improve test coverage
2023-04-24 13:37:13 +02:00
Joost Lekkerkerker
0d815a1688 Bump Pylast to 5.1.0 (#91909) 2023-04-24 13:11:14 +02:00
Franck Nijhof
43880ffdc4 Remove unneeded pygatt package from machine builds (#91940) 2023-04-24 12:39:51 +02:00
rubenbe
2f1a5942ab Add MQTT fan direction support (#91700)
* Add MQTT fan direction support

* Add MQTT fan direction abbreviations

* Add MQTT fan direction tests

* Shorten MQTT fan test payloads
2023-04-24 11:48:00 +02:00
J. Nick Koston
739963b5ee Remove deprecated async_setup_platforms (#91929) 2023-04-23 22:38:35 -05:00
Paulus Schoutsen
a203149133 Allow entity names for STT entities (#91932)
* Allow entity names for STT entities

* Fix tests
2023-04-23 23:06:34 -04:00
J. Nick Koston
fba7c6cacd Remove deprecated async_get_registry (#91928)
Deprecated in 2021 via #46265, report was added a year ago in #72088
2023-04-23 23:02:21 -04:00
J. Nick Koston
f3838dde3a Cleanup onvif topic before lookup (#91914)
* Cleanup onvif topic before lookup

Some devices will append . and / to the path. We need
to strip it off to find the correct matcher

fixes #51870

* Update homeassistant/components/onvif/event.py

* Update homeassistant/components/onvif/event.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-23 23:02:08 -04:00
Michael Hansen
5348ea3ac4 Add processing tone (#91931)
* Add processing tone

* Update homeassistant/components/voip/voip.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Update homeassistant/components/voip/voip.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Fix linting

* Fix tests

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-23 21:28:56 -05:00
Paulus Schoutsen
c8c8e4dede Remove duplicate name from Wyoming TTS entity (#91930) 2023-04-23 20:13:32 -05:00
J. Nick Koston
14d2645de2 Avoid creating onvif switches on unsupported devices (#91907)
* Avoid creating onvif switches on unsupported devices

fixes #89064

* cover
2023-04-23 20:56:43 -04:00
J. Nick Koston
0b0c94ee52 Fix migration with negative event type cache (#91910)
* Fix migration with negative event type cache

fixes a regression with #91770

* Update homeassistant/components/recorder/table_managers/event_types.py
2023-04-23 20:56:17 -04:00
J. Nick Koston
c38839d72f Suppress events for tns1:MediaControl/VideoEncoderConfiguration with onvif (#91916)
These events are not useful to the integration and generate a
confusing log message
```
2023-04-23 14:01:21.866 INFO (MainThread) [homeassistant.components.onvif] DS-HD1: No registered handler for event from 80:91:33:88:8d:bd: {
    SubscriptionReference: None,
    Topic: {
        _value_1: tns1:MediaControl/VideoEncoderConfiguration,
        Dialect: http://www.onvif.org/ver10/tev/topicExpression/ConcreteSet,
        _attr_1: {
    }
    },
    ProducerReference: None,
    Message: {
        _value_1: {
            Source: {
                SimpleItem: [
                    {
                        Name: VideoEncoderConfigurationToken,
                        Value: VideoEncoderToken_1
                    }
                ],
                ElementItem: [],
                Extension: None,
                _attr_1: None
            },
            Key: None,
            Data: {
                SimpleItem: [],
                ElementItem: [
                    {
                        _value_1: <Element {http://www.onvif.org/ver10/media/wsdl}Configuration at 0x2a9e103c0>,
                        Name: Config
                    }
                ],
                Extension: None,
                _attr_1: None
            },
            Extension: None,
            UtcTime: datetime.datetime(2023, 4, 23, 20, 1, 17, tzinfo=<isodate.tzinfo.Utc object at 0x1696b1270>),
            PropertyOperation: Initialized,
            _attr_1: {
        }
        }
    }
}

```

We now ignore them
2023-04-23 20:54:37 -04:00
J. Nick Koston
ed468fa390 Bump zeroconf to 0.58.0 (#91917)
* Bump zeroconf to 0.57.0

changelog: https://github.com/python-zeroconf/python-zeroconf/compare/0.56.0...0.57.0

* again
2023-04-23 20:54:13 -04:00
Franck Nijhof
e795ac5a8e Wheels: Fix typo in env_canada dep for armhf (#91918) 2023-04-23 14:53:42 -05:00
Pablo Estevez
780d0a484d Add NUT device actions (#80986)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-23 14:09:36 -05:00
Michael Hansen
b6f2b29a99 Wyoming tts (#91712)
* Add tts entity

* Add tts entity and tests

* Re-add name to TextToSpeechEntity

* Fix linting

* Fix ruff linting

* Support voice attr (unused)

* Remove async_get_text_to_speech_entity

* Move name property to Wyoming TTS entity

* Fix id

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-23 13:06:56 -05:00
Paulus Schoutsen
f4df0ca50a Assist pipeline to use configured values (#91901)
* Assist pipeline to use configured values

* Include voice in TTS-START event

* Use correct tts language var

* More vars

* Apply suggestions from code review

* Update

---------

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2023-04-23 12:48:11 -04:00
Franck Nijhof
ec1952b926 Wheels: Disable Pandas for Python 3.11 on armhf (#91898) 2023-04-23 16:42:44 +02:00
Markus
1a14a93df6 HA deconz: Add support for Tuya Smart Air Housekeeper 6in1 Air Quality Monitor (#87866)
* fix check for airquality sensor (was always TRUE)

* import additional const required

* add support for formaldehyd sensor

* add support for co2 sensor

* add support for pm25 sensor

* sort const a-z

* adapt to typo fixed function

* adapt to new key names (formaldehyde)

* adapt co2 sensor to new key names

* Update homeassistant/components/deconz/sensor.py

remove unnecessary code

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>

* add device_class for air_quality_ppb

* add test_air_quality_sensor_6_in_1

* fix Air quality PPB test to match device_class

* remove device_class of air_quality_ppb

* remove device_class test of airqualityppb

* explicit units

* remove device_class test of airquality_1_ppb

* dependency bump pydeconz to 111

* Update homeassistant/components/deconz/sensor.py

remove unnecessary device_class

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>

* import formatting

* formatting

* Update homeassistant/components/deconz/sensor.py

change key for pm2_5

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>

* add airquality co2 ch2o pm25 sensor testdata

* remove test_air_quality_sensor_6_in_1

* formatting

* bump pydeconz for requirements

---------

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>
2023-04-23 16:12:52 +02:00
Marc Mueller
06520217bc Update pylint to 2.17.2 (#91894) 2023-04-23 14:46:48 +02:00
J. Nick Koston
1a00644b0a Bump ulid-transform to 0.7.0 (#91888)
changelog: https://github.com/bdraco/ulid-transform/compare/v0.6.3...v0.7.0
2023-04-23 06:53:53 -04:00
Marc Mueller
00e600d406 Improve notion generic typing (#91883) 2023-04-23 11:24:39 +02:00
Paulus Schoutsen
f18056f0a4 Add a VoIP user (#91884)
* Add a VoIP user

* Fix tests
2023-04-22 23:44:13 -04:00
Michael Hansen
7fcf07c964 Ensure .pcm binary files do not have line endings changed (#91881) 2023-04-22 22:22:30 -04:00
Michael Hansen
8abd047e21 Rename raw audio files to .pcm (#91879) 2023-04-22 22:03:08 -04:00
Paulus Schoutsen
1eef4af493 Use configured voice in TTS output for assist pipeline (#91878) 2023-04-22 22:01:32 -04:00
Matthias Alphart
33808cd268 Add entity name translations to KNX system sensors (#91396)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-04-23 01:31:59 +02:00
J. Nick Koston
82340907c2 Ensure onvif retries setup if camera fails to respond correctly (#91866) 2023-04-23 01:27:54 +02:00
[pʲɵs]
6013584b7b Add balance entity for Sonos speakers (#85205) 2023-04-23 01:18:17 +02:00
J. Nick Koston
942a955a77 Handle 404 for media/ptz/image onvif services to allow setup to proceed (#91875) 2023-04-23 01:16:37 +02:00
J. Nick Koston
e4744199ce Raise an exception when trying to save camera snapshots to a not allowed path (#91869) 2023-04-23 01:15:56 +02:00
Marc Mueller
9ccc0059d2 Add run-name for workflow_dispatch runs [ci] (#91873) 2023-04-23 01:15:09 +02:00
J. Nick Koston
bba225abc5 Mark onvif events as stale when the subscription renewal fails (#91567) 2023-04-23 01:14:22 +02:00
Franck Nijhof
dccef1020c Revert "Update opencv-python-headless to 4.7.0.72" (#91871) 2023-04-23 01:09:35 +02:00
Luke
498e69695b Add Anova integration (#86254)
* init setup of Anova Sous Vide

* bump anova-wifi to 0.2.4

* Removed yaml support

* Bump to anova-wifi 0.2.5

* Added support for adding sous vide while offline

* Added basic test for sensor

* added better tests for sensors and init

* expanded code coverage

* Decreased timedelta to lowest functioning value.

* Updating my username

* migrate to async_forward_entry_setups

* applying pr recommended changes

* bump anova-wifi to 0.2.7

* Improvements to hopefully get this review ready

* formatting changes

* clean ups for pr review

* remove unneeded unique id check.

* bump ao anova_wifi 0.3.0

* rename device_id to device_unique_id

* renamed to 'anova'

* added unique_id to MockConfigEntry

* removed leftover anova sous vides

* added device id to strings

* added error for incorrect device id

* add has_entity_name

* added attr name for tests

* added authentication functionality

* bump to 0.4.3

* split entity into its own class/object

* pulling firmware version out of async_setup

Co-authored-by: J. Nick Koston <nick@koston.org>

* addressed pr changes

* fixed pytest

* added anova data model

* removed unneeded time change

* add logging in package

* rework step_user

* Update homeassistant/components/anova/sensor.py

Co-authored-by: J. Nick Koston <nick@koston.org>

* Removed lower from attr unique id

Co-authored-by: J. Nick Koston <nick@koston.org>

* Removed unneeded member variables in sensor

Co-authored-by: J. Nick Koston <nick@koston.org>

* removed repeated subclass attr

Co-authored-by: J. Nick Koston <nick@koston.org>

* simplify update_failed test

* created descriptionentity

* bump to 0.6.1 limit ws connect

* add translation for sensor entities

* version bump - support pro model

* add anova to strict typing

* fixed sensor not getting datas type

* Apply suggestions from code review

Co-authored-by: J. Nick Koston <nick@koston.org>

* Check for new devices in init

* style changes

* return false instead of config entry not ready

* move serialize_device_list to utils

* move repeating device check into api

* moved unneeded code out of try except

* fixed tests to get 100% cov

* Update homeassistant/components/anova/strings.json

Co-authored-by: J. Nick Koston <nick@koston.org>

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-22 18:05:14 -05:00
Eric Severance
68ce59e9c1 Skip adding WeMo device on failure (#91621)
* Skip adding WeMo device on failure

* Only create a single log entry for each failed device

* Fix typo s/serial_number/serialnumber/

* Discard failed devices on success
2023-04-22 23:10:08 +02:00
Franck Nijhof
66a25a9e72 Wheels: Don't build opencv-python-headless on cp311 (#91872) 2023-04-22 22:44:29 +02:00
cirrusblau
ae91ef8e74 Bump locationsharinglib to 5.0.1 (#91259) 2023-04-22 22:05:23 +02:00
Franck Nijhof
5533eed30c Wheels: Don't build beacontools on cp311 (#91868) 2023-04-22 22:00:32 +02:00
epenet
7906e39df7 Add missing ViCare diagnostics tests (#90821)
Co-authored-by: Hans Oischinger <hans.oischinger@gmail.com>
2023-04-22 21:29:40 +02:00
epenet
98b1005b63 Ensure config entries are unloaded in tests (#90850) 2023-04-22 21:26:07 +02:00
Michael
4ed23b18e3 Add entity name translations to Supervisor (#90937) 2023-04-22 21:17:00 +02:00
epenet
41f8f9fcad Fix lingering timer in yeelight SSDP discovery (#91694) 2023-04-22 21:13:36 +02:00
epenet
102613a1af Fix lingering timer in wiz (#91745) 2023-04-22 21:12:48 +02:00
Michael
957181d38f Correct unit of measurement for Synology DSM sensors (#90633) 2023-04-22 21:11:03 +02:00
Ernst Klamer
328b79a4af Add events to BTHome (#91691)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-22 14:10:27 -05:00
Franck Nijhof
ca76285bcf CI: Cancel concurrent Wheel jobs (#91867) 2023-04-22 20:56:52 +02:00
Franck Nijhof
0f80d0625a Wheels: Don't build azure-servicebus on cp311 (#91862) 2023-04-22 19:29:42 +02:00
Michael
fe2c11a698 Add diagnostics to PI-Hole (#91383) 2023-04-22 19:29:28 +02:00
jjlawren
d5a6840588 Create repair issue if Sonos subscriptions fail (#87437)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-04-22 19:28:04 +02:00
David Poll
93a87d3c82 Add device_trackers attribute to person entities (#91312) 2023-04-22 19:26:12 +02:00
Tristan Richard
94a1429c65 Update Egardia to support more devices (#91430)
Co-authored-by: Tristan Richard <trichard@jabra.com>
2023-04-22 19:10:17 +02:00
Christopher Bailey
512e03746b Bump pyunifiprotect to 4.8.2 (#91861) 2023-04-22 18:44:27 +02:00
Paulus Schoutsen
d4fb2cdcf7 Conversation list command to support match-all languages agents (#91844)
* Conversation list command to support match-all languages agnets

* Reuse var
2023-04-22 12:43:09 -04:00
Matthias Alphart
95d44e100b Update xknx to 2.9.0 (#91282)
* Update xknx to 2.8.0

* add tests for validators

* Update strings.json

* Update xknx to 2.9.0
2023-04-22 18:25:14 +02:00
András Rutkai
2e9dc209f9 Updated list of supported voices in Watson TTS integration (#91458) 2023-04-22 18:11:18 +02:00
Maciej Bieniek
8389086388 Add new parental control switches for NextDNS (#91507) 2023-04-22 18:09:54 +02:00
MarkGodwin
e19c6ac011 Bump tplink-omada-client to 1.2.4 (#91853) 2023-04-22 18:09:02 +02:00
Jan Bouwhuis
8910afa474 Substate will never be None when subscribing mqtt topics (#91856) 2023-04-22 17:54:39 +02:00
mkmer
cb87942b28 Bump whirlpool-sixth-sense to 0.18.3 (#91859) 2023-04-22 17:53:04 +02:00
J. Nick Koston
3beb6e9718 Add webhook support to onvif (#91485) 2023-04-22 17:49:41 +02:00
Franck Nijhof
a491859875 Several changes to Wheels building for the cp311 ABI (#91850) 2023-04-22 17:23:02 +02:00
epenet
60d7ea6f0d Use SnapshotAssertion in 1-wire tests (#90782) 2023-04-22 17:22:05 +02:00
epenet
b568dd3060 Refactor SnapshotAssertion is SFR Box (#90775) 2023-04-22 17:20:27 +02:00
Maciej Bieniek
ee23d79a00 Add air quality sensors to Accuweather integration (#91516) 2023-04-22 17:19:21 +02:00
Franck Nijhof
20a42c65cf CI: Add automatic retries to codecov upload action (#91857) 2023-04-22 17:16:43 +02:00
starkillerOG
228233ae0c Bump reolink-aio to v0.5.13 (#91550) 2023-04-22 16:14:36 +02:00
Franck Nijhof
f39f07e19b Update YARL to 1.9.1 (#91852) 2023-04-22 09:14:27 -04:00
Lucas
48a2fe9e7a Add more PrusaLink sensors (#80424)
* Add more PrusaLink sensors

* Disable prusalink target temperatures by default, add prusa to brands

* Disable prusalink z-height by default

* Remove uneccessary Prusa from brands

* Move target temperatures to the telemetry section of the sensor

* Fix entity naming for prusalink

* Add tests for new prusalink sensors

* Test fixes, fix rebase errors

* Clean up deprecated unit usage

* Add translations for entity names

* Fix tests for translations

---------

Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-04-22 09:04:10 -04:00
J. Nick Koston
b76551cf35 Reduce number of columns selected for logbook (#91718) 2023-04-22 14:25:22 +02:00
J. Nick Koston
34b824a27b Reduce number of columns when selecting attributes for history (#91717) 2023-04-22 14:21:08 +02:00
J. Nick Koston
6e628d2f06 Add a negative cache to the recorder event type manager (#91770) 2023-04-22 14:09:04 +02:00
starkillerOG
8544d73b88 Reolink doorbell extend features (#90469) 2023-04-22 13:57:10 +02:00
Jan Bouwhuis
9197316b57 Add tests mqtt light with single supported color_mode (#91811) 2023-04-22 13:55:43 +02:00
J. Nick Koston
b5fbbf8410 Speed up processing binary columns on SQLite/MariaDB/MySQL (#91818) 2023-04-22 13:55:11 +02:00
Jan Bouwhuis
fc0c8bf113 Improve comment on patching the _import method in test bootstrap dependencies test (#91848) 2023-04-22 13:40:38 +02:00
Bouwe Westerdijk
624b8d1cbd Bump plugwise to v0.31.0 (#91831) 2023-04-22 12:59:47 +02:00
Jan Bouwhuis
ad355b3396 Remove unreachable code in mqtt integration discovery (#91796) 2023-04-22 12:31:32 +02:00
J. Nick Koston
7a02e992f9 Bump sense_energy to 0.11.2 (#91836) 2023-04-22 12:12:16 +02:00
J. Nick Koston
95fcdc5684 Speed up sql queries where ORM rows are not needed (#91839)
* Speed up logbook and history queries where ORM rows are not needed

This avoids having sqlalchemy wrap Result in ChunkedIteratorResult
which has additional overhead we do not need for these cases

* more places

* anything that uses _sorted_statistics_to_dict does not need orm rows either
2023-04-21 23:28:07 -04:00
J. Nick Koston
2663901603 Speed up LazyEventPartialState for logbook (#91840)
* Speed up LazyEventPartialState for logbook

We should avoid the getattr call since every row would
have to call the sqlalchemy key not found implemention
if we blindly getattr

* Speed up LazyEventPartialState for logbook

We should avoid the getattr call since every row would
have to call the sqlalchemy key not found implemention
if we blindly getattr
2023-04-21 23:27:23 -04:00
Erik Montnemery
9a0de43f98 Add name to tts voices (#91814)
* Add name to tts voices

* Add new file
2023-04-21 20:41:14 -04:00
Paulus Schoutsen
cdbdf1ba4f 2023.4.6 (#91833) 2023-04-21 20:31:05 -04:00
Aaron Bach
c6d846453d Bump aionotion to 2023.04.2 to address imminent API change (#91786)
* Bump `aionotion` to 2023.04.0

* Bump `aionotion` to 2023.04.2 to address imminent API change

* Clean migration

* Reduce blast area

* Fix tests

* Better naming
2023-04-21 19:52:57 -04:00
J. Nick Koston
d58f62cb5e Remove old migration tests that have been replaced (#91842)
These tests were moved to test_migration_from_schema_32.py in `dev`
and have changed. Remove the old tests as they are no longer
correct
2023-04-21 19:12:21 -04:00
Paulus Schoutsen
f1c4605fba Bumped version to 2023.4.6 2023-04-21 14:58:46 -04:00
Paulus Schoutsen
deb55a74da Disallow uploading files to bypass the media dirs (#91817) 2023-04-21 14:58:42 -04:00
Allen Porter
30da629285 Relax the constraint that events must have a consistent timezone for start/end (#91788) 2023-04-21 14:58:41 -04:00
Stephan Uhle
26b28001c5 Bump pysml to 0.0.10 (#91773) 2023-04-21 14:58:40 -04:00
Nathan Spencer
64f8059f00 Bump pylitterbot to 2023.4.0 (#91759) 2023-04-21 14:58:39 -04:00
Jan Bouwhuis
8363183943 Do not wait for mqtt at startup mqtt_statestream (#91721) 2023-04-21 14:58:38 -04:00
Teemu R
e19279fda5 Bump python-songpal dependency (#91708) 2023-04-21 14:58:38 -04:00
J. Nick Koston
591ffe2340 Fallback to generating a new ULID on migraiton if context is missing or invalid (#91704)
* Fallback to generating a new ULID on migraiton if context is missing or invalid

It was discovered that postgresql will do a full scan if
there is a low cardinality on the index because of missing
context ids. We will now generate a ULID for the timestamp
of the row if the context data is missing or invalid

fixes #91514

* tests

* tweak

* tweak

* preen
2023-04-21 14:58:37 -04:00
Shay Levy
fc4e8e5e7b Bump aioshelly to 5.3.2 (#91679) 2023-04-21 14:58:36 -04:00
J. Nick Koston
36d2accb5b Handle long format context UUIDs during migration (#91657)
In https://github.com/home-assistant/core/issues/91514 is was discovered
these exist in older versions
2023-04-21 14:58:07 -04:00
epenet
38de9765df Bump renault-api to 0.1.13 (#91609) 2023-04-21 14:55:51 -04:00
Duco Sebel
6b02892c28 Handle UnsupportedError in HomeWizard (#91608)
* Handle UnsupportedEror

* Make error message more clear

* Remove debug line, whoops
2023-04-21 14:55:50 -04:00
Tom Harris
c544da7426 Fix Insteon thermostat issue (#91568)
* Bump pyinsteon

* Bump pyinsteon

* Bump pyinsteon
2023-04-21 14:55:49 -04:00
Aaron Godfrey
71f0f53ddc Fix tasks with no due date from not triggering on calendar state. (#91196)
Fix tasks with no due date.

Prior to this change we were setting the start date/time to utc rather
than the user's timezone.
2023-04-21 14:55:48 -04:00
Jan Bouwhuis
4de124cdd5 Follow up on comments on changes bootstrap tests (#91803)
* Remove commented code

* Add comment to explain mock

* typo
2023-04-21 21:44:14 +03:00
Franck Nijhof
5e243da470 Clean up gateway logic from Plugwise (#91769) 2023-04-21 21:38:45 +03:00
epenet
33a8eb1716 Add type hints to broadlink device/heartbeat (#91737)
* Add type hints to broadlink device/heartbeat

* Improve

* Force bool

* Revert "Force bool"

This reverts commit 65bce837d0.
2023-04-21 21:36:18 +03:00
CodingSquirrel
6137aeb30a Bump pyeconet to 0.1.20 (#90950)
chore: Bump pyeconet to 0.1.20 to fix reloading values
2023-04-21 19:25:00 +02:00
epenet
24428d98a1 Fix lingering timer in smartthings tests (#91697) 2023-04-21 18:58:07 +02:00
epenet
3d39854ffc Fix lingering timer in traccar (#91812) 2023-04-21 18:49:54 +02:00
epenet
4663ad75a0 Fix lingering timer in tplink (#91806) 2023-04-21 16:52:23 +02:00
epenet
07aef27ea8 Fix lingering timer in todoist (#91808) 2023-04-21 16:41:54 +02:00
Allen Porter
93eac97983 Relax the constraint that events must have a consistent timezone for start/end (#91788) 2023-04-21 10:25:52 -04:00
Paulus Schoutsen
78e29d526c Disallow uploading files to bypass the media dirs (#91817) 2023-04-21 10:21:20 -04:00
epenet
9665bc61f2 Fix lingering timer in usb (#91800) 2023-04-21 13:41:22 +02:00
Kevin Stillhammer
609a7ccda8 Use Selectors for waze_travel_time flows (#91778)
* Use Selectors for waze_travel_time flows

* Use correct selector option in tests

* Remove duplicate option

* Use suggested values
2023-04-21 12:57:45 +02:00
Franck Nijhof
3b0068bc85 Update opencv-python-headless to 4.7.0.72 (#91802) 2023-04-21 12:23:46 +02:00
Franck Nijhof
5b9ad6a6d3 Update psutil to 5.9.5 (#91807) 2023-04-21 12:06:28 +02:00
epenet
459af7f834 Fix lingering timer in discovery (#91804)
* Fix lingering timer in discovery

* type hint
2023-04-21 11:49:10 +02:00
Miroslav Ždrale
2198492f1b Bump openwrt-luci-rpc version to 1.1.16 (#91358) 2023-04-21 11:27:26 +02:00
Eduard van Valkenburg
09517668fe Update pysiaalarm to 3.1.0 (#91500)
* updated sia requirements

* updates because of changes in package

* linting and other small fixes

* linting and other small fixes

* small release on package that fixes issue with autospec
2023-04-21 10:51:49 +02:00
dependabot[bot]
faf78fc6b1 Bump codecov/codecov-action from 3.1.2 to 3.1.3 (#91791)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-21 10:48:28 +02:00
dependabot[bot]
0e2541c843 Bump actions/setup-python from 4.5.0 to 4.6.0 (#91792)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-21 10:47:35 +02:00
Franck Nijhof
7af63c2cdf Remove libexecinfo-dev package from Wheels jobs (#91798) 2023-04-21 10:36:13 +02:00
epenet
79ad9a3646 Shutdown coordinator on entry unload (#91748)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-21 10:07:31 +02:00
Franck Nijhof
a37a87e972 Build wheels for CPython ABI cp311 (#91736) 2023-04-21 09:10:39 +02:00
Jan Bouwhuis
92bb61d25b Let MQTT availability for snips be managed by dependencies (#91790)
MQTT availability for snips via dependencies
2023-04-21 09:05:13 +02:00
Jan Bouwhuis
0552ec834d Do not wait for mqtt at startup mqtt_statestream (#91721) 2023-04-21 09:00:48 +02:00
Jan Bouwhuis
da26b0a930 Ensure dependencies are awaited correctly when setting up integrations (#91454)
* Do not wait

* Correct tests

* Manage after dependencies stage 1

* test bootstrap dependencies

* Assert log the dependenciy is waited for

* Improve docstrings

* Assert outside callback

* Patch async_get_integrations

* Revert changes made to snips integration

* Undo changes to mqtt_statestream
2023-04-21 08:33:50 +02:00
J. Nick Koston
2e18b37291 Bump dbus-fast to 1.85.0 (#91784) 2023-04-21 08:26:44 +02:00
puddly
72414a5864 Load quirks in ZHA unit tests (#91779) 2023-04-21 08:24:39 +02:00
Franck Nijhof
f9416e1c34 Update sentry-sdk to 1.20.0 (#91771) 2023-04-21 08:23:09 +02:00
Stephan Uhle
beb0085b53 Bump pysml to 0.0.10 (#91773) 2023-04-21 08:16:32 +02:00
Franck Nijhof
65d7e48815 Update ruff to v0.0.262 (#91767) 2023-04-21 08:15:41 +02:00
kernelpanic85
7a20335943 Bump arcam-fmj to 1.3.0 (#91747)
Bump arcam-fmj to 1.3.0
2023-04-21 07:08:00 +02:00
Martin Hjelmare
1a18dc7425 Add tts entity (#91692)
* Add tts entity

* Allow passing engine id to url view

* Update async_resolve_engine

* Add and update more tests

* Fix assist pipeline tests temporarily

* Move fixtures

* Update notify platform

* Complete legacy tests

* Update media source tests

* Update async_get_text_to_speech_languages

* Address comment

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-20 22:55:46 -04:00
J. Nick Koston
458276a6a6 Bump aioesphomeapi to 13.7.1 (#91783)
changelog: https://github.com/esphome/aioesphomeapi/compare/v13.7.0...v13.7.1
2023-04-20 16:36:11 -10:00
J. Nick Koston
c407fb0861 Bump recommended esphome version to 2023.4.0 for bluetooth (#91509) 2023-04-20 15:36:12 -10:00
Michael Hansen
5080654776 VoIP listening tone and "not configured" message (#91762)
* Play tone when starting a VoIP call

* Play audio message when call is rejected

* Add option to disable tone for tests

* Send RTP audio in executor to reduce jitter

* Don't start pipeline until speech

* Bump voip utils
2023-04-20 20:30:51 -04:00
Keilin Bickar
f4f3962ee9 Bump asyncsleepiq lib to 1.3.3 (#91772) 2023-04-20 12:01:49 -10:00
epenet
2aa90b1d12 Fix lingering timer in netatmo (#91728) 2023-04-20 21:00:24 +02:00
Teemu R
dcae9a0d02 Bump python-songpal dependency (#91708) 2023-04-20 20:57:45 +02:00
epenet
821b9bdb5f Fix lingering timer in hassio (#91702) 2023-04-20 20:56:45 +02:00
Jannick
cf4c491e79 Update URLs forwarding to HA blog posts (#91698) 2023-04-20 20:55:13 +02:00
epenet
62f76a81bb Fix wallbox tests (#91752) 2023-04-20 08:42:22 -10:00
Franck Nijhof
fd3aa5338c Add Supervisor add-on discovery to Wyoming integration (#91761) 2023-04-20 20:38:39 +02:00
Nathan Spencer
8ac74c5979 Bump pylitterbot to 2023.4.0 (#91759) 2023-04-20 20:29:35 +02:00
Michael Hansen
9fdc794b36 Prefer country over language family + MATCH_ALL (#91753)
* Prefer country over language family

* More test fixes
2023-04-20 13:55:26 -04:00
Kevin McCormack
672fb44041 Add pjlink const (#91749)
* Add pjlink const

This is a precursor

* Use DOMAIN const in pjlink media player

* fixup! Add pjlink const
2023-04-20 19:27:44 +02:00
Erik Montnemery
b3d50e67cd Fix assist_pipeline tests (#91757) 2023-04-20 12:19:31 -04:00
epenet
62d38b49bc Fix lingering timers in bluetooth (part 1) (#91673)
* Fix lingering timers in bluetooth (part 1)

* Use a local var
2023-04-20 18:07:38 +02:00
Erik Montnemery
0525ce59d7 Add additional parameters to assist pipelines (#91619)
* Add additional parameters to assist pipelines

* Improve WS schema validation

* Tweak

* Add test

* Address review comments
2023-04-20 11:02:55 -04:00
Luke
b4e0a1f1fc Add new Roborock Integration (#89456)
* init roborock commit

* init commit of roborock

* removed some non-vacuum related code

* removed some non-needed constants

* removed translations

* removed options flow

* removed manual control

* remove password login

* removed go-to

* removed unneeded function and improved device_stat

* removed utils as it is unused

* typing changes in vacuum.py

* fixed test patch paths

* removed unneeded records

* removing unneeded code in tests

* remove password from strings

* removed maps in code

* changed const, reworked functions

* remove menu

* fixed tests

* 100% code coverage config_flow

* small changes

* removed unneeded patch

* bump to 0.1.7

* removed services

* removed extra functions and mop

* add () to configEntryNotReady

* moved coordinator into seperate file

* update roborock testing

* removed stale options code

* normalize username for unique id

* removed unneeded variables

* fixed linter problems

* removed stale comment

* additional pr changes

* simplify config_flow

* fix config flow test

* Apply suggestions from code review

Co-authored-by: Allen Porter <allen.porter@gmail.com>

* First pass at resolving PR comments

* reworked config flow

* moving vacuum attr

* attempt to clean up conflig flow more

* update package and use offline functionality

* Fixed errors and fan bug

* rework model and some other small changes

* bump version

* used default factory

* moved some client creation into coord

* fixed patch

* Update homeassistant/components/roborock/coordinator.py

Co-authored-by: Allen Porter <allen.porter@gmail.com>

* moved async functions into gather

* reworked gathers

* removed random line

* error catch if networking doesn't exist or timeout

* bump to 0.6.5

* fixed mocked data reference url

* change checking if we have no network information

Co-authored-by: Allen Porter <allen.porter@gmail.com>

---------

Co-authored-by: Allen Porter <allen.porter@gmail.com>
Co-authored-by: Allen Porter <allen@thebends.org>
2023-04-20 07:02:58 -07:00
Erik Montnemery
af193094b5 Add WS command for getting an assist pipeline (#91725)
* Add WS command for getting an assist pipeline

* Return preferred pipeline if none is specified
2023-04-20 09:15:19 -04:00
Franck Nijhof
a419c78524 Rename HomeKit to HomeKit Bridge (#91741) 2023-04-20 09:03:12 -04:00
Erik Montnemery
a98be9dc84 Test specifying pipeline in calls to async_pipeline_from_audio_stream (#91739) 2023-04-20 09:01:31 -04:00
Erik Montnemery
0429b321b8 Include matching languages in WS conversation/agent/list (#91730)
* Include matching languages in WS conversation/agent/list

* Allow specifying country
2023-04-20 08:58:43 -04:00
Erik Montnemery
768c499b6f Include matching languages in WS stt/engine/list (#91731)
* Include matching languages in WS stt/engine/list

* Allow specifying country
2023-04-20 08:57:48 -04:00
Erik Montnemery
79de27a4a9 Include matching languages in WS tts/engine/list (#91732)
* Include matching languages in WS tts/engine/list

* Allow specifying country
2023-04-20 08:56:50 -04:00
Erik Montnemery
6d619579b4 Add WS API for listing languages supported by a full assist pipeline (#91669)
* Add WS API for listing languages supported by a full assist pipeline

* Address review comments, change logic
2023-04-20 08:55:17 -04:00
Erik Montnemery
03dcb915e3 Add missing callback decorator on StorageCollectionWebsocket.ws_list_item (#91727) 2023-04-20 07:58:11 -04:00
epenet
bb2461ea93 Fix lingering timers in bluetooth (part 2) (#91674) 2023-04-20 11:04:07 +02:00
Franck Nijhof
d8c9ed3a64 Update Home Assistant base image to 2023.04.0 (#91720) 2023-04-20 10:57:18 +02:00
Jan Bouwhuis
0bcda9fe9c Make sure MQTT client is available when starting depending platforms (#91164)
* Make sure MQTT is available starting mqtt_json

* Wait for mqtt client

* Sync client connect

* Simplify

* Addiitional tests async_wait_for_mqtt_client

* Improve comment waiting for mqtt

* Improve docstr

* Do not wait unless the MQTT client is in setup

* Handle entry errors during setup

* More comments - do not clear event

* Add snips and mqtt_room

* Add manual_mqtt

* Update homeassistant/components/mqtt/__init__.py

Co-authored-by: J. Nick Koston <nick@koston.org>

* Use a fixture, improve tests

* Simplify

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-20 08:07:35 +02:00
J. Nick Koston
adc472862b Fallback to generating a new ULID on migraiton if context is missing or invalid (#91704)
* Fallback to generating a new ULID on migraiton if context is missing or invalid

It was discovered that postgresql will do a full scan if
there is a low cardinality on the index because of missing
context ids. We will now generate a ULID for the timestamp
of the row if the context data is missing or invalid

fixes #91514

* tests

* tweak

* tweak

* preen
2023-04-19 21:56:07 -04:00
J. Nick Koston
56a6244d90 Remove legacy context lookup implementation from logbook (#91710)
* Remove legacy context lookup implemention from logbook

This object can now be replaced with a simple dict

* Remove legacy context lookup implemention from logbook

This object can now be replaced with a simple dict

* scope

* fix order issue
2023-04-19 21:54:34 -04:00
Mike Degatano
24fe6dfc63 Fix from feedback on supervisor issues to repairs (#91680)
* Fix from feedback on supervisor issues to repairs

* Use cls parameter in classmethods
2023-04-20 01:02:40 +02:00
Paulus Schoutsen
6342992791 Detect eero brand for Thread (#91699) 2023-04-19 22:18:09 +02:00
epenet
8d35426c69 Fix lingering timer in ZHA cluster tests (#91693) 2023-04-19 21:04:53 +02:00
epenet
2df5d34374 Fix lingering timer in unifiprotect discovery (#91695) 2023-04-19 21:02:37 +02:00
Shay Levy
54a659c51b Bump aioshelly to 5.3.2 (#91679) 2023-04-19 20:26:45 +03:00
epenet
1797dca0b8 Fix lingering timer in ZHA tests (#91688)
* Fix lingering timer in ZHA discovery tests

* Add type hints

* Also update gateway tests
2023-04-19 13:00:25 -04:00
epenet
d70ae8afc5 Fix lingering timer in ZHA debouncers (#91685) 2023-04-19 18:45:27 +02:00
epenet
ec914815bd Fix lingering timer in ZHA light transition (#91683) 2023-04-19 18:20:17 +02:00
epenet
dace1add1f Fix lingering timer in SinopeTechnologiesThermostat (#91681) 2023-04-19 18:19:58 +02:00
Erik Montnemery
4e0b8a7363 Allow complex schemas for validating WS commands (#91655) 2023-04-19 11:37:09 -04:00
J. Nick Koston
90e92aa9d8 Add test case for matching the shelly button (#91642) 2023-04-19 11:26:21 -04:00
J. Nick Koston
573c15d67a Update bluetooth debug logging for newer bleak (#91643)
fixes

```
homeassistant/components/bluetooth/wrappers.py:268: FutureWarning: BLEDevice.rssi is deprecated and will be removed in a future version of Bleak, use AdvertisementData.rssi instead
  rssi = wrapped_backend.device.rssi
```
2023-04-19 11:26:02 -04:00
J. Nick Koston
f8fa382ebc Add test coverage for bluetooth devices being rediscoverable after they go unavailable (#91645)
* Fix bluetooth devices not being discovered after they go unavailable and reavailable

* Update homeassistant/components/bluetooth/manager.py
2023-04-19 11:25:38 -04:00
Erik Montnemery
b5ab83def4 Add test for WS conversation/agent/info (#91652) 2023-04-19 11:15:21 -04:00
Duco Sebel
9092f6a60f Handle UnsupportedError in HomeWizard (#91608)
* Handle UnsupportedEror

* Make error message more clear

* Remove debug line, whoops
2023-04-19 11:14:28 -04:00
epenet
55c723753e Cleanup device handles on ZHA controller shutdown (#91591) 2023-04-19 17:13:58 +02:00
Erik Montnemery
9bd739df82 Add assist_pipeline to default_config (#91651) 2023-04-19 10:59:43 -04:00
Erik Montnemery
eabbe8969d Adjust typing of AbstractConversationAgent.supported_languages (#91648)
* Adjust typing of AbstractConversationAgent.supported_languages

* Update test
2023-04-19 10:53:49 -04:00
Erik Montnemery
5e9bbeb4ad Refactor conversation agent WS API for listing agents (#91590)
* Refactor conversation agent WS API for listing agents

* Add conversation/agent/info back
2023-04-19 10:53:24 -04:00
David F. Mulcahey
9c784ac622 Refactor ZHA (#91476)
* rename channel -> cluster handler

* remove refs to channels and create endpoint class

* remove remaining references to channels

* fix filter

* take in latest changes from #91403

* missed one

* missed a reference
2023-04-19 10:47:07 -04:00
Erik Montnemery
090f59aaa2 Make context a mandatory parameter for async_pipeline_from_audio_stream (#91658) 2023-04-19 09:30:29 -04:00
Tom Harris
ebd20c8a7b Fix Insteon thermostat issue (#91568)
* Bump pyinsteon

* Bump pyinsteon

* Bump pyinsteon
2023-04-19 08:41:32 -04:00
J. Nick Koston
408b2171ae Handle long format context UUIDs during migration (#91657)
In https://github.com/home-assistant/core/issues/91514 is was discovered
these exist in older versions
2023-04-19 08:40:04 -04:00
Joost Lekkerkerker
162c36f108 Move Steam Entity to separate file (#91630) 2023-04-19 14:14:59 +02:00
Joost Lekkerkerker
88f5f04be8 Refactor LastFM to use shorthand attributes (#91606)
* Preliminary PR for the coordinator

* Preliminary PR for the coordinator

* Preliminary PR for the coordinator

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Preliminary PR for the coordinator

* Preliminary PR for the coordinator

* Preliminary PR for the coordinator

* Preliminary PR for the coordinator

* Preliminary PR for the coordinator

* Preliminary PR for the coordinator

* Preliminary PR for the coordinator

* Apply feedback

* Apply feedback

* Apply feedback

* Apply feedback

* Apply feedback

* Update homeassistant/components/lastfm/sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/lastfm/sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Apply feedback

* Apply feedback

* Fix tests

* Update homeassistant/components/lastfm/sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Fix tests

* Fix feedback

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-19 14:13:43 +02:00
Erik Montnemery
f3e6d6dfc0 Add async_get_supported_voices to tts.Provider (#91649)
* Add async_get_supported_voices to tts.Provider

* Update WS API
2023-04-19 13:47:49 +02:00
Michael Hansen
85d57a046c Add wyoming integration with stt (#91579)
* Add wyoming integration with stt/tts

* Forward config entry setup

* Use SpeechToTextEntity

* Add strings to config flow

* Move connection into config flow

* Add tests

* On load/unload used platforms

* Tweaks

* Add unload test

* Fix stt

* Add missing file

* Add test for no services

* Improve coverage

* Finish test coverage

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-19 06:10:59 -04:00
G Johansson
f74103c57e Add config flow to Workday (#72558)
* Initial commit Workday Config Flow

* Add tests

* Remove day_to_string

* new entity name, new depr. version, clean

* Use repairs for depr. warning

* Fix issue_registry moved

* tweaks

* hassfest

* Fix CI

* FlowResultType

* breaking version

* remove translation

* Fixes

* naming

* duplicates

* abort entries match

* add_suggested_values_to_schema

* various

* validate country

* abort_entries_match in option flow

* Remove country test

* remove country not exist string

* docstring exceptions

* easier

* break version

* unneeded check

* slim tests

* Fix import test

* Fix province in abort_match

* review comments

* Fix import province

* Add review fixes

* fix reviews

* Review fixes
2023-04-19 11:50:11 +02:00
Mike Degatano
a511e7d6bc Make repairs out of select supervisor issues (#90893)
* Make repairs out of select supervisor issues

* Fix comment formatting

* Add a test case for API error

* Testing and type fix
2023-04-19 08:07:38 +02:00
Michael Hansen
6b5e82ed40 Support both stt entity and legacy providers (#91633) 2023-04-18 16:59:06 -05:00
Erik Montnemery
dc3c47986b Add property supported_languages to AbstractConversationAgent (#91588)
* Add property supported_languages to AbstractConversationAgent

* Fix test

* Use MATCH_ALL for openai supported languages
2023-04-18 15:11:04 -05:00
epenet
d7eb4c4740 Bump renault-api to 0.1.13 (#91609) 2023-04-18 19:33:09 +02:00
epenet
1a787bba3f Remove webhook translation file (#91616) 2023-04-18 19:29:37 +02:00
epenet
ae0cbffdd8 Add ability to shutdown update coordinator (#91456)
* Add ability to shutdown update coordinator

* Adjust nibe_heatpump

* Add tests

* Use async

* Remove duplicate code in update coordinator

* Adjust

* Revert nibe changes - it can now be done in a follow-up PR

* Adjust

* Fix incorrect merge

* async_fire_time_changed
2023-04-18 18:56:43 +02:00
Erik Montnemery
bdffb1f298 Drop language parameter from async_get_pipeline (#91612) 2023-04-18 18:07:20 +02:00
Erik Montnemery
10606c4d1e Use the preferred assist pipeline if none was specified (#91611)
* Use the preferred assist pipeline if none was specified

* Add test
2023-04-18 17:35:33 +02:00
Erik Montnemery
016e051db6 Add timestamp to pipeline runs (#91599)
* Add timestamp to pipeline runs

* Include the timestamp in the list
2023-04-18 10:43:46 -04:00
Jan Bouwhuis
4132f08146 Remove check on remove deprecated call back for mqtt subscribe (#91464)
Remove check on deprecated callback wrapper
2023-04-18 16:02:24 +02:00
Erik Montnemery
5f7d98f15b Improve comment in conversation (#91595) 2023-04-18 09:27:14 -04:00
J. Nick Koston
03c517b066 Add a guard against selecting all entities in state_changes_during_period (#91585)
Add a guard against selecting all entities in state_changes_during_period

This cannot happen in `dev` because we require entity ids
2023-04-18 09:26:41 -04:00
Paulus Schoutsen
f3897d8dae Bump hass-nabucasa to 0.65.0 (#91565) 2023-04-18 08:42:03 -04:00
Jan Bouwhuis
599cc4a5c6 Cleanup MQTT platform set up and discovery start (#91007)
Cleanup platform set up and discovery start
2023-04-18 14:33:58 +02:00
J. Nick Koston
2ec1359063 Dynamically size recorder max backlog based on available memory (#90894)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-04-18 12:35:49 +02:00
Sander Striker
f49dc65ff2 EasyEnergy: Add two additional sensors to help pick the best hours (#90543) 2023-04-18 10:18:51 +02:00
J. Nick Koston
2530031454 Use cache to lookup event type ids in logbook (#91576)
noticed we can speed this up while looking at
https://github.com/home-assistant/core/issues/91514

Note: this will not fix that issue as there is more going on there
2023-04-17 23:40:03 -04:00
Michael Hansen
f96515b90a Use language util in stt/tts (#91521)
* Use language util in stt/tts

* Test language util in stt/tts

* Fix common in TTS

* Update snapshot
2023-04-17 23:23:43 -04:00
Michael Hansen
95d16c9829 VoIP audio queue (#91577)
* Clear audio queue after every conversation turn

* Stream STT audio when voice command starts
2023-04-17 22:51:14 -04:00
Jesse Hills
aeb19831d2 ESPHome select for assist pipeline selection (#91526)
* ESPHome: Add assist pipeline select entity

* Add translation strings

* Tests
2023-04-17 22:22:11 -04:00
Paulus Schoutsen
b05fcd7904 2023.4.5 (#91544) 2023-04-17 22:20:19 -04:00
shbatm
ef7e3e27ba Remove previously deprecated ISY994 YAML support (#91575) 2023-04-17 15:37:19 -10:00
Jesse Hills
8d201b205f ESPHome binary sensor representing assist pipeline running (#91406)
* ESPHome binary sensor representing assist pipeline running

* Apply suggestions from code review

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Rename to call active
Simplify with attrs a little

* Load binary sensor if voice assistant on device

* Add some tests

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-17 19:52:37 -04:00
epenet
28652345bd Remove duplicate code in update coordinator (#91573) 2023-04-17 13:07:58 -10:00
Bram Kragten
c6b4c88355 Fix pipeline select (#91570)
Fix pipline select
2023-04-17 18:55:38 -04:00
shbatm
c663f7677c Remove previously deprecated ISY994 services (#91569) 2023-04-17 11:43:01 -10:00
J. Nick Koston
da4c144a5e Fix history stats query using incorrect microseconds (#91250) 2023-04-17 11:37:30 -10:00
epenet
81f018b7e5 Make Debouncer shutdown async (#91542)
* Make shutdown async in Debouncer

* Adjust test
2023-04-17 23:31:30 +02:00
Erik Montnemery
e32dacc62d Add WS API to tts (#91330)
* Add WS API to tts

* Use language util, change from entity_id to engine_id

* Fix rebase mistake
2023-04-17 22:52:19 +02:00
Michael Hansen
2819ad9a16 Bump intents dependency (#91556) 2023-04-17 22:13:31 +02:00
Erik Montnemery
b5817e40f7 Add WS API to stt (#91329) 2023-04-17 22:09:30 +02:00
Bram Kragten
e3ff7d048a Make tts/stt/conversation optional on pipeline (#91555) 2023-04-17 20:54:04 +02:00
G Johansson
afc9e4303a Create base TriggerEntity (#91128)
* Trigger entity base class

* mods

* TriggerEntity to CoordinatorTriggerEntity

* variables to variable

* mypy

* unique_id

* Fix

* docstring

* _render_templates

* split manual vs coordinator

* name

* ManualTriggerEntity

* value

* use super

* Remove ManualTriggerEntity

* Use super()
2023-04-17 19:55:54 +02:00
Paulus Schoutsen
bd22e0bd43 Allow picking a pipeline for voip devices (#91524)
* Allow picking a pipeline for voip device

* Add tests

* Fix test

* Adjust on new pipeline data
2023-04-17 12:09:11 -05:00
Martin Hjelmare
9bd12f6503 Move legacy tts (#91538)
* Move legacy tts

* Add error log on unknown platform

* Add legacy tests and delint all tests

* Consolidate log format

* Add more legacy tests

* Test default legacy provider attributes

* Remove test generated files

* Clean up after merge conflict
2023-04-17 13:01:50 -04:00
Erik Montnemery
0ecd23baee Add WS API for debugging previous assist_pipeline runs (#91541)
* Add WS API for debugging previous assist_pipeline runs

* Improve typing
2023-04-17 11:48:02 -04:00
Erik Montnemery
b597415b01 Make it non-optional to implement supported_languages in tts.Provider (#91347) 2023-04-17 10:59:21 -04:00
Erik Montnemery
8c1c7e1e4c Remove PipelineEvent.as_dict (#91546) 2023-04-17 16:33:53 +02:00
Franck Nijhof
940861e2be Bumped version to 2023.4.5 2023-04-17 15:37:08 +02:00
Christopher Bailey
559ce6a275 Bump unifiprotect to 4.8.1 (#91522) 2023-04-17 15:36:51 +02:00
rappenze
273e1fd2be Fix state mapping in fibaro climate (#91505) 2023-04-17 15:36:48 +02:00
Ben Morton
5ddc18f8ed Resolve issue with switchbot blind tilt devices getting stuck in opening/closing state (#91495) 2023-04-17 15:36:44 +02:00
J. Nick Koston
489a6e766b Fix onvif failing to reload (#91482) 2023-04-17 15:36:40 +02:00
starkillerOG
572f2cc167 Reolink ONVIF move read to primary callback (#91478)
* Move read to primary callback

* fix styling

* Do not raise on ConnectionResetError

* Split request.text() to .read() and decode("utf-8")
2023-04-17 15:36:37 +02:00
J. Nick Koston
5321c60058 Handle a few more transient onvif errors (#91473) 2023-04-17 15:36:33 +02:00
J. Nick Koston
00a86757fa Bump onvif-zeep-async to 1.2.11 (#91472) 2023-04-17 15:36:30 +02:00
J. Nick Koston
b06d624d43 Fix creating onvif pull point subscriptions when InitialTerminationTime is required (#91470)
* Fix creating onvif pull point subscriptions when InitialTerminationTime is required

fixes #85902

* Bump again because I got it wrong the first time.. this is why retest is good
2023-04-17 15:36:26 +02:00
Michael Davie
89b1d5bb68 Bump env_canada to v0.5.33 (#91468) 2023-04-17 15:36:22 +02:00
Erik Montnemery
bf389440dc Save Thread dataset store when changing preferred dataset (#91411) 2023-04-17 15:36:18 +02:00
puddly
2b9cc39d2b Fix attribute reporting config failures in ZHA (#91403) 2023-04-17 15:36:15 +02:00
J. Nick Koston
afe3fd5ec0 Bump onvif-zeep-async to 1.2.5 (#91399) 2023-04-17 15:36:11 +02:00
Aidan Timson
e29d5a1356 Fix listener running in foreground for System Bridge integration (#91391)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-17 15:36:08 +02:00
rich-kettlewell
5f7b447d7a Tado set_water_heater_timer should use water_heater domain (#91364) 2023-04-17 15:36:03 +02:00
epenet
0e3f462bfb Add missing mock in sharkiq tests (#91325) 2023-04-17 15:33:52 +02:00
starkillerOG
8feab57d59 Reolink prevent ONVIF push being lost due to ConnectionResetError (#91070)
* Make "Connection lost" error less likely

* Handle connection loss during ONVIF event reading

* tweak

* fix styling

* catch asyncio.CancelledError from request.text()

* missing ()

* re-raise cancelation for proper cleanup

* Simplify

* Also set webhook_reachable if connection lost

* fix styntax

* Send HTTP_OK directly after data read done

* protect agains garbage collection

* Protect shielded task (inner) not shielded future (outer)

* fix black

* Make sure exceptions are logged

* fix spelling

* fix black

* fix spelling

* Simplify using hass.async_create_task

* clarify comment

* Eleborate comment

* Update homeassistant/components/reolink/host.py

Co-authored-by: J. Nick Koston <nick@koston.org>

* Apply suggestions from bdraco

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-17 15:28:25 +02:00
Mark Adkins
2bda40d352 Fix SharkIQ token expiration (#89357) 2023-04-17 15:27:44 +02:00
Meow
47398f03dd Add SetSynchronizationPoint fallback to onvif (#86400)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-17 15:22:17 +02:00
mkmer
799080eb00 Don't reload integration for AuthError in Honeywell (#91228) 2023-04-17 14:55:52 +02:00
epenet
3364f0fce2 Allow config entries unload action to be coroutine (#91531)
* Allow config entries unload action to be coroutine

* Adjust comment
2023-04-17 08:41:25 -04:00
Franck Nijhof
6a80f5fc60 Update cryptography to 40.0.2 (#91528) 2023-04-17 08:36:42 -04:00
Allen Porter
4c5746d6ed Update Todoist all day event handling following best practices (#90491) 2023-04-17 14:21:49 +02:00
J. Nick Koston
9be9defbb8 Add more rule parsers to onvif (#91533) 2023-04-17 13:41:15 +02:00
G Johansson
c3e22cfa63 SQL strings update db_url (#91537) 2023-04-17 13:37:27 +02:00
Franck Nijhof
f1bb4ed0ed Update pip constraint to allow for pip 23.1 (#91535) 2023-04-17 12:39:13 +02:00
epenet
d1b8f2987c Fix incorrect regex in translation script (#91536) 2023-04-17 12:18:34 +02:00
Martin Hjelmare
5c7d124f02 Add core as codeowner to tts (#91539) 2023-04-17 12:05:54 +02:00
krazos
717898fc92 Change entity category of IR light setting from control to config (#91382) 2023-04-17 11:10:06 +02:00
rappenze
a5b863cd75 Fix state mapping in fibaro climate (#91505) 2023-04-17 11:09:11 +02:00
starkillerOG
88bde2a914 Reolink ONVIF move read to primary callback (#91478)
* Move read to primary callback

* fix styling

* Do not raise on ConnectionResetError

* Split request.text() to .read() and decode("utf-8")
2023-04-16 22:48:39 -10:00
epenet
dd7de48efc Fix lingering timers in sia tests (#91407) 2023-04-17 10:36:13 +02:00
epenet
7c9242b4a7 Fix lingering timer in alert integration (#91452) 2023-04-17 10:35:53 +02:00
Erik Montnemery
3367e86686 Enable strict typing of assist_pipeline (#91529) 2023-04-17 10:32:14 +02:00
J. Nick Koston
9985516f80 Build protobuf upb wheels (#90812) 2023-04-17 10:30:22 +02:00
Jeef
752d5958dc Add monessen virtual integration for Intellifire (#89315) 2023-04-17 10:03:37 +02:00
J. Nick Koston
b875706bdd Default homekit to listening on all interfaces to match Home Assistant behavior (#91520) 2023-04-17 09:41:57 +02:00
rappenze
01046b88e5 Update pyfibaro to 0.7.0 (#91510) 2023-04-17 09:39:13 +02:00
jjlawren
c88d4b09c9 Handle invalidated Plex token (#91438) 2023-04-17 09:38:16 +02:00
epenet
d26160a509 Prevent combined translations in strings.json (#91334) 2023-04-17 09:36:25 +02:00
Jesse Hills
42b0602190 ESPHome: Use existing property with generated signal string (#91525) 2023-04-16 18:37:12 -10:00
Christopher Bailey
5dcc4d49c8 Bump unifiprotect to 4.8.1 (#91522) 2023-04-16 17:50:06 -10:00
Christopher Bailey
fdc80e14e6 Remove deprecated set_doorbell_message UniFi Protect service (#91523)
* Removes deprecated service

* Linting

* Linting

* More cleanup

* Linting
2023-04-16 17:30:41 -10:00
Jan Čermák
9680161701 Add RAPT Bluetooth integration (#87872)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-16 17:19:03 -10:00
Paulus Schoutsen
2b6fd0df6a VoIP: Add is active call binary sensor (#91486)
* Refactor VoIP integration for more entities

* Add active call binary sensor

* Add actually missing binary sensor files

* Improve test coverage
2023-04-16 22:59:05 -04:00
Brett Adams
58ea657fbc Add a data model to Advantage Air (#91519)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-16 15:04:30 -10:00
Brett Adams
8fe900885a Bump Advantage Air to 0.4.4 (#91147) 2023-04-16 14:56:57 -10:00
Lode Smets
263901841f Add Synology Photos support (#86894)
Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>
Co-authored-by: mib1185 <mail@mib85.de>
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-16 12:29:15 -10:00
Brett Adams
5001a50876 Add MyPlace support to Advantage Air (#91108)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-16 12:27:37 -10:00
J. Nick Koston
4420201fe6 Use bluetooth data tools for address conversion in esphome (#91443) 2023-04-16 11:55:08 -10:00
J. Nick Koston
ac76a2b1df Bump bluetooth-data-tools to 0.4.0 (#91442) 2023-04-16 11:06:03 -10:00
MarkGodwin
691cd4f2ed Bump TP-Link Omada API to enforce minimum controller version (#91498)
Bump omada API
2023-04-16 16:45:02 -04:00
J. Nick Koston
4d266e99dc Bump aioruuvigateway to 0.1.0 (#91512) 2023-04-16 10:26:08 -10:00
J. Nick Koston
7f7909e0d1 Add dhcp ip update support to onvif (#91474)
* Add dhcp ip update support to onvif

If we know the mac address of the camera we can
update the config entry when the ip changes

* fix lookup

* coverage

* remove unreachable

* remove unreachable

* remove unreachable
2023-04-16 15:55:33 -04:00
Ben Morton
d16e1b4ed0 Resolve issue with switchbot blind tilt devices getting stuck in opening/closing state (#91495) 2023-04-16 09:32:51 -10:00
J. Nick Koston
fdc6cf3472 Continue recording events until final write (#91260) 2023-04-16 09:22:47 -10:00
Jack Boswell
00191ace6c Expose ping drop rate Starlink sensor (#91444) 2023-04-16 08:25:36 -10:00
Franck Nijhof
1dc0870163 Update pytest to 7.3.1 (#91497) 2023-04-16 12:21:10 -04:00
J. Nick Koston
9625444989 Automatically retry lost/timed out LIFX requests (#91157) 2023-04-16 14:27:17 +02:00
epenet
3ff03eef46 Fix lingering timer in buienradar (#91378) 2023-04-16 14:20:54 +02:00
Allen Porter
b0e0ada512 Streamline todoist test fixtures (#91405) 2023-04-16 14:20:07 +02:00
J. Nick Koston
cb6ffa5b03 Handle a few more transient onvif errors (#91473) 2023-04-16 14:06:30 +02:00
J. Nick Koston
e7373d979b Fix onvif failing to reload (#91482) 2023-04-16 14:05:10 +02:00
Mark Adkins
0cf29f0f84 Fix SharkIQ token expiration (#89357) 2023-04-16 14:04:18 +02:00
Maciej Bieniek
9d68cdca18 Remove ozone state attribute and ozone sensors from Accuweather (#91492) 2023-04-16 14:01:22 +02:00
J. Nick Koston
24538a44fc Bump onvif-zeep-async to 1.2.11 (#91472) 2023-04-16 13:56:10 +02:00
Maciej Bieniek
09c41ca2d8 Bump nextdns to version 1.4.0 (#91490) 2023-04-16 13:51:07 +02:00
epenet
bdb55a4262 Fix lingering timer in samsungtv (#91450) 2023-04-16 08:24:04 +02:00
dougiteixeira
dc03a5c81e Fix error for when column does not exist in query to SQL (#91166)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-15 12:54:56 -10:00
Michael
323d16cc21 Add ssl_cipher_list option to rest (#91078) 2023-04-15 11:22:41 -10:00
Michael Davie
59dc0ea2e0 Bump env_canada to v0.5.33 (#91468) 2023-04-15 09:44:07 -10:00
Meow
963648a333 Add SetSynchronizationPoint fallback to onvif (#86400)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-15 09:41:34 -10:00
J. Nick Koston
72dfd95831 Fix creating onvif pull point subscriptions when InitialTerminationTime is required (#91470)
* Fix creating onvif pull point subscriptions when InitialTerminationTime is required

fixes #85902

* Bump again because I got it wrong the first time.. this is why retest is good
2023-04-15 15:34:07 -04:00
Michael
67c4de90f3 Add option to select list of accepted ssl ciphers in httpx client (#91389) 2023-04-15 09:32:30 -10:00
Jan Bouwhuis
f37b1fc9f8 Improve tests subscribe connection for mqtt status (#91463)
Improve test_subscribe_connection_status
2023-04-15 15:29:31 -04:00
epenet
a018ba0696 Improve async_track_point_in_time (#91451)
* Adjust async_track_point_in_time

* Adjust name
2023-04-15 20:28:08 +02:00
Erik Montnemery
8f8a398631 Support marking an assist pipeline as preferred (#91418)
* Support marking an assist pipeline as preferred

* Adjust

* Revert unneeded change

* Send preferred pipeline id in pipeline list

* Don't use property functions for the preferred pipeline
2023-04-15 10:05:46 -04:00
Joost Lekkerkerker
714ec3f023 Update screenshot of featured integrations (#91345) 2023-04-15 15:56:46 +02:00
epenet
d173590477 Remove combined translations in integrations (#91337)
Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>
2023-04-15 15:51:04 +02:00
Aidan Timson
3bc023986c Fix listener running in foreground for System Bridge integration (#91391)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-15 15:49:05 +02:00
puddly
a9db39a833 Fix attribute reporting config failures in ZHA (#91403) 2023-04-15 15:48:34 +02:00
starkillerOG
adc8a13f93 Reolink prevent ONVIF push being lost due to ConnectionResetError (#91070)
* Make "Connection lost" error less likely

* Handle connection loss during ONVIF event reading

* tweak

* fix styling

* catch asyncio.CancelledError from request.text()

* missing ()

* re-raise cancelation for proper cleanup

* Simplify

* Also set webhook_reachable if connection lost

* fix styntax

* Send HTTP_OK directly after data read done

* protect agains garbage collection

* Protect shielded task (inner) not shielded future (outer)

* fix black

* Make sure exceptions are logged

* fix spelling

* fix black

* fix spelling

* Simplify using hass.async_create_task

* clarify comment

* Eleborate comment

* Update homeassistant/components/reolink/host.py

Co-authored-by: J. Nick Koston <nick@koston.org>

* Apply suggestions from bdraco

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-14 21:05:22 -04:00
J. Nick Koston
1379ad60c8 Ensure recorder always attempts clean shutdown if recorder thread raises (#91261)
* Ensure recorder run shutdown if the run loop raises

If anything goes wrong with the recorder we should
still try to shutdown cleanly

* tweak

* tests

* tests

* handle migraiton failure

* tweak comment

* naming

* order

* order

* order

* reword

* adjust test

* fixes

* threading

* failure case

* fix test

* have to wait for stop because the task blocks on thread join
2023-04-14 21:03:24 -04:00
J. Nick Koston
56cc6633f5 Use fast path for track_time_change that fires every second (#91432)
We were missing a check for `*` and were only checking
`None`. Automations use `*`, python code uses `None`.
2023-04-14 21:02:54 -04:00
J. Nick Koston
5ffd833fdf Improve performance of tracking time changes (#91433)
* Improve performance of async_track_time_interval

Uses HassJob internally to avoid looking up the function
target type every time it fires

* name
2023-04-14 21:02:13 -04:00
epenet
19a6530c3c Add ability to shutdown a Debouncer (#91439)
* Add ability to shutdown a Debouncer

* Use async_create_task
2023-04-14 21:01:21 -04:00
J. Nick Koston
698345e88b Bump yalexs to 1.3.0 (#91431)
changelog: https://github.com/bdraco/yalexs/compare/v1.2.7...v1.3.0

fixes for missing user ids
2023-04-14 20:02:09 -04:00
Harvey
bf4559719a History API entity_id validation (#90067)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-14 09:41:54 -10:00
rlippmann
f5911bcad6 Add slots to dataclasses in default_config (#91410)
* add dataclass slots to default config items

* remove slots from sun mixing
2023-04-14 14:22:39 -04:00
PatrickGlesner
f65e06dc26 Delete obsolete lines and add some missing type hints in OpenTherm Gateway integration (#90530) 2023-04-14 15:28:26 +02:00
epenet
f52fd13d6d Remove duplicate webhook test (#91420)
Fix webhook test
2023-04-14 14:52:28 +02:00
Maciej Bieniek
808830b90e Bump accuweather to version 0.5.1 (#91412)
Bump accuweather
2023-04-14 08:31:33 -04:00
Eric Severance
94f35ea968 Add webhook trigger allowed_methods/local_only options (#66494)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-04-14 12:49:12 +02:00
Erik Montnemery
b23cedeae9 Save Thread dataset store when changing preferred dataset (#91411) 2023-04-14 11:48:03 +02:00
Jarek Świerczyński
47f5160154 Allow GET in webhook triggers (#56446) 2023-04-14 09:46:00 +02:00
Franck Nijhof
ce16d8eeac Rename Particulate matter sensors to PM (#91384) 2023-04-14 09:43:15 +02:00
Jan Bouwhuis
fc8c5f1bbd Do not allow mqtt lights to set brightness to zero (#91296)
* Do not allow mqtt lights to set brightness to zero

* Loglevel to debug

* Typo
2023-04-14 09:01:29 +02:00
J. Nick Koston
025e1792db Bump onvif-zeep-async to 1.2.5 (#91399) 2023-04-14 08:37:12 +02:00
jjlawren
27f3b53872 Support Sonos announcements using websockets (#91145) 2023-04-13 20:08:53 -10:00
epenet
a061f56833 Fix lingering timer in EntityRegistryDisabledHandler (#91376)
Mark EntityRegistryDisabledHandler as cancellable
2023-04-14 06:37:49 +02:00
epenet
e39f0320df Fix lingering timers in analytics (#91363) 2023-04-14 06:37:22 +02:00
Aaron Godfrey
7061b104a9 Fix tasks with no due date from not triggering on calendar state. (#91196)
Fix tasks with no due date.

Prior to this change we were setting the start date/time to utc rather
than the user's timezone.
2023-04-13 21:12:58 -07:00
Jesse Hills
0ddccb26fa ESPHome voice assistant (#90691)
* Add ESPHome push-to-talk

* Send pipeline events to device

* Bump aioesphomeapi to 13.7.0

* Log error instead of print

* Rename variable

* lint

* Rename

* Fix type and cast

* Move event data manipulation into voice_assistant callback
Process full url

* Add a test?

* Remove import

* More tests

* Update import

* Update manifest

* fix tests

* Ugh

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-13 19:18:56 -04:00
epenet
1c0b2630da Fix lingering timers in flux_led (#91379) 2023-04-13 11:54:29 -10:00
J. Nick Koston
e1a5ad069c Improve performance of sums in the energy dashboard (#91342) 2023-04-13 11:52:38 -10:00
Erik Montnemery
4e80154ebe Rename voice_assistant to assist_pipeline (#91371)
* Rename voice_assistant to assist_pipeline

* Fix tests

* Fix voip test

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2023-04-13 17:25:38 -04:00
Franck Nijhof
32344a8488 Fix incorrect warn of async_update_ha_state use (#91387) 2023-04-13 22:39:03 +02:00
dependabot[bot]
b7b22b79d1 Bump actions/checkout from 3.5.0 to 3.5.2 (#91373)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-13 22:11:47 +02:00
epenet
9744e72d5a Add ability to auto-cancel track_time_interval (#91381) 2023-04-13 21:31:16 +02:00
Joost Lekkerkerker
77a445ee16 Add entity name translations to Picnic (#91362)
* Add translatable entities for Picnic

* Apply fixes
2023-04-13 20:27:33 +02:00
Martin Hjelmare
473cbf7f9b Add stt entity (#91230)
* Add stt entity

* Update demo platform

* Rename ProviderEntity to SpeechToTextEntity

* Fix get method

* Run all init tests for config entry setup

* Fix and test metadata from header

* Test config entry unload

* Rename get provider entity

* Test post for non existing provider

* Test entity name before addition

* Test restore state

* Use register shutdown

* Update deprecation comment
2023-04-13 13:58:35 -04:00
Franck Nijhof
22a1a6846d Warn for unneeded use of async_update_ha_state (#91372) 2023-04-13 13:49:56 -04:00
rich-kettlewell
f2997ce4cc Tado set_water_heater_timer should use water_heater domain (#91364) 2023-04-13 19:49:07 +02:00
epenet
592ac37436 Add missing mock in sharkiq tests (#91325) 2023-04-13 19:33:38 +02:00
Franck Nijhof
445b823232 Avoid task creation when calling schedule_update_ha_state without force update (#91352) 2023-04-13 18:39:03 +02:00
epenet
9e1a670e6e Fail CI on lingering timers (part 2) (#89976)
* Fail CI on lingering timers (part 2)

* Improve error message

* Adjust tts
2023-04-13 17:03:52 +02:00
Joost Lekkerkerker
a272f8dfb2 Move picnic sensor definitions (#91367)
* Move types and mixin to sensor

* Move types and mixin to sensor
2023-04-13 16:46:10 +02:00
Franck Nijhof
3f0f5dc303 2023.4.4 (#91356) 2023-04-13 15:32:45 +02:00
epenet
c40836b49f Fix lingering timers in tts (#90834)
* Fix lingering timers in tts

* Improve

* Use HassJob with cancel_on_shutdown
2023-04-13 15:27:13 +02:00
epenet
c1b7aa084c Fix race condition in deconz (#91328)
* Fix race condition in deconz

* Use a new separate test
2023-04-13 15:04:21 +02:00
Franck Nijhof
b5ac3ee288 Bumped version to 2023.4.4 2023-04-13 13:50:25 +02:00
Bram Kragten
51c99d26b4 Update frontend to 20230411.1 (#91344) 2023-04-13 13:50:10 +02:00
J. Nick Koston
f77ce413be Bump aiolifx to 0.8.10 (#91324) 2023-04-13 13:50:06 +02:00
Duco Sebel
7a8159052e Bump python-homewizard-energy to 2.0.1 (#91097) 2023-04-13 13:50:02 +02:00
Duco Sebel
8ca3440f33 Bump python-homewizard-energy to 2.0.1 (#91097) 2023-04-13 13:42:35 +02:00
J. Nick Koston
274a6fd3d7 Bump aiolifx to 0.8.10 (#91324) 2023-04-13 13:38:27 +02:00
Bram Kragten
8527048f07 Update frontend to 20230411.1 (#91344) 2023-04-13 13:37:37 +02:00
Franck Nijhof
d320c73fb7 Use async_write_ha_state in tests (#91333) 2023-04-13 12:36:36 +02:00
Franck Nijhof
208a44e437 Use async_write_ha_state in generic hygrostat (#91331) 2023-04-13 09:42:12 +02:00
epenet
4a0988eb5d Adjust shutdown registration in EntityComponent (#90938)
* Adjust shutdown registration in EntityComponent

* Adjust

* Make it more explicit

* docstring
2023-04-13 08:47:04 +02:00
J. Nick Koston
6dbe67e909 Bump httpx to 0.24.0 and httpcore to 0.17.0 (#91308) 2023-04-12 20:11:59 -10:00
Paulus Schoutsen
c9d81bd217 Pipelines to default to Home Assistant agent (#91321)
* Pipelines to default to Home Assistant agent

* Tests fix
2023-04-13 00:34:19 -04:00
Paulus Schoutsen
0678ab4e45 Add VoIP entities (#91320)
* WIP

* Add VoIP entities to enable calls

* Mark voip entities as config only

* Remove commented code
2023-04-12 23:23:20 -04:00
Paulus Schoutsen
8ec6afb85a 2023.4.3 (#91316) 2023-04-12 21:50:11 -04:00
Michael Hansen
f0c625b2ad Add language util (#91290)
* Add language util

* Add no match tests

* Update tests/util/test_language.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-12 20:27:09 -05:00
Franck Nijhof
bbf2d0e6ad Remove codecov from Python test requirements (#91295) 2023-04-12 20:51:59 -04:00
tronikos
c073cee049 Google Assistant SDK: Fix broadcast command for Portuguese (#91293)
Fix broadcast command for pt
2023-04-12 20:51:58 -04:00
epenet
687c035bb2 Make auth test fixtures async (#91263)
Make auth fixtures async in tests
2023-04-12 20:43:50 -04:00
Franck Nijhof
e4d2409ca4 Update debugpy to 1.6.7 (#91267) 2023-04-12 20:43:26 -04:00
tronikos
27dd4cd261 Google Assistant SDK: Fix broadcast command for Portuguese (#91293)
Fix broadcast command for pt
2023-04-12 20:42:51 -04:00
Franck Nijhof
355404a959 Raise HomeAssistant error on failed Spotify service calls (#91299) 2023-04-12 20:42:33 -04:00
Franck Nijhof
99afab723b Fix combined translation in Pi-hole strings (#91305) 2023-04-12 20:41:27 -04:00
Franck Nijhof
02e79cf7e6 Update coverage to 7.2.3 (#91309) 2023-04-12 20:40:31 -04:00
Franck Nijhof
b2416a4020 Update sentry-sdk to 1.19.1 (#91310) 2023-04-12 20:40:19 -04:00
Paulus Schoutsen
e9f1148c0a Bumped version to 2023.4.3 2023-04-12 20:35:59 -04:00
J. Nick Koston
a420007e80 Restore use of local timezone for MariaDB/MySQL in SQL integration (#91313)
* Use local timezone for recorder connection

The fix in #90335 had an unexpected side effect of
using UTC for the timezone since all recorder operations
use UTC. Since only sqlite much use the database executor
we can use a seperate connection pool which uses local time

This also ensures that the engines are disposed of
when Home Assistant is shutdown as previously we
did not cleanly disconnect

* coverage

* fix unclean shutdown in config flow

* tweaks
2023-04-12 20:35:50 -04:00
puddly
64a9bfcc22 Bump ZHA dependencies (#91291) 2023-04-12 20:35:49 -04:00
codyhackw
fd53eda5c6 Update Inovelli Blue Series switch support in ZHA (#91254)
Co-authored-by: David F. Mulcahey <david.mulcahey@icloud.com>
2023-04-12 20:35:49 -04:00
Erik Montnemery
d6574b4a2e Fix switch_as_x name (#91232) 2023-04-12 20:35:48 -04:00
Bram Kragten
8eb75beb96 Update frontend to 20230411.0 (#91219) 2023-04-12 20:35:47 -04:00
Erik Montnemery
68920a12aa Flush conversation name cache when an entity is renamed (#91214) 2023-04-12 20:35:46 -04:00
Aaron Bach
a806e070a2 Bump pytile to 2023.04.0 (#91191) 2023-04-12 20:35:45 -04:00
David F. Mulcahey
a87c78ca20 Cleanup ZHA from Zigpy deprecated property removal (#91180) 2023-04-12 20:35:44 -04:00
Aidan Timson
48df638f5d Reduce startup time for System Bridge integration (#91171) 2023-04-12 20:35:43 -04:00
Allen Porter
c601266f9c Fix all day event coercion logic (#91169) 2023-04-12 20:35:42 -04:00
starkillerOG
30d615f206 Reolink config flow fix custom port when USE_HTTPS not selected (#91137)
give USE_HTTPS a default
2023-04-12 20:35:41 -04:00
J. Nick Koston
2db8d70c2f Fix false positive in SQL sensor full table scan check (#91134) 2023-04-12 20:35:40 -04:00
J. Nick Koston
3efffe7688 Bump ulid-transform to 0.6.3 (#91133)
* Bump ulid-transform to 0.6.2

changelog: https://github.com/bdraco/ulid-transform/compare/v0.6.0...v0.6.2

32bit fixes

fixes #91092

* 0.6.3
2023-04-12 20:35:39 -04:00
Allen Porter
dc777f78b8 Relax calendar event validation to allow existing zero duration events (#91129)
Relax event valudation to allow existing zero duration events
2023-04-12 20:35:38 -04:00
Michael Davie
4cd00da319 Bump env_canada to 0.5.32 (#91126) 2023-04-12 20:35:37 -04:00
Robert Hillis
3f6486db3e Bump aiopyarr to 23.4.0 (#91110) 2023-04-12 20:35:36 -04:00
Diogo Gomes
2d41fe837c Track availability of source sensor in utility meter (#91035)
* track availability of source sensor

* address review comments
2023-04-12 20:35:35 -04:00
Pascal Reeb
34394d90c0 Fall back to polling if webhook cannot be registered on Nuki (#91013)
fix(nuki): throw warning if webhook cannot be created
2023-04-12 20:35:34 -04:00
Anthony Mattas
fa29aea68e Fix configuring Flo instances (#90990)
* Update config_flow.py

Used constant string for consistency

* Update config_flow.py

Removed code for location ID and name the integration using the username

* Update manifest.json

Updated codeowners

* Update config_flow.py

* Update config_flow.py

Formatted with black

* Update manifest.json

Updated codeowners

* Update test_config_flow.py

Updated test
2023-04-12 20:35:33 -04:00
J. Nick Koston
4366f83ac8 Restore use of local timezone for MariaDB/MySQL in SQL integration (#91313)
* Use local timezone for recorder connection

The fix in #90335 had an unexpected side effect of
using UTC for the timezone since all recorder operations
use UTC. Since only sqlite much use the database executor
we can use a seperate connection pool which uses local time

This also ensures that the engines are disposed of
when Home Assistant is shutdown as previously we
did not cleanly disconnect

* coverage

* fix unclean shutdown in config flow

* tweaks
2023-04-12 20:24:55 -04:00
Olliver Schinagl
2d1ae6660b Dockerdev: Improve docker caching layers (#85186) 2023-04-13 00:46:54 +02:00
Joakim Sørensen
2c8b704a6d Add certificate status for cloud remote (#91277) 2023-04-13 00:38:32 +02:00
Aidan Timson
d6c954a909 Reduce startup time for System Bridge integration (#91171) 2023-04-13 00:36:51 +02:00
David Poll
ea12d7a86f Add pretty printing, key sorting, and better performance to to_json in Jinja (#91253)
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-13 00:32:13 +02:00
J. Nick Koston
9b2e9b8746 Update typing on recorder pool for sqlalchemy 2.0 (#91244) 2023-04-13 00:09:15 +02:00
epenet
d483ad820c Make hass test fixture async (#91264) 2023-04-12 23:55:40 +02:00
Brig Lamoreaux
ff1fd86b91 Clean up srp_energy (#86822)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-04-12 23:47:37 +02:00
Assaf Inbal
7446ff478f Add h264_v4l2m2m codec and profiles to HomeKit cameras (#91246) 2023-04-12 10:46:21 -10:00
codyhackw
4f507e7f57 Update Inovelli Blue Series switch support in ZHA (#91254)
Co-authored-by: David F. Mulcahey <david.mulcahey@icloud.com>
2023-04-12 22:09:16 +02:00
puddly
fd7d0fff1f Bump ZHA dependencies (#91291) 2023-04-12 22:09:03 +02:00
Franck Nijhof
5b389a4dbc Remove codecov from Python test requirements (#91295) 2023-04-12 21:32:32 +02:00
Jan Bouwhuis
722b991234 Support unknown state, position or tilt for template cover (#91172)
* Support unknown state for template cover

* Remove not related changes
2023-04-12 21:23:24 +02:00
dougiteixeira
1ef6391e9c Preserves config flow information in case of error for SQL (#91142) 2023-04-12 09:03:14 -10:00
mkmer
6aa1460143 Add tests to honeywell (#87209)
* lower case aiosomecomfort

* add tests

* Test updates for 0.0.6

* lower case aiosomecomfort

* Missing changes after merge

* Add missing type hints

* Fix tests for PR#89393

* Test hold on when setting temperature

* Remove unnecessary init function

* Remove unnecessary assert

* Address missing tests
Cleanup related to comments for EM

* Move to snapshot for static test

* Updated snapshot

* Remove unnecessary assert
2023-04-12 20:34:32 +02:00
Jan Bouwhuis
e36fd5f222 Allow None device_class and UOM for mqtt entities (#91240)
* Allow None device_class and UOM for mqtt entities

* Rever not needed changes

* Revert another unwanted change
2023-04-12 19:14:16 +02:00
Paulus Schoutsen
325733158d Allow multiple instances for OpenAI (#90609)
* Allow multiple instances for OpenAI

* Add test
2023-04-12 08:29:13 -04:00
Chuck Deal
a4a8f6ebc8 Add platform state tests for vesync integration (#90466)
* Test coverage for init and common

* Update snapshot

* break setup state snapshot test across platforms

* Fix state snapshot test methods

* Remove the test_init snapshot

* Remove test_common and test_init changes

* refactor the request_mock fixture
2023-04-12 14:15:22 +02:00
Mike Knoop
e8fb7b8cf1 Fix Lutron keypad led state always off at startup (#91149) 2023-04-12 12:59:52 +02:00
Joakim Sørensen
8ce17458a9 Bump hass-nabucasa from 0.63.1 to 0.64.1 (#91271) 2023-04-12 12:38:57 +02:00
dependabot[bot]
5b89996476 Bump codecov/codecov-action from 3.1.1 to 3.1.2 (#91258)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-12 11:10:38 +02:00
G Johansson
00847ee4bc Add config flow to Brottsplatskartan (#70233)
* Brottsplatskartan Config Flow

* Fix import

* Modify sensor

* Mod version

* Mod version 2

* has_entity_name

* Fix api constructor

* Switch to issue for depr.

* Fix docstrings

* Minor cleaning

* Fix argument for bpk constructor

* remove translations

* Fix tests

* reset config

* uuid to conftest

* hassfest

* depr version

* unique id

* reset not linked changes

* review comments

* fix area none

* relevant changes

* depr version

* slim test

* unique_id

* create_entry

* review comments and tests

* fix init test

* review comments
2023-04-12 11:05:24 +02:00
Dmitry Vlasov
a409da947f Update zwave-me-ws version to 0.4.2 (#91068) 2023-04-12 10:18:01 +02:00
Matthias Alphart
0ba339e56c Run socket.gethostbyname in executor in Obihai and Sonos (#91190)
* Run  in executor in Obihai and Sonos

* fix Sonos test

* fix sonos test differently (review)
2023-04-12 09:58:27 +02:00
Jan Bouwhuis
bb15923968 Rename MQTT entry mock and cleanup (#91223)
Rename to mqtt_mock_entry and cleanup
2023-04-12 09:43:03 +02:00
G Johansson
b7cc42d135 Use RestoreSensor in derivative (#91071)
RestoreSensor
2023-04-12 08:46:55 +02:00
epenet
e277bbb513 Use tmp_path in tests (#91203)
* Use tmp_path in tests

* Use joinpath

* Prefer / operator

* Cleanup
2023-04-12 08:19:01 +02:00
epenet
4e78bcb236 Suppress CancelledError in zwave-js unload (#91222) 2023-04-12 08:09:00 +02:00
J. Nick Koston
237faf62ac Add a name to the background service call tasks (#91252) 2023-04-11 19:23:25 -10:00
Michael
0916701a0b Catch ssl errors in rest (#91074)
* catch ssl.SSLError

* add test

* fail setup on ssl error

* adjust tests
2023-04-12 06:51:41 +02:00
Erik Montnemery
2c9e9d0fde Allow UI configuration of entities exposed to voice_assistant (#91233)
* Allow UI configuration of entities exposed to voice_assistant

* Invalidate cache when settings change

* Add tests

* Expose entities to conversation by default

* Update tests
2023-04-11 22:39:40 -04:00
J. Nick Koston
e40a373c4b Call sqlite pragma optimize during periodic cleanup task (#91245)
https://www.sqlite.org/pragma.html#pragma_optimize

> To achieve the best long-term query performance without the need to do a detailed engineering analysis of the application schema and SQL, it is recommended that applications run "PRAGMA optimize" (with no arguments) just before closing each database connection. Long-running applications might also benefit from setting a timer to run "PRAGMA optimize" every few hours.

> This pragma is usually a no-op or nearly so and is very fast.

Since we keep the recorder connection open for the entire time HA
is running we fall into the long-running application bucket
2023-04-11 22:39:19 -04:00
J. Nick Koston
4e6937d20f Avoid multiple round trips to the database for history API calls (#91193)
* delete more code

* tweak

* tweak

* wrappers

* restore lost performance

* restore lost performance

* restore lost performance

* compact

* reduce

* fix refactor

* DRY

* tweak

* delete the start time state injector

* move away the legacy code

* tweak

* adjust

* adjust

* tweak

* ignore impossible

* fix a bug where the first start was changed to the start time when there was no previous history recorded before

* avoid the empty scan most cases

* postgresql

* fixes

* workaround for mariadb < 10.4

* remove unused

* remove unused

* adjust

* bail early

* tweak

* tweak

* fix more tests

* fix recorderrun being init in the future in the test

* run history tests on schema 30 as well

* Revert "run history tests on schema 30 as well"

This reverts commit d798b100ac.

* reduce

* cleanup

* tweak

* reduce

* prune

* adjust

* adjust

* adjust

* reverse later is faster because the index is in forward order and the data size we are reversing is much smaller even if we are in python code

* Revert "reverse later is faster because the index is in forward order and the data size we are reversing is much smaller even if we are in python code"

This reverts commit bf974e103e.

* fix test

* Revert "Revert "reverse later is faster because the index is in forward order and the data size we are reversing is much smaller even if we are in python code""

This reverts commit 119354499e.

* more coverage

* adjust

* fix for table order

* impossible for it to be missing

* remove some more legacy from the all states
2023-04-11 22:38:23 -04:00
epenet
7f62ed15fa Ensure entry is unloaded in azure event hub tests (#91224) 2023-04-11 16:31:05 -10:00
epenet
524832ceaf Fix config entry unload in withings tests (#91210) 2023-04-11 16:29:49 -10:00
Michael Hansen
78fec33b17 Voip integration (#90945)
* Media playback working

* Working on OPUS audio

* Before rollback

* Fix is_end

* First working pipeline

* Clean up

* Remove asserts

* Send HA version in SDP

* Use async_pipeline_from_audio_stream

* Use config flow with allowed IP

* Satisfy ruff

* Remove use of regex for SIP IP

* Use voip-utils

* Fix imports

* Add Pipeline to __all__

* Fix voice assistant tests

* Basic VoIP test

* Run hassfest

* Generate requirements

* Bump voip utils (missing requirement)

* Allow tts_options to be passed in to pipeline run

* Add config flow tests

* Update test snapshots

* More tests

* Remove get_extra_info

* Appeasing the codebot
2023-04-11 20:25:05 -04:00
rlippmann
3a72054f93 Make dataclasses in HA core slotted (#91208) 2023-04-11 07:58:28 -10:00
Erik Montnemery
eb63bc7967 Fix switch_as_x name (#91232) 2023-04-11 13:54:30 -04:00
Jan Bouwhuis
aa68d1d617 Cleanup mqtt CONFIG_SCHEMA_ENTRY (#90791) 2023-04-11 17:41:38 +02:00
Franck Nijhof
ca101cc7d1 Update Pillow to 9.5.0 (#91218) 2023-04-11 17:01:56 +02:00
Franck Nijhof
e418c66d69 Update spotipy to 2.23.0 (#91217) 2023-04-11 17:01:39 +02:00
Regev Brody
d14e96942d Bump aioswitcher to 3.3.0 (#91215)
fix: #85096 Switcher "No devices found on the network"
2023-04-11 09:16:26 -04:00
Bram Kragten
e65da42a39 Update frontend to 20230411.0 (#91219) 2023-04-11 08:35:08 -04:00
Erik Montnemery
3c8397a7b9 Flush conversation name cache when an entity is renamed (#91214) 2023-04-11 08:33:08 -04:00
Robert Svensson
0d7711f787 Fix UniFi client tracker host_name missing (#91188) 2023-04-11 11:56:55 +02:00
Pascal Reeb
62bc8df964 Fall back to polling if webhook cannot be registered on Nuki (#91013)
fix(nuki): throw warning if webhook cannot be created
2023-04-11 11:13:52 +02:00
Avi Miller
95109072b5 Remove myself as a codeowner of the LIFX integration (#91143) 2023-04-11 10:09:53 +02:00
epenet
7b3a932cd9 Remove incorrect constant usage in test (#91198) 2023-04-11 10:00:17 +02:00
epenet
2f7c5a56eb Use tmp_path in recorder tests (#91202) 2023-04-11 09:18:16 +02:00
epenet
a7093d3687 Fix flaky filesize tests (#91200)
* Fix flaky filesize tests

* Adjust constant usage

* Once more

* Use joinpath
2023-04-11 08:57:34 +02:00
Aaron Bach
504cedaa87 Bump pytile to 2023.04.0 (#91191) 2023-04-10 18:06:26 -06:00
Paulus Schoutsen
1aa8e94224 Voice Assistant: Require sample rate as input (#91182)
Require sample rate as input
2023-04-10 18:28:03 -05:00
David F. Mulcahey
0fee49a32e Cleanup ZHA from Zigpy deprecated property removal (#91180) 2023-04-10 14:16:11 -04:00
starkillerOG
e8142987a7 Reolink config flow fix custom port when USE_HTTPS not selected (#91137)
give USE_HTTPS a default
2023-04-10 12:44:25 -04:00
Diogo Gomes
86fe0c9683 Track availability of source sensor in utility meter (#91035)
* track availability of source sensor

* address review comments
2023-04-10 12:37:45 -04:00
Anthony Mattas
ee1644c24e Fix configuring Flo instances (#90990)
* Update config_flow.py

Used constant string for consistency

* Update config_flow.py

Removed code for location ID and name the integration using the username

* Update manifest.json

Updated codeowners

* Update config_flow.py

* Update config_flow.py

Formatted with black

* Update manifest.json

Updated codeowners

* Update test_config_flow.py

Updated test
2023-04-10 12:37:36 -04:00
J. Nick Koston
f2d10473eb Bump orjson to 3.8.10 (#91132)
changelog: https://github.com/ijl/orjson/compare/3.8.9...3.8.10
2023-04-10 12:23:19 -04:00
Allen Porter
cf9ada3b0e Fix all day event coercion logic (#91169) 2023-04-10 12:05:08 -04:00
J. Nick Koston
49079691d4 Reduce overhead of legacy database columns on new installs (#90246)
* Reduce overhead of legacy database columns on new installs

* Reduce overhead of legacy database columns on new installs

* Reduce overhead of legacy database columns on new installs

* Reduce overhead of legacy database columns on new installs

* not working as expected

* override the type compiler

* override the type compiler

* override the type compiler

* override the type compiler

* Apply suggestions from code review

* pgsql char1

* make entity filter test setup with old schema

* fix some more tests that were mutating state

* fix some more tests that were mutating state

* fix some more tests that were mutating state

* fix more dbstate mutations

* add shim for older tests

* split migration tests

* add coverage for purging legacy data

* tweak

* more fixes

* drop some legacy

* fix another test

* fix a few more

* add casts for postgresql in case someone deletes the schema changes table

* dry

* dry

* dry
2023-04-10 10:08:46 -04:00
Allen Porter
14b95ffe3a Relax calendar event validation to allow existing zero duration events (#91129)
Relax event valudation to allow existing zero duration events
2023-04-10 10:04:42 -04:00
J. Nick Koston
6b9d748529 Bump ulid-transform to 0.6.3 (#91133)
* Bump ulid-transform to 0.6.2

changelog: https://github.com/bdraco/ulid-transform/compare/v0.6.0...v0.6.2

32bit fixes

fixes #91092

* 0.6.3
2023-04-10 10:03:21 -04:00
J. Nick Koston
a62ede78ca Reduce space to store state_attributes and event_data for new MariaDB/MySQL databases (#91150)
Since MySQL and MariaDB support unsigned ints we can store the
hashes in 4 bytes instead of 8 bytes
2023-04-10 10:02:42 -04:00
J. Nick Koston
bd0378a961 Bump sqlalchemy to 2.0.9 (#91151)
changes: https://docs.sqlalchemy.org/en/20/changelog/changelog_20.html#change-2.0.9
2023-04-10 10:01:49 -04:00
J. Nick Koston
6e9fcbfec1 Fix false positive in SQL sensor full table scan check (#91134) 2023-04-09 19:45:08 -10:00
Brett Adams
82c80ec8d2 Bump Advantage Air to 0.4.2 (#91144) 2023-04-09 19:04:19 -10:00
hahn-th
a48ede7332 Bump homematicip to 1.0.14 (#91140)
Bump homematicip to 1.0.14
2023-04-09 18:50:34 -04:00
Jörg Thalheim
7e46d7e808 Bump transmission-rpc to 4.1.5 (#91088)
Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
2023-04-09 16:51:31 -04:00
Robert Hillis
e30c307f9f Bump aiopyarr to 23.4.0 (#91110) 2023-04-09 16:48:37 -04:00
Michael Davie
78cb0cd1e1 Bump env_canada to 0.5.32 (#91126) 2023-04-09 13:35:43 -04:00
Paulus Schoutsen
7928b31087 2023.4.2 (#91111) 2023-04-08 23:41:48 -04:00
J. Nick Koston
e792350be6 Fix fnvhash import in schema 32 test backport (#91112) 2023-04-08 23:41:19 -04:00
J. Nick Koston
66b105fb21 Reduce creation of MQTT related discovery tasks (#90801)
* Reduce creation of MQTT related discovery tasks

Most of the branching can avoid creating a task as it
did not need to await for the majority of cases. We
fallback to creating a task for the cases were we do
need to await.

* comment

* revert
2023-04-08 23:14:22 -04:00
J. Nick Koston
d442f2aedb Add names to homekit tasks to better track startup problems (#90802)
* Add names to homekit tasks to better track startup problems

* fix test
2023-04-08 23:13:47 -04:00
J. Nick Koston
3be3226aaa Convert tasmota discovery callback function to a normal function (#90865)
* Convert tasmota discovery callback function to a normal function

Nothing was being awaited when the payload had not changed.
This allows us to avoid creating a task.

see #90801

* comment
2023-04-08 23:13:22 -04:00
J. Nick Koston
59872f1914 Reduce bond fallback polling interval when BPUP is alive (#90871)
* Reduce bond fallback polling interval when BPUP is alive

If push updates are alive we should not check every
10 seconds.

* tweak

* tweak

* coverage

* coverage

* coverage
2023-04-08 23:12:42 -04:00
J. Nick Koston
8fe597b7c6 Clarify HomeKit include behavior in the config flow (#91106)
* Clarify HomeKit include behavior in the config flow

If a domain is selected to be included and specific entities are
not selected in the domain, all entities will be included in that
domain.

* tweak
2023-04-08 23:12:02 -04:00
Paulus Schoutsen
5f0553dd22 Bumped version to 2023.4.2 2023-04-08 22:58:28 -04:00
J. Nick Koston
8f6b77235e Make the device_tracker more forgiving when passed an empty ip address string (#91101)
This has come up over and over and over again

fixes #87165 fixes #51980
2023-04-08 22:56:49 -04:00
J. Nick Koston
8ababc75d4 Bump flux_led to 0.28.37 (#91099)
changes: https://github.com/Danielhiversen/flux_led/releases/tag/0.28.37
2023-04-08 22:56:48 -04:00
J. Nick Koston
0a8f399655 Fix context_user_id round trip when calling to_native (#91098)
We do not actually use this in the history or logbook
APIs so nothing broke but there was a bug here for anyone
calling this directly

fixes #91090
2023-04-08 22:56:47 -04:00
Michael Davie
19567e7fee Bump env_canada to v0.5.31 (#91094) 2023-04-08 22:56:46 -04:00
Garrett
3a137cb24c Bump subarulink to 0.7.6 (#91064) 2023-04-08 22:56:45 -04:00
Allen Porter
935af6904d Bump gcal_sync to 4.1.4 (#91062) 2023-04-08 22:56:44 -04:00
Allen Porter
4fed5ad21c Make location optional in google calendar create service (#91061) 2023-04-08 22:56:44 -04:00
J. Nick Koston
9dc15687b5 Bump zeroconf to 0.56.0 (#91060) 2023-04-08 22:56:43 -04:00
J. Nick Koston
38a0eca223 Bump zeroconf to 0.55.0 (#90987) 2023-04-08 22:56:42 -04:00
David F. Mulcahey
6836e0b511 Fix Smartthings acceleration sensor in ZHA (#91056) 2023-04-08 22:55:52 -04:00
David F. Mulcahey
cab88b72b8 Bump ZHA quirks lib (#91054) 2023-04-08 22:55:51 -04:00
Steven Looman
07421927ec Make sure upnp-router is also initialized when first seen through an advertisement (#91037) 2023-04-08 22:55:50 -04:00
Diogo Gomes
828a2779a0 Delay utility_meter until HA has started (#91017)
* increase information for end user

* only warn after home assistant has started

* delay utility_meter until HA has startED
2023-04-08 22:55:49 -04:00
Joost Lekkerkerker
7392a5780c Bump roombapy to 1.6.8 (#91012)
* Update roombapy to 1.6.7

* Update roombapy to 1.6.8
2023-04-08 22:55:48 -04:00
Aaron Bach
804270a797 Bump aioambient to 2023.04.0 (#90991) 2023-04-08 22:55:47 -04:00
J. Nick Koston
7f5f286648 Bump vallox-websocket-api to 3.2.1 (#90980)
unblocks https://github.com/home-assistant/core/pull/90901
which will finally fix the races in websockets
2023-04-08 22:55:46 -04:00
J. Nick Koston
0a70a29e92 Resume entity id post migration after a restart (#90973)
* Restart entity id post migration after a restart

If the entity migration finished and Home Assistant was
restarted during the post migration it would never be resumed
which means the old index and space would never be recovered

* add migration resume test
2023-04-08 22:55:46 -04:00
J. Nick Koston
dc2f2e8d3f Raise an issue for legacy SQL queries that will cause full table scans (#90971)
* Raise an issue for SQL queries that will cause full table scans

* Raise an issue for SQL queries that will cause full table scans

* Raise an issue for SQL queries that will cause full table scans

* Raise an issue for SQL queries that will cause full table scans

* Update homeassistant/components/sql/sensor.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* coverage

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-08 22:55:45 -04:00
J. Nick Koston
6522a3ad1b Bump websockets constraint to 11.0.1+ (#90901) 2023-04-08 22:55:44 -04:00
PatrickGlesner
be65d4f33e Fix NMBS AttributeError (#90525)
* Fix NMBS AttributeError (Issue #90505)

* Set and use API_FAILURE

* Configure the logger to track API failures

* Remove broad exceptions and rewite logging
2023-04-08 22:55:43 -04:00
J. Nick Koston
a730ee2c43 Bump flux_led to 0.28.37 (#91099)
changes: https://github.com/Danielhiversen/flux_led/releases/tag/0.28.37
2023-04-08 22:48:01 -04:00
Allen Porter
23af02b941 Make location optional in google calendar create service (#91061) 2023-04-08 22:40:39 -04:00
J. Nick Koston
5f0d983df1 Make the device_tracker more forgiving when passed an empty ip address string (#91101)
This has come up over and over and over again

fixes #87165 fixes #51980
2023-04-08 22:32:56 -04:00
J. Nick Koston
69f751703b Fix context_user_id round trip when calling to_native (#91098)
We do not actually use this in the history or logbook
APIs so nothing broke but there was a bug here for anyone
calling this directly

fixes #91090
2023-04-08 22:31:28 -04:00
J. Nick Koston
3d1556a4a2 Switch back to using call_later for the slow entity update warning (#91067)
* Switch back to using call_later for the slow entity update warning

I had originally changed this to create a task and wait
in #41184 but that does not make sense anymore with newer
cpython as the profile now shows the original method is cheaper
(or I did it wrong the first time)

* fix missing block till done since there is no longer a task being created which would run the event loop once
2023-04-08 22:22:56 -04:00
J. Nick Koston
d0d4ab6056 Require a list of entity ids when fetching history (#90992) 2023-04-08 16:14:44 -10:00
Brett Adams
667a00e7f9 Handle all three operating modes in Advantage Air climate (#91107)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-08 13:50:26 -10:00
Michael Davie
5e2b0b23c9 Bump env_canada to v0.5.31 (#91094) 2023-04-08 09:25:58 -10:00
Diogo Gomes
fe393c84e2 Delay utility_meter until HA has started (#91017)
* increase information for end user

* only warn after home assistant has started

* delay utility_meter until HA has startED
2023-04-08 10:36:34 -04:00
tronikos
6c7f2167ff Android TV Remote: Bump androidtvremote2==0.0.7 (#91001)
* Bump androidtvremote2 to 0.0.5

* Log exception that caused disconnect

* fix test

* Revert "fix test"

This reverts commit 63fbedd208.

* Revert "Log exception that caused disconnect"

This reverts commit 110fa881ff.

* Bump androidtvremote2==0.0.7
2023-04-08 09:50:34 +02:00
Diogo Gomes
b1a23c5f73 Filtered values are no longer rounded if values are not changed/calculated (#76164)
* address 75732

* catchup

* catchup

* catchup

* catchup

* use default if precision is None

* Update homeassistant/components/filter/sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* fix type hint

* in progress

* refactor

* Update homeassistant/components/filter/sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* add *

* no need to check - review comment

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-07 23:26:07 -04:00
Allen Porter
96a3e10ff3 Bump gcal_sync to 4.1.4 (#91062) 2023-04-07 22:38:33 -04:00
J. Nick Koston
53d7e33607 Raise an issue for legacy SQL queries that will cause full table scans (#90971)
* Raise an issue for SQL queries that will cause full table scans

* Raise an issue for SQL queries that will cause full table scans

* Raise an issue for SQL queries that will cause full table scans

* Raise an issue for SQL queries that will cause full table scans

* Update homeassistant/components/sql/sensor.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* coverage

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-07 22:32:36 -04:00
J. Nick Koston
dbfd0d50ba Bump zeroconf to 0.56.0 (#91060) 2023-04-07 16:01:53 -10:00
Garrett
77287eb021 Bump subarulink to 0.7.6 (#91064) 2023-04-07 21:56:39 -04:00
David F. Mulcahey
90f857e926 Fix Smartthings acceleration sensor in ZHA (#91056) 2023-04-07 15:55:37 -10:00
Steven Looman
2f4325246b Make sure upnp-router is also initialized when first seen through an advertisement (#91037) 2023-04-07 13:11:31 -10:00
Joost Lekkerkerker
9b95a04c29 Bump roombapy to 1.6.8 (#91012)
* Update roombapy to 1.6.7

* Update roombapy to 1.6.8
2023-04-07 19:02:13 -04:00
David F. Mulcahey
62a6a4cd19 Bump ZHA quirks lib (#91054) 2023-04-07 19:00:03 -04:00
mrwogu
7eccef87c2 Disable lazy discover in xiaomi_miio (#82601)
* Add lazy discover config option to xiaomi_miio (#59215)

* disable lazy_discover for default

* extend tests to support lazy_discover

* revert config option
2023-04-07 16:27:59 +02:00
Joost Lekkerkerker
b8abc1350a Move plant const to separate file (#91008)
* Move plant const to separate file

* Fix feedback

* Fix feedback

* Update homeassistant/components/plant/const.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-07 13:45:40 +02:00
PatrickGlesner
06e36bcff5 Fix NMBS AttributeError (#90525)
* Fix NMBS AttributeError (Issue #90505)

* Set and use API_FAILURE

* Configure the logger to track API failures

* Remove broad exceptions and rewite logging
2023-04-07 12:13:39 +02:00
epenet
9705607db4 Fix lingering timer in cloud (#90822)
* Fix lingering timer in cloud

* Rename variable

* Improve

* Improve again

* Adjust

* Adjust

* Add property to HassJob instead

* Adjust

* Rename

* Adjust

* Adjust

* Make it read-only

* Add specific test
2023-04-07 11:38:17 +02:00
Aaron Bach
175f38b68a Bump aioambient to 2023.04.0 (#90991) 2023-04-06 19:22:27 -10:00
J. Nick Koston
fabfc59dfb Bump zeroconf to 0.55.0 (#90987) 2023-04-06 18:07:17 -10:00
J. Nick Koston
0fb210b886 Bump websockets constraint to 11.0.1+ (#90901) 2023-04-06 18:03:33 -10:00
Marc Mueller
823eb23600 Improve proxmoxve generic typing (#90948) 2023-04-06 19:32:49 -07:00
J. Nick Koston
9793cae2d3 Bump vallox-websocket-api to 3.2.1 (#90980)
unblocks https://github.com/home-assistant/core/pull/90901
which will finally fix the races in websockets
2023-04-06 21:19:10 -04:00
J. Nick Koston
398762fdd5 Resume entity id post migration after a restart (#90973)
* Restart entity id post migration after a restart

If the entity migration finished and Home Assistant was
restarted during the post migration it would never be resumed
which means the old index and space would never be recovered

* add migration resume test
2023-04-06 21:16:45 -04:00
tronikos
d4c10f0a98 Bump androidtvremote2 to 0.0.5 (#90922) 2023-04-06 17:54:45 -04:00
Paulus Schoutsen
0c15c75781 2023.4.1 (#90956) 2023-04-06 17:52:14 -04:00
Heikki Partanen
2bf51a033b Fix verisure autolock (#90960)
Fix verisure autolock #90959
2023-04-06 20:54:40 +00:00
Heikki Partanen
0b1241cb8f Fix verisure autolock (#90960)
Fix verisure autolock #90959
2023-04-06 16:54:18 -04:00
Steven Rollason
cfd8695aaa Fix command_template sensor value_template not being used if json_attributes set (#90603)
* Allow value_template to be used if json_attributes set

* Set state to None if no value_template and json_attributes used

* Refactor check for no value_template when json_attributes used

* Updated and additional unit test

* Updated to set _attr_native_value and return if value_template is None

* Update unit test docstring

* Updated test docstring based on feedback
2023-04-06 20:49:32 +00:00
Jan Bouwhuis
e8a6a2e105 Fix error after losing an imap connection (#90966)
Cleanup first after losing an imap connection
2023-04-06 20:46:54 +00:00
Jan Bouwhuis
6becf523ec Fix error after losing an imap connection (#90966)
Cleanup first after losing an imap connection
2023-04-06 16:46:32 -04:00
Allen Porter
73a960af34 Bump gcal_sync to 4.1.3 (#90968) 2023-04-06 20:44:52 +00:00
Allen Porter
9f5dfdc67c Bump gcal_sync to 4.1.3 (#90968) 2023-04-06 16:44:34 -04:00
Allen Porter
bbb571fdf8 Coerce previously persisted local calendars to have valid durations (#90970) 2023-04-06 20:42:00 +00:00
Allen Porter
3595e2fd5a Coerce previously persisted local calendars to have valid durations (#90970) 2023-04-06 16:41:38 -04:00
J. Nick Koston
c944be8215 Fix state being cleared on disconnect with deep sleep esphome devices (#90925)
* Fix state being cleared on disconnect with deep sleep esphome devices

fixes #90923

* fix logic
2023-04-06 20:39:04 +00:00
J. Nick Koston
5e903e04cf Avoid writing state to all esphome entities at shutdown (#90555) 2023-04-06 20:39:00 +00:00
J. Nick Koston
87c22c3ad5 Fix state being cleared on disconnect with deep sleep esphome devices (#90925)
* Fix state being cleared on disconnect with deep sleep esphome devices

fixes #90923

* fix logic
2023-04-06 16:32:02 -04:00
J. Nick Koston
20d0362914 Add mysql 8.0.32 to the CI (#90898) 2023-04-06 09:33:08 -10:00
Steven Rollason
2b46734bd3 Fix command_template sensor value_template not being used if json_attributes set (#90603)
* Allow value_template to be used if json_attributes set

* Set state to None if no value_template and json_attributes used

* Refactor check for no value_template when json_attributes used

* Updated and additional unit test

* Updated to set _attr_native_value and return if value_template is None

* Update unit test docstring

* Updated test docstring based on feedback
2023-04-06 21:06:31 +02:00
starkillerOG
6884b0a421 Bump reolink-aio to 0.5.10 (#90963)
* use is_doorbell instead of is_doorbell_enabled

* Bump reolink-aio to 0.5.10
2023-04-06 14:35:39 -04:00
starkillerOG
fca9052430 Bump reolink-aio to 0.5.10 (#90963)
* use is_doorbell instead of is_doorbell_enabled

* Bump reolink-aio to 0.5.10
2023-04-06 14:35:22 -04:00
Aaron Bach
a1c7159304 Bump aioambient to 2022.10.0 (#90940)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-06 14:34:25 -04:00
epenet
d65791027f Fix flaky test in vesync (#90921)
* Fix flaky test in vesync

* Move sorting to the test
2023-04-06 14:34:24 -04:00
Aaron Bach
e9f6a963a0 Bump aioambient to 2022.10.0 (#90940)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-06 14:33:41 -04:00
Paulus Schoutsen
5ffa0cba39 Bumped version to 2023.4.1 2023-04-06 13:21:13 -04:00
Bram Kragten
f5be600383 Update frontend to 20230406.1 (#90951) 2023-04-06 13:21:07 -04:00
Pascal Reeb
9b2e26c270 Handle NoURLAvailableError in Nuki component (#90927)
* fix(nuki): handle NoURLAvailableError

* only try internal URLs
2023-04-06 13:21:06 -04:00
stickpin
e25edea815 Return empty available programs list if an appliance is off during initial configuration (#90905) 2023-04-06 13:21:05 -04:00
J. Nick Koston
849000d5ac Bump aiodiscover to 1.4.16 (#90903) 2023-04-06 13:21:04 -04:00
Aaron Bach
cb06541fda Bump simplisafe-python to 2023.04.0 (#90896)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-06 13:21:03 -04:00
J. Nick Koston
70d1e733f6 Fix entity_id migration query failing with MySQL 8.0.30 (#90895) 2023-04-06 13:21:02 -04:00
J. Nick Koston
0b3012071e Guard against invalid ULIDs in contexts while recording events (#90889) 2023-04-06 13:21:01 -04:00
J. Nick Koston
42b7ed115f Bump ulid-transform 0.6.0 (#90888)
* Bump ulid-transform 0.6.0

changelog: https://github.com/bdraco/ulid-transform/compare/v0.5.1...v0.6.0

to find the source of the invalid ulids in https://github.com/home-assistant/core/issues/90887
2023-04-06 13:21:00 -04:00
J. Nick Koston
513a13f369 Fix missing bluetooth client wrapper in bleak_retry_connector (#90885) 2023-04-06 13:20:59 -04:00
Michael
f341d0787e Migrate entity unique ids in PI-Hole (#90883)
* migrate entity unique ids

* Update homeassistant/components/pi_hole/__init__.py

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2023-04-06 13:20:58 -04:00
J. Nick Koston
c8ee45b53c Add MariaDB deadlock retry wrapper to database timestamp column migrations (#90880)
Add deadlock retry wrapper to timestamp column migrations

fixes #90819
2023-04-06 13:20:57 -04:00
J. Nick Koston
b4e2dd4e06 Add constraint for websockets to <11.0 (#90868) 2023-04-06 13:20:56 -04:00
J. Nick Koston
c663d8754b Generate a seperate log message per dumped object for profiler.dump_log_objects (#90867)
Since some objects are very large we can generate overly large log messages
```
Event data for system_log_event exceed maximum size of 32768 bytes. This can cause database performance issues; Event data will not be stored
```

Reported in https://ptb.discord.com/channels/330944238910963714/427516175237382144/1093069996101472306
2023-04-06 13:20:55 -04:00
Tom Harris
968a4e4818 Fix issue with Insteon All-Link Database loading (#90858)
Bump to 1.4.1
2023-04-06 13:20:54 -04:00
saschaabraham
833b95722e Bump fritzconnection to 1.12.0 (#90799) 2023-04-06 13:20:53 -04:00
mkmer
096e814929 Handle Uncaught exceptions in async_update Honeywell (#90746) 2023-04-06 13:20:52 -04:00
Erik Montnemery
44c89a6b6c Refactor handling of exposed entities for cloud Alexa and Google (#89877)
* Refactor handling of exposed entities for cloud Alexa

* Tweak WS API

* Validate assistant parameter

* Address some review comments

* Refactor handling of exposed entities for cloud Google

* Raise when attempting to expose an unknown entity

* Add tests

* Adjust cloud tests

* Allow getting expose new entities flag

* Test Alexa migration

* Test Google migration

* Add WS command cloud/google_assistant/entities/get

* Fix return value

* Update typing

* Address review comments

* Rename async_get_exposed_entities to async_get_assistant_settings
2023-04-06 13:09:45 -04:00
Bram Kragten
0d84106947 Update frontend to 20230406.1 (#90951) 2023-04-06 13:08:52 -04:00
Erik Montnemery
b3b83b7bb2 Add a pipeline store to voice_assistant (#90844)
* Add a pipeline store to voice_assistant

* Improve error handling

* Improve test coverage

* Improve test coverage

* Use StorageCollectionWebsocket

* Correct rebase
2023-04-06 12:55:16 -04:00
Marc Mueller
b2bcdf7c19 Update mypy to 1.2.0 (#90947)
* Update mypy to 1.2.0

* Add type ignore
2023-04-06 12:51:16 -04:00
epenet
385630f9b4 Fix flaky test in vesync (#90921)
* Fix flaky test in vesync

* Move sorting to the test
2023-04-06 12:51:02 -04:00
Paulus Schoutsen
86e9f6643f Allow TTS requests to resolve in the background (#90944) 2023-04-06 10:42:55 -05:00
Erik Montnemery
59a02cd08c Allow storing other items than untyped dict in StorageCollection (#90932)
Allow storing other items than untyped dict in StorageCollection
2023-04-06 10:57:00 -04:00
Erik Montnemery
8025fbf398 Remove the coronavirus integration (#90934)
* Remove the coronavirus integration

* Run hassfest and gen_requirements_all
2023-04-06 10:43:09 -04:00
Pascal Reeb
4667b27405 Handle NoURLAvailableError in Nuki component (#90927)
* fix(nuki): handle NoURLAvailableError

* only try internal URLs
2023-04-06 13:51:37 +02:00
epenet
842d89f419 Rewrite mailbox tests (#90906)
* Rewrite mailbox tests

* Use some bytes for get_media

* Split __init__ method

* Cleanup lingering timers

* Simplify message text

* Simplify msgtime

* Remove cleanup

* Use a constant
2023-04-06 13:48:19 +02:00
Erik Montnemery
fa308d8e10 Drop unused logger argument for StorageCollection() (#90913) 2023-04-06 13:28:34 +02:00
mkmer
3d426e1e2b Handle Uncaught exceptions in async_update Honeywell (#90746) 2023-04-06 10:44:13 +02:00
Michael
03e9cb233f Add entity name translations to CO2signal (#90877) 2023-04-06 10:39:49 +02:00
stickpin
e8cbf439e5 Return empty available programs list if an appliance is off during initial configuration (#90905) 2023-04-06 10:38:09 +02:00
J. Nick Koston
96c5e845e5 Guard against invalid ULIDs in contexts while recording events (#90889) 2023-04-06 10:34:54 +02:00
J. Nick Koston
19f71b3bb9 Fix entity_id migration query failing with MySQL 8.0.30 (#90895) 2023-04-06 10:34:13 +02:00
J. Nick Koston
571204fa44 Fix missing bluetooth client wrapper in bleak_retry_connector (#90885) 2023-04-06 10:33:00 +02:00
Aaron Bach
de3f25571d Bump simplisafe-python to 2023.04.0 (#90896)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-06 10:32:35 +02:00
saschaabraham
df40b4bf9f Bump fritzconnection to 1.12.0 (#90799) 2023-04-06 10:31:43 +02:00
J. Nick Koston
e5931dfce2 Bump aiodiscover to 1.4.16 (#90903) 2023-04-06 10:30:29 +02:00
Franck Nijhof
823c506296 Merge branch 'master' into dev 2023-04-06 10:26:34 +02:00
J. Nick Koston
479a35c499 Revert "Move local calendar diagnostics to pytest.mark.freezetime" (#90899)
Revert "Move local calendar diagnostics to pytest.mark.freezetime (#90886)"

This reverts commit a01952981f.
2023-04-05 22:12:21 -07:00
Allen Porter
a01952981f Move local calendar diagnostics to pytest.mark.freezetime (#90886) 2023-04-05 19:57:09 -07:00
Jesse Hills
eb469d6a2f Move enum mapper to own file to prevent circular dependency (#90890)
* Move enum_mapper to own file to prevent circular dependency

* Add enum mapper test
2023-04-05 22:55:51 -04:00
J. Nick Koston
2fc34e7cce Bump ulid-transform 0.6.0 (#90888)
* Bump ulid-transform 0.6.0

changelog: https://github.com/bdraco/ulid-transform/compare/v0.5.1...v0.6.0

to find the source of the invalid ulids in https://github.com/home-assistant/core/issues/90887
2023-04-05 22:19:43 -04:00
Ernst Klamer
96ed4a1be1 Bump xiaomi-ble to 0.17.0 (#90806)
Add support for new Xiaomi BLE sensors
2023-04-05 22:14:21 -04:00
epenet
aa218e6f9c Fix lingering timer in device_tracker (#90824) 2023-04-05 21:12:26 -04:00
Paul Bottein
71697df3c2 Add device name fallback if no hostname in PrusaLink (#90831)
Device name fallback if no hostname in PrusaLink
2023-04-05 21:03:39 -04:00
tronikos
49468ef5d0 Android TV Remote integration (#89935)
* Android TV Remote integration

* Add diagnostics

* Remove test pem files from when api was not mocked

* Address review comments

* Remove hass.data call in test

* Store the certificate and key in /config/.storage

* update comments

* Update homeassistant/components/androidtv_remote/__init__.py

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>

* import callback

* use async_generate_cert_if_missing

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2023-04-05 21:00:40 -04:00
Tom Harris
a6c5b5e238 Fix issue with Insteon All-Link Database loading (#90858)
Bump to 1.4.1
2023-04-05 20:53:44 -04:00
J. Nick Koston
4c767b2f72 Generate a seperate log message per dumped object for profiler.dump_log_objects (#90867)
Since some objects are very large we can generate overly large log messages
```
Event data for system_log_event exceed maximum size of 32768 bytes. This can cause database performance issues; Event data will not be stored
```

Reported in https://ptb.discord.com/channels/330944238910963714/427516175237382144/1093069996101472306
2023-04-05 20:53:19 -04:00
Michael
397fbc0e41 Migrate entity unique ids in PI-Hole (#90883)
* migrate entity unique ids

* Update homeassistant/components/pi_hole/__init__.py

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2023-04-05 20:52:37 -04:00
J. Nick Koston
b4fec762bc Switch to fnv-hash-fast from fnvhash (#90761)
* Switch to fnv-hash-fast from fnvhash

Replaces the pure python implemention with a fast cpp one
when available (with fallback to pure python)

changelog: https://github.com/bdraco/fnv-hash-fast/releases/tag/v0.3.1
source: https://github.com/bdraco/fnv-hash-fast/tree/main/src/fnv_hash_fast

* Apply suggestions from code review

* lint
2023-04-05 20:52:23 -04:00
J. Nick Koston
a8f1d033a0 Add MariaDB deadlock retry wrapper to database timestamp column migrations (#90880)
Add deadlock retry wrapper to timestamp column migrations

fixes #90819
2023-04-05 20:46:56 -04:00
epenet
60692bcfdb Fix lingering timers in calendar tests (#90845) 2023-04-05 20:46:05 -04:00
Erik Montnemery
4276ce96ea Use send_json_auto_id in voice_assistant tests (#90857) 2023-04-05 19:07:42 -05:00
Erik Montnemery
4104659986 Allow import of deprecated audioop module (#90869) 2023-04-05 19:03:46 -05:00
J. Nick Koston
ef5d8d83cb Add constraint for websockets to <11.0 (#90868) 2023-04-05 08:03:47 -10:00
Franck Nijhof
cff493fb98 2023.4.0 (#90855) 2023-04-05 19:57:42 +02:00
epenet
19ab76dad9 Fix lingering timers in sensor tests (#90856) 2023-04-05 19:52:30 +02:00
shbatm
04cfd7b41d Use built-in percentage unit for ISY994 relative humidity (#90863) 2023-04-05 07:50:06 -10:00
Stackie Jia
5c2af99520 Improve the HomeKit (de)humidifier min/max humidity handling (#90854) 2023-04-05 06:35:47 -10:00
Franck Nijhof
d67265bb66 Bumped version to 2023.4.0 2023-04-05 17:37:57 +02:00
Erik Montnemery
6e51f0d6f5 Adjust OTBR channel conflict URL (#90847) 2023-04-05 17:37:06 +02:00
Bram Kragten
82977f33ed Bump frontend to 20230405.0 (#90841) 2023-04-05 17:37:03 +02:00
epenet
fb2d432d32 Adjust async_track_time_interval name argument (#90838)
Adjust async_track_time_interval naming
2023-04-05 17:36:59 +02:00
Tom Puttemans
0d019a3c4c Support entity name translation in DSMR Reader component (#90836)
* Use translation_key instead of name for the entity names and enum values

This change allows for the translation of entity names and their values based on a key, instead of having the English text in the code

* Adjusted tariff options order

Not really wrong, but this way it is consistent with all other entities
2023-04-05 17:36:55 +02:00
Paul Bottein
65b877bb77 Add entity name translations to prusalink entities (#90833) 2023-04-05 17:36:52 +02:00
Jan Bouwhuis
2a23583d67 Suppress imap logging on reconnect and presume state (#90826) 2023-04-05 17:36:48 +02:00
Penny Wood
80fe5051b3 Master RAS zone (#90825)
Fixes issue in some systems with different numbering systems
2023-04-05 17:36:44 +02:00
J. Nick Koston
2dfe33d177 Bump aioesphomeapi to 10.6.1 (#90816) 2023-04-05 17:36:41 +02:00
J. Nick Koston
617037a92d Fix BLEDevice not getting updated when details change for remote scanners (#90815) 2023-04-05 17:36:36 +02:00
Tom Puttemans
3538844181 Support entity name translation in DSMR Reader component (#90836)
* Use translation_key instead of name for the entity names and enum values

This change allows for the translation of entity names and their values based on a key, instead of having the English text in the code

* Adjusted tariff options order

Not really wrong, but this way it is consistent with all other entities
2023-04-05 10:59:07 -04:00
epenet
c01b1eb013 Adjust async_track_time_interval name argument (#90838)
Adjust async_track_time_interval naming
2023-04-05 10:58:02 -04:00
Bram Kragten
0f8060fd00 Bump frontend to 20230405.0 (#90841) 2023-04-05 16:41:24 +02:00
Erik Montnemery
bff5b75377 Adjust OTBR channel conflict URL (#90847) 2023-04-05 16:06:00 +02:00
epenet
acec2fd7db Fix lingering timers in mailbox tests (#90830) 2023-04-05 14:09:51 +02:00
epenet
84f58543ef Fix lingering timers in image processing tests (#90829) 2023-04-05 14:09:15 +02:00
epenet
35b642c6c8 Improve type hints in calendar trigger tests (#90827) 2023-04-05 14:08:55 +02:00
J. Nick Koston
7cf1926081 Fix BLEDevice not getting updated when details change for remote scanners (#90815) 2023-04-05 12:19:37 +02:00
Penny Wood
3ddfe027fd Master RAS zone (#90825)
Fixes issue in some systems with different numbering systems
2023-04-05 12:18:54 +02:00
Jan Bouwhuis
94817f61e5 Suppress imap logging on reconnect and presume state (#90826) 2023-04-05 12:18:16 +02:00
Paul Bottein
58ac8404ef Add entity name translations to prusalink entities (#90833) 2023-04-05 12:17:00 +02:00
andarotajo
08dd0a5efa Move dwd_weather_warnings constants to separate file (#90810)
* Move constants to seperate file

* Use __package__ for the logger name

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-05 09:16:17 +02:00
J. Nick Koston
5eb0c35a97 Add names to common helper tasks (#90803) 2023-04-05 08:41:15 +02:00
Hans Oischinger
21a873f0af Remove myself from vicare codeowners (#90755) 2023-04-05 08:29:57 +02:00
mletenay
83704f0334 Update to goodwe v0.2.31 (#90808) 2023-04-05 07:52:05 +03:00
J. Nick Koston
02c749a111 Bump aioesphomeapi to 10.6.1 (#90816) 2023-04-04 17:22:01 -10:00
Paulus Schoutsen
8f60a2bdd4 Bumped version to 2023.4.0b7 2023-04-04 21:09:22 -04:00
Patrick ZAJDA
9f7b2ba6c1 Add entity name translations to Broadlink sensors (#90783)
* Add entity name translations to Broadlink sensors

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Update tests

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-04 21:09:10 -04:00
Patrick ZAJDA
af34e25c89 Add translations for Nuki entity name and battery critical state attribute (#90772)
* Add translations for Nuki entity name and battery critical state attribute

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Remove door sensor name

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

---------

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>
2023-04-04 21:09:09 -04:00
Pascal Reeb
c43dc37713 Add Warning in the issue registry if a HTTPS webhook is used for Nuki (#90718)
feat(nuki): create issue when https webhook URL was created
2023-04-04 21:09:08 -04:00
Maciej Bieniek
0d6177dbdb Address late review for NextDNS entity name translations (#90771) 2023-04-04 21:07:21 -04:00
starkillerOG
f03b9036c5 Add async_write_ha_state to Reolink select (#90764)
Add async_write_ha_state to select
2023-04-04 21:07:20 -04:00
Jan Bouwhuis
1848a723cd Fix recovering imap connection triggers re-auth (#90762) 2023-04-04 21:07:19 -04:00
Erik Montnemery
8230a52e0a Update template environment from the event loop (#90758) 2023-04-04 21:07:18 -04:00
Paulus Schoutsen
d0e9470c7c Fix frontend test again (#90754) 2023-04-04 21:07:17 -04:00
J. Nick Koston
b50354f362 Add render count to templates repr (#90753) 2023-04-04 21:07:16 -04:00
J. Nick Koston
e4b3a146be Bump aiohomekit to 2.6.3 (#90752) 2023-04-04 21:07:15 -04:00
TheJulianJES
1861a621b2 Restore state for ZHA OnOff binary sensors (#90749)
* Restore state for ZHA OnOff binary sensors

* Let `Motion` extend `Opening`

`Motion` is just a specified version of `Opening` that only changes the device class for some motion sensors.
Since we have more "special code" in the OnOff/Opening sensor now, we also want to make sure that gets applied to `Motion` binary sensors.

* Improve comment and type

* Add test to verify that binary sensors restore last HA state
2023-04-04 21:07:14 -04:00
J. Nick Koston
0746e09256 Prevent overly large event data from being stored in the database (#90747)
This is the same change as #87105 for events
2023-04-04 21:07:13 -04:00
J. Nick Koston
0166cd082b Bump zeroconf to 0.54.0 (#90744)
* Bump zeroconf to 0.54.0

fixes incorrect addresses when the server name changes

changelog: https://github.com/python-zeroconf/python-zeroconf/compare/0.53.0...0.54.0

* fix
2023-04-04 21:07:12 -04:00
Maciej Bieniek
0a74f946db Add entity name translations to NextDNS (#90743)
Add entity name translations
2023-04-04 21:07:11 -04:00
Mark Adkins
d04b45a821 SharkIQ Hotfix - Handle current installations by using default REGION (#90741)
* Add default region on async_setup_entry

* Move logic to migration function

* Move update logic back to setup function, but updates the config if needed.

* Remove commented out code

* Update Tests & Config setting method

* Update homeassistant/components/sharkiq/__init__.py

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* Update homeassistant/components/sharkiq/__init__.py

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* Accept Suggestions & Formatting

---------

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-04-04 21:07:10 -04:00
Maciej Bieniek
a5a6641bb4 Add entity name translations to Tractive (#90738)
Add entity name translations
2023-04-04 21:07:09 -04:00
Michael
1420cda837 Add entity name translations to SMS (#90727) 2023-04-04 21:07:08 -04:00
Fabio De Simone
cba5751ca2 Fix bluetooth_le_tracker reporting devices Home when they leave (#90641)
* fix bluetooth_le_tracker reporting devices Home when they leave

* refactor

* implement tests for BLE service_info.time check

* update bluetooth_le_tracker tests

* tweaks

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-04 21:07:07 -04:00
Mark Adkins
1f7ebe9249 SharkIQ Hotfix - Handle current installations by using default REGION (#90741)
* Add default region on async_setup_entry

* Move logic to migration function

* Move update logic back to setup function, but updates the config if needed.

* Remove commented out code

* Update Tests & Config setting method

* Update homeassistant/components/sharkiq/__init__.py

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* Update homeassistant/components/sharkiq/__init__.py

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* Accept Suggestions & Formatting

---------

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-04-04 21:06:24 -04:00
Fabio De Simone
8495da1af0 Fix bluetooth_le_tracker reporting devices Home when they leave (#90641)
* fix bluetooth_le_tracker reporting devices Home when they leave

* refactor

* implement tests for BLE service_info.time check

* update bluetooth_le_tracker tests

* tweaks

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2023-04-04 20:59:57 -04:00
Vincent Knoop Pathuis
03caf63ec2 Remove getattr for Landis+Gyr Heat Meter (#90637)
* Remove getattr and update tests

* Apply suggestion for test from PR review

* Make constants capitalized
2023-04-04 22:01:35 +02:00
Patrick ZAJDA
e748f0c623 Add entity name translations to Broadlink sensors (#90783)
* Add entity name translations to Broadlink sensors

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Update tests

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-04 15:18:41 -04:00
Guy Khmelnitsky
22a1c8f00f Bump locationsharinglib to 5.0.0 (#90790)
* Update GoogleMaps intergration dependency

* Update requirements_all.txt
2023-04-04 11:43:20 -07:00
Jan Bouwhuis
4a0d3e881a Rework MQTT config merging and adding defaults (#90529)
* Cleanup config merging and adding defaults

* Optimize and update tests

* Do not mix entry and yaml config

* Make sure hass.data is initilized

* remove check on get_mqtt_data

* Tweaks to MQTT client

* Remove None assigment mqtt client and fix mock
2023-04-04 18:12:18 +02:00
Erik Montnemery
690a0f34e5 Fix glob expansion for partial prettier run (#90787) 2023-04-04 17:27:15 +02:00
Erik Montnemery
6642db917f Remove legacy services from lock/services.yaml (#90779) 2023-04-04 17:03:43 +02:00
Erik Montnemery
28d85bc405 Run prettier on matter fixture (#90784) 2023-04-04 16:13:08 +02:00
Matija Kovacic
e7c5325ba8 Extract Supla base entity into its own file (#90781)
* Extracting Supla base entity

* Fix improper import

* Making Black happy.

* Use set for membership check

* Making ruff happy.
2023-04-04 16:11:27 +02:00
J. Nick Koston
5e3796c333 Prevent legacy device tracker from creating hundreds of executor jobs (#90690)
* Prevent legacy device tracker from creating hundreds of executor jobs

The legacy device tracker would create an executor job for
each set of extra state attributes and device name lookup.

For routers this meant hundreds of jobs

* Prevent legacy device tracker from creating hundreds of executor jobs

The legacy device tracker would create an executor job for
each set of extra state attributes and device name lookup.

For routers this meant hundreds of jobs

* tweak

* simplify
2023-04-04 08:55:25 -04:00
Martin Hjelmare
535fb34207 Move legacy stt (#90776)
* Move legacy stt to separate module

* Remove case for None as provider

* Add error log for unknown platform

* Add some tests
2023-04-04 14:52:36 +02:00
epenet
584066b809 Rename renault coordinator and base entity (#90760)
Refactor renault coordinator and base entity
2023-04-04 14:38:52 +02:00
epenet
f24634e198 Use domain constants in rest tests (#90765) 2023-04-04 14:33:41 +02:00
Martin Hjelmare
3b2127b1dc Add core as codeowner for stt integration (#90777) 2023-04-04 08:28:34 -04:00
hidaris
a9e14cd8d7 Preliminary support for Matter cover (#90262)
Preliminary support for Matter cover, curtain tilt support has not been added yet.
2023-04-04 14:16:11 +02:00
Patrick ZAJDA
e962dd64cf Add translations for Nuki entity name and battery critical state attribute (#90772)
* Add translations for Nuki entity name and battery critical state attribute

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Remove door sensor name

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

---------

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>
2023-04-04 13:43:51 +02:00
Jan Bouwhuis
9b03d331ca Fix recovering imap connection triggers re-auth (#90762) 2023-04-04 12:59:57 +02:00
Michael
b4e12d34f6 Add entity name translations to SMS (#90727) 2023-04-04 12:58:42 +02:00
Maciej Bieniek
2f22613cf9 Address late review for NextDNS entity name translations (#90771) 2023-04-04 12:56:39 +02:00
J. Nick Koston
b66a99fe8a Bump sqlalchemy to 2.0.8 (#90756) 2023-04-04 12:47:54 +02:00
J. Nick Koston
0cc9b2e803 Use slots for discovery dataclasses (#90751) 2023-04-04 12:44:59 +02:00
Raman Gupta
bfea1367a7 Add ms to units comment for duration sensor device class (#90757) 2023-04-04 12:42:33 +02:00
starkillerOG
a05fbdeedb Add async_write_ha_state to Reolink select (#90764)
Add async_write_ha_state to select
2023-04-04 11:48:14 +02:00
epenet
dfa0b5439b Add myself to rest code owners (#90770) 2023-04-04 11:36:36 +02:00
Erik Montnemery
37661fe79f Update template environment from the event loop (#90758) 2023-04-04 09:52:47 +02:00
J. Nick Koston
edd93e989e Add render count to templates repr (#90753) 2023-04-03 19:38:15 -10:00
J. Nick Koston
a4bf71b655 Bump aiohomekit to 2.6.3 (#90752) 2023-04-03 19:38:04 -10:00
Paulus Schoutsen
79101b31d5 Fix frontend test again (#90754) 2023-04-04 00:11:20 -04:00
Paulus Schoutsen
6e4c78686e Run pipeline from audio stream function (#90748)
* Run pipeline from audio stream function

* Fix tests

---------

Co-authored-by: Michael Hansen <mike@rhasspy.org>
2023-04-04 00:06:51 -04:00
J. Nick Koston
4f1574b859 Prevent overly large event data from being stored in the database (#90747)
This is the same change as #87105 for events
2023-04-04 00:02:49 -04:00
J. Nick Koston
6dc55e4a3a Bump zeroconf to 0.54.0 (#90744)
* Bump zeroconf to 0.54.0

fixes incorrect addresses when the server name changes

changelog: https://github.com/python-zeroconf/python-zeroconf/compare/0.53.0...0.54.0

* fix
2023-04-04 00:02:07 -04:00
Maciej Bieniek
a854a5620f Add entity name translations to Tractive (#90738)
Add entity name translations
2023-04-04 00:01:46 -04:00
Maciej Bieniek
449f18c9c1 Add entity name translations to NextDNS (#90743)
Add entity name translations
2023-04-04 00:01:04 -04:00
Avi Miller
5e7e96c5da Remove the LIFX sensor update coordinator (#90740) 2023-04-03 17:48:32 -10:00
TheJulianJES
a58b3721ed Restore state for ZHA OnOff binary sensors (#90749)
* Restore state for ZHA OnOff binary sensors

* Let `Motion` extend `Opening`

`Motion` is just a specified version of `Opening` that only changes the device class for some motion sensors.
Since we have more "special code" in the OnOff/Opening sensor now, we also want to make sure that gets applied to `Motion` binary sensors.

* Improve comment and type

* Add test to verify that binary sensors restore last HA state
2023-04-03 22:27:57 -04:00
Paulus Schoutsen
a3e66b5dde Bumped version to 2023.4.0b6 2023-04-03 16:51:04 -04:00
Bram Kragten
83dd52ab1f Update frontend to 20230403.0 (#90735) 2023-04-03 16:51:01 -04:00
Michael
da1e5f6a3c Add entity name translations to sun (#90732) 2023-04-03 16:51:00 -04:00
Michael
8f9868024c Add entity name translations to Luftdaten (#90725) 2023-04-03 16:50:59 -04:00
Erik Montnemery
c90396cd57 Bump pychromecast to 13.0.7 (#90724) 2023-04-03 16:50:58 -04:00
Aaron Bach
509c1ca99c Fix missing battery sensors for SimpliSafe locks (#90722) 2023-04-03 16:50:57 -04:00
Michael
431fbee641 Fix translation of status binary sensor in PI-Hole (#90719) 2023-04-03 16:50:56 -04:00
Michael
28983bca85 Add entity name translations to Pi-hole (#90713) 2023-04-03 16:50:55 -04:00
Felix Rotthowe
601498617d Fix Livisi climate min/max temperature (#90712)
* Correctly set livisi climate min/max temp

* fix imports
2023-04-03 16:50:54 -04:00
Michael
6c208f655d Add entity name translations to NUT (#90709) 2023-04-03 16:50:53 -04:00
Michael
eaaf24d326 Add entity name translations to AVM Fritz!SmartHome (#90707)
* add entity name translation

* sort and capitalize

* adjust tests

* sort entities
2023-04-03 16:50:52 -04:00
Michael
0c12d45581 Add entity name translations to Synology DSM (#90706)
* add entity name translation

* sort strings

* sort and capitalize strings
2023-04-03 16:50:51 -04:00
Michael
c2e46db76d Add entity name translations to AVM Fritz!Tools (#90703)
* add entity name translation

* apply suggestions

* sort strings
2023-04-03 16:50:50 -04:00
Maciej Bieniek
47c8b7804d Add entity name translations to BraviaTV (#90702)
Add entity name translations
2023-04-03 16:50:49 -04:00
Maciej Bieniek
8d302aea9e Use the default entity names in GIOS (#90700) 2023-04-03 16:50:48 -04:00
Stephan Uhle
3a73425888 Fix ha version in EDL21 deprecation warning (#90699)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-03 16:50:47 -04:00
epenet
f9e4fe016f Use entity name translations in SFR Box (#90698) 2023-04-03 16:50:46 -04:00
epenet
5835ae03bc Use entity name translations in Renault (#90697) 2023-04-03 16:50:45 -04:00
epenet
71608d4795 Use entity name translations in 1-wire (#90696)
* Use entity name translations in onewire

* Adjust binary sensors

* Adjust switches

* Cleanup
2023-04-03 16:50:44 -04:00
Maciej Bieniek
e38590e40a Use the default entity names in Airly (#90693) 2023-04-03 16:50:43 -04:00
Maciej Bieniek
9e3b54f539 Add entity name translations to NAM (#90681) 2023-04-03 16:50:42 -04:00
J. Nick Koston
24ff2ddae5 Ensure system log does not raise while processing logger messages (#90652) 2023-04-03 16:50:41 -04:00
Michael Davie
621de8bb5f Bump env_canada to v0.5.30 (#90644) 2023-04-03 16:50:40 -04:00
Patrick ZAJDA
6cbf9288b5 Add entity name translations to Switchbot (#90600)
* Add entity name translations to Switchbot

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Apply suggestions from code review

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Fix tests

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Update homeassistant/components/switchbot/strings.json

Co-authored-by: Patrick ZAJDA <patrick@zajda.fr>

---------

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2023-04-03 16:50:39 -04:00
Franck Nijhof
9f95da7793 Add entity name translations to Plugwise (#90537)
* Add entity name translations to Plugwise

* Re-use extisting translation where possible
2023-04-03 16:50:38 -04:00
Nerdix
cb5326b798 Correct handling if WIFI combine suffix is "None" (#90528)
* Correct handling of "None" WIFI combine suffix

* Update tests/components/unifi/test_config_flow.py

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>

* Update tests/components/unifi/test_config_flow.py

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>

---------

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>
2023-04-03 16:50:37 -04:00
Erik Montnemery
1aa6d3e896 Raise repair issue if OTBR and ZHA are on different channels (#90494)
* Raise repair issue if OTBR and ZHA are on different channels

* Update issues after creating or setting dataset

* Explain impact

* Add link to documentation, adjust language

* Update homeassistant/components/otbr/strings.json

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-03 16:50:36 -04:00
Matthias Alphart
1c8d4b8bb8 Use entity name translations in Fronius (#90463) 2023-04-03 16:50:35 -04:00
G Johansson
8669ee3685 Remove Darksky integration (#90322) 2023-04-03 16:50:34 -04:00
Erik Montnemery
59511cc3f7 Make service field filter parameters exclusive (#90728) 2023-04-03 21:46:23 +02:00
Michael
d4d77d9395 Add sort list service to Shopping List (#90671) 2023-04-03 21:34:44 +02:00
Bram Kragten
8c621699af Update frontend to 20230403.0 (#90735) 2023-04-03 21:32:40 +02:00
Emory Penney
7c6a32ebb5 Add DHCP discovery to Obihai (#88984)
* Add DHCP discovery to Obihai

* Unique ID is MAC

* Move try blocks, cleanup

* Migrate existing unique_ids

* Use PyObihai to update Unique ID

* Auth then use get_device_mac

* Config flow changes

* Reworking flow according to feedback

* Cleanup
2023-04-03 21:17:56 +02:00
Michael
fa332668d6 Add entity name translations to sun (#90732) 2023-04-03 21:15:44 +02:00
Matthias Alphart
edaee89e34 Use entity name translations in Fronius (#90463) 2023-04-03 20:05:52 +02:00
Michael
682ebbd4d5 Add entity name translations to Luftdaten (#90725) 2023-04-03 19:55:54 +02:00
Michael
7e543882fc Add entity name translations to Synology DSM (#90706)
* add entity name translation

* sort strings

* sort and capitalize strings
2023-04-03 13:08:22 -04:00
epenet
2d1bb6135c Use entity name translations in 1-wire (#90696)
* Use entity name translations in onewire

* Adjust binary sensors

* Adjust switches

* Cleanup
2023-04-03 13:07:02 -04:00
Michael
9d508ac7ae Add entity name translations to AVM Fritz!SmartHome (#90707)
* add entity name translation

* sort and capitalize

* adjust tests

* sort entities
2023-04-03 13:04:09 -04:00
Erik Montnemery
d52ef83899 Bump pychromecast to 13.0.7 (#90724) 2023-04-03 13:02:36 -04:00
Erik Montnemery
c3091fad4c Raise repair issue if OTBR and ZHA are on different channels (#90494)
* Raise repair issue if OTBR and ZHA are on different channels

* Update issues after creating or setting dataset

* Explain impact

* Add link to documentation, adjust language

* Update homeassistant/components/otbr/strings.json

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-04-03 13:02:10 -04:00
epenet
73d0124c98 Use entity name translations in Renault (#90697) 2023-04-03 18:20:11 +02:00
Michael
1cce55d176 Add entity name translations to NUT (#90709) 2023-04-03 18:18:23 +02:00
Aaron Bach
ba58fc25bd Fix missing battery sensors for SimpliSafe locks (#90722) 2023-04-03 16:42:24 +02:00
Michael
aeeadb570a Fix translation of status binary sensor in PI-Hole (#90719) 2023-04-03 16:38:54 +02:00
Patrick ZAJDA
4456557a02 Add entity name translations to Switchbot (#90600)
* Add entity name translations to Switchbot

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Apply suggestions from code review

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Fix tests

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>

* Update homeassistant/components/switchbot/strings.json

Co-authored-by: Patrick ZAJDA <patrick@zajda.fr>

---------

Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2023-04-03 10:10:30 -04:00
Franck Nijhof
186f47ba46 Add entity name translations to Plugwise (#90537)
* Add entity name translations to Plugwise

* Re-use extisting translation where possible
2023-04-03 09:25:02 -04:00
Pascal Reeb
e72c2029cb Add Warning in the issue registry if a HTTPS webhook is used for Nuki (#90718)
feat(nuki): create issue when https webhook URL was created
2023-04-03 14:49:15 +02:00
Felix Rotthowe
bacbe4aa58 Fix Livisi climate min/max temperature (#90712)
* Correctly set livisi climate min/max temp

* fix imports
2023-04-03 14:17:57 +02:00
epenet
45038bac16 Use entity name translations in SFR Box (#90698) 2023-04-03 14:04:02 +02:00
Michael
628142527d Add entity name translations to Pi-hole (#90713) 2023-04-03 14:00:27 +02:00
Matija Kovacic
34245a6b3d Add support for Supla garage doors (#90593)
* Adding support for additional Supla channel types

Newly supported channel types are - CONTROLLINGTHEGARAGEDOOR, DIMMER, RGBLIGHTING.

* Remove light platform additions

* Remove light devices

* Update homeassistant/components/supla/cover.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Removing some Black automatic formatting.

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-03 13:56:40 +02:00
Maciej Bieniek
1eadc63cd5 Add entity name translations to BraviaTV (#90702)
Add entity name translations
2023-04-03 07:40:52 -04:00
Michael
33a4c2c162 Add entity name translations to AVM Fritz!Tools (#90703)
* add entity name translation

* apply suggestions

* sort strings
2023-04-03 07:35:35 -04:00
Maciej Bieniek
eb748416ed Use the default entity names in GIOS (#90700) 2023-04-03 12:42:55 +02:00
Maciej Bieniek
34041c7564 Add entity name translations to NAM (#90681) 2023-04-03 12:37:01 +02:00
andarotajo
37556a57af Upgrade dwd_weather_warnings dependency dwdwfsapi to 1.0.6 (#90683) 2023-04-03 11:12:35 +02:00
Maciej Bieniek
cacd6708f0 Use the default entity names in Airly (#90693) 2023-04-03 10:50:24 +02:00
Stephan Uhle
3c536e31eb Fix ha version in EDL21 deprecation warning (#90699)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-04-03 10:48:06 +02:00
G Johansson
724eb7f2bd Remove Darksky integration (#90322) 2023-04-03 10:34:36 +02:00
Nerdix
d539bddabc Correct handling if WIFI combine suffix is "None" (#90528)
* Correct handling of "None" WIFI combine suffix

* Update tests/components/unifi/test_config_flow.py

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>

* Update tests/components/unifi/test_config_flow.py

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>

---------

Co-authored-by: Robert Svensson <Kane610@users.noreply.github.com>
2023-04-03 09:47:08 +02:00
Jan Bouwhuis
580b20b0a8 Deprecate imap_content_sensor (#90429)
* Deprecate imap_content_sensor

* Rename unique_id to issue_id

* Migrate config to imap entry

* Improve dialogs

* Improve dialog texts

* Add repairs.py to .coveragerc

* Test the integration component setup

* Text tweak

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Use flow for creating entries

* Rename schema add tests

* Patch client instead

* Add tests repairs - refactor async_step_confirm

* Comments test, correct calling next step

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-04-03 07:27:41 +02:00
starkillerOG
ddb1610e90 Reolink late review comments (#90668)
review comments
2023-04-03 07:22:38 +02:00
J. Nick Koston
73714a6656 Ensure system log does not raise while processing logger messages (#90652) 2023-04-02 15:18:50 -10:00
Paulus Schoutsen
20d8bbbd0c Bumped version to 2023.4.0b5 2023-04-02 20:57:16 -04:00
J. Nick Koston
e10e3ee7cc Fix memory churn in state templates (#90685)
* Fix memory churn in state templates

The LRU for state templates was limited to 512 states. As soon
as it was exaused, system performance would tank as each template
that iterated all states would have to create and GC any state
> 512

* does it scale?

* avoid copy on all

* comment

* preen

* cover

* cover

* comments

* comments

* comments

* preen

* preen
2023-04-02 20:57:07 -04:00
Maciej Bieniek
83b7018be2 Fix default sensor entity name for PM1 (#90684)
Fix PM1 text
2023-04-02 20:57:06 -04:00
J. Nick Koston
6d967ac535 Bump zeroconf to 0.53.0 (#90682) 2023-04-02 20:57:05 -04:00
Paulus Schoutsen
77bc745bed Fix frontend test (#90679) 2023-04-02 20:57:04 -04:00
Patrick ZAJDA
8fe7b01baa Add entity name translations for Nest sensors (#90677)
Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>
2023-04-02 20:57:04 -04:00
J. Nick Koston
5e5888b37a Bump zeroconf to 0.52.0 (#90660)
* Bump zeroconf to 0.52.0

Switch to using the new ip_addresses_by_version which avoids
all the ip address conversions

* updates
2023-04-02 20:57:03 -04:00
Maciej Bieniek
90de51fff3 Add entity name translations to Airly (#90656)
Add entity name translations
2023-04-02 20:55:38 -04:00
Maciej Bieniek
89230b75be Add entity name translations to GIOS (#90655)
* Add entity name translations

* Update tests
2023-04-02 20:55:37 -04:00
J. Nick Koston
cbe3cabf0a Add object source logger to profiler (#90650)
* Add object source logger to profiler

* fixes

* cleanup

* tweaks

* logging

* logging

* too intensive

* adjust

* Update homeassistant/bootstrap.py

* fixes

* fixes

* coverage
2023-04-02 20:55:36 -04:00
Maciej Bieniek
c259c1afe3 Add entity name translations to Brother (#90634)
* Add entity name translations

* Fix sensor name

* Update tests

* Suggested change
2023-04-02 20:55:36 -04:00
mletenay
1ff93518b5 Update goodwe library to v0.2.30 (#90607) 2023-04-02 20:55:34 -04:00
J. Nick Koston
51ff027fce Add object source logger to profiler (#90650)
* Add object source logger to profiler

* fixes

* cleanup

* tweaks

* logging

* logging

* too intensive

* adjust

* Update homeassistant/bootstrap.py

* fixes

* fixes

* coverage
2023-04-02 20:54:21 -04:00
Maciej Bieniek
2229a63acd Fix default sensor entity name for PM1 (#90684)
Fix PM1 text
2023-04-02 20:53:00 -04:00
J. Nick Koston
17719663f0 Fix memory churn in state templates (#90685)
* Fix memory churn in state templates

The LRU for state templates was limited to 512 states. As soon
as it was exaused, system performance would tank as each template
that iterated all states would have to create and GC any state
> 512

* does it scale?

* avoid copy on all

* comment

* preen

* cover

* cover

* comments

* comments

* comments

* preen

* preen
2023-04-02 20:51:25 -04:00
mletenay
0198c751b4 Update goodwe library to v0.2.30 (#90607) 2023-04-02 20:25:29 -04:00
Michael Davie
6a6b6cf826 Bump env_canada to v0.5.30 (#90644) 2023-04-02 20:20:11 -04:00
Patrick ZAJDA
22fd6138bd Add entity name translations for Nest sensors (#90677)
Signed-off-by: Patrick ZAJDA <patrick@zajda.fr>
2023-04-02 20:19:03 -04:00
J. Nick Koston
368d1c9b54 Bump zeroconf to 0.53.0 (#90682) 2023-04-02 13:32:00 -10:00
Paulus Schoutsen
c5a87addc1 Fix frontend test (#90679) 2023-04-02 14:28:52 -04:00
Maciej Bieniek
fc81b82932 Add entity name translations to GIOS (#90655)
* Add entity name translations

* Update tests
2023-04-02 14:25:38 -04:00
Maciej Bieniek
d32fb7c22f Add entity name translations to Airly (#90656)
Add entity name translations
2023-04-02 14:24:40 -04:00
tronikos
b52fab0f6d Rename Android TV to Android Debug Bridge (#90657)
* Rename Android TV to Android debug bridge

* More renaming
2023-04-02 14:22:16 -04:00
J. Nick Koston
17270979e6 Bump zeroconf to 0.52.0 (#90660)
* Bump zeroconf to 0.52.0

Switch to using the new ip_addresses_by_version which avoids
all the ip address conversions

* updates
2023-04-02 14:09:44 -04:00
Paulus Schoutsen
4a4d3201f5 Fix voice assistant error variable (#90658) 2023-04-01 22:34:52 -05:00
J. Nick Koston
84292d4797 Cleanup some duplicate code in recorder statistics (#90549)
* Cleanup some duplicate code in recorder statistics

* more cleanup

* reduce

* reduce
2023-04-01 21:40:14 -04:00
Maciej Bieniek
5fc103947f Add entity name translations to Brother (#90634)
* Add entity name translations

* Fix sensor name

* Update tests

* Suggested change
2023-04-01 21:39:46 -04:00
Paulus Schoutsen
aa6cf3d208 Bumped version to 2023.4.0b4 2023-04-01 15:23:53 -04:00
Bram Kragten
2a28d40dc8 Update frontend to 20230401.0 (#90646) 2023-04-01 15:23:45 -04:00
Jan Bouwhuis
c006b3b1df Fix mqtt device_tracker is not reloading yaml (#90639) 2023-04-01 15:23:44 -04:00
nono
bacd77a03a Fix Rest switch init was not retrying if unreachable at setup (#90627)
* Fix Rest switch init was not retrying if unreachable at setup

* pass error log to platformnotready
prevents spamming the same message in logs.
2023-04-01 15:23:43 -04:00
J. Nick Koston
75694307e2 Bump zeroconf to 0.51.0 (#90622)
* Bump zeroconf to 0.50.0

changelog: https://github.com/python-zeroconf/python-zeroconf/compare/0.47.4...0.50.0

* bump to 51
2023-04-01 15:23:42 -04:00
J. Nick Koston
1189b2ad70 Small speed up to _collection_changed (#90621)
attrgetter builds a fast method which happens in native code
4664a7cf68/Modules/_operator.c (L1413)
2023-04-01 15:23:42 -04:00
Joakim Sørensen
d5d5bb0732 Only limit stats to started add-ons (#90611) 2023-04-01 15:23:41 -04:00
J. Nick Koston
6242dd2214 Avoid sorting domain/all states in templates (#90608) 2023-04-01 15:23:40 -04:00
Bram Kragten
2852fe6786 Update frontend to 20230401.0 (#90646) 2023-04-01 15:21:51 -04:00
Jan Bouwhuis
9965d9d81d Fix mqtt device_tracker is not reloading yaml (#90639) 2023-04-01 15:17:53 -04:00
J. Nick Koston
8263c3de23 Bump zeroconf to 0.51.0 (#90622)
* Bump zeroconf to 0.50.0

changelog: https://github.com/python-zeroconf/python-zeroconf/compare/0.47.4...0.50.0

* bump to 51
2023-04-01 15:15:17 -04:00
J. Nick Koston
00a4279d64 Speed up backups (#90613) 2023-04-01 15:14:59 -04:00
starkillerOG
b47ac524ea Use async_timeout instead of asyncio.wait_for (#90496)
* Use async_timeout instead of asyncio.wait_for

* fix imports

* fix imports

* break out Event.wait patch

* Update tests/components/reolink/conftest.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Simplify

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-04-01 17:47:31 +02:00
nono
9cab05c4b9 Fix Rest switch init was not retrying if unreachable at setup (#90627)
* Fix Rest switch init was not retrying if unreachable at setup

* pass error log to platformnotready
prevents spamming the same message in logs.
2023-04-01 17:45:24 +02:00
J. Nick Koston
f1fa63281e Adjust context id variable names in the logbook processor to improve readability (#90617)
Adjust some variable names in the logbook process to improve readablity

There were some places were we used context_id that should have been context_id_bin
2023-04-01 10:24:02 -04:00
J. Nick Koston
e94c11371d Bump securetar to 2023.3.0 (#90612)
changelog: https://github.com/pvizeli/securetar/compare/2022.02.0...2023.3.0
2023-04-01 10:22:26 -04:00
Michael Hansen
90d81e9844 Use webrcvad to detect silence in pipelines (#90610)
* Add webrtcvad requirement

* Use webrcvad for voice command segmenting

* Add vad test
2023-03-31 23:55:07 -04:00
J. Nick Koston
44b35fea47 Speed up entity filter when there are many glob matchers (#90615)
* Speed up entity filter when there are many glob matchers

Since we do no care about which glob matches we can
combine all the translated globs into a single regex
which reduces the overhead

* delete unused code

* preen
2023-03-31 21:18:29 -04:00
J. Nick Koston
3e94f2a502 Small speed up to _collection_changed (#90621)
attrgetter builds a fast method which happens in native code
4664a7cf68/Modules/_operator.c (L1413)
2023-03-31 21:15:36 -04:00
Joakim Sørensen
3e59687902 Only limit stats to started add-ons (#90611) 2023-03-31 23:57:39 +02:00
J. Nick Koston
f4c341253b Avoid sorting domain/all states in templates (#90608) 2023-03-31 11:27:55 -10:00
Paulus Schoutsen
03f085d7be Bumped version to 2023.4.0b3 2023-03-31 15:41:37 -04:00
Raman Gupta
b3348c3e6f Bump zwave-js-server-python to 0.47.3 (#90606)
* Bump zwave-js-server-python to 0.47.2

* Bump zwave-js-server-python to 0.47.3
2023-03-31 15:41:33 -04:00
puddly
590db0fa74 Perform an energy scan when downloading ZHA diagnostics (#90605) 2023-03-31 15:41:32 -04:00
puddly
f56ccf90d9 Fix ZHA definition error on received command (#90602)
* Fix use of deprecated command schema access

* Add a unit test
2023-03-31 15:41:31 -04:00
Bram Kragten
c63f8e714e Update frontend to 20230331.0 (#90594) 2023-03-31 15:41:30 -04:00
starkillerOG
a20771f571 Bump reolink-aio to 0.5.9 (#90590) 2023-03-31 15:41:29 -04:00
Franck Nijhof
2d482f1f57 Raise on invalid (dis)arm code in manual mqtt alarm (#90584) 2023-03-31 15:41:28 -04:00
Erik Montnemery
499962f4ee Tweak yalexs_ble translations (#90582) 2023-03-31 15:41:27 -04:00
Franck Nijhof
88a407361c Raise on invalid (dis)arm code in manual alarm (#90579) 2023-03-31 15:41:26 -04:00
Franck Nijhof
89dc6db5a7 Add arming/disarming state to Verisure (#90577) 2023-03-31 15:41:25 -04:00
J. Nick Koston
de9e7e47fe Make sonos activity check a background task (#90553)
Ensures the task is canceled at shutdown if the device
is offline and the ping is still in progress
2023-03-31 15:41:24 -04:00
epenet
ab66664f20 Allow removal of sensor settings in scrape (#90412)
* Allow removal of sensor settings in scrape

* Adjust

* Adjust

* Add comment

* Simplify

* Simplify

* Adjust

* Don't allow empty string

* Only allow None

* Use default as None

* Use sentinel "none"

* Not needed

* Adjust unit of measurement

* Add translation keys for "none"

* Use translations

* Sort

* Add enum and timestamp

* Use translation references

* Remove default and set suggested_values

* Disallow enum device class

* Adjust tests

* Adjust _strip_sentinel
2023-03-31 15:41:23 -04:00
Raman Gupta
6db96847d5 Bump zwave-js-server-python to 0.47.3 (#90606)
* Bump zwave-js-server-python to 0.47.2

* Bump zwave-js-server-python to 0.47.3
2023-03-31 15:39:08 -04:00
puddly
3f398818c5 Perform an energy scan when downloading ZHA diagnostics (#90605) 2023-03-31 15:37:00 -04:00
Paulus Schoutsen
01a05340c6 Voice Assistant: improve error handling (#90541)
Co-authored-by: Michael Hansen <mike@rhasspy.org>
2023-03-31 14:04:22 -05:00
puddly
84eb9c5f97 Fix ZHA definition error on received command (#90602)
* Fix use of deprecated command schema access

* Add a unit test
2023-03-31 14:53:42 -04:00
Paulus Schoutsen
ad26317b75 Conversation: allow getting agent info (#90540)
* Conversation: allow getting agent info

* Add unset agenet back
2023-03-31 14:36:39 -04:00
Paulus Schoutsen
8018be28ee TTS: allow resolving engine and test supported options (#90539)
TTS: allow resolving engine
2023-03-31 13:34:42 -05:00
J. Nick Koston
44eaf70625 Make sonos activity check a background task (#90553)
Ensures the task is canceled at shutdown if the device
is offline and the ping is still in progress
2023-03-31 14:33:44 -04:00
starkillerOG
09d54428c9 Bump reolink-aio to 0.5.9 (#90590) 2023-03-31 14:31:04 -04:00
Martin Hjelmare
8256d9b472 Remove xbox_live integration (#90592) 2023-03-31 14:30:04 -04:00
epenet
611d4135fd Add ComponentProtocol to improve type checking (#90586) 2023-03-31 14:19:58 -04:00
Bram Kragten
03137feba5 Update frontend to 20230331.0 (#90594) 2023-03-31 14:15:49 -04:00
J. Nick Koston
c566303edb Avoid writing state to all esphome entities at shutdown (#90555) 2023-03-31 18:23:05 +02:00
Erik Montnemery
149e610bca Drop __eq__ dunder method from Entity (#90585) 2023-03-31 17:03:02 +02:00
Franck Nijhof
469321157d Raise on invalid (dis)arm code in manual alarm (#90579) 2023-03-31 16:08:16 +02:00
Franck Nijhof
8e77d215e7 Raise on invalid (dis)arm code in manual mqtt alarm (#90584) 2023-03-31 16:08:02 +02:00
Erik Montnemery
9a17c437ad Remove some dead code from google_assistant (#90581) 2023-03-31 15:59:48 +02:00
Erik Montnemery
3467f4674e Remove unnecessary calls to async_update_entry from async_migrate_entry (#90575) 2023-03-31 15:53:35 +02:00
Erik Montnemery
1ca7f0dc6a Tweak yalexs_ble translations (#90582) 2023-03-31 15:50:49 +02:00
Franck Nijhof
23372e8bc4 Add arming/disarming state to Verisure (#90577) 2023-03-31 14:55:48 +02:00
epenet
4f54e33f67 Allow removal of sensor settings in scrape (#90412)
* Allow removal of sensor settings in scrape

* Adjust

* Adjust

* Add comment

* Simplify

* Simplify

* Adjust

* Don't allow empty string

* Only allow None

* Use default as None

* Use sentinel "none"

* Not needed

* Adjust unit of measurement

* Add translation keys for "none"

* Use translations

* Sort

* Add enum and timestamp

* Use translation references

* Remove default and set suggested_values

* Disallow enum device class

* Adjust tests

* Adjust _strip_sentinel
2023-03-31 14:34:20 +02:00
Hans Oischinger
ea32cc5d92 Refactor vicare config_flow tests (#90568)
* Refactor vicare config_flow tests

* Address review comments

* Remove unused parameters
2023-03-31 14:33:58 +02:00
Rami Mosleh
8cbe394028 Use get_ha_sensor_data method to update glances sensors (#83983)
* Use `get_ha_sensor_data` method to update sensor state

* update tests

* Use `get_ha_sensor_data` to validate connection

* Update test_sensor.py

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2023-03-31 14:27:37 +02:00
epenet
a616ac2b60 Move attribution constants to entity attributes (#90519)
* Move attribution constants to entity attributes

* Adjust meteo france

* Adjust meteoclimatic

* Adjust nws
2023-03-31 14:25:49 +02:00
epenet
ab699d17a5 Ensure numeric sensors have a valid value (#85605)
* Ensure numeric sensors have a valid value

* Flake8
2023-03-31 14:12:51 +02:00
Timm Schäuble
2e26b6e0cc Add attachments to simplepush (#81033)
* Add attachments

* Fix looking for attachment keywords in values

* Improve attachment input format

* Implement better approach to attachment parsing

* Make ruff happy

* Adjust attachment format and implementation according to comment from emontnemery
2023-03-31 14:10:12 +02:00
Franck Nijhof
28736e2ce4 Update orjson to 3.8.9 (#90570) 2023-03-31 13:59:49 +02:00
Franck Nijhof
6153f17155 Update sentry-sdk to 1.18.0 (#90571) 2023-03-31 13:58:53 +02:00
luar123
c7e8fc9f9d Use more meaningful states for snapcast groups and clients (#77449)
* Show muted snapcast groups as idle and use playing/idle state instead of on state for clients

* New module constant STREAM_STATUS

* Fix return type hint in snapcast

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-31 12:38:23 +02:00
Franck Nijhof
6bad5f02c6 Update black to 23.3.0 (#90569) 2023-03-31 12:20:08 +02:00
Franck Nijhof
b24a5750c3 Add CI timeout to codecov job (#90572) 2023-03-31 12:19:45 +02:00
Franck Nijhof
b9f0701336 Update ruff to v0.0.260 (#90566) 2023-03-31 11:43:28 +02:00
Hans Oischinger
b3887a633d Bump PyVicare to 2.25.0 (#90536) 2023-03-31 09:44:30 +02:00
epenet
d0c38c1e12 Move icon constants to entity attributes (#90518)
* Move icon constants to attribute

* Adjust test
2023-03-31 09:34:17 +02:00
J. Nick Koston
2e0ecf9bd9 Avoid more task creation in the discovery helper (#90552)
* Avoid more task creation in the discovery helper

There is no longer a reason to awaiti the jobs being dispatched
since nothing was using the result and there is no risk of
job being garbage collected prematurely anymore since
the task revamp

* Update homeassistant/helpers/discovery.py
2023-03-31 09:10:55 +02:00
J. Nick Koston
ed673a1b35 Avoid creating a task on callback in owntracks when using mqtt (#90548)
Nothing was being awaited in the callback. It did not
need to be a coro
2023-03-31 09:05:56 +02:00
Paulus Schoutsen
e7e2532c68 Bumped version to 2023.4.0b2 2023-03-30 20:55:55 -04:00
puddly
4bf10c01f0 Bump ZHA dependencies (#90547)
* Bump ZHA dependencies

* Ensure the network is formed on channel 15 when multi-PAN is in use
2023-03-30 20:55:37 -04:00
J. Nick Koston
aad1f4b766 Handle garbage in the context_id column during migration (#90544)
* Handle garbage in the context_id column during migration

* Update homeassistant/components/recorder/migration.py

* lint
2023-03-30 20:55:36 -04:00
J. Nick Koston
e32d89215d Fix migration when encountering a NULL entity_id/event_type (#90542)
* Fix migration when encountering a NULL entity_id/event_type

reported in #beta on discord

* simplify
2023-03-30 20:55:36 -04:00
Franck Nijhof
9478518937 Add entity name translations to LaMetric (#90538)
* Add entity name translations to LaMetric

* Consistency
2023-03-30 20:55:35 -04:00
Bram Kragten
8a99d2a566 Update frontend to 20230330.0 (#90524) 2023-03-30 20:55:34 -04:00
TheJulianJES
38aff23be5 Migrate old ZHA IasZone sensor state to zigpy cache (#90508)
* Migrate old ZHA IasZone sensor state to zigpy cache

* Use correct type for ZoneStatus

* Test that migration happens

* Test that migration only happens once

* Fix parametrize
2023-03-30 20:55:33 -04:00
puddly
3a3c738945 Bump ZHA dependencies (#90547)
* Bump ZHA dependencies

* Ensure the network is formed on channel 15 when multi-PAN is in use
2023-03-30 20:55:01 -04:00
Franck Nijhof
47af325a88 Add entity name translations to LaMetric (#90538)
* Add entity name translations to LaMetric

* Consistency
2023-03-30 20:54:31 -04:00
J. Nick Koston
a2efe2445a Fix migration when encountering a NULL entity_id/event_type (#90542)
* Fix migration when encountering a NULL entity_id/event_type

reported in #beta on discord

* simplify
2023-03-30 20:54:13 -04:00
J. Nick Koston
6b0c98045e Handle garbage in the context_id column during migration (#90544)
* Handle garbage in the context_id column during migration

* Update homeassistant/components/recorder/migration.py

* lint
2023-03-30 20:53:47 -04:00
Bram Kragten
6f89390251 Update frontend to 20230330.0 (#90524) 2023-03-30 13:48:21 -04:00
rikroe
565f311f5c Add EV charging remote services for BMW/Mini (#88759)
* Add select for EV charging to bmw_connected_drive

* Use snapshot for select tests, split select_option tests

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Further adjustments from code review

---------

Co-authored-by: rikroe <rikroe@users.noreply.github.com>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-30 19:37:03 +02:00
TheJulianJES
fd55d0f2dd Migrate old ZHA IasZone sensor state to zigpy cache (#90508)
* Migrate old ZHA IasZone sensor state to zigpy cache

* Use correct type for ZoneStatus

* Test that migration happens

* Test that migration only happens once

* Fix parametrize
2023-03-30 11:15:12 -04:00
Paulus Schoutsen
705e68be9e Bumped version to 2023.4.0b1 2023-03-30 10:40:19 -04:00
Franck Nijhof
4a319c73ab Add a device to the sun (#90517) 2023-03-30 10:40:12 -04:00
Paulus Schoutsen
576780be74 Unregister webhook when registering webhook with nuki fials (#90514) 2023-03-30 10:40:11 -04:00
Petro31
01734c0dab Fix for is_hidden_entity when using it in select, selectattr, reject, and rejectattr (#90512)
fix
2023-03-30 10:40:10 -04:00
Erik Montnemery
2157a4d0fc Include channel in response to WS thread/list_datasets (#90493) 2023-03-30 10:40:09 -04:00
Paulus Schoutsen
b83cb5d1b1 OpenAI to rely on built-in areas variable (#90481) 2023-03-30 10:40:08 -04:00
J. Nick Koston
2a627e63f1 Fix filesize doing blocking I/O in the event loop (#90479)
Fix filesize doing I/O in the event loop
2023-03-30 10:40:06 -04:00
puddly
30af4c769e Correctly load ZHA settings from API when integration is not running (#90476)
Correctly load settings from the zigpy database when ZHA is not running
2023-03-30 10:40:05 -04:00
epenet
02f108498c Add missing strings to sensor integration (#90475)
* Add missing strings to sensor integration

* Enumeration

* Apply suggestion

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

---------

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-30 10:40:04 -04:00
J. Nick Koston
9f3c0fa927 Bump yalexs-ble to 2.1.14 (#90474)
changelog: https://github.com/bdraco/yalexs-ble/compare/v2.1.13...v2.1.14

reduces ble traffic (fixes a bug were we were checking when we did not need to be)
2023-03-30 10:40:03 -04:00
Guido Schmitz
b5811ad1c2 Add entity name translations for devolo Home Network (#90471) 2023-03-30 10:40:02 -04:00
starkillerOG
baccbd98c7 Bump reolink-aio to 0.5.8 (#90467) 2023-03-30 10:40:01 -04:00
Thijs W
9d116799d6 Add missing strings in frontier_silicon (#90446)
Improve confirm message for ssdp flow
2023-03-30 10:40:00 -04:00
RenierM26
e877fd6682 Use auth token in Ezviz (#54663)
* Initial commit

* Revert "Initial commit"

This reverts commit 452027f1a3c1be186cedd4115cea6928917c9467.

* Change ezviz to token auth

* Bump API version.

* Add fix for token expired. Fix options update and unload.

* Fix tests (PLATFORM to PLATFORM_BY_TYPE)

* Uses and stores token only, added reauth step when token expires.

* Add tests MFA code exceptions.

* Fix tests.

* Remove redundant try/except blocks.

* Rebase fixes.

* Fix errors in reauth config flow

* Implement recommendations

* Fix typing error in config_flow

* Fix tests after rebase, readd camera check on init

* Change to platform setup

* Cleanup init.

* Test for MFA required under user form

* Remove useless if block.

* Fix formating after rebase

* Fix formating.

* No longer stored in the repository

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2023-03-30 10:39:58 -04:00
Franck Nijhof
cf628dbf23 Add a device to the sun (#90517) 2023-03-30 10:38:35 -04:00
Paulus Schoutsen
87c4659520 Unregister webhook when registering webhook with nuki fials (#90514) 2023-03-30 15:23:13 +02:00
Paulus Schoutsen
0b72cc9f5e OpenAI to rely on built-in areas variable (#90481) 2023-03-30 15:21:45 +02:00
Erik Montnemery
976efb437b Include channel in response to WS thread/list_datasets (#90493) 2023-03-30 09:16:27 -04:00
Petro31
642984a042 Fix for is_hidden_entity when using it in select, selectattr, reject, and rejectattr (#90512)
fix
2023-03-30 09:14:58 -04:00
Maciej Bieniek
8d21e2b168 Use metric units internally in Accuweather integration (#90444)
* Use metric units internally

* Remove unnecessary code

* Simplify sensor classes

* Remove AccuWeatherForecastSensor class

* Update wind speed value in test

* Return suggested_unit_of_measurement for wind entities

* Clean test

* Use _attr_suggested_unit_of_measurement

* Remove _get_suggested_unit()

* Remove unnecessarey code
2023-03-30 13:11:33 +02:00
Erik Montnemery
ead88cc3f8 Add preferred wind speed unit to unit systems (#90504)
* Add preferred wind speed unit to unit systems

* Tweak

* Update tests
2023-03-30 12:54:12 +02:00
Erik Montnemery
b316ffff9b Rename hassfest _validate_dependencies_exist (#90503) 2023-03-30 12:05:11 +02:00
Aarni Koskela
196f5702b8 Make hassfest.dependencies faster with multiprocessing (#81486)
* hassfest.dependencies: split to two loops

* hassfest.dependencies: use multiprocessing for import scan
2023-03-30 11:25:14 +02:00
Nalin Mahajan
0e7d7f32c1 Add new control4 helper function (#90234)
* Add new helper function to retrieve device variables and update light platform

* seperate try catch from helper function and fix typing

* Change helper function name

* Remove unnecessary forced type changes

* More type changes
2023-03-30 10:33:01 +02:00
epenet
3599515325 Add missing strings to sensor integration (#90475)
* Add missing strings to sensor integration

* Enumeration

* Apply suggestion

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

---------

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-30 10:21:11 +02:00
Vincent Knoop Pathuis
a7040a0487 Add Landis+Gyr MWh-readings from ultraheat-api (#89937)
* Use mwh values from ultraheat api when available

Remove manifest cleanup from PR

Remove added device class from this PR

Restore entity registry fixture

Replace filter by attr_entity_registry_enabled_default

* Catchup with #90182 and #90183

* Add comment explaining disabling some entities

* Add parameterisation of test cases
2023-03-30 09:07:47 +02:00
jellenijhof12
ba32e28fc6 Add dimmable lights support to niko home control (#90141)
* added support for dimmable lights and auto host discover

* split up merge request

* fixed feedback brightness support

* fixed feedback

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* resolved feedback

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-30 08:59:29 +02:00
Thijs W
053ed3cfdc Add reauth to frontier_silicon config flow (#90443)
* Add reauth to frontier_silicon config flow

* Update patch target

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Add reauth_successful to strings.json

* Don't manually set "title_placeholders"

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-30 08:49:46 +02:00
Thijs W
40cb0eeb68 Add missing strings in frontier_silicon (#90446)
Improve confirm message for ssdp flow
2023-03-30 08:05:24 +02:00
luar123
f0710bae06 Add config-flow to Snapcast (#80288)
* initial stab at snapcast config flow

* fix linting errors

* Fix linter errors

* Add import flow, support unloading

* Add test for import flow

* Add dataclass and remove unique ID in config-flow

* remove translations

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Refactor config flow and terminate connection

* Rename test_config_flow.py

* Fix tests

* Minor fixes

* Make mock_create_server a fixture

* Combine tests

* Abort if entry already exists

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Move HomeAssistantSnapcast to own file. Clean-up last commit

* Split import flow from user flow. Fix tests.

* Use explicit asserts. Add default values to dataclass

* Change entry title to Snapcast

---------

Co-authored-by: Barrett Lowe <barrett.lowe@gmail.com>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-30 07:42:09 +02:00
Raman Gupta
fc78290e2f Remove callback decorators where unneeded (#90478)
* Remove callback decorators where unneeded

* revert extra replace
2023-03-30 00:04:39 +02:00
RenierM26
93d1961aae Use auth token in Ezviz (#54663)
* Initial commit

* Revert "Initial commit"

This reverts commit 452027f1a3c1be186cedd4115cea6928917c9467.

* Change ezviz to token auth

* Bump API version.

* Add fix for token expired. Fix options update and unload.

* Fix tests (PLATFORM to PLATFORM_BY_TYPE)

* Uses and stores token only, added reauth step when token expires.

* Add tests MFA code exceptions.

* Fix tests.

* Remove redundant try/except blocks.

* Rebase fixes.

* Fix errors in reauth config flow

* Implement recommendations

* Fix typing error in config_flow

* Fix tests after rebase, readd camera check on init

* Change to platform setup

* Cleanup init.

* Test for MFA required under user form

* Remove useless if block.

* Fix formating after rebase

* Fix formating.

* No longer stored in the repository

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2023-03-29 17:43:54 -04:00
J. Nick Koston
4c21caa917 Fix filesize doing blocking I/O in the event loop (#90479)
Fix filesize doing I/O in the event loop
2023-03-29 17:26:28 -04:00
starkillerOG
1023628821 Bump reolink-aio to 0.5.8 (#90467) 2023-03-29 17:26:05 -04:00
Guido Schmitz
706e6597d8 Add entity name translations for devolo Home Network (#90471) 2023-03-29 17:25:33 -04:00
J. Nick Koston
3bebd4318e Bump yalexs-ble to 2.1.14 (#90474)
changelog: https://github.com/bdraco/yalexs-ble/compare/v2.1.13...v2.1.14

reduces ble traffic (fixes a bug were we were checking when we did not need to be)
2023-03-29 17:24:47 -04:00
puddly
d0a492644d Correctly load ZHA settings from API when integration is not running (#90476)
Correctly load settings from the zigpy database when ZHA is not running
2023-03-29 17:24:26 -04:00
dougiteixeira
43a7247dde Move ProxmoxEntity to entity.py (#90480)
* Move ProxmoxEntity to entity.py

* Update homeassistant/components/proxmoxve/entity.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/proxmoxve/entity.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/proxmoxve/entity.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/proxmoxve/entity.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/proxmoxve/binary_sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-29 23:04:37 +02:00
Franck Nijhof
7010447b04 Bump version to 2023.5.0dev0 (#90477) 2023-03-29 16:46:32 -04:00
Chris Xiao
7c778847e7 Add config flow to qBittorrent (#82560)
* qbittorrent: implement config_flow

Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>

* qbittorrent: add English translations

Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>

* qbittorrent: create sensors with config_flow

Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>

* qbittorrent: set unique_id and icon

Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>

* qbittorrent: add tests for config_flow

Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>

* qbittorrent: detect duplicate config entries

Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>

* qbittorrent: import YAML config

Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>

* qbittorrent: update coveragerc

Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>

* qbittorrent: delete translations file

* create `deprecated_yaml` issue in `setup_platform`

* move qbittorrent test fixtures to conftest.py

* improve code quality & remove wrong unique_id

* keep PLATFORM_SCHEMA until YAML support is removed

* remove CONF_NAME in config entry, fix setup_entry

* improve test suite

* clean up QBittorrentSensor class

* improve user flow tests

* explicit result assertion & minor tweaks in tests

Co-authored-by: epenet <epenet@users.noreply.github.com>

* implement entry unloading

Co-authored-by: epenet <epenet@users.noreply.github.com>

* add type hints

* tweak config_flow data handling

---------

Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>
Co-authored-by: epenet <epenet@users.noreply.github.com>
2023-03-29 22:13:41 +02:00
Franck Nijhof
fc67a147ce Bumped version to 2023.4.0b0 2023-03-29 22:01:31 +02:00
Erik Montnemery
5bc9545b81 Rename custom_jinja to custom_templates (#90473)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-03-29 21:58:25 +02:00
Michael
cf0550f5c2 Add re-auth flow to nextcloud (#90472) 2023-03-29 21:46:08 +02:00
Kevin Stillhammer
28d045cf75 Allow resetting filters for waze_travel_time (#88253)
* Allow resetting filters by using vol.Maybe

* Fix return types

* Use suggested values

* Apply feedback

* Apply nitpick
2023-03-29 21:05:20 +02:00
Bram Kragten
a478e278fd Update frontend to 20230329.0 (#90461) 2023-03-29 21:04:04 +02:00
Raman Gupta
4877cf8d5d Bump zwave-js-server-python to 0.47.1 (#90464) 2023-03-29 14:30:30 -04:00
Michael
b881995efc Add verify ssl option to nextcloud (#90462)
add verify sssl option to config flow
2023-03-29 19:36:42 +02:00
Marcel van der Veldt
a33c70e595 Bump python-matter-server to 3.2.0 (#90457) 2023-03-29 18:52:21 +02:00
Luke
7ca5beddfc Fix Oralb Logger (#90460) 2023-03-29 06:36:01 -10:00
Paulus Schoutsen
81c39e42f4 Bump home-assistant-intents to 2023.3.29 (#90459) 2023-03-29 11:25:08 -05:00
epenet
f7925763a4 Make abort_entries_match available in options flow (#90406)
* Make abort_entries_match available in options flow

* Add tests

* Exclude ignore entries and add test

* Move to OptionsFlow

* Adjust tests

* Use mock_config_flow

* Use AbortFlow

* Remove duplicate code
2023-03-29 17:20:51 +02:00
mletenay
a1c94919de Fix goodwe export limit unit on single phase DT inverters (#90427)
* Fix export limit unit on single phase DT inverters

* Update homeassistant/components/goodwe/number.py

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2023-03-29 16:01:14 +02:00
starkillerOG
d427c35c87 Reolink improve config flow login (#90036) 2023-03-29 14:41:38 +02:00
Renat Sibgatulin
8dbcbd156a Add new sensors to airq (#90413)
Support for the sensors introduced in air-Q firmware v1.82.0
2023-03-29 11:33:27 +02:00
MatthewFlamm
c06bc28434 Limit observations requested for NWS (#90137)
* fetch data only for 70 minutes

* Use timezone aware now

* Type hint

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-29 10:34:29 +02:00
J. Nick Koston
b58c90602f Bump yalexs-ble to 2.1.13 (#90442) 2023-03-29 09:39:44 +02:00
Klaas Schoute
0327f312f2 Fix data issue for easyEnergy during midnight (#90434) 2023-03-29 08:37:20 +02:00
Klaas Schoute
12edaa052c Fix data issue for energyzero during midnight (#90433) 2023-03-29 08:29:44 +02:00
J. Nick Koston
8096be768d Isolate the sql integration with a separate query cache (#90438)
* Isolate the sql integration with a seperate query cache

If there were a lot of sql integrations they could affect
the performance of the recorder/logbook/history since they
were sharing the same LRU and since the sql sensor updates
frequently it would evict the recorder queries from the
LRU.

* generate in stmt

* avoid double gen

* Revert "avoid double gen"

This reverts commit 6a5aa65268.
2023-03-28 23:54:03 -04:00
J. Nick Koston
5dc96a6952 Fix unbound variable in sql when session setup fails (#90439)
Traceback (most recent call last):
  File "/Users/bdraco/home-assistant/homeassistant/helpers/entity_platform.py", line 304, in _async_setup_platform
    await asyncio.shield(task)
  File "/Users/bdraco/home-assistant/homeassistant/components/sql/sensor.py", line 75, in async_setup_platform
    await async_setup_sensor(
  File "/Users/bdraco/home-assistant/homeassistant/components/sql/sensor.py", line 150, in async_setup_sensor
    sessmaker := await hass.async_add_executor_job(
  File "/opt/homebrew/Cellar/python@3.10/3.10.9/Frameworks/Python.framework/Versions/3.10/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/Users/bdraco/home-assistant/homeassistant/components/sql/sensor.py", line 205, in _validate_and_get_session_maker_for_db_url
    if sess:
UnboundLocalError: local variable 'sess' referenced before assignment
2023-03-28 23:52:44 -04:00
Paulus Schoutsen
885be98f8f OpenAI to use GPT3.5 (#90423)
* OpenAI to use GPT3.5

* Add snapshot
2023-03-29 05:37:43 +02:00
J. Nick Koston
403dffc12d Reduce cache key size for queries that only need single columns (#90430)
* Reduce cache key size for queries that only need single columns

These queries only cared about a single row but would select
the whole set of columns from the orm object

* wrap it
2023-03-28 23:28:24 -04:00
J. Nick Koston
ce28bfe5b2 Remove unused types argument in statistics query generation (#90431)
* Remove unused types argument in statistics query generation

* update test
2023-03-28 23:01:11 -04:00
Nathan Spencer
2c7c8ccbfe Fix bluetooth polling recovered log missing argument (#90436) 2023-03-28 16:36:26 -10:00
Thijs W
e3cad8baac Migrate ssdp to config_flow for frontier_silicon (#89496)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-28 16:06:21 -10:00
TheJulianJES
47a2598b66 Add Aqara smoke sensor entities to ZHA (#90159)
* Add Aqara smoke sensor entities (WIP)

* Update smoke sensor entities (WIP)

* Drop two init attributes

* Move self-test button

* Remove self-test switch, add icons

* Add smoke sensor dbm entity

* Also add SMOKE device class to linkage alarm

Note: Enable "Linkage alarm" for this
2023-03-28 21:30:56 -04:00
TheJulianJES
12f49006cf Add Aqara E1 thermostat entities to ZHA (#90158)
* Add Aqara E1 thermostat entities (WIP)

* Remove calibrate button for now

* Add diagnostic entity category to calibrated + external sensor

* Add multiplier for ZHA config number/away preset temp

* Set default multiplier correctly

* Add and use `CONFIG_DIAGNOSTIC_MATCH` for diagnostic entities
2023-03-28 21:12:21 -04:00
David F. Mulcahey
8660035027 Bump ZHA quirks to 0.0.95 (#90435) 2023-03-28 20:59:26 -04:00
J. Nick Koston
4f05246654 Bump onvif-zeep-async to 1.2.3 (#90382) 2023-03-28 13:54:33 -10:00
MattWestb
ee2101ef38 Add binding of IKEA Matter Switch cluster in ZHA (#89623)
* Adding binding of IKEA Matter Switch cluster

IKEA Symfonisk Gen 2 is using Matter ZCL Switch command but on manufacture cluster then its not supported in ZVL R8 that need being bond for sending the commands to the coordinator.

* Update manufacturerspecific.py

* Update manufacturerspecific.py

Delete not needed function `@registries.BINDABLE_CLUSTERS.register(0xFC80)`
2023-03-28 19:33:06 -04:00
J. Nick Koston
9dc936f8b9 Add sqlalchemy LRUs to the profiler lru service (#90428) 2023-03-28 12:02:35 -10:00
mletenay
9ae0236208 Add goodwe sensors for apparent/reactive pwr (#87940) 2023-03-28 23:31:14 +02:00
J. Nick Koston
f60e9c71a2 Make bootstrap cancelation safe (#90420) 2023-03-28 11:22:41 -10:00
Erik Montnemery
e22618a555 Write protect entity options (#90185) 2023-03-28 22:56:51 +02:00
J. Nick Koston
0550b17d54 Rework recorder filters to avoid caching mistakes (#90419) 2023-03-28 22:51:46 +02:00
Jan Bouwhuis
93e1cd8dd8 Add header with parsed date to imap event data (#90422) 2023-03-28 22:50:25 +02:00
mkmer
0ceee2b6c3 Catch somecomfort error in Honeywell (#90425) 2023-03-28 22:48:27 +02:00
starkillerOG
e9925f6062 Check webhook url is reachable in Reolink (#89585)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-28 22:46:59 +02:00
Jan Bouwhuis
24d0d15f38 Implement imap_content event for imap integration (#90242) 2023-03-28 21:02:43 +02:00
J. Nick Koston
d21433b6af Ensure filters are generated inside the lambda locks (#90418) 2023-03-28 20:50:10 +02:00
Aaron Godfrey
9ccd43e5f1 Add DataUpdateCoordinator to the Todoist integration (#89836)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-28 18:57:24 +02:00
TheJulianJES
89a3c304c2 Refactor ZHA binary sensors to read from zigpy cache (#89481)
* Construct binary sensor state from zigpy cache (WIP)

* Workaround zha-quirks issue where "MotionWithReset" quirks don't update attribute cache (WIP)

zha-quirks currently has an issue where the ZONE_STATE attribute is updated (when the zone_STATUS changes).
https://github.com/zigpy/zha-device-handlers/pull/2231 is a proper fix for this.

For now, we just update the attribute cache when we get the "zone status update notification" command.

This wasn't noticed before, as the "attribute report signal" was sent from the `cluster_command()` method and the used the provided attribute (in the signal) to update the `_state` value in the binary sensor class.
As we just tell HA to write state again when we get an attribute report now, the ZONE_STATUS attribute is read now (and needs to be correct).

* Use parse() method of main class for IasZone entity (with stripped bits)

* Change wording in comment, remove explicitly sending attr signal

(This comment should be removed/changed later anyway)

* Remove note

* Get zone_status attribute id with zigpy

* Remove `security.` prefix for `IasZone` import

`AceCluster` was already directly imported and `IasZone` is too now for getting the attribute id

* Store full zone status attribute in cache

* Check that non-alarm bits are ignored in IasZone sensor test

* Re-enable occupancy binary sensor test

This test seems to work fine and I don't see any reason why it was commented out for a while

* Fix cached read mix-up for `zone_status`/`zone_state`

This allows cached reads for `zone_state` (enrolled or not), but forces a new read for `zone_status` (alarm or not).
2023-03-28 12:39:10 -04:00
Dmitry Vlasov
4b3c1f2800 Update zwave-me-ws version to 0.3.6 (#90233) 2023-03-28 17:24:19 +02:00
DerEnderKeks
9fecdddf01 Don't use force_update for Tasmota sensors (#85943)
* fix: don't use force_update for Tasmota sensors

* Update binary_sensor.py

* Update test_binary_sensor.py

* Update test_sensor.py

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2023-03-28 17:14:52 +02:00
Michał Huryn
0a51914740 Blebox cover tilt (#85515)
* feature: added tilt for shutterBox

* test: include tilt in tests
2023-03-28 17:11:48 +02:00
Joakim Sørensen
d907bd2ca3 Add connected relayer region to system health (#90410) 2023-03-28 17:09:59 +02:00
Wesley Vos
478a1d5e9a Add periodically resetting meter option to utility meter (#88446)
* Use last valid state if meter is not periodically resetting

* Fix unload of entry, used during options flow submit

* Adjustments based on code review

* Move DecimalException handling to validation method

* Add test for invalid new state in calculate_adjustment method
2023-03-28 17:09:20 +02:00
ehendrix23
e45eab600f Add has_value function/test to Jinja2 template (#79550) 2023-03-28 17:04:29 +02:00
Chris Xiao
048d30904e Simplify qbittorrent sensor class init (#90411)
catch LoginException directly in QBittorrentSensor init

Since the `exception` arg in QBittorrentSensor `__init__` is always
LoginException, we catch LoginException directly in `__init__` instead
of passing LoginException as an argument.
2023-03-28 16:52:16 +02:00
Dave T
f081fa8feb Add basic tests for temper USB temperature sensor integration (#80220)
* Add basic tests

* Updated requriements_test_all.txt

* Update temperusb version

* Add type hints

Co-authored-by: Christian Knittl-Frank <lcnittl@gmail.com>

* Add type hints

Co-authored-by: Christian Knittl-Frank <lcnittl@gmail.com>

* Correct typo in type hint

* Fix isort

* Fix requirements_test_all.txt

---------

Co-authored-by: Dave T <davet2001@users.noreply.github.com>
Co-authored-by: Christian Knittl-Frank <lcnittl@gmail.com>
2023-03-28 16:50:59 +02:00
Robert Hillis
866518c5a0 Add tests to Lidarr (#79610)
* Add tests to Lidarr

* fix js files

* take out the trash

* fix 3.9

* uno mas

* fix fixture

* ruff

* Update const.py

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2023-03-28 16:49:32 +02:00
Guido Schmitz
a26d95ec02 Add switch tests for devolo_home_control (#80154) 2023-03-28 16:45:06 +02:00
Alexander Momchilov
abe60375b3 Disable esphome stopping a cover if the cover doesn't support stopping (#80104)
* Make "CoverEntityFeature.STOP" conditional

* Check APIVersion before checking false by default flag

* sort

---------

Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
2023-03-28 16:43:47 +02:00
b-uwe
3662c651c9 Add brand for HomeSeer (#90066) 2023-03-28 16:37:57 +02:00
epenet
bdf29b594f Replace comments with docstring in ColorMode enum (#90408) 2023-03-28 16:32:39 +02:00
epenet
02e2e4d039 Add rest encoding test (#90404)
* Add rest encoding test

* docstring
2023-03-28 16:29:24 +02:00
Erik Montnemery
b4775ed2eb Don't rely on the demo integration in voice_assistant tests (#90405) 2023-03-28 15:22:48 +02:00
Petro31
2123600039 Add minutely updates to relative_time and today_at template functions (#86815)
* add minutely update

* fix mypy
2023-03-28 15:10:28 +02:00
Nathan Spencer
cdefc48fcd Add panel brightness control for Litter-Robot 4 (#86269)
* Add panel brightness control for Litter-Robot 4

* Use translation_key

* Fix test
2023-03-28 15:07:09 +02:00
Renat Sibgatulin
091932c3ac Improve airq test coverage (#90192)
* Add a missing test for aborting with "already_configured"

Test that config_flow aborts with "already_configured" when the
integration has already been configured

* Don't copy test data

Since #90232 is merged, it is no longer needed

* Split the initialisation into two steps, as it should be
2023-03-28 14:59:03 +02:00
Erik J. Olson
d228df6d81 Fix Notify Group payload data mis-merge (#90253)
Co-authored-by: Erik Montnemery <erik@montnemery.com>
2023-03-28 14:56:10 +02:00
Robert Hillis
8e7013b079 Add HTML support for Google Mail messages (#87201) 2023-03-28 14:34:57 +02:00
avee87
cc404cfe77 Refactor Tado to use entity descriptions and new naming style (#75750)
* Refactor Tado to use entity descriptions and new naming style

* minor fixes

* typing
2023-03-28 08:24:19 -04:00
Maikel Punie
0eb409cff1 Add support for select entities in velbus (#87568)
* Add support for select entities in velbus

* Implement comments

* EntityCategory is now in homeassistant.const

* more comments
2023-03-28 08:01:31 -04:00
Ryan Fleming
7b18df321b Have octoprint camera respect verify_ssl configuration (#90384) 2023-03-28 14:00:35 +02:00
Martin Hjelmare
29645d5820 Remove mysensors ir switch (#90403) 2023-03-28 13:39:32 +02:00
MarkGodwin
6e23e00b5a TP-Link Omada update entities code review feedback (#89668) 2023-03-28 13:25:10 +02:00
Geoff
08444eeb76 Update transmission up/down speed values (#88528)
Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-28 13:20:20 +02:00
PatrickGlesner
f72bf73b03 Fix NMBS IndexError (#90365) 2023-03-28 13:19:52 +02:00
J. Nick Koston
de2ca31a71 Remove lru_cache on websocket _state_diff (#90392) 2023-03-28 13:08:43 +02:00
Martin Hjelmare
e6c94d7854 Remove mysensors notify (#90402) 2023-03-28 13:05:09 +02:00
Jan Iven
b6a0ac6f0a Fix envoy last_seven_days_energy* state class (#84528)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-28 13:04:08 +02:00
J. Nick Koston
b207790177 Fix benign typo in discovery flow helper (#90396) 2023-03-28 13:01:41 +02:00
Willem-Jan van Rootselaar
4575352101 Bump python-bsblan to 0.5.11 (#90377) 2023-03-28 12:50:57 +02:00
Michael
e4bb339a1e Add device info to Nextcloud integration (#90328)
* add device_info

* use entry_id as identifier + device name

* use shorthand attributes

* remove model from device info

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

---------

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-28 12:43:00 +02:00
Olivier Ouellet
1c465b5ad0 Add encoding configuration setting to REST and Scape (#90254)
* Create new config parameter for default character encoding if no character encoding is declared

* Changes suggested by gjohansson-ST

* Added config flow for scape

* Removed "character"

* Change to create_async_httpx_client

* Remove CONF_ENCODING from Scrape SENSOR_SCHEMA

* Debug scrape test
2023-03-28 12:42:31 +02:00
Erik Montnemery
3c3860c923 Make OTBR use same channel as ZHA (#88546) 2023-03-28 12:34:25 +02:00
Allen Porter
ae41547b73 Update calendar to always request start/end dates in local time rather than UTC (#90386) 2023-03-28 12:25:44 +02:00
J. Nick Koston
be5714e3fd Use slots for recorder tasks to reduce memory (#90387) 2023-03-28 12:24:12 +02:00
BNolet
6fbdcac323 Fix setting color + brightness of Tuya lights (#88470)
* Check if changing TO a color mode

Changing brightness alone does not change work mode, but changing brightness with a color value will keep the light in white mode. 

By verifying the new state has color or not, rather than the existing state being in color work mode, the light will change to color correctly.

Tuya interprets HSV as including the brightness in the (v) value (which is generally what that's used for when setting HSV values). The brightness value given by Home Assistant is still used in this case.

* Fix brightness-only turning colour mode to white

This will take into account the case where brightness is the only parameter for both the case of colour mode and white mode.

Tests passed after this change:

* Brightness only (colour mode) 
* Brightness only (white mode) 
* Colour only (colour mode) 
* Colour only (white mode) 
* Colour temp only (colour mode) 
* Colour temp only (white mode) 
* Colour + brightness (colour mode) 
* Colour + brightness (white mode) 
* Colour temp + brightness (colour mode) 
* Colour temp + brightness (white mode) 

* Fix code formatting
2023-03-28 12:20:54 +02:00
epenet
96dae587a9 Fix ridwell tests (#90401) 2023-03-28 11:54:16 +02:00
Chris Xiao
e617bfb1bb Display unit of elevation in met config flow (#88283)
* display unit of elevation in met config flow

Co-authored-by: lijake8 <lijake8@users.noreply.github.com>
Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>

* use NumberSelector for met config flow

* met remove unused is_metric param

---------

Signed-off-by: Chris Xiao <30990835+chrisx8@users.noreply.github.com>
Co-authored-by: lijake8 <lijake8@users.noreply.github.com>
2023-03-28 11:51:35 +02:00
Pascal Reeb
23a1a8075c Add callback support to nuki (#88346)
* feat(nuki): add callback support

* fix(nuki): add webhook_enabled to tests

* remove callback choice, add repair if it's https

* black

* fix(nuki): implemented feedback from pvizeli and frenck

* remove unneded test change

* remove issue_registry and http check

* remove unneded response

* add await to executor_job
2023-03-28 11:28:04 +02:00
J. Nick Koston
2fd872b253 Speed up profiler lru test (#90395) 2023-03-28 11:02:08 +02:00
Jens Østergaard Nielsen
e0424c8322 Use shorthand attributes in IHC (#90350)
* typings to make linter happy

* Moving device_class and native_value to init

* remove is_on and use attr_is_on

* Use try_parse_enum for sensor type

* Remove not needed sensor_type

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/ihc/sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-28 10:23:00 +02:00
dougiteixeira
190393c6bb Improve Proxmox VE type hints (#90359)
* Improves some type hints in Proxmox VE

* update

* update]

* fix isort

* Fix vm_id type

* Fix vm_id type

* Update homeassistant/components/proxmoxve/__init__.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/proxmoxve/__init__.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Change initialization of _proxmox

* Move definition of _proxmox to class level

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-28 10:17:33 +02:00
Raman Gupta
c51ed4b328 Redact secret zwave values in diagnostics (#90389)
* redact secret zwave values from diagnostics

* shhrink

* rename
2023-03-28 09:59:01 +02:00
Jan Bouwhuis
14ffda9758 Remove dependency on async_setup from mqtt integration (#87987)
* Remove async_setup from mqtt integration

* Final update common tests

* Related tests init

* Related tests diagnostics

* Related tests config_flow

* Cleanup and correct test

* Keep websockets_api commands in async_setup
2023-03-28 09:37:07 +02:00
Erik Montnemery
5e03272821 Bump pychromecast to 13.0.6 (#90390) 2023-03-28 09:36:34 +02:00
G Johansson
706e8d5612 Add product calculation to Group sensor (#87373)
* Group product

* config flow
2023-03-28 09:35:09 +02:00
Aaron Godfrey
8b7594ae08 Look up todoist collaborators only when adding new task (#87957)
* Look up collaborators only when adding new task.

Also fixed a few api call arguments that were incorrect. The `labels`
key should have been a list of strings and the `assignee` key should
have been `assignee_id`.

* Add missing type in test.

* Remove print
2023-03-28 09:33:32 +02:00
Aaron Bach
ff135ecdc6 Add a calendar entity to Ridwell (#88108)
* Subclass a `DataUpdateCoordinator` for Ridwell

* Add a calendar entity to Ridwell

* Simpler unique ID

* Fix tests

* Docstring
2023-03-28 09:31:36 +02:00
Joakim Plate
0666a4750c Add re-auth support to philips_js (#88774)
* Add re-auth support to philips_js

* Adjustments from review

* Don't allow duplicate entries for now
2023-03-28 09:30:42 +02:00
stickpin
dc05272120 Display only supported Home Connect appliance programs (#88801)
Show only supported device programs
2023-03-28 09:14:19 +02:00
Erik Montnemery
586471b5a9 Improve threshold binary sensor (#88978)
Improve threshold sensor
2023-03-28 09:11:13 +02:00
gjong
bfb5daa31c Add phase information to YouLess (#89255) 2023-03-28 08:49:31 +02:00
Mark Adkins
38f3b9f165 Add SharkIQ EU region support (#89349)
* SharkIQ Dep & Codeowner Update

* Update code owners

* Add EU Region Support

* Update Config Flow Tests

* Standardize Region Comparison Strings

* Add Translation Support to Region Selector

* Fix Validation Tests
2023-03-28 08:48:32 +02:00
Penny Wood
db6f0827aa Allow reloading iZone config entry (#89572)
* Allow reloading of iZone config entries
---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-28 08:47:45 +02:00
Cosmin Luță
8807878529 Add Mikrotik WifiWave2 (#89711)
* Add support for wifiwave2

* Add test for wifiwave2
2023-03-28 08:46:16 +02:00
mkmer
b399e5c8b7 Handle uncaught exceptions during update in Aladdin_connect (#89889)
* Handle uncaught errors during update

* Remove unnecssary patch

* Update tests/components/aladdin_connect/test_cover.py

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* Update tests/components/aladdin_connect/test_cover.py

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* Remove unasserted statement

* Blocking is True - one more

---------

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-28 08:45:10 +02:00
Michael
c0387a655c Turn AVM FRITZ!Box Tools binary sensors into coordinator entities (#89955)
make binary sensors coordinator entities
2023-03-28 08:39:34 +02:00
Maciej Bieniek
33fef5592f Refactor GIOS sensor platform (#89389) 2023-03-28 08:36:42 +02:00
J. Nick Koston
dc37d92197 Add lru stats to the profiler integration (#90388) 2023-03-28 08:34:56 +02:00
Matthias Alphart
3dd3cb195f Set default value for some Fronius entities (#89475) 2023-03-28 08:23:53 +02:00
Renat Sibgatulin
e27d3c9523 Improve airq handling of DeviceInfo (#90232)
* Reduce data sharing between ConfigFlow and DataUpdateCoordinator

Instead of fetching device information from the device once in
`ConfigFlow` and then piping it through in `ConfigEntry.data`,
only use as much as needed in `ConfigFlow.async_step_user`, then fetch
again in `AirQCoordinator._async_update_data` if a key is missing.

Additionally, factor `AirQCoordinator` out into a sumbodule.

Add a simple test for `AirQCoordinator.device_info` update.

Positive side effect: `AirQCoordinator.device_info` is
updated explicitly, instead of dumping the entire content of (a fully
compatible) `TypedDict`, retrieved from `aioairq`.

* Remove tests ill-suited to this PR

`test_config_flow.test_duplicate_error` slipped through by mistake,
while `test_coordinator.test_fetch_device_info_on_first_update` may need
a more thoroughly suite of accompanying tests

* Ignore airq/coordinator.py

...newly separated from airq/__init__.py, that's already in this list

* Reorder files alphabetically
2023-03-28 08:18:47 +02:00
dougiteixeira
5b4663d2ca Bump proxmoxer to 2.0.1 in Proxmox VE (#90378) 2023-03-28 01:27:54 +02:00
J. Nick Koston
59113a3e4c Bump flux_led to 0.28.36 (#90380) 2023-03-28 00:50:11 +02:00
Michael
a361fba8f5 Bump nextcloudmonitor to 1.4.0 (#90372) 2023-03-28 00:48:14 +02:00
J. Nick Koston
1cd2fe9d28 Bump aiodiscover to 1.4.15 (#90383) 2023-03-28 00:44:34 +02:00
J. Nick Koston
058a2c9d83 Bump yalexs-ble to 2.1.12 (#90381) 2023-03-28 00:41:51 +02:00
G Johansson
cb6d384dba Workday cleanup (#90267)
* clean binary sensor

* fix const

* clean sensor

* Fix tests

* Clean up

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-03-27 23:11:49 +02:00
Martin Hjelmare
182af87f97 Refactor matter device entity value conversion (#90368) 2023-03-27 22:21:56 +02:00
Franck Nijhof
fb4b35709d Add state translations for helpers (#90356)
* Add state translations for helpers

* Managed via the UI
2023-03-27 16:19:25 -04:00
Jonas Bergler
9f04c23414 Support toggling debug logging for custom components (#90340)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-27 09:40:58 -10:00
Denis Shulyaka
71b5ccee23 Fix generic_hygrostat error at startup (#88764) 2023-03-27 21:22:36 +02:00
G Johansson
96698813ef Cleanup command_line (#90268)
* Cleanup command_line

* Fix ipv6 resolver

* Fix fix

* Fix tests

* Align states
2023-03-27 21:19:09 +02:00
Franck Nijhof
2ceb24e5d0 Fail CI if codecov upload fails (#90363) 2023-03-27 20:49:49 +02:00
Erik Montnemery
506a916a13 Add reauth flow to dormakaba dkey (#90225) 2023-03-27 08:37:31 -10:00
epenet
1937d803c5 Add RestoreEntity pylint checks to all platforms (#90020) 2023-03-27 20:08:20 +02:00
Martin Hjelmare
18933df95c Clean dead code from matter (#90369) 2023-03-27 20:06:59 +02:00
Erik Montnemery
f84651b14e Improve tts test coverage (#90370) 2023-03-27 20:00:54 +02:00
Franck Nijhof
a405112142 Add state translations for Script entities (#90354) 2023-03-27 13:59:57 -04:00
Trevor Bernard
d59e2b1349 Add "stream" to default_config (#90153)
* add stream to manifest

* Update __init__.py

remove av check from init

* Update homeassistant/components/default_config/__init__.py

* Update requirements

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-03-27 13:57:56 -04:00
Franck Nijhof
b033232b06 Filter out ASCII tab or newline from input URLs (#90348) 2023-03-27 13:49:40 -04:00
javicalle
f4fda55405 Fix quirk_class_validator in ZHA unit tests (#90140)
* Fix `quirk_class_validator`

Fix the `quirk_class_validator` for quirks with more than 1 module level

* fix black

* Shorten `quirk_cls` in `clss`

Co-authored-by: TheJulianJES <TheJulianJES@users.noreply.github.com>

* Update comment

---------

Co-authored-by: TheJulianJES <TheJulianJES@users.noreply.github.com>
2023-03-27 11:57:40 -04:00
Franck Nijhof
89f89cab2c Use entity name translations in Verisure (#90362) 2023-03-27 16:55:10 +02:00
Jan Bouwhuis
fd3280260d Remove unreachable continue statement in imap push coordinator (#90361) 2023-03-27 16:39:51 +02:00
dougiteixeira
2ce3c014ff Move Proxmox VE constants (#90357)
* Move constants to const.py

* Update homeassistant/components/proxmoxve/const.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/proxmoxve/const.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/proxmoxve/__init__.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-27 15:27:55 +02:00
Avi Miller
a32c78238e Bump lifx dependencies (#90345) 2023-03-27 14:06:30 +02:00
Erik Montnemery
a91aef9d52 Rewrite tts tests (#90355) 2023-03-27 14:01:17 +02:00
epenet
c193402ba7 Remove incorrect ignore in pylint plugin (#90024)
* Remove incorrect ignore_missing_annotations

* Allow tuple[int, int] in hs_color

* Adjust notify targets

* Always check for return type inheritance

* Adjust tests

* Revert "Always check for return type inheritance"

This reverts commit 3528742adf98edc6481f2c954c032ace881e1d6e.

* Revert "Allow tuple[int, int] in hs_color"

This reverts commit d51c1731eff3d59b9e94e7a7e914933ceaf8e34f.

* Revert "Adjust notify targets"

This reverts commit 4cba77a7309dc89980e29d6d5b9107d9e55f7070.
2023-03-27 13:53:14 +02:00
epenet
53de9dcdbc Fix pylint plugin for binary websocket (#90351) 2023-03-27 13:09:42 +02:00
Raman Gupta
c11a3881af Bump zwave-js-server-python to 0.47.0 (#90212) 2023-03-27 12:25:04 +02:00
Joel Goguen
d9471fd01a Bump python-holidays to 0.21.13 (#89724)
Update Python holidays module to 0.21.13

python-holidays 0.19-0.21.13 adds support for new countries and enhances
support for many currently supported countries.
2023-03-27 12:14:16 +02:00
Jan Bouwhuis
5b3c57ff1e Add option flow for imap integration (#89914)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-27 11:47:22 +02:00
starkillerOG
0d58646823 Bump reolink-aio to 0.5.7 (#90344) 2023-03-27 11:11:38 +02:00
starkillerOG
97f8a3fdcd Reolink add auto tracking entities (#90063) 2023-03-27 11:04:03 +02:00
PatrickGlesner
56293ad876 Revert "Fix NMBS IndexError" (#90346) 2023-03-27 11:00:52 +02:00
epenet
94a52d5cca Adjust tts default_options type hints (#90053)
* Adjust tts default_options type hints

* Improve other components

* Adjust

* Revert component changes

* Adjust get_tts_audio in amazon_polly
2023-03-27 11:00:23 +02:00
epenet
8c519e1abb Use SnapshotAssertion in gree climate tests (#90339) 2023-03-27 10:01:39 +02:00
epenet
164482dc08 Use lambda in gree switch (#90316) 2023-03-27 10:00:41 +02:00
Franck Nijhof
2041a0b4f9 Merge branch 'master' into dev 2023-03-27 09:42:15 +02:00
J. Nick Koston
6a5c05e7d2 Add support for clearing the on device GATT cache to esphome (#90318) 2023-03-27 09:34:28 +02:00
Jan Bouwhuis
a773c37190 Cleanup name assignment imap sensor (#90306) 2023-03-27 08:33:46 +02:00
G Johansson
624860da0e Remove deprecated platform yaml in Scrape (#90272)
* Deprecate platform yaml

* typing

* DiscoveryInfoType
2023-03-27 08:05:30 +02:00
Paulus Schoutsen
c3717f8182 Clean up voice assistant integration (#90239)
* Clean up voice assistant

* Reinstate auto-removed imports

* Resample STT audio from 44.1Khz to 16Khz

* Energy based VAD for prototyping

---------

Co-authored-by: Michael Hansen <mike@rhasspy.org>
2023-03-26 21:41:17 -05:00
J. Nick Koston
7098debe09 Fix sql doing I/O in the event loop at startup (#90335)
* Fix sql doing I/O in the event loop

* Fix sql doing I/O in the event loop

* no test query on main db

* fix mocking because it was targeting the recorder
2023-03-26 21:02:24 -04:00
Anders Melchiorsen
75e28826e0 Upgrade netgear_lte third-party library to v0.0.15 (#90324)
* Upgrade netgear_lte third-party library to 0.0.15

* Create explicit tasks for asyncio.wait()
2023-03-26 19:22:20 -04:00
J. Nick Koston
65e46e3261 Bump aioesphomeapi to 13.6.0 (#90330) 2023-03-26 12:58:07 -10:00
J. Nick Koston
ce9099a386 Bump cryptography to 40.0.1 (#90326) 2023-03-26 12:30:17 -10:00
J. Nick Koston
a7c796a2f7 Ensure esphome connected future is awaited when connecting is canceled (#90329) 2023-03-26 12:30:00 -10:00
J. Nick Koston
a733ca96a2 Bump yalexs-ble to 2.1.9 (#90320) 2023-03-27 00:17:32 +02:00
skrynklarn
bdd095423b Add last trip time attribute to Verisure binary sensors (#89944) 2023-03-27 00:17:12 +02:00
Michael
00ce757051 Apply late review comments from #89396 in Nextcloud (#90327) 2023-03-27 00:10:57 +02:00
Raman Gupta
16028dc9bc Add milliseconds as valid duration sensor unit (#90018) 2023-03-26 23:52:01 +02:00
epenet
c06ec1f78f Improve onewire test coverage (#90184) 2023-03-26 23:46:52 +02:00
Chris Xiao
2642d37505 Set qbittorrent integration_type to service (#90236) 2023-03-26 23:40:59 +02:00
Jens Østergaard Nielsen
0393797ade Bump ihcsdk to 2.8.5 (#90266) 2023-03-26 23:32:06 +02:00
Allen Porter
fa35867765 Bump ical to 4.5.1 and set PRODID for home assistant in local calendar ics (#90291) 2023-03-26 23:00:45 +02:00
Aaron Godfrey
745df277a0 Fix Todoist end date for all day event (#89837) 2023-03-26 22:08:36 +02:00
J. Nick Koston
8c9966aa05 Ensure esphome subscribes to bluetooth connection free before accepting connect requests (#90319) 2023-03-26 22:06:14 +02:00
Franck Nijhof
916b274ec8 Update pipdeptree to 2.7.0 (#90312) 2023-03-26 09:47:47 -10:00
Igor Santos
94cc188885 [Issue template] Point to health page for version info (#80708) 2023-03-26 21:37:24 +02:00
Michael
45262c6114 Implement config flow for nextcloud (#89396)
* implement config flow

* add tests

* fix hassfest and requirements

* abort import on connection error

* add add_suggested_values_to_schema

* mock async_setup_entry

* revert code owner change

* fix try connect in config flow

* add device info

* allow multiple instances

* fix import in config flow

* remove custom scan interval from coordinator

* applay suggestions

* apply suggestions

* take over ownership from @meichthys

* cleanup import data before passing to user step

* apply suggestions to tests

* add untested files to .coveragerc
2023-03-26 21:14:17 +02:00
J. Nick Koston
542def7f82 Bump pySwitchbot to 0.37.5 (#90317) 2023-03-26 09:10:35 -10:00
Alexey Baturin
89355e0879 Add WLED IP as a sensor (#90241)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-26 20:03:03 +02:00
epenet
c075dac916 Fix pylint plugin for tuple[float, float] returns (#90047) 2023-03-26 19:54:21 +02:00
epenet
3b83340f6e Improve get_browse_image type hints in media player (#90057) 2023-03-26 19:54:01 +02:00
epenet
3058cc8d56 Adjust targets type hint in notify platform (#90062) 2023-03-26 19:52:55 +02:00
epenet
a036e31495 Use SnapshotAssertion in gree switch tests (#90222) 2023-03-26 19:51:48 +02:00
Niels Perfors
1baadc1d09 Update Verisure package to 2.6.1 (#89318)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: RobinBolder <33325401+RobinBolder@users.noreply.github.com>
Co-authored-by: Tobias Lindaaker <tobias@thobe.org>
2023-03-26 19:32:25 +02:00
epenet
6e92dac61f Adjust pylint plugin for return type inheritance (#90046) 2023-03-26 18:37:26 +02:00
rikroe
bec7bbeb92 Use SnapshotAssertion in bmw_connected_drive tests (#90128) 2023-03-26 16:57:19 +02:00
epenet
69a46d4002 Adjust pylint plugin for components fixtures (#90217)
* Adjust pylint plugin for components fixtures

* Adjust components

* Use MagicMock

* Adjust

* Use None
2023-03-26 15:21:19 +02:00
epenet
e0ec3488d3 Adjust IntFlag handling in syrupy (#90223) 2023-03-26 14:20:05 +02:00
J. Nick Koston
f8431278c8 Bump yalexs-ble to 2.1.6 (#90295) 2023-03-26 11:05:21 +02:00
Robert Svensson
a0b6da33ab Strict typing of UniFi integration (#90278)
* Fix typing of UniFi controller

* Strict typing of unifi.__init__

* Strict typing of UniFi config_flow

* Strict typing of UniFi switch

* Strict typing UniFi sensor

* Strict typing UniFi device tracker

* Strict typing of UniFi

* Fix library issues related to typing
2023-03-26 09:57:13 +02:00
G Johansson
e8f3b9c09a Remove Volvooncall integration yaml import (#90288)
Depr yaml import
2023-03-26 09:42:38 +02:00
G Johansson
b3f3f234c6 Remove pushbullet platform yaml import (#90285)
Depr pushbullet yaml
2023-03-26 09:40:07 +02:00
Felix Rotthowe
40131d811c Handle Livisi TokenExpiredException (#90258)
* reauth

* Request new Token on TokenExpiredException

* relogin using stored auth data

* fix imports

* import formatting
2023-03-26 09:35:49 +02:00
J. Nick Koston
0b8fb36a7e Fix onvif binary sensors (#90202)
* Fix httpx client creating a new ssl context with each client

While working on https://github.com/home-assistant/core/issues/83524
it was discovered that each new httpx client creates a new ssl context

f1157dbc41/httpx/_transports/default.py (L261)

If an ssl context is passed in creating a new one is avoided here

f1157dbc41/httpx/_config.py (L110)

This change makes httpx ssl no-verify behavior match aiohttp ssl no-verify
behavior

6da04694fd/aiohttp/connector.py (L892)

aiohttp solved this by wrapping the code that generates the ssl context
in an lru_cache

* compact

* Fix onvif binary sensors

fixes #83524

needs https://github.com/hunterjm/python-onvif-zeep-async/pull/9 first
to avoid recreating the memory leak

* Fix memory leak in onvif

Work around until https://github.com/hunterjm/python-onvif-zeep-async/pull/9

followup to https://github.com/home-assistant/core/pull/83006

* move check

* onvif-zeep-async 1.2.2

* fix unloading
2023-03-25 23:28:38 -04:00
J. Nick Koston
bd08d88812 Bump yalexs-ble to 2.1.5 (#90287)
Bump yalexs-ble 2.1.5

Some of the lever locks need a bit longer debounce time
since they still report stale state for up to 6s

changelog: https://github.com/bdraco/yalexs-ble/compare/v2.1.4...v2.1.5
2023-03-25 23:27:35 -04:00
J. Nick Koston
5f59bab9ec Bump bleak to 0.20.1 (#90282)
Co-authored-by: Charles Garwood <cgarwood@newdealmultimedia.com>
2023-03-25 16:29:26 -10:00
G Johansson
53726cb4a1 Remove Magicseaweed (#90277) 2023-03-25 22:02:10 -04:00
J. Nick Koston
255f12ec05 Bump bleak-retry-connector to 3.0.2 (#90279)
changelog: https://github.com/Bluetooth-Devices/bleak-retry-connector/compare/v3.0.1...v3.0.2
2023-03-25 21:48:03 -04:00
G Johansson
92beb48a41 Add sensor platform to Sun (#81045)
* Sun sensor
* remove extra attr
* Add tests
* Add back attributes
* position sensors disabled default
* entity id
* unique id
* test init to attributes
* Fix test init
* Fix test sensor
* test unique id
* uom
* remove rising
* Remove not needed uom property
* Fix reload issue
* degree
2023-03-26 07:24:43 +08:00
G Johansson
7f6406127e Remove platform yaml radiotherm (#90284) 2023-03-25 12:43:44 -10:00
G Johansson
89d00ac733 Fix default ipv6 resolver (#90269) 2023-03-25 12:31:01 -10:00
Franck Nijhof
5c839e2367 Add entity name translations to Elgato (#89629) 2023-03-25 23:06:03 +01:00
J. Nick Koston
668b2726fe Bump yalexs-ble to 2.1.4 (#90276) 2023-03-25 10:12:48 -10:00
J. Nick Koston
fd460996ba Bump onvif-zeep-async to 1.2.2 to fix memory leak (#90216) 2023-03-25 09:21:05 -10:00
rikroe
cc337c4ff6 Add Re-Auth to bmw_connected_drive (#90251)
* Add Re-Auth to bmw_connected_drive

* Always store refresh token to entry

* Fix tests

* Typo

---------

Co-authored-by: rikroe <rikroe@users.noreply.github.com>
2023-03-25 10:09:33 -07:00
J. Nick Koston
7bceedfc95 Bump sqlalchemy to 2.0.7 (#90256) 2023-03-25 07:05:35 -10:00
Franck Nijhof
7cbe705ebb Update vehicle to 1.0.0 (#90189) 2023-03-25 18:00:15 +01:00
Luca Angemi
6d8eaa0bee Add location field to calendar create_event service supported by Google Calendar and Local Calendar (#90098)
* Update __init__.py

* Update __init__.py

* Update __init__.py

* Update calendar.py

* Update calendar.py

* Update services.yaml

* Update services.yaml

* Update calendar.py

* Update calendar.py

* Update __init__.py

* Update services.yaml

* Update services.yaml

* Update test_calendar.py

* Update test_init.py

* Update test_init.py

* Update test_init.py

* Update test_init.py

* Update __init__.py

* Update const.py

* Address changes to service.yaml

* Address changes to service.yaml

* Update test_calendar.py

* Update test_calendar.py

* Update test_calendar.py

* Update conftest.py

* Update conftest.py

* Update calendar.py

* Update __init__.py
2023-03-25 09:43:49 -07:00
J. Nick Koston
02ef7d445d Allow passing an optional name to async_track_time_interval (#90244)
* Allow passing an optional name to async_track_time_interval

This is the same idea as passing a name to asyncio.create_task which
makes it easier to track down bugs

* more

* short

* still cannot find it

* add a few more

* test
2023-03-25 10:11:14 -04:00
Matthias Alphart
52a94dd2ac Check for empty lists in KNX address configuration (#90249) 2023-03-24 21:36:23 -11:00
Jeef
970036b328 Refactor Gree switch to use EntityDescription (#90143)
* Post-rebase

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* feat: Tests passing!

* Removing custom attributes as no longer needed

* removed extraneous class

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/gree/switch.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update tests/components/gree/test_switch.py

Co-authored-by: solazs <soltesz.balazs.91@gmail.com>

* Update tests/components/gree/test_switch.py

Co-authored-by: solazs <soltesz.balazs.91@gmail.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
Co-authored-by: solazs <soltesz.balazs.91@gmail.com>
2023-03-25 09:15:46 +01:00
epenet
f56bf134d2 Improve browse_media type hints in media player (#90060)
* Improve browse_media type hints in media player

* Adjust components

* Adjust base entity
2023-03-24 21:49:12 -07:00
epenet
5f3868b141 Add missing type hints to tests (#90218)
* Add type hints to tests

* Revert gree as handled in #90222
2023-03-24 19:34:01 -07:00
Robert Svensson
7f1fff12ef Bump aiounifi to v45 (#90250)
* Bump aiounifi to v45

* Replace local TypeVar with library TypeVar
2023-03-25 00:27:16 +01:00
J. Nick Koston
e17cefd61c Clear recorder startup tasks from memory after processing (#90240)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-03-24 10:24:02 -10:00
J. Nick Koston
8e07b71644 Use the json load helper in a few more incoming web requests (#90194)
* Use the json load helper in a few more incoming web requests

* drop hassio change as there is no coverage there

* Remove everything except emulated_hue since its has its own site/web
2023-03-24 15:38:08 -04:00
J. Nick Koston
72b09bfee7 Subclass aiohttp requests to use json helper (#90214)
* Subclass aiohttp requests to use json helper

* Subclass aiohttp requests to use json helper

* remove unneeded

* revert for new pr

* override loads is never used so drop it

* override loads is never used so drop it
2023-03-24 15:37:43 -04:00
Felix Rotthowe
0bb0b4bfc5 Add livisi window sensor (WDS) (#90220)
* Added support for livisi window sensor

* Add const strings

* added postpix for device_id

* Remove unnecessary import

* Fix imports

* Fix lint errors, remove redundant device class property

* Format code

* Update .coveragerc

* Finish basic window door sensor support

* currently, only one binary sensor (wds) is supported

* Remove unused imports

* Fix isort issue

* Simplify code as suggested in PR

* rename get_device_response to get_device_state

* fix ruff issue

* Be more defensive in interpreting what we get from aiolivisi

* Simplify coordinator

* remove window sensor specific code (isOpen)

* parameter order, type hinta

* Update homeassistant/components/livisi/coordinator.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/livisi/coordinator.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/livisi/coordinator.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/livisi/binary_sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/livisi/binary_sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/livisi/binary_sensor.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: Tecotix <78791840+Tecotix@users.noreply.github.com>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-24 14:52:50 +01:00
J. Nick Koston
4c45c3c63b Add a faster query for get_last_state_changes when the number of states is 1 (#90211)
* Add a faster query for get_last_state_changes when the number of states is 1

related issue #90113

* Add a faster query for get_last_state_changes when the number of states is 1

related issue #90113

* coverage

* Apply suggestions from code review
2023-03-24 09:39:55 -04:00
Chris Xiao
8149652f9f Move qbittorrent constants to const.py (#90201)
* move qbittorrent constants to const.py

* move SENSOR_TYPE_* consts back to sensors.py
2023-03-24 14:20:37 +01:00
dependabot[bot]
a66bef6fdf Bump actions/checkout from 3.4.0 to 3.5.0 (#90215)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.4.0 to 3.5.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.4.0...v3.5.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-24 13:55:17 +01:00
Felix Rotthowe
3157579992 Remove duplicate code in livisi coordinator (#90227)
* Simplify coordinator

* remove window sensor specific code (isOpen)

* parameter order, type hinta

* Update homeassistant/components/livisi/coordinator.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/livisi/coordinator.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-24 12:59:59 +01:00
Robert Svensson
ee74e21541 Rework UniFi wireless client "wired bug" logic (#89757) 2023-03-24 10:06:09 +01:00
Jan Bouwhuis
7364e6ecb3 Remove incorrect parametrize decorator (#90219) 2023-03-24 09:38:43 +01:00
Nalin Mahajan
34324c98de Rename create_api_object to be private (#90187) 2023-03-24 08:44:35 +01:00
Jan Bouwhuis
1224b1aff6 Use helper on tests MQTT fan platform (#90196)
Use helper on tests fan
2023-03-24 08:42:23 +01:00
Jan Bouwhuis
f2b4c95a04 Prepare MQTT platform tests part7 (#90130)
* Tests select

* Tests sensor

* Deduplicate test code
2023-03-24 08:42:00 +01:00
Jan Bouwhuis
0570405a3c Prepare MQTT platform tests part6 (#90129)
* Tests lock

* Tests mixins

* Tests number

* Tests scene
2023-03-24 08:41:36 +01:00
Jan Bouwhuis
a404d5f6d7 Prepare MQTT platform tests part5 (#90108)
* Tests light_json

* Tests light_template

* Tests light
2023-03-24 08:41:04 +01:00
J. Nick Koston
1f2268a878 Fix httpx client creating a new ssl context with each client (memory leak) (#90191)
* Fix httpx client creating a new ssl context with each client

While working on https://github.com/home-assistant/core/issues/83524
it was discovered that each new httpx client creates a new ssl context

f1157dbc41/httpx/_transports/default.py (L261)

If an ssl context is passed in creating a new one is avoided here

f1157dbc41/httpx/_config.py (L110)

This change makes httpx ssl no-verify behavior match aiohttp ssl no-verify
behavior

6da04694fd/aiohttp/connector.py (L892)

aiohttp solved this by wrapping the code that generates the ssl context
in an lru_cache

* compact
2023-03-24 08:40:47 +01:00
Chris Xiao
ca157f4d19 Add icons for qbittorrent speed sensors (#90203)
add icons for qbittorrent speed sensors
2023-03-24 07:23:05 +01:00
J. Nick Koston
f1ec77b8e0 Small cleanups to logbook statement generator (#90200)
We should only convert the context id to binary if
its going to be used.

Avoid some intermediate vars that are no longer needed
2023-03-23 20:56:58 -04:00
J. Nick Koston
a44d6f30c9 Fix refactoring error in states/events context id migration (#90193)
fixes #90074
2023-03-23 20:56:04 -04:00
J. Nick Koston
e7e7f603c2 Remove async_response from websocket apis where nothing was being awaited (#90204) 2023-03-23 20:53:18 -04:00
J. Nick Koston
d49fbc17df Fix recorder attribute excludes not being effective until after startup (#90198)
* Fix attribute excludes not being effective until after startup

fixes #90016

* reduce
2023-03-23 20:52:37 -04:00
J. Nick Koston
dd0f05b980 Avoid calling the http access logging when logging is disabled (#90152) 2023-03-23 09:55:02 -10:00
epenet
38a4f08e15 Fix missing mock in islamic_prayer_times (#90178)
* Fix missing mock in islamic_prayer_times

* Restore 100% coverage

* Update test_config_flow.py
2023-03-23 20:10:51 +01:00
Michael Hansen
3e3ece4e56 Add speech to text over binary websocket to pipeline (#90082)
* Allow passing binary to the WS connection

* Expand test coverage

* Test non-existing handler

* Add text to speech and stages to pipeline

* Default to "cloud" TTS when engine is None

* Refactor pipeline request to split text/audio

* Refactor with PipelineRun

* Generate pipeline from language

* Clean up

* Restore TTS code

* Add audio pipeline test

* Clean TTS cache in test

* Clean up tests and pipeline base class

* Stop pylint and pytest magics from fighting

* Include mock_get_cache_files

* Working on STT

* Preparing to test

* First successful test

* Send handler_id

* Allow signaling end of stream using empty payloads

* Store handlers in a list

* Handle binary handlers raising exceptions

* Add stt/tts dependencies to voice_assistant

* Include STT audio in pipeline test

* Working on tests

* Refactoring with stages

* Fix tests

* Add more tests

* Add method docs

* Change stt demo/cloud to AsyncIterable

* Add pipeline error events

* Move handler id to separate message before pipeline

* Add test for invalid stage order

* Change "finish" to "end"

* Use enum

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-03-23 14:44:19 -04:00
Jan Bouwhuis
185d6d74d7 Prepare MQTT platform tests part9 (#90133)
* Tests switch

* Tests text

* Tests update
2023-03-23 19:17:27 +01:00
Jan Bouwhuis
db63c8584e Prepare MQTT platform tests part8 (#90132)
* Tests state_vacuum

* Tests siren
2023-03-23 19:16:54 +01:00
Jan Bouwhuis
2c1b59be0e Prepare MQTT platform tests part4 (#90107)
* Tests humidifier

* Tests legacy_vacuum
2023-03-23 19:14:44 +01:00
Jan Bouwhuis
44add1dc11 Prepare MQTT platform tests part3 (#90106)
* Tests cover

* Tests fan
2023-03-23 19:14:08 +01:00
Jan Bouwhuis
8fd88d6703 Prepare MQTT platform tests part2 (#90105)
* Tests button

* Tests camera

* Tests climate
2023-03-23 19:13:36 +01:00
Vincent Knoop Pathuis
87475e8ff6 Cleanup some leftovers for Landis+Gyr (#90183)
Cleanup some leftovers
2023-03-23 17:34:57 +01:00
Nalin Mahajan
e290febb38 Bump pyControl4 to 1.1.0 (#90115)
* Bump pyControl4 to 1.1.0

* Remove mock token_expiration from control4
2023-03-23 17:34:38 +01:00
Vincent Knoop Pathuis
cb578c71e0 Add Landis+Gyr missing device class (#90182)
Add missing device class for heat_previous_year_gj
2023-03-23 17:21:21 +01:00
PeteRager
73ed6e039a Improve logging for unavailable sonos hosts (#90172)
* Repeated warning messages on unavailable manually specified hosts

Sonos logs warning messages every 1 minute 12 seconds for hosts that are not on-line.  This fixes the issue and the warning will be logged the first time, and subsequent logs messages will be at DEBUG level

* Update homeassistant/components/sonos/__init__.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Log info message when reconnect succeeds

* Use pop to simplify code

* Add additional test, fix key error with pop

* Use pop with default return value

* Update tests/components/sonos/test_init.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update tests/components/sonos/test_init.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update tests/components/sonos/test_init.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update tests/components/sonos/test_init.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update tests/components/sonos/test_init.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update comment, remove unneeded line of code

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-23 16:15:55 +01:00
Nalin Mahajan
504793882d Remove unecessary variable in control4 (#90176)
Remove unecessary expiration value
2023-03-23 16:09:00 +01:00
Marc Mueller
d5f949f4d8 Update pydantic to 1.10.7 (#90164) 2023-03-23 08:42:39 -04:00
G Johansson
b1370cbd42 Add constants file to workday (#90168)
Constants workday
2023-03-23 12:01:03 +01:00
G Johansson
dd4a3089ec Add constants file for Brottsplatskartan (#90165)
* bpk constants

* not used
2023-03-23 11:54:15 +01:00
G Johansson
2b4514ae25 Add codeowner Workday (#90167)
codeowner
2023-03-23 11:53:22 +01:00
Vincent Knoop Pathuis
568a731e2d Use snapshot test for Landis+Gyr (#90126)
Initial commit for snapshot test
2023-03-23 10:30:31 +01:00
epenet
92bcb04e4f Adjust scaffold docstring (#90157)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-03-23 10:13:53 +01:00
J. Nick Koston
60ae1f99e0 Update powerwall strings for newer models (#90151) 2023-03-23 10:13:18 +01:00
Erik Montnemery
50ea0c5cf2 Tweak multiprotocol tests (#90163) 2023-03-23 10:12:42 +01:00
dependabot[bot]
4c26741e40 Bump actions/stale from 7.0.0 to 8.0.0 (#90155)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-23 10:09:03 +01:00
J. Nick Koston
2cb4ec82df Bump yalexs-ble to 2.1.2 (#90156) 2023-03-23 10:08:06 +01:00
On Freund
10cf92246f Bump pyrympro to 0.0.7 (#90118) 2023-03-23 10:05:08 +01:00
rikroe
1a2fa51ac9 Bump bimmer_connected to 0.13.0 (#90127) 2023-03-23 10:01:01 +01:00
Erik Montnemery
6739542a5d Simplify some multi pan code (#90135)
* Simplify some multi pan code

* Adjust ZHA config flow
2023-03-23 09:18:35 +01:00
solazs
b151923619 Add health mode to gree integration (#89764)
Add health mode to gree integration.
2023-03-23 08:56:47 +01:00
Jan Bouwhuis
1e64a55a1a Add missing translation for invalid imap folder (#90154)
Add missing translation for invalid folder
2023-03-23 08:08:52 +01:00
J. Nick Koston
9878738321 Use rel_url for looking up frontend panels (#90149)
* Use rel_url for looking up frontend panels

request.url builds a new URL every time where-as
rel_url is always available

https://docs.aiohttp.org/en/stable/web_reference.html#aiohttp.web.BaseRequest.rel_url

* Use rel_url for looking up frontend panels

request.url builds a new URL every time where-as
rel_url is always available

https://docs.aiohttp.org/en/stable/web_reference.html#aiohttp.web.BaseRequest.rel_url
2023-03-23 00:14:54 -04:00
Paulus Schoutsen
ca5a88342b 2023.3.6 (#90150) 2023-03-22 23:58:20 -04:00
Paulus Schoutsen
117113cdfc Bumped version to 2023.3.6 2023-03-22 22:59:47 -04:00
Paulus Schoutsen
174342860b Always enforce URL param ordering for signed URLs (#90148)
Always enforce URL param ordering
2023-03-22 22:59:42 -04:00
J. Nick Koston
a7b5a0297e Bump PySwitchbot to 0.37.4 (#90146)
fixes #90090 fixes #89061

changelog: https://github.com/Danielhiversen/pySwitchbot/compare/0.37.3...0.37.4
2023-03-22 22:59:41 -04:00
Luke
406e92511b Bump to oralb-ble 0.17.6 (#90081) 2023-03-22 22:59:40 -04:00
Klaas Schoute
146347e31a Bump easyEnergy to v0.2.2 (#90080) 2023-03-22 22:59:39 -04:00
Klaas Schoute
3747fd5dcb Bump easyEnergy to v0.2.1 (#89630) 2023-03-22 22:59:38 -04:00
J. Nick Koston
53d400ca96 Bump yalexs-ble to 2.1.1 (#90015)
* Bump yalexs-ble to 2.1.1

There was another task that could be prematurely GCed

changelog: https://github.com/bdraco/yalexs-ble/compare/v2.1.0...v2.1.1

* fixes
2023-03-22 22:57:41 -04:00
J. Nick Koston
2a18261efb Bump yalexs_ble to 2.1.0 (#89772)
switches to using cryptography to reduce the number of deps

changelog: https://github.com/bdraco/yalexs-ble/compare/v2.0.4...v2.1.0
2023-03-22 22:57:40 -04:00
J. Nick Koston
1f71068740 Handle cancelation of wait_for_ble_connections_free in esphome bluetooth (#90014)
Handle cancelation in wait_for_ble_connections_free

If `wait_for_ble_connections_free` was canceled due to timeout or
the esp disconnecting from Home Assistant the future would get
canceled. When we reconnect and get the next callback we need
to handle it being done.

fixes
```
2023-03-21 02:34:36.876 ERROR (MainThread) [homeassistant] Error doing job: Fatal error: protocol.data_received() call failed.
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/asyncio/selector_events.py", line 868, in _read_ready__data_received
    self._protocol.data_received(data)
  File "/usr/local/lib/python3.10/site-packages/aioesphomeapi/_frame_helper.py", line 195, in data_received
    self._callback_packet(msg_type_int, bytes(packet_data))
  File "/usr/local/lib/python3.10/site-packages/aioesphomeapi/_frame_helper.py", line 110, in _callback_packet
    self._on_pkt(Packet(type_, data))
  File "/usr/local/lib/python3.10/site-packages/aioesphomeapi/connection.py", line 688, in _process_packet
    handler(msg)
  File "/usr/local/lib/python3.10/site-packages/aioesphomeapi/client.py", line 482, in on_msg
    on_bluetooth_connections_free_update(resp.free, resp.limit)
  File "/usr/src/homeassistant/homeassistant/components/esphome/entry_data.py", line 136, in async_update_ble_connection_limits
    fut.set_result(free)
asyncio.exceptions.InvalidStateError: invalid state
```
2023-03-22 22:54:42 -04:00
micha91
92fb978a03 Bump aiomusiccast to 0.14.8 (#89978) 2023-03-22 22:54:42 -04:00
J. Nick Koston
127f2289a1 Remove async_block_till_done in freebox (#89928)
async_block_till_done() is not meant to be called in integrations
2023-03-22 22:54:41 -04:00
Jan Bouwhuis
de6f55dcfb Fix blocking MQTT entry unload (#89922)
* Remove unneeded async_block_till_done

* use await asyncio.sleep(0) instead
2023-03-22 22:54:40 -04:00
Joakim Plate
713d3025f2 Correct missing wordswap for S series nibe (#89866)
Correct missing wordswap for nibe
2023-03-22 22:54:39 -04:00
J. Nick Koston
1e03ff68a2 Bump aioharmony to 0.2.10 (#89831)
fixes #89823
2023-03-22 22:54:38 -04:00
Jan Bouwhuis
a5aa5c0c01 Fix imap_email_content unknown status and replaying stale states (#89563) 2023-03-22 22:54:37 -04:00
Paulus Schoutsen
12352b2ce1 Always enforce URL param ordering for signed URLs (#90148)
Always enforce URL param ordering
2023-03-22 22:54:09 -04:00
J. Nick Koston
dcc52bd366 Bump PySwitchbot to 0.37.4 (#90146)
fixes #90090 fixes #89061

changelog: https://github.com/Danielhiversen/pySwitchbot/compare/0.37.3...0.37.4
2023-03-22 22:10:47 -04:00
J. Nick Koston
ca576d45ac Cache decode of JWT tokens (#90013) 2023-03-22 16:03:41 -10:00
J. Nick Koston
8a591fa16e Add auto repairs for events schema (#90136)
* Add auto repairs for events schema

* Add auto repairs for events schema

* Add auto repairs for events schema

* Add auto repairs for events schema

* Add auto repairs for events schema

* fix bug - wrong table
2023-03-22 21:17:36 -04:00
J. Nick Koston
31c988c4f0 Fix index not being dropped on postgresql databases with a schema prefix (#90144)
* Fix index not being dropped on postgresql databases with a schema prefix

Added logging in case index drops fail so we can tell
why in the future

* coverage
2023-03-22 21:03:26 -04:00
J. Nick Koston
99b58f157e Bump PyJWT to 2.6.0 (#90134)
* Bump PyJWT to 2.6.0

* fix time being frozen too late which makes the access token creation time in the future

* revert zha change

* fix repairs test

* fix ical test
2023-03-22 20:00:47 -04:00
Michael
03aeaba7ef Turn AVM FRITZ!Box Tools sensors into coordinator entities (#89953)
* make sensors coordinator entities

* apply suggestions

* move _attr_has_entity_name up
2023-03-22 22:34:23 +01:00
J. Nick Koston
4ebce9746d Add schema auto repairs for states tables (#90083) 2023-03-22 10:05:23 -10:00
Erik Montnemery
5948347b6b Fix switch_as_x entity naming (#89992)
* Fix switch_as_x entity naming

* Simplify name logic
2023-03-22 20:24:05 +01:00
Erik Montnemery
1ea3312ed4 Deduplicate multiprotocol addon helper (#90102)
* Deduplicate multiprotocol addon helper

* Clarify
2023-03-22 20:20:42 +01:00
J. Nick Koston
4c98495fe0 Bump ulid-transform to 0.5.1 (#90123)
changelog: https://github.com/bdraco/ulid-transform/compare/v0.4.2...v0.5.1
2023-03-22 15:19:43 -04:00
Erik Montnemery
3931e11fd9 Try to load integration before starting option flow (#90111)
* Try to load integration before starting option flow

* Adjust tests
2023-03-22 20:10:10 +01:00
Franck Nijhof
6db8867b81 Update wled to 0.16.0 (#90120) 2023-03-22 13:55:50 -04:00
Erik Montnemery
94e247dc69 Fix islamic_prayer_times setup (#90122) 2023-03-22 13:52:52 -04:00
Franck Nijhof
cc4ff55347 Update pvo to 1.0.0 (#90109) 2023-03-22 17:02:49 +01:00
puddly
c581116c82 ZHA network settings API (#88564)
* Rename `zha.api` to `zha.websocket_api`

* Implement a ZHA network settings API

* Use the enum name as the radio type

* Don't filter out ignored config entries

* [WIP] Start unit tests

* Add unit tests

* Rename ZHA websocket API module in `.coveragerc`

* Rename `api` to `websocket_api`

* Increase test coverage to 100%
2023-03-22 11:15:46 -04:00
Erik Montnemery
130c8ea5f5 Update OTRB config entry if REST API port has changed (#90101)
* Update OTRB config entry if REST API port has changed

* Improve test coverage
2023-03-22 14:03:39 +01:00
Erik Montnemery
0ecd043cb2 Add test helper mock_config_flow (#90103) 2023-03-22 08:59:35 -04:00
Paulus Schoutsen
0ca6723378 Allow passing binary to the WS connection (#89882)
* Allow passing binary to the WS connection

* Expand test coverage

* Test non-existing handler

* Allow signaling end of stream using empty payloads

* Store handlers in a list

* Handle binary handlers raising exceptions
2023-03-22 08:36:36 -04:00
Erik Montnemery
19d56a7102 Change error handling in async_process_play_media_url (#90052) 2023-03-22 13:32:02 +01:00
Paulus Schoutsen
9b9ed21dc4 Update hass-nabucasa to 0.62.0 (#90085) 2023-03-22 13:24:28 +01:00
Matrix
87e6dd3949 YoLink flexfob support (#90027) 2023-03-22 12:01:04 +01:00
Klaas Schoute
7efe058aa6 Bump easyEnergy to v0.2.2 (#90080) 2023-03-22 10:46:17 +01:00
Jan Bouwhuis
214286acb9 Prepare MQTT platorm tests part1 (#90051)
* Add help_custom_config

* Tests alarm_control_panel

* Tests binary_sensor

* Only use help_custom_config with iterable options
2023-03-22 10:23:08 +01:00
Michael
d25e394310 Implement data update coordinator for nextcloud (#89652)
* implement data update coordinator

* apply suggestions

* apply suggestions
2023-03-22 09:18:09 +01:00
J. Nick Koston
96225bb287 Rename recorder run_history to table_managers.recorder_runs_manager (#90070) 2023-03-21 18:38:33 -10:00
Luke
1439a3d572 Bump to oralb-ble 0.17.6 (#90081) 2023-03-21 17:09:38 -10:00
J. Nick Koston
88ad97f112 Fix generating statistics for time periods smaller than we can measure (#90069)
If the time period for the mean/time weighted average was smaller
than we can measure (less than one microsecond), generating
statistics would fail with a divide by zero error. This is likely
only happens if the database schema precision is incorrect.
2023-03-21 21:12:45 -04:00
Michael Hansen
0e7ffff869 Add TTS to pipelines (#90004)
* Add text to speech and stages to pipeline

* Default to "cloud" TTS when engine is None

* Refactor pipeline request to split text/audio

* Refactor with PipelineRun

* Generate pipeline from language

* Clean up

* Restore TTS code

* Add audio pipeline test

* Clean TTS cache in test

* Clean up tests and pipeline base class

* Stop pylint and pytest magics from fighting

* Include mock_get_cache_files
2023-03-21 21:10:31 -04:00
J. Nick Koston
ddcaa9d372 Break out statistics repairs into a auto_repairs modules (#90068)
* Break out statistics schema repairs into a repairs module

A future PR will add repairs for events, states, etc

* reorg

* reorg

* reorg

* reorg

* fixes

* fix patch targets

* name space rename
2023-03-21 21:08:06 -04:00
J. Nick Koston
086bcfb2fc Make recorder migration column types for each dialect constants (#90072)
Make column types for each dialect constants
2023-03-21 21:06:10 -04:00
Franck Nijhof
f98d685154 Refactor WLED select tests (#89219) 2023-03-21 22:32:41 +01:00
Franck Nijhof
980425508a Update twentemilieu to 1.0.0 (#90071) 2023-03-21 22:31:55 +01:00
Michael
d4cc4a343d Use has_template property from lib in Fritz!SmartHome (#89152) 2023-03-21 21:33:33 +01:00
dougiteixeira
0f5c49c7be Fix translation string for fan oscillation (#90045)
Fix string
2023-03-21 15:42:44 -04:00
starkillerOG
d20b07f3ac Bump reolink-aio to 0.5.6 (#90059) 2023-03-21 14:16:50 -04:00
Franck Nijhof
ed4e49a4c2 Add translations for Counter (#89989) 2023-03-21 18:41:27 +01:00
J. Nick Koston
616e6e6ae8 Fix missing length on context id and incorrect precision with MariaDB (dev only fix) (#90058)
Fix missing length on context id column with MariaDB

spotted by @dcoder42

The migration still worked as intented but the blob should have been
a bit smaller.

This only affects dev so there is no need for a backport
2023-03-21 13:14:27 -04:00
epenet
c507ca1e66 Improve type hints in rachio switch (#90050) 2023-03-21 15:53:51 +01:00
epenet
1895c82ffc Fix fritzbox TypedDict definition (#90043) 2023-03-21 15:52:30 +01:00
epenet
1303dd12e7 Improve type hints in zha fan (#90042) 2023-03-21 15:21:56 +01:00
Jan Bouwhuis
6f88fe93ef Only publish mqtt_statestream when MQTT is started (#89833)
* Only publish mqtt_statestream when ha is started

* also catch startup states and use event filter

* Add check for MQTT to be available first

* Make sure MQTT is available and started

* Fix test

* Improve test

* Reset mock before assertung not called
2023-03-21 10:21:45 -04:00
Erik Montnemery
41ea8fa9b4 Guess media type when cast is playing media without media type (#90048) 2023-03-21 10:01:35 -04:00
epenet
93efdc4991 Improve switch and climate type hints in integrations (#90040) 2023-03-21 13:26:41 +01:00
jan iversen
9092a76dbf Correct typing of pymodbus in modbus (#90039) 2023-03-21 13:26:03 +01:00
epenet
f01f5e1d2a Improve type hints in tuya vacuum (#90041) 2023-03-21 13:25:19 +01:00
Franck Nijhof
2a0401366b Add state translations for all day calendar attribute (#89988) 2023-03-21 07:53:05 -04:00
Franck Nijhof
6d3c3ff4fb Add state translations for Select entities (#89995) 2023-03-21 12:45:06 +01:00
Franck Nijhof
0467c8ff63 Add attribute state translations for oscillating fans (#89990) 2023-03-21 07:39:07 -04:00
epenet
485a78e0cf Improve light type hints in integrations (#90035)
* Improve light type hints in integrations

* Improve
2023-03-21 11:40:33 +01:00
epenet
33e698d67f Improve notify type hints in integrations (#90034) 2023-03-21 11:40:19 +01:00
epenet
86b4354477 Improve native_value type hints in integrations (#90033) 2023-03-21 11:40:06 +01:00
epenet
0e1c76f81f Improve sensor type hints in integrations (#90031)
* Improve sensor type hints in integrations

* Improve
2023-03-21 11:39:42 +01:00
epenet
4836404288 Improve media_player type hints in integrations (#90029)
Fix some media_player type hints
2023-03-21 11:10:12 +01:00
epenet
04872f72ea Improve humidifier type hints in integrations (#90030)
Fix humidifier type hints in integrations
2023-03-21 10:32:13 +01:00
epenet
292feb4e24 Enable inheritance checks on ExtraStoredData (#90021) 2023-03-21 09:51:05 +01:00
Allen Porter
43ce6f843c Update the calendar trigger based on PR feedback (#90017) 2023-03-21 09:21:14 +01:00
Jan Bouwhuis
d865440012 Prepare MQTT common tests part3 (#90022) 2023-03-21 09:19:20 +01:00
Franck Nijhof
23f136e9d6 Add state translations for Siren entities (#89994) 2023-03-21 09:16:32 +01:00
Jan Bouwhuis
fe49861e26 Prepare MQTT common tests part4 (#90023)
* Upd test_setting_attribute_via_mqtt_json_message

* Update test_setting_attribute_with_template

* Update test_update_with_json_attrs_not_dict

* Update test_update_with_json_attrs_bad_json
2023-03-21 09:07:46 +01:00
epenet
dd1700954b Deprecate YAML in SamsungTV (#89743)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-21 09:00:17 +01:00
Tom Harris
0c0c86bf7b Add support for new Insteon i3 devcies (#89892) 2023-03-20 21:56:44 -10:00
J. Nick Koston
a8e95684fa Fix websocket back pressure bottleneck (#89905) 2023-03-20 21:51:39 -10:00
Jan Bouwhuis
91dbda1ce7 Add mqtt common tests for availability (part2) (#89805)
* update test_availability_when_connection_lost

* Adjust test_availability_without_topic

* Update test_default_availability_payload + helper

* Update test_default_availability_list_payload

* Use helper for async_setup_component

* Update test_default_availability_list_*

* Update test_custom_availability_payload
2023-03-21 08:20:37 +01:00
J. Nick Koston
0303618705 Handle cancelation of wait_for_ble_connections_free in esphome bluetooth (#90014)
Handle cancelation in wait_for_ble_connections_free

If `wait_for_ble_connections_free` was canceled due to timeout or
the esp disconnecting from Home Assistant the future would get
canceled. When we reconnect and get the next callback we need
to handle it being done.

fixes
```
2023-03-21 02:34:36.876 ERROR (MainThread) [homeassistant] Error doing job: Fatal error: protocol.data_received() call failed.
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/asyncio/selector_events.py", line 868, in _read_ready__data_received
    self._protocol.data_received(data)
  File "/usr/local/lib/python3.10/site-packages/aioesphomeapi/_frame_helper.py", line 195, in data_received
    self._callback_packet(msg_type_int, bytes(packet_data))
  File "/usr/local/lib/python3.10/site-packages/aioesphomeapi/_frame_helper.py", line 110, in _callback_packet
    self._on_pkt(Packet(type_, data))
  File "/usr/local/lib/python3.10/site-packages/aioesphomeapi/connection.py", line 688, in _process_packet
    handler(msg)
  File "/usr/local/lib/python3.10/site-packages/aioesphomeapi/client.py", line 482, in on_msg
    on_bluetooth_connections_free_update(resp.free, resp.limit)
  File "/usr/src/homeassistant/homeassistant/components/esphome/entry_data.py", line 136, in async_update_ble_connection_limits
    fut.set_result(free)
asyncio.exceptions.InvalidStateError: invalid state
```
2023-03-20 23:49:59 -04:00
J. Nick Koston
7158dbc142 Bump yalexs-ble to 2.1.1 (#90015)
* Bump yalexs-ble to 2.1.1

There was another task that could be prematurely GCed

changelog: https://github.com/bdraco/yalexs-ble/compare/v2.1.0...v2.1.1

* fixes
2023-03-20 23:49:30 -04:00
Arturo
5e5ace9c4e Add door lock device type to matter integration (#89277)
* Adds base code for matter lock

* Adds basic matter door lock support

* Adds matter lock fixture

* Adds tests for matter lock

* Addresses feedback

* Added logic to handle inter states of matter lock

* Addesses feedback
2023-03-21 01:29:33 +01:00
Raman Gupta
cbe85126cb Introduce a delay between update entity calls (#89737)
* Introduce a delay between update entity calls

* Update homeassistant/components/zwave_js/update.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* move delay to constant and patch

* rename constant

* Switch to async_call_later

* Remove failing test

* Reimplement to solve task problem

* comment

* pass count directly so that value doesn't mutate before we store it

* lines

* Fix logic and tests

* Comments

* Readd missed coverage

* Add test for delays

* cleanup

* Fix async_added_to_hass logic

* flip conditional

* Store firmware info in extra data so we can restore it along with latest version

* Comment

* comment

* Add test for is_running check and fix bugs

* comment

* Add tests for various restore state scenarios

* move comment so it's less confusing

* improve typing

* consolidate into constant and remove unused one

* Update update.py

* update test to unknown state during partial restore

* fix elif check

* Fix type

* clean up test docstrings and function names

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-03-20 18:30:56 -04:00
epenet
18df3a22ca Add FTTH information to SFR Box (#89781) 2023-03-20 20:06:44 +01:00
J. Nick Koston
49f08ad71d Filter out duplicate updates in esphome state dispatch (#89779) 2023-03-20 20:04:46 +01:00
Jon Caruana
20c9ed6d89 Mark LiteJet as Platinum integration (#88623) 2023-03-20 20:01:14 +01:00
J. Nick Koston
6bb80adbb9 Rollback the session after performing stats schema validation (#89904) 2023-03-20 17:15:11 +01:00
Jan Bouwhuis
51b12cbf96 Add user_input as suggested value in imap config flow (#89982)
Add user_input as suggested value to config_schema
2023-03-20 15:52:54 +01:00
Jan Bouwhuis
e4275a053c Remove yaml import from imap integration (#89981)
* Remove yaml import from imap integration

* Cleanup sensor code and strings.json
2023-03-20 15:52:07 +01:00
Steven Looman
9a5ceb9ef8 Use default rounding/presentation mechanism for upnp (#89954) 2023-03-20 15:44:05 +01:00
Franck Nijhof
9949ca13aa Adjust state class of Toon monetary sensors (#89985) 2023-03-20 08:42:59 -04:00
Franck Nijhof
b9ff69d3ac Extend attribute state translations for Camera (#89876)
* Extend attribute state translations for Camera

* Add common generic translations
2023-03-20 08:39:20 -04:00
Malte Franken
0bf652ca96 Refactor constants in geo_json_events integration (#89912)
move constants to separate file
2023-03-20 13:26:38 +01:00
Joakim Plate
9f1e170851 Correct missing wordswap for S series nibe (#89866)
Correct missing wordswap for nibe
2023-03-20 12:08:27 +01:00
J. Nick Koston
146a31163c Use bluetooth address instead of uuid on MacOS (#89926) 2023-03-20 12:07:41 +01:00
Michael
e258f36ded Remove deprecated binary update sensor from AVM FRITZ!Box Tools (#89940) 2023-03-20 12:06:40 +01:00
J. Nick Koston
c3043fb0ee Bump bluetooth deps for bleak 0.20 (#89925)
Co-authored-by: K <z@kwi.li>
2023-03-20 12:06:15 +01:00
micha91
f3b3818d1f Bump aiomusiccast to 0.14.8 (#89978) 2023-03-20 11:59:27 +01:00
Jesse Moody
c4ee35570d Update django github references to main instead of master branch. (#89951) 2023-03-20 10:27:55 +01:00
epenet
9a784fddef Fail CI on lingering timers (#89292) 2023-03-20 10:20:19 +01:00
J. Nick Koston
f62bb0e2ea Bump zeroconf to 0.47.4 (#89973) 2023-03-20 09:32:21 +01:00
J. Nick Koston
d33a303a83 Fix statistics schema µs precision auto repair being ineffective (#89902)
If a user manually migrated their database to MySQL or PostgresSQL
and incorrectly created the timestamp columns as float we would
fail to correct them to double because when we migrated to use
timestamps for the columns I missed that we needed to change the
columns and types for µs precision
2023-03-20 00:06:37 -04:00
J. Nick Koston
e798c30b8b Fix statistics schema auto repair when there is bad data (#89903)
- If the user had previously duplicated data we could end up
  picking the next metadata_id and there could be stale rows
  in the database that have that metadata_id. This can only happen
  from bad manual migrations (which is what this is function
  is validating in the first place). To solve this we now insert
  data with a future date and look at the latest inserted row
  instead of the first.

Example
```
['stored_statistics',
  defaultdict(<class 'list'>,
              {'recorder.db_test_schema': [{'end': 948589200.0,
                                            'last_reset': None,
                                            'max': None,
                                            'mean': 2021.0,
                                            'min': None,
                                            'start': 948585600.0,
                                            'state': None,
                                            'sum': 394.5068},
                                          {'end': 1601946000.000001,
                                            'last_reset': 1601942400.000001,
                                            'max': 1.000000000000001,
                                            'mean': 1.000000000000001,
                                            'min': 1.000000000000001,
                                            'start': 1601942400.000001,
                                            'state': 1.000000000000001,
                                            'sum': 1.000000000000001}]})]
```
2023-03-20 00:06:23 -04:00
Allen Porter
9721ba59b6 Rewrite the calendar trigger to fix potential bugs (#89918)
Update the calander event trigger logic to have more exhaustive coverage. The
trigger will now use a timespan to create an explicit window for considering
upcoming events. The start/end of the time span is now more explicit, rather
than getting it from the alarm time.

The trigger is now broken into composable pieces:
- A timespan object for more explicitly managing the time window
- A function to get events during a time span
- A function to process upcoming events and determine the trigger times

The existing listener is now just responsible for scheduling alarms and glue.

This fixes bug with DST handling where the conversion back and forth between
UTC and timezone ends up dropping events during the jump forward. In practice,
an event was returned from the scanning, but it was never fired by the trigger
because (1) it was filtered out of the interval and (2) the event list was
previously cleared every iteration so it would get dropped.

Future improvements can bake more invariant checking into this structure.
2023-03-19 23:42:12 -04:00
Jan Bouwhuis
2039955ef7 Fix imap_email_content unknown status and replaying stale states (#89563) 2023-03-19 17:35:45 -10:00
starkillerOG
939fce4607 Shield Reolink webhook callback from cancelation (#89798)
* shield Reolink webhook callback from cancelation

* Update homeassistant/components/reolink/host.py

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>

* fix styling

* fix black

* Revert to using asyncio.shield

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2023-03-19 23:35:16 -04:00
J. Nick Koston
c94b054d75 Retain history when renaming an entity_id (#89963)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-03-19 17:33:21 -10:00
J. Nick Koston
affb48d271 Avoid joining states_meta for statistics queries (#89941) 2023-03-19 16:44:35 -10:00
J. Nick Koston
bf63e6cbd4 Set unique on StatesMeta and EventTypes database tables (#89971)
Set unique on StatesMeta and EventTypes

These should have been marked unique originally to prevent
collision bugs from going unnoticed. These have not been
to beta yet so this is not a breaking change
2023-03-19 22:30:01 -04:00
J. Nick Koston
817ba97227 Remove unneeded lambda_stmt in place add in statistics (#89943)
We can generate this entire query in a single lambda_stmt
so there is no need to add two which increases the size
of the cache key
2023-03-19 22:05:39 -04:00
J. Nick Koston
f27d73fc34 Remove legacy event lookups from logbook (#89945)
Events recorded with Home Assistant 2022.5.x or older will no
longer display context information in the logbook
2023-03-19 22:05:07 -04:00
J. Nick Koston
aebe4c66a6 Fix cpu thrashing during purge after all legacy events were removed (#89923)
* Fix cpu thrashing during purge after all legacy events were removed

We now remove the the index of of event ids on the states table when its
all NULLs to save space. The purge path needs to avoid checking for legacy
rows to purge if the index has been removed since it will result in a full
table scan each purge cycle that will always find no legacy rows to purge

* one more place

* drop the key constraint as well

* fixes

* more sqlite
2023-03-19 22:04:24 -04:00
J. Nick Koston
7f3e4cb3af Guard against selecting all invalid entity_ids in history (#89929)
If all the entity_ids that were provided do not exist we would
end up passing an empty list of ids to the SQL query which
would do an unbounded select
2023-03-19 22:03:12 -04:00
J. Nick Koston
5ffb233004 Avoid database executor job to fetch statistic metadata on cache hit (#89960)
* Avoid database executor job to fetch statistic metadata on cache hit

Since we will almost always have a cache hit fetching
statistic meta data we can avoid an executor job

* Avoid database executor job to fetch statistic metadata on cache hit

Since we will almost always have a cache hit fetching
statistic meta data we can avoid an executor job

* Avoid database executor job to fetch statistic metadata on cache hit

Since we will almost always have a cache hit fetching
statistic meta data we can avoid an executor job

* remove exception catch since the threading.excepthook will actually catch this in production

* fix a few missed ones

* threadsafe

* Update homeassistant/components/recorder/table_managers/statistics_meta.py

* coverage and optimistic caching
2023-03-19 22:01:16 -04:00
Jesse Moody
d7de23fa65 Adjust eventloop -> event loop spelling (#89931)
eventloop -> event loop spelling
2023-03-19 21:53:21 +01:00
Matthias Alphart
557b9c7d51 Add KNX interface device with diagnostic entities (#89213) 2023-03-19 02:13:52 -11:00
Oliver
0441a64c69 Update media state via telnet in denonavr integration (#89788) 2023-03-19 00:47:01 -10:00
J. Nick Koston
87264d219a Fix ssl context being recreated frequently in httpx (#89932)
* Fix ssl context being created every time in httpx

* its expensive, only do it once
2023-03-19 05:13:48 -04:00
epenet
0e7bd401f2 Fix lingering timer in config entry flow tests (#89853) 2023-03-19 08:56:24 +01:00
Sven Serlier
36ad2c81f1 Adjust "Lovelace" to "Dashboards" (#89927)
"Lovelace" to "Dashboards"
2023-03-19 08:06:44 +01:00
J. Nick Koston
300f7b4f77 Remove async_block_till_done in freebox (#89928)
async_block_till_done() is not meant to be called in integrations
2023-03-19 07:59:05 +01:00
Jesse Moody
95240e8aad Change README demo to demo.home-assistant.io subdomain (#89921)
change home assistant demo link
2023-03-19 07:52:42 +01:00
Jan Bouwhuis
e937693d97 Fix blocking MQTT entry unload (#89922)
* Remove unneeded async_block_till_done

* use await asyncio.sleep(0) instead
2023-03-18 14:57:40 -10:00
Vincent Knoop Pathuis
6ad9f420ab Add Landis+Gyr poll on restart (#89644) 2023-03-18 08:50:50 -11:00
Franck Nijhof
d106cb48d2 Add state attribute translations for light (#89818)
* Add state attribute translations for light

* Process review comments
2023-03-17 20:35:25 -04:00
Franck Nijhof
cd3819abec Add state attribute translations for Sensor (#89896) 2023-03-17 20:32:52 -04:00
J. Nick Koston
30e7ab247d Small cleanups to writing entity state (#89890)
* Small cleanups to writing entity state

* reduce one prop access

* small cleanups

* small cleanups

* name conflict
2023-03-17 20:32:24 -04:00
Franck Nijhof
8ecd73cac7 Add state attribute translations for Weather (#89897) 2023-03-17 20:29:48 -04:00
Franck Nijhof
1f4164def8 Add state (attribute) translations for Text (#89898) 2023-03-17 20:29:12 -04:00
J. Nick Koston
e87359761b Fix some I/O in the event loop during backup (#89894) 2023-03-17 20:28:29 -04:00
J. Nick Koston
b1f64de6ce Remove the old ix_states_event_id index if its no longer being used (#89901)
* Remove the old ix_states_event_id index if its no longer being used

* cover it

* fixes

* fixup

* Update homeassistant/components/recorder/tasks.py
2023-03-17 20:27:33 -04:00
J. Nick Koston
138bbd9c28 Use json_loads_object util in backup (#89895)
* Use json_loads_object util in backup

* adjust test
2023-03-17 20:25:29 -04:00
Franck Nijhof
dbebf8c783 Add state attribute translations for media players (#89821)
* Add state attribute translations for media players

* Process review comments

* Process review comments

* Fix and extend

* Add yes/no as generic state
2023-03-17 20:24:33 -04:00
Jan Bouwhuis
5f22796b38 Refactor imap coordinator (#89759)
* Warn if the previous push wait task it taking longer than the update interval

* refactor

* Call _async_fetch_number_of_messages first

* Add cleanup in case fetching fails

* mypy

* Set sensor to unknown if an error occured.

* Handling invalid auth an reraise when needed

* Handle invalid folder as setup error

* Close IMAP stream before logout at cleanup

---------

Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-17 22:45:15 +01:00
epenet
469dbec089 Add type hints to plex data (#89221)
* Add type hints to plex data

* Rename method
2023-03-17 22:14:24 +01:00
J. Nick Koston
377dff5ee4 Ensure all recorder session executes use retries or the execute helper (#89888) 2023-03-17 10:45:58 -10:00
Franck Nijhof
fd5b57ae6c Drop autoflake in favor of Ruff (#89874) 2023-03-17 21:37:41 +01:00
Kevin Worrel
b403a96ea0 Bump screenlogicpy to v0.8.2 (#89832) 2023-03-17 10:10:37 -10:00
Franck Nijhof
95515fbe78 Improve/extend state translations for Alarm Control Panel (#89872) 2023-03-17 14:25:20 -04:00
Franck Nijhof
e402e733a0 Add translations for Image processing (#89879) 2023-03-17 13:52:59 -04:00
Franck Nijhof
db5a7b0e5e Add translations for Geolocation (#89880) 2023-03-17 13:52:34 -04:00
Franck Nijhof
5657fcd1e8 Add state attribute translations for Number (#89881) 2023-03-17 13:52:19 -04:00
Franck Nijhof
a15c45dbfe Drop pyupgrade in favor of Ruff (#89865) 2023-03-17 14:17:05 +01:00
Franck Nijhof
a7a972fe96 Upgrade pytest-xdist to 3.2.1 (#89857) 2023-03-17 13:43:16 +01:00
Franck Nijhof
b1a3bfb298 Drop flake8 in favor of Ruff (#89863) 2023-03-17 13:30:06 +01:00
Martin Hjelmare
f4de050904 Bump hass-nabucasa to 0.61.1 (#89864) 2023-03-17 13:27:05 +01:00
lunmay
cdb01146da Fix misstype translation reference keynames (#89855) 2023-03-17 12:05:29 +01:00
Malte Franken
ed0a059053 Refactor entity manager code in geo_json_events integration (#89847)
* moved entity manager

* fix circular reference

* simplify new entity signal
2023-03-17 11:59:29 +01:00
epenet
ab6e929443 Fix EntityComponent lingering timer in helper tests (#89801)
* Fix lingering timer in entity platform tests

* Tweak

* Fix entity and entity_component also

* Remove async_shutdown

* Adjust

* Adjust
2023-03-17 10:26:05 +01:00
epenet
abd91dd934 Ensure MockEntityPlatform shuts down after tests (#89849) 2023-03-17 10:22:43 +01:00
J. Nick Koston
aa72b48725 Mark recorder system_health session read_only (#89842) 2023-03-17 10:22:21 +01:00
epenet
ab4a726e6c Add tmpdir to known fixtures in pylint (#89844) 2023-03-17 10:22:02 +01:00
J. Nick Koston
dbb2706c76 Reduce number of tasks created by compiling missing statistics (#89835) 2023-03-16 21:07:14 -10:00
J. Nick Koston
d671d7fc1f Add native_step to baf (#89780) 2023-03-16 19:13:42 -10:00
Jean-François Roy
5a6234d60e Bump aiobafi6 to 0.8.0 (#89840) 2023-03-16 19:13:23 -10:00
J. Nick Koston
f6f3565796 Reduce latency to find stats metadata (#89824) 2023-03-16 19:00:02 -10:00
Allen Porter
04a99fdbfc Add local calendar diagnostics platform (#89776)
* Add local calendar diagnostics platform

* Use redaction from ical

* Update diagnostics for new ical version

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Use snapshot tests for local calendar diagnostics

* Setup diagnostics directly in tests rather than via dependencies

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-16 23:05:01 -04:00
Erik Montnemery
ae127e7687 Change light white service call attribute to accept True (#89803) 2023-03-16 23:02:56 -04:00
Franck Nijhof
a153720599 Add state attribute translations for automations (#89815) 2023-03-16 23:02:11 -04:00
Franck Nijhof
a2b6ef3d7b Add state attribute translations for fans (#89816) 2023-03-16 23:01:47 -04:00
epenet
79c9447770 Fix lingering timer in event helper tests (#89819)
Fix lingering timer in event tests
2023-03-16 23:01:23 -04:00
Franck Nijhof
f8da3ee50e Add state attribute translations for locks (#89820) 2023-03-16 23:00:45 -04:00
J. Nick Koston
350e967a89 Bump aioharmony to 0.2.10 (#89831)
fixes #89823
2023-03-16 22:44:49 -04:00
epenet
ff8b91aeea Add freezer to known test fixtures in pylint (#89825)
Add freezer to known fixtures in pylint
2023-03-16 22:39:41 -04:00
Michael Hansen
e16f17f5a8 Voice assistant integration with pipelines (#89822)
* Initial commit

* Add websocket test tool

* Small tweak

* Tiny cleanup

* Make pipeline work with frontend branch

* Add some more info to start event

* Fixes

* First voice assistant tests

* Remove run_task

* Clean up for PR

* Add config_flow.py

* Remove CLI tool

* Simplify by removing stt/tts for now

* Clean up and fix tests

* More clean up and API changes

* Add quality_scale

* Remove data from run-finish

* Use StrEnum backport

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-03-16 20:42:26 -04:00
epenet
81c0382e4b Fix lingering timer in bootstrap tests (#89790)
* Fix lingering timer in bootstrap test

* Adjust comment

* Use a constant
2023-03-16 17:20:27 -04:00
epenet
9893b1cf4a Cleanup get_local_ip in global conftest (#89826) 2023-03-16 22:03:06 +01:00
Franck Nijhof
f9919bb7cf Add pre-defined entity name translations (#89792) 2023-03-16 21:10:20 +01:00
Franck Nijhof
b6d001bfe6 2023.3.5 (#89814) 2023-03-16 20:45:14 +01:00
Franck Nijhof
e6f280cf7a Add state attribute translations for device trackers (#89810) 2023-03-16 19:58:52 +01:00
Franck Nijhof
298dae55fa Add missing state translations for Lock entities (#89795) 2023-03-16 19:06:35 +01:00
Franck Nijhof
d99c02b46f Add state attribute translations for covers (#89812) 2023-03-16 19:04:25 +01:00
Franck Nijhof
cb8ed4a1cc Add state attribute translations for alarm control panel (#89809) 2023-03-16 19:04:11 +01:00
Franck Nijhof
3e89b81e1d Add state attribute translations for calendars (#89811) 2023-03-16 19:03:23 +01:00
Franck Nijhof
7e18e15cac Bumped version to 2023.3.5 2023-03-16 18:48:17 +01:00
Bram Kragten
e651ca747b Update frontend to 20230309.1 (#89802) 2023-03-16 18:47:51 +01:00
J. Nick Koston
9fa73fe3a9 Bump aioesphomeapi to 13.5.1 (#89777) 2023-03-16 18:47:47 +01:00
Jan Bouwhuis
abda7b8a5b Fix imap server push holding HA startup (#89750) 2023-03-16 18:47:44 +01:00
jan iversen
90a4afb6fa Correct modbus serial method parameter (#89738) 2023-03-16 18:47:40 +01:00
Marcio Granzotto Rodrigues
52981699cf Bump bond-async to 0.1.23 (#89697) 2023-03-16 18:47:37 +01:00
Joakim Plate
c3d7696c2e Update to nibe 2.1.4 (#89686) 2023-03-16 18:47:33 +01:00
jan iversen
f120bac17f Secure modbus hub_collect remains valid (#89684)
Secure hub_collect remains valid.
2023-03-16 18:47:28 +01:00
Joakim Plate
02738fb9d4 Handle int or mapping for off case in nibe cooling (#89680)
Handle int or mapping for off case in nibe
2023-03-16 18:47:25 +01:00
J. Nick Koston
a9a6ff50cc Bump aioesphomeapi to 13.5.0 (#89262) 2023-03-16 18:47:21 +01:00
zhangshengdong29
fdd9c5383f ArestData does not have available (#88631) 2023-03-16 18:47:17 +01:00
epenet
69aa3a75c5 Fix lingering timer in event sun tests (#89808) 2023-03-16 18:32:34 +01:00
Bram Kragten
ba4a638b39 Update frontend to 20230309.1 (#89802) 2023-03-16 18:32:07 +01:00
epenet
1a7e316b51 Fix lingering timer in condition tests (#89807) 2023-03-16 18:19:29 +01:00
Jan Bouwhuis
6e25abfdcc Fix typo in docstr (#89804) 2023-03-16 16:54:26 +01:00
Erik Montnemery
9384ec18f8 Add filters to climate and light service descriptions (#86162)
* Add filters to climate and light service descriptions

* Allow specifying enums directly

* Update service descriptions

* Adjust test

* Cache entity features

* Lint

* Improve error handling, add list of known base components

* Don't allow specifying an entity feature as int
2023-03-16 15:59:51 +01:00
Jan Bouwhuis
c81a38effb Mqtt prepare test base part1 (#89796)
* Refactor test_reloadable

* Refactor test_disabling_and_enabling_entry

* optimize test_unload_config_entry

* Cleanup help_test_unload_config_entry

* cleanup test_unload_entry

* Update test tls_version

* More tests to entry only

* Add validate and hassconfig patch

* Revert fixture changes patch_hass_config

* Follow up comments
2023-03-16 15:57:01 +01:00
Erik Montnemery
886c2635ad Add support for constant selector (#89573)
* Add support for constant selector

* Adapt to frontend PR changes
2023-03-16 09:02:26 -04:00
epenet
c6568ffb62 Fix lingering timer in collection helper tests (#89793)
* Fix lingering timer in collection helper tests

* One more
2023-03-16 08:38:22 -04:00
Joakim Plate
b3bd80d905 Handle int or mapping for off case in nibe cooling (#89680)
Handle int or mapping for off case in nibe
2023-03-16 13:26:56 +01:00
Kevin Siml
e57031b1b5 Add Pushsafer notify parameters (#89555) 2023-03-16 13:03:05 +01:00
Franck Nijhof
f32b7859b8 Restructure translations for entity components (#89702) 2023-03-16 12:16:08 +01:00
Erik Montnemery
f55aaf7664 Drop unused Google entity settings from cloud (#89786) 2023-03-16 11:15:38 +01:00
Vincent Knoop Pathuis
273d794f7a Add device class for Landis+Gyr GJ energy sensor (#89522) 2023-03-16 11:12:05 +01:00
epenet
46a5aa71ec Add type hints to helper tests (#89784) 2023-03-16 11:10:56 +01:00
epenet
69e85b3216 Fix SFR Box diagnostics (#89783) 2023-03-16 11:09:54 +01:00
epenet
fec6236dd9 Add type hints to root tests (#89785) 2023-03-16 11:08:47 +01:00
epenet
8a58457203 Fix lingering timer in config entries test (#89787) 2023-03-16 11:07:42 +01:00
dependabot[bot]
a591f64258 Bump actions/checkout from 3.3.0 to 3.4.0 (#89778)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-16 09:46:40 +01:00
epenet
913156b0e0 Avoid lingering timer on script shutdown (#89753) 2023-03-16 08:00:21 +01:00
J. Nick Koston
c707ddbf7c Bump aioesphomeapi to 13.5.1 (#89777) 2023-03-15 20:00:47 -10:00
jan iversen
2365a884d2 Secure modbus hub_collect remains valid (#89684)
Secure hub_collect remains valid.
2023-03-15 23:48:00 -04:00
J. Nick Koston
ecf6922ade Bump yalexs_ble to 2.1.0 (#89772)
switches to using cryptography to reduce the number of deps

changelog: https://github.com/bdraco/yalexs-ble/compare/v2.0.4...v2.1.0
2023-03-15 23:47:26 -04:00
J. Nick Koston
ed27dae173 Small cleanups to recorder history (#89774)
* Small cleanups to recorder history

* Small cleanups to recorder history

* fixes

* flake8 cannot figure it out
2023-03-15 23:44:33 -04:00
J. Nick Koston
99d6b1fa57 Migrate States to use a table manager (#89769) 2023-03-15 16:19:43 -10:00
J. Nick Koston
4080d68489 Fix logbook tests failing because time was not url encoded correctly (#89770) 2023-03-15 15:29:41 -10:00
J. Nick Koston
e379aa23bd Migrate StateAttributes to use a table manager (#89760)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-03-15 15:26:29 -10:00
J. Nick Koston
ccab45520b Remove asyncio.coroutine workarounds (#88560) 2023-03-15 20:04:31 -04:00
Matthias Alphart
a360da8bc3 Update xknx to 2.7.0 (#89765) 2023-03-15 23:28:43 +01:00
J. Nick Koston
69078b5aed Bump pyblackbird to 0.6 for py3.11 (#89719) 2023-03-15 12:14:49 -10:00
J. Nick Koston
aec2d63302 Add keep_days to recorder.purge_entities (#89726) 2023-03-15 11:13:47 -10:00
Jan Bouwhuis
6ba5f8e43a Fix imap server push holding HA startup (#89750) 2023-03-15 21:22:13 +01:00
Raman Gupta
7a267460d3 Cache remote app list for vizio TVs (#89003) 2023-03-15 20:42:23 +01:00
Jack Boswell
b43b2eb3cb Avoid rounding Starlink sensor data & instead allow configurable precision (#89486) 2023-03-15 20:40:22 +01:00
epenet
3aa5629665 Improve type hints in condition helper tests (#89754) 2023-03-15 19:42:23 +01:00
zhangshengdong29
bf21b2622c ArestData does not have available (#88631) 2023-03-15 19:13:32 +01:00
Michael
d4edec2863 Move calculation of current value into lib in Fritz!SmartHome (#89150) 2023-03-15 18:59:03 +01:00
Erik Montnemery
b7ac0058af Fix hassio cleanup when addon in uninstalled (#89756) 2023-03-15 18:56:58 +01:00
Marcel van der Veldt
fceb208381 Abort Hue config flow if bridge can not be reached (#88893)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-03-15 18:55:34 +01:00
starkillerOG
4eee626770 Reolink check firmware (#88903) 2023-03-15 18:54:28 +01:00
Maciej Bieniek
dea29f539f Use SensorDeviceClass.ENUM and add state attributes translations in Shelly integration (#89660) 2023-03-15 18:52:42 +01:00
epenet
54ad8b8ee9 Avoid lingering timers in update coordinator tests (#89749) 2023-03-15 18:50:32 +01:00
epenet
c416d18506 Add WAN information to SFR Box (#89678) 2023-03-15 18:49:57 +01:00
PatrickGlesner
cb74b934dc Fix NMBS IndexError (#89698) 2023-03-15 18:09:39 +01:00
epenet
35c02ddc81 Add type hints to update coordinator tests (#89748) 2023-03-15 18:07:43 +01:00
Allen Porter
b588b8b215 Bump ical to 4.5.0 (#89744) 2023-03-15 18:06:46 +01:00
StefanIacobLivisi
6b768b90b4 Bump aiolivisi to 0.0.19 (#89752) 2023-03-15 18:05:45 +01:00
epenet
8cbb1e542f Address late feedback for SamsungTV (#89751) 2023-03-15 17:14:27 +01:00
Erik Montnemery
4d3799a9de Make CalendarEntityFeature an IntFlag (#89733) 2023-03-15 09:22:16 -04:00
jan iversen
6e5b4f9f82 Add modbus hvac_* write registers (#89695) 2023-03-15 14:09:14 +01:00
J. Nick Koston
a244749712 Make StatesMetaManager thread-safe when an entity_id is fully deleted from the database and than re-added (#89732)
* refactor to make StatesMetaManager threadsafe

* refactor to make StatesMetaManager threadsafe

* refactor to make StatesMetaManager threadsafe

* refactor to make StatesMetaManager threadsafe

* reduce

* comments
2023-03-15 08:54:02 -04:00
starkillerOG
6a01c3369d Reolink auto quick reply (#89656) 2023-03-15 12:56:01 +01:00
epenet
6270776fbb Add turn_on trigger to Samsung TV (#89018)
* Add turn_on trigger to Samsung TV

* Add tests

* Apply suggestions from code review

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Remove assert

* Cleanup mock_send_magic_packet

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-03-15 12:43:53 +01:00
jan iversen
cd23caff58 Correct modbus serial method parameter (#89738) 2023-03-15 12:27:45 +01:00
epenet
9719f817c0 Bump ruff to 0.0.256 (#89734) 2023-03-15 10:07:12 +01:00
J. Nick Koston
59de7f3057 Migrate EventData management to a table manager (#89716) 2023-03-14 21:40:59 -10:00
Joakim Plate
bf8c4cae27 Update to nibe 2.1.4 (#89686) 2023-03-15 06:01:34 +01:00
Allen Porter
a91055cc2a Fix additional typing in local calendar tests (#89704)
* Fix additional typing in local calendar tests

* Update tests/components/local_calendar/test_calendar.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-14 19:33:46 -07:00
J. Nick Koston
b906d67c1e Fix filtered purge not removing newer events (#89721) 2023-03-14 16:33:19 -10:00
Penny Wood
858fc30fcd Fix infinite loop in sun.sun (#89723) 2023-03-14 16:27:29 -10:00
Allen Porter
4ddcb14053 Add additional CalendarEvent validation (#89533)
Add additional event validation
2023-03-14 20:27:38 -04:00
Jack Boswell
c33ca4f664 Add diagnostics to Starlink (#86328) 2023-03-14 22:24:47 +01:00
J. Nick Koston
0630b7b962 Reduce size of load query to prime event_types and states_meta at startup (#89677) 2023-03-14 21:31:31 +01:00
Erik Montnemery
c2c809682a Tweak OTBR tests (#89694) 2023-03-14 21:26:16 +01:00
J. Nick Koston
a6d6807dd0 Add typing to statistics results (#89118) 2023-03-14 09:06:56 -10:00
Marcio Granzotto Rodrigues
9d2c62095f Bump bond-async to 0.1.23 (#89697) 2023-03-14 08:44:55 -10:00
Ernst Klamer
d1969fd0c2 Add water sensor to bthome (#89595)
* Add water sensor to bthome

* Use TOTAL state class for gas water and energy
2023-03-14 19:26:05 +01:00
epenet
71dc98a39c Improve hass_ws_client type hint in tests (#89703) 2023-03-14 16:31:40 +01:00
Allen Porter
1bc4802c04 Move local calendar text fixtures to conftest.py (#89674)
* Move local calendar text fixtures to conftest.py

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Add imports for suggested typing fixes

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-14 08:12:44 -07:00
Erik Montnemery
85e0177195 Add WS command for connecting OTBR to a known Thread network (#89692)
* Add WS command for connecting OTBR to a known Thread network

* Add test
2023-03-14 15:28:06 +01:00
Bram Kragten
a213ef2475 Add websocket command to set preferred thread dataset (#89700) 2023-03-14 15:27:31 +01:00
Aidan Timson
73e1942eeb Update entity names to capitalize first word only for System Bridge (#89688) 2023-03-14 12:28:43 +01:00
epenet
2809a686be Remove duplicate code in nextcloud (#89681) 2023-03-14 12:14:29 +01:00
Jan Bouwhuis
ec1b8b616f Debounce and group MQTT subscriptions (#88862)
* Debounce and group mqtt subscriptions

* Cleanup

* Do not cooldown on resubscribe

* Remove lock from task

Co-authored-by: Erik Montnemery <erik@montnemery.com>

* ruff

* Longer initial cool down. Manages unsubscribes

* Own lock for access to self._pending_subscriptions

* adjust

* Subscribe to highest QoS when sharing subscription

* do not block _pending_subscriptions_lock with io

* Test the highest qos is subscribed at

* Cleanup max qos

* Follow up comments part 1

* Make docstr more generic

* Make max qos update thread safe

* Add lock on clearing _max_qos when resubscribing

* Wait for linger task

* User copy

* Check for key before cleaning up

* Fix lingering task

* Do not use a lock

* do not await _async_queue_subscriptions

* Replace copy with assignment

* Update max qos before returning

* Do not iterate if max_qos == 0

* Do not ieterate subs if max qos == 0

* Set initial cooldown correctly

* Ensure discovery cooldown ends after subscribing

* plan last subscribe with debouncer timeout

* cooldown if self._pending_subscriptions is set

* Revert format changes

* Remove stale assingnment self._last_subscribe

* Remove not used property

* Also check while for pending subscriptions

* revert first added sleep()

* Optimize

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-14 11:13:55 +01:00
J. Nick Koston
03b204f445 Execute sql queries in the database executor when using the recorder database (#89673) 2023-03-14 10:56:02 +01:00
J. Nick Koston
dbc0890ce8 Add index to event_type and entity_id (#89676) 2023-03-14 10:09:21 +01:00
epenet
b620e5d8a6 Move nextcloud constants (#89679) 2023-03-14 09:51:03 +01:00
amitfin
cbee1ba496 Increase timeout for coolmaster with swing (#87573)
Co-authored-by: G Johansson <goran.johansson@shiftit.se>
2023-03-14 09:47:26 +01:00
Paulus Schoutsen
d084e70aff 2023.3.4 (#89647) 2023-03-14 00:10:23 -04:00
J. Nick Koston
2cb673db04 Handle bytes data in sql sensors (#89169) 2023-03-13 18:07:05 -10:00
G Johansson
afa58b80bd Default to recorder db for SQL integration (#85436)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-13 17:41:32 -10:00
puddly
69582b7ecb Bump ZHA dependencies (#89667)
* Bump `zha-quirks` library and account for `setup_quirks` signature

* Bump other ZHA dependencies

* Revert zigpy bump
2023-03-13 22:06:05 -04:00
Erik Montnemery
2f4e9c8ef3 Use otbr domain as dataset source (#89653) 2023-03-13 20:56:09 -04:00
Aidan Timson
a99f6f7124 Handle ConnectionClosedException from System Bridge (#89654)
Handle unretrieved ConnectionClosedException from System Bridge
2023-03-13 20:55:37 -04:00
Aidan Timson
6809bd3029 Remove incorrect state class for System Bridge sensors (#89655) 2023-03-13 20:54:49 -04:00
J. Nick Koston
8e242c1fe6 Force binary build of sqlalchemy wheels (#89658)
Force binary build of sqlalchemy
2023-03-13 20:52:53 -04:00
J. Nick Koston
6713253553 Bump ulid-transform to 0.4.2 (#89666)
32 bit fixes

changelog: https://github.com/bdraco/ulid-transform/compare/v0.4.0...v0.4.2
2023-03-13 20:52:27 -04:00
puddly
cbffaf30ba Bump ZHA dependencies (#89667)
* Bump `zha-quirks` library and account for `setup_quirks` signature

* Bump other ZHA dependencies

* Revert zigpy bump
2023-03-13 20:52:01 -04:00
Mick Vleeshouwer
0442a189e9 Add silent option for DynamicShutter (ogp:Shutter) in Overkiz (#89164)
Add new switch
2023-03-14 00:42:12 +01:00
Pascal Vizeli
5104e7f51a Use C-Extension for sqlalchemy (#89661) 2023-03-13 22:22:28 +01:00
Paulus Schoutsen
160518350f Bump SQLAlchemy to 2.0.6 (#89650) 2023-03-13 14:54:27 -04:00
Paulus Schoutsen
8a4233ac8e Bump SQLAlchemy to 2.0.6 (#89650) 2023-03-13 08:51:01 -10:00
Erik Montnemery
d422b0dcc2 Make OTBR add newly created dataset to thread credential store (#89645) 2023-03-13 14:09:09 -04:00
starkillerOG
d54259f9ac Bump reolink-aio to 0.5.5 (#89646) 2023-03-13 18:47:00 +01:00
Paulus Schoutsen
daa5718a80 Bumped version to 2023.3.4 2023-03-13 13:26:50 -04:00
tomrennen
f5562e93ac Improved "ON" state check for Use room sensor for cooling (#89634) 2023-03-13 13:26:44 -04:00
Erik Montnemery
d2f90236d1 Rename modules named repairs.py which are not repairs platforms (#89618) 2023-03-13 13:26:43 -04:00
J. Nick Koston
65c614421a Increase maximum aiohttp connections to 4096 (#89611)
fixes #89408
2023-03-13 13:26:41 -04:00
Eugenio Panadero
22922da607 Bump aiopvpc to 4.1.0 (#89593) 2023-03-13 13:26:40 -04:00
J. Nick Koston
ca0304ffc4 Fix get_significant_states_with_session query looking at legacy columns (#89558) 2023-03-13 13:26:39 -04:00
Robert Svensson
950a1f6e9e Bump pydeconz to v110 (#89527)
* Bump pydeconz to v109

* Bump pydeconz to v110 for additional color modes
2023-03-13 13:26:38 -04:00
rappenze
1e7f58d859 Fix bug in fibaro cover (#89502) 2023-03-13 13:26:37 -04:00
J. Nick Koston
7cb4620671 Fix data migration never finishing when database has invalid datetimes (#89474)
* Fix data migration never finishing when database has invalid datetimes

If there were impossible datetime values in the database (likely
from a manual sqlite to MySQL conversion) the conversion would
never complete

* Update homeassistant/components/recorder/migration.py
2023-03-13 13:26:36 -04:00
Kevin Worrel
8c2569d2ce Reconnect on any ScreenLogic exception (#89269)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-13 13:26:34 -04:00
Arjan
6ebd493c4d Fix gtfs with 2023.3 (sqlachemy update) (#89175) 2023-03-13 13:26:33 -04:00
Jan Stienstra
990ecbba72 Recode Home Assistant instance name to ascii for Jellyfin (#87368)
Recode instance name to ascii
2023-03-13 13:26:32 -04:00
David Poll
0457bb2717 Add is_hidden_entity test for Jinja templates (#89011) 2023-03-13 18:20:33 +01:00
G Johansson
02389960ce Refactor Command line sensor to inherit TemplateSensor (#81222)
* Refactor sensor

* Remove not needed

* block until done

* reset test

* test sensor

* Add time
2023-03-13 17:23:25 +01:00
Nick Borgers
a7396af4bb Bump pybravia to 0.3.2 (#89635) 2023-03-13 16:06:29 +01:00
Erik Montnemery
8a0522ca2a Include extended address in thread discovery data (#89640) 2023-03-13 15:59:22 +01:00
Erik Montnemery
0f2abe7f25 Bump python-otbr-api to 1.0.9 (#89637) 2023-03-13 15:52:36 +01:00
Joakim Sørensen
11e21378b1 Add sensors for supervisor host (#89461)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-03-13 15:39:49 +01:00
epenet
07b25939a2 Use SnapshotAssertion in SFR button tests (#89633) 2023-03-13 15:23:00 +01:00
tomrennen
15506da332 Improved "ON" state check for Use room sensor for cooling (#89634) 2023-03-13 15:15:13 +01:00
Thijs Walcarius
cdfb43d403 Address late review comments for frontier_silicon config flow (#89507)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
Co-authored-by: wlcrs <wlcrs@users.noreply.github.com>
2023-03-13 15:06:45 +01:00
Klaas Schoute
3aeda1792a Bump easyEnergy to v0.2.1 (#89630) 2023-03-13 15:00:50 +01:00
anotherthomas
179cc4d7f7 Improve warnings in mqtt light messages (#89552)
* improved warnings in mqtt light messages.

* fixed tests.
2023-03-13 14:46:16 +01:00
Erik Montnemery
3637d787cf Fix intellifire name property (#89632)
Fix intellifire name property
2023-03-13 14:01:28 +01:00
Erik Montnemery
a230732087 Correct naming of some otbr tests (#89631) 2023-03-13 13:56:08 +01:00
epenet
f3da95fb1f Use SnapshotAssertion in SFR binary sensor tests (#89624) 2023-03-13 13:37:51 +01:00
Penny Wood
429e52cf3d Improve typing in climate.py (#89577) 2023-03-13 12:40:09 +01:00
starkillerOG
431a8d0047 Add support for dual lens cameras in Reolink (#89554) 2023-03-13 12:16:52 +01:00
Arjan
40ed3be4a8 Fix gtfs with 2023.3 (sqlachemy update) (#89175) 2023-03-13 11:57:49 +01:00
starkillerOG
6e10cd81dd Use repair issue when port enable fails in Reolink (#89591)
* Reolink use repair issue for disabled ports

* fix styling

* Add port repair issue tests

* Update homeassistant/components/reolink/strings.json

Co-authored-by: Erik Montnemery <erik@montnemery.com>

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2023-03-13 11:43:41 +01:00
Franck Nijhof
62bd2e97f5 Merge branch 'master' into dev 2023-03-13 11:35:16 +01:00
Jan Rieger
78e8de9bd7 Add ESERA 1-Wire virtual integration (#89487) 2023-03-13 11:33:35 +01:00
cnico
e73e88b922 Bump flipr-api to 1.5.0 (#89598)
flipr api 1.5.0 to use the new cloud api
2023-03-13 11:16:45 +01:00
David Poll
7284af6a3e Add an in-memory-preloading loader for Jinja imports (#88850)
* Adds a loader to enable jinja imports.

* Switch to in-memory

* Move loading custom_jinja off of the event loop

* Raise TemplateNotFound if template doesn't exist

* Fix docstring

* Adds a service to reload custom jinja

* Remove IO from test setup

* Improve coverage and small refactor

* Incorporate feedback and use .jinja extension

* Check the loaded sources in test.

* Incorporate PR feedback.

* Update homeassistant/helpers/template.py

Co-authored-by: Erik Montnemery <erik@montnemery.com>

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2023-03-13 11:00:05 +01:00
G Johansson
5c4f93fa36 Refactor Command line cover to inherit TemplateEntity (#81214)
* Refactor cover

* Remove not needed
2023-03-13 10:57:30 +01:00
G Johansson
5c42261210 Refactor Command line binary sensor to inherit TemplateEntity (#81212)
* Refactor binary sensor

* Align
2023-03-13 10:56:18 +01:00
epenet
5e73ad9cb0 Use SnapshotAssertion in SFR sensor tests (#89619)
* Use SnapshotAssertion in SFR sensor tests

* Name snapshots

* Cleanup const.py

* Remove name from snapshot
2023-03-13 10:45:59 +01:00
Erik Montnemery
fd5c56fc7d Rename modules named repairs.py which are not repairs platforms (#89618) 2023-03-13 09:44:20 +01:00
J. Nick Koston
d1ee303e85 Drop duplicated indices from recorder database schema (#89613)
Drop duplicated indices from schema

https://docs.percona.com/percona-toolkit/pt-duplicate-key-checker.html

```
% pt-duplicate-key-checker --databases fresh

ALTER TABLE `fresh`.`events` DROP INDEX `ix_events_event_type_id`;

ALTER TABLE `fresh`.`states` DROP INDEX `ix_states_metadata_id`;

ALTER TABLE `fresh`.`statistics` DROP INDEX `ix_statistics_metadata_id`;

ALTER TABLE `fresh`.`statistics_short_term` DROP INDEX `ix_statistics_short_term_metadata_id`;

```
2023-03-13 09:24:57 +01:00
dougiteixeira
470b0b5471 Adjust Tuya entity naming (#89616)
Fix entity name
2023-03-13 09:23:04 +01:00
dependabot[bot]
e33cb2ee60 Bump actions/cache from 3.3.0 to 3.3.1 (#89617)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-13 09:10:47 +01:00
Eugenio Panadero
1fb11aec26 Bump aiopvpc to 4.1.0 (#89593) 2023-03-13 09:07:10 +01:00
Stephan Uhle
c45fb85f17 Bump pysml to 0.0.9 (#89603) 2023-03-13 08:25:59 +01:00
Stephan Uhle
17c0e18776 Code quality update for EDL21 (#89561)
Enhance code quality.
2023-03-13 08:04:24 +01:00
J. Nick Koston
e34853a82a Switch underlying history stats calculation to use seconds (#77857)
* Switch history stats to report in seconds

Because hours were previously used, the data would always be off because
of the loss of resolution when the time being tracked was in a window
of more than 12s

* Apply suggestions from code review

* Update homeassistant/components/history_stats/sensor.py

* tweak
2023-03-12 23:05:48 -04:00
J. Nick Koston
4dcf7c6267 Fix history_stats test failing during DST (#89589)
Note that there is one test that needs `now()` as it is
timezone aware
2023-03-12 23:03:48 -04:00
J. Nick Koston
0575b9bc88 Increase maximum aiohttp connections to 4096 (#89611)
fixes #89408
2023-03-12 16:57:22 -10:00
Barry Loong
877efc993b Add support for window device class to google assistant (#89564) 2023-03-12 22:45:25 -04:00
J. Nick Koston
b9ac6b4a7c Improve reliability of context id migration (#89609)
* Split context id migration into states and events tasks

Since events can finish much earlier than states we
would keep looking at the table because states as not
done. Make them seperate tasks

* add retry dec

* fix migration happening twice

* another case
2023-03-12 21:41:48 -04:00
J. Nick Koston
85ca94e9d4 Mark database sessions that do not write data as read_only (#89600)
* Mark sessions that do not write data as read_only

* Mark sessions that do not write data as read_only
2023-03-12 21:33:28 -04:00
J. Nick Koston
977a07de13 Generate large history responses in the executor (#89606) 2023-03-12 21:32:26 -04:00
MarkGodwin
41b4c5532d Add Update entities to TP-Link Omada integration (#89562)
* Bump tplink-omada

* Add omada firmware updates

* Excluded from code coverage

* Fixed entity name
2023-03-12 21:26:34 -04:00
J. Nick Koston
459ea048ba Fix old indices never being removed with PostgreSQL (#89599) 2023-03-12 14:07:05 -10:00
J. Nick Koston
e809b636e6 Bump rflink to 0.0.65 for python 3.11 (#89601) 2023-03-12 12:44:47 -10:00
J. Nick Koston
c41f91be89 Deduplicate entity_id in the states table (#89557) 2023-03-12 10:01:58 -10:00
Jan Stienstra
8d88b02c2e Recode Home Assistant instance name to ascii for Jellyfin (#87368)
Recode instance name to ascii
2023-03-12 13:31:10 -05:00
J. Nick Koston
73cd62bd32 Fix lingering tasks in google_wifi tests (#89571) 2023-03-12 06:39:07 -10:00
Marc Mueller
b4b7605b82 Improve screenlogic generic typing (#89587) 2023-03-12 06:38:26 -10:00
G Johansson
e932139721 Strict typing threshold (#82786) 2023-03-12 17:10:00 +01:00
Erik Montnemery
cf7e500a8e Support translating entity names (#88242) 2023-03-12 15:55:04 +01:00
Erik Montnemery
376a6eb82a Convert device_sun_light_trigger test fixture to async (#89578) 2023-03-12 14:48:46 +01:00
Erik Montnemery
234610b1cc Simplify command_line sensor tests (#89576) 2023-03-12 14:47:43 +01:00
J. Nick Koston
edb06c58fa Add some more typing to screenlogic (#88522) 2023-03-11 23:04:19 -05:00
J. Nick Koston
84327f203c Fix flux_led set time to not happen during DST switch (#89559)
* Fix flux_led set time test

If this test was run at the wrong time of the day
it would not have been long enough for the set time
to fire since it only happens at 2:40:30 in the morning
local time

* Revert "Fix flux_led set time test"

This reverts commit 3241912eff.

* Change time set to not be during DST switch
2023-03-11 21:52:17 -05:00
J. Nick Koston
1c57339ec3 Refactor recorder tests to use recorder history API (#89565) 2023-03-11 21:51:16 -05:00
J. Nick Koston
50c31a5355 Move legacy database queries and models to prepare for schema v38 (#89532) 2023-03-11 11:26:30 -10:00
J. Nick Koston
16b420d660 Fix get_significant_states_with_session query looking at legacy columns (#89558) 2023-03-11 10:37:00 -10:00
J. Nick Koston
8bd43760b6 Deduplicate event_types in the events table (#89465)
* Deduplicate event_types in the events table

* Deduplicate event_types in the events table

* more fixes

* adjust

* adjust

* fix product

* fix tests

* adjust

* migrate

* migrate

* migrate

* more test fixes

* more test fixes

* fix

* migration test

* adjust

* speed up

* fix index

* fix more tests

* handle db failure

* preload

* tweak

* adjust

* fix stale docs strings, remove dead code

* refactor

* fix slow tests

* coverage

* self join to resolve query performance

* fix typo

* no need for quiet

* no need to drop index already dropped

* remove index that will never be used

* drop index sooner as we no longer use it

* Revert "remove index that will never be used"

This reverts commit 461aad2c52.

* typo
2023-03-11 14:54:55 -05:00
Kevin Worrel
56454c8580 Reconnect on any ScreenLogic exception (#89269)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-11 09:27:33 -10:00
Robert Svensson
8564768d9e UniFi library controls add/update signalling (#89525)
* Library controls add/update signalling

* Remove add/remove signalling

* Remove unifi_entity_base and unifi_client to make mypy pass
2023-03-11 20:14:39 +01:00
Robert Svensson
7487a004fd Bump pydeconz to v110 (#89527)
* Bump pydeconz to v109

* Bump pydeconz to v110 for additional color modes
2023-03-11 20:13:27 +01:00
J. Nick Koston
52cea16f74 Remove unused code in RecorderRuns.entity_ids (#89526) 2023-03-11 12:46:12 +01:00
J. Nick Koston
01e1221443 Refactor logbook data to use a dataclass (#89534) 2023-03-11 12:45:27 +01:00
rappenze
fccdd7b102 Fix bug in fibaro cover (#89502) 2023-03-11 09:15:05 +01:00
Robert Svensson
288a4203ab Make client tracker use common UniFi entity class (#84942)
* Make client tracker use common UniFi entity class

* Fix tests

* Fix mypy

* Remove legacy data

* Fix comment: skip else use return

* Minor change

* Remove missed stuff from previous rebase

* Import async_device_available_fn from entities.py rather than specifying it in device_tracker

* Avoid using asserts

* Keep explicit parenthesis for readability

* Allow loading entities on option changes
2023-03-11 06:23:49 +01:00
Paulus Schoutsen
d6a223f0e1 Await block till done inside patched config entry in tests (#89515) 2023-03-10 06:42:53 -10:00
epenet
96bd714364 Add FTTH and WAN info to SFR box diagnostics (#89492)
* Add FTTH and WAN info to SFR box diagnostics

* Adjust tests

* Use snapshots
2023-03-10 10:09:04 -05:00
epenet
74d4a26f97 Add missing mock in jellyfin config flow tests (#89510) 2023-03-10 10:06:53 -05:00
epenet
f22fabdd7f Add missing mock in kmtronic config flow tests (#89511) 2023-03-10 10:05:31 -05:00
epenet
401273dcff Add missing mock in lacrosse_view config flow tests (#89512) 2023-03-10 10:05:13 -05:00
epenet
f674559a71 Add missing mock in landisgyr config flow tests (#89513) 2023-03-10 10:04:45 -05:00
Vincent Knoop Pathuis
75bca76e68 Landis+Gyr move coordinator to own file (#89433)
* Move coordinator to own file and add test cases

* Apply typing improvements from review

* Remove testcase for exception during setup

* Simplify unittest for failing serial connection

* Readd checks in serial connection test after review
2023-03-10 15:57:35 +01:00
epenet
029093d0b2 Fix lingering timer in device registry (#89422) 2023-03-10 09:48:58 -05:00
dependabot[bot]
f4b8598979 Bump home-assistant/builder from 2022.11.0 to 2023.03.0 (#89485)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-10 13:27:07 +01:00
epenet
b4c1c0beb7 Bump pytest-xdist to 3.2.0 (#89501) 2023-03-10 13:08:45 +01:00
epenet
0f15f8b84b Bump pytest-sugar to 0.9.6 (#89500) 2023-03-10 12:58:29 +01:00
epenet
a0f725dfcb Add type hints to tests (#89497) 2023-03-10 12:06:50 +01:00
Thijs W
b8bda93d87 Add config flow to frontier_silicon (#64365)
* Add config_flow to frontier_silicon

* Add missing translation file

* Delay unique_id validation until radio_id can be determined

* Fix tests

* Improve tests

* Use FlowResultType

* Bump afsapi to 0.2.6

* Fix requirements_test_all.txt

* Stash ssdp, reauth and unignore flows for now

* Re-introduce SSDP flow

* hassfest changes

* Address review comments

* Small style update

* Fix tests

* Update integrations.json

* fix order in manifest.json

* fix black errors

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Address review comments

* fix black errors

* Use async_setup_platform instead of async_setup

* Address review comments on tests

* parameterize tests

* Remove discovery component changes from this PR

* Address review comments

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Add extra asserts to tests

* Restructure _async_step_device_config_if_needed

* Add return statement

* Update homeassistant/components/frontier_silicon/media_player.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-10 10:26:03 +01:00
Erik Montnemery
fde205c158 Add unconfigured flag to thread discovery data (#89230)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-03-09 22:32:32 -05:00
J. Nick Koston
9e1ba8534a Fix data migration never finishing when database has invalid datetimes (#89474)
* Fix data migration never finishing when database has invalid datetimes

If there were impossible datetime values in the database (likely
from a manual sqlite to MySQL conversion) the conversion would
never complete

* Update homeassistant/components/recorder/migration.py
2023-03-09 21:03:41 -05:00
TheJulianJES
d828263ee3 Add device class to ZHA Xiaomi plug "consumer connected" sensor (#89476)
Add device class to ZHA Xiaomi plug "consumer connected"
2023-03-09 20:15:22 -05:00
Jared Szechy
4591bb1823 Add Ruth and Stephen voices to AWS Polly (#89344)
Add Ruth and Stephen
2023-03-09 19:13:56 -05:00
epenet
f8462fd5b7 Add missing mock in guardian config flow tests (#89451) 2023-03-09 22:57:16 +01:00
Lucas Mindêllo de Andrade
eed16dc185 Add list areas function to template (#88441) 2023-03-09 22:32:30 +01:00
epenet
48fca3bb27 Fix missing debouncer cancel in update coordinator (#89383)
* Fix missing debouncer cancel in update coordinator

* Improve

* Adjust with comment

* Adjust again

* Simplify PR

* Adjust tests to avoid lingering timer

* Improve
2023-03-09 15:16:52 -05:00
Paulus Schoutsen
ddde17606d 2023.3.3 (#89459) 2023-03-09 14:40:06 -05:00
Paulus Schoutsen
3fba181e7b Bumped version to 2023.3.3 2023-03-09 13:30:46 -05:00
Erik Montnemery
da79bf8534 Fix Dormakaba dKey deadbolt binary sensor (#89447)
* Fix Dormakaba dKey deadbolt binary sensor

* Spelling
2023-03-09 13:18:23 -05:00
Paul Bottein
83e2cc32b7 Update frontend to 20230309.0 (#89446) 2023-03-09 13:18:22 -05:00
Joakim Sørensen
c7fb404a17 Add paths for add-on changelog and documentation (#89411) 2023-03-09 13:18:21 -05:00
Jan Bouwhuis
f1e114380a Allow enum as MQTT sensor device_class (#89391) 2023-03-09 13:18:20 -05:00
Brandon Rothweiler
04e4a644cb Bump pymazda to 0.3.8 (#89387) 2023-03-09 13:18:19 -05:00
Dillon Fearns
e606c2e227 Bump roombapy to 1.6.6 (#89366)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-09 13:18:17 -05:00
Jan Bouwhuis
ebf95feff3 Fix MQTT rgb light brightness scaling (#89264)
* Normalize received RGB colors to 100% brightness

* Assert on rgb_color attribute

* Use max for RGB to get brightness

* Avoid division and add clamp

* remove clamp

Co-authored-by: Erik Montnemery <erik@montnemery.com>

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2023-03-09 13:18:15 -05:00
Erik Montnemery
7ef1c289be Fix Dormakaba dKey deadbolt binary sensor (#89447)
* Fix Dormakaba dKey deadbolt binary sensor

* Spelling
2023-03-09 13:17:29 -05:00
Kirill Kulakov
d1734bc0ab Xiaomi Air Purifier S2 illuminance sensor support (#89208)
* Add sensor illuminance sensor support xiaomi s2 air purifier

* Add sensor illuminance sensor support xiaomi s2 air purifier

* fix sorting
2023-03-09 19:15:14 +01:00
Stephan Uhle
3796a73856 Add device info to edl21 (#89327) 2023-03-09 19:08:55 +01:00
Joakim Sørensen
4f29e1e180 Add stats sensors for core and supervisor (#89455)
* Add stats sensors for core and supervisor

* Update homeassistant/components/hassio/__init__.py
2023-03-09 19:06:35 +01:00
epenet
3a4ce260b4 Add missing mock in freedompro config flow tests (#89442) 2023-03-09 19:05:23 +01:00
epenet
f3084165b1 Add missing mock in filesize config flow tests (#89441) 2023-03-09 19:04:51 +01:00
epenet
4e4608183e Add missing mock in fibaro config flow tests (#89440) 2023-03-09 19:04:07 +01:00
Paul Bottein
01d8eaa5b6 Update frontend to 20230309.0 (#89446) 2023-03-09 12:28:02 -05:00
epenet
adfd263635 Add missing mock in gree config flow tests (#89450) 2023-03-09 18:12:22 +01:00
Marc Mueller
3c27f9ea7d Update actions/cache to 3.3.0 (#89438) 2023-03-09 17:58:03 +01:00
Stefan Agner
f903c536fb Add Hardkernel ODROID-M1 (#89431)
* Add Hardkernel ODROID-M1

Add Hardkernel ODROID-M1 machine. ODROID-M1 is a Rockchip RK3568B2 SoC
based single board computer with 4xCortex-A55, NVMe support and up to
8GB of RAM.

* Update homeassistant/components/hardkernel/hardware.py

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* Fix tests

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-09 14:18:19 +01:00
epenet
dcff2f37f7 Add DSL prefix to SFRBox ADSL sensors (#89276) 2023-03-09 13:19:22 +01:00
Jeef
3545209355 Add vermont_castings virtual integration for Intellifire (#89317) 2023-03-09 13:17:50 +01:00
epenet
4a082403eb Add missing mock in coronavirus config flow tests (#89428) 2023-03-09 13:16:36 +01:00
Jack Boswell
c6d2824afe Disable some less commonly used starlink entities by default (#87869)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-09 13:06:27 +01:00
epenet
b0631fed1d Add missing mock in braviatv config flow tests (#89419) 2023-03-09 13:05:32 +01:00
epenet
9faf251321 Add missing mock in buienradar config flow tests (#89420) 2023-03-09 13:05:04 +01:00
J. Nick Koston
86ad8261d8 Update logbook queries for SADeprecationWarning (#87108) 2023-03-09 13:03:08 +01:00
avee87
c2f69dc59d Revert Transmission entities name changes (#89409) 2023-03-09 13:02:12 +01:00
TheJulianJES
3989ef8863 Parse attribute reports for ZHA select entity (#89418)
* Parse attribute reports for ZHA select entity

* Add test for checking that select entity attribute reports are parsed
2023-03-09 07:01:18 -05:00
Jeef
ead3662b7a Add quadrafire virtual integration for Intellifire (#89316) 2023-03-09 13:00:31 +01:00
epenet
c5ff3e9914 Add review-process link to PR template (#89430) 2023-03-09 11:52:20 +01:00
epenet
dbebe57d51 Avoid unnecessary Task in debouncer (#89370) 2023-03-09 11:41:59 +01:00
starkillerOG
c9d5baca75 Add hostname to DHCP discovery title (#89426) 2023-03-09 11:12:29 +01:00
Felix Rotthowe
5828e9a8d2 Simplify LivisiEntity inheritance (#89424)
* We don't need to inherit Entity. The CoordinatorEntity already does that.

* update imports
2023-03-09 09:27:53 +01:00
Jan Bouwhuis
1a4b14c217 Fix MQTT rgb light brightness scaling (#89264)
* Normalize received RGB colors to 100% brightness

* Assert on rgb_color attribute

* Use max for RGB to get brightness

* Avoid division and add clamp

* remove clamp

Co-authored-by: Erik Montnemery <erik@montnemery.com>

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2023-03-09 08:02:59 +01:00
Joakim Sørensen
e5ce8e920d Add paths for add-on changelog and documentation (#89411) 2023-03-08 20:23:33 -05:00
J. Nick Koston
170a13302c Reduce overhead to store context ids in the database (#88942) 2023-03-08 14:51:45 -10:00
Marc Mueller
386533a16f Update mypy to 1.1.1 (#89268)
* Update mypy to 1.1.1
* Update pydantic to 1.10.6
2023-03-08 22:57:54 +01:00
Matthias Alphart
bfae8992a9 Better log message for KNX expose conversion error (#89400) 2023-03-08 22:42:07 +01:00
Dillon Fearns
0d948a0f11 Bump roombapy to 1.6.6 (#89366)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-08 22:39:33 +01:00
Jan Bouwhuis
366baef7f6 Allow enum as MQTT sensor device_class (#89391) 2023-03-08 22:35:06 +01:00
Mark Adkins
8af37f7fee Update SharkIQ code owners (#89388) 2023-03-08 22:05:23 +01:00
mkmer
5c768c3f89 Bump aiosomecomfort to 0.0.14 (#89393) 2023-03-08 22:02:18 +01:00
J. Nick Koston
e1d62b554a Migrate integration_platform helper to use async_get_integrations (#89303)
* Migrate integration_platform helper to use async_get_integrations

We were fetching integrations inside the gather one
at a time. This is inefficent.

* cleanup

* cleanup

* add task name

* small tweaks

* gather only if we have tasks
2023-03-08 16:01:47 -05:00
Brandon Rothweiler
4f11344bc3 Bump pymazda to 0.3.8 (#89387) 2023-03-08 10:56:40 -10:00
J. Nick Koston
5dbab21f9a Fix missing f-string in filterable_job (#89340)
* Fix missing f-string in filterable_job

* remove bad test
2023-03-08 15:53:48 -05:00
Malte Franken
b07f614cf5 Add loggers to gdacs manifest file (#89338)
define loggers
2023-03-08 15:53:12 -05:00
Erik Montnemery
09915f8047 Add WS API for getting an OTBR's extended address (#89384)
* Add WS API for getting an OTBR's extended address

* Bump python-otbr-api to 1.0.8

* Really add require_admin decorator to otbr WS API
2023-03-08 15:52:53 -05:00
Robert Svensson
5a499050f2 Remove lingering timer related to camera (#89394) 2023-03-08 15:52:01 -05:00
J. Nick Koston
cefba7c638 Avoid falling back to listening for all states when a template render raises an exception (#89392)
When a template render raised an exception we would start listening for
all states until the template did not raise an exception anymore. This
was not needed since the entity that is causing the exception was
already in the tracker.

Re-rendering on all state changes can be extremely expensive and can
bring an instance into a sluggish or unresponsive state when updating
from a much older version that did not raise ValueError when a default
was missing.
2023-03-08 15:50:34 -05:00
Mark Adkins
84b5ea8ac0 Bump SharkIQ to 1.0.2 (#89346)
* SharkIQ Dep & Codeowner Update

* Update code owners

* Revert code owner changes
2023-03-08 15:31:32 -05:00
Erik Montnemery
7232a0a786 Add require_admin decorator to otbr WS API (#89385)
* Add require_admin decorator to otbr WS API

* Add require_admin decorator to forgotten otbr WS API
2023-03-08 19:21:04 +01:00
Franck Nijhof
3dca4c2f23 2023.3.2 (#89381) 2023-03-08 18:35:50 +01:00
parliament119
7d97653895 Bump pyfritzhome to 0.6.8 and add support for Non-Color-Bulbs (#89141) 2023-03-08 18:24:37 +01:00
Erik Montnemery
18cb53a35c Pass hass instance when validating templates (#89242)
* Pass hass instance when validating templates

* Update tests

* Fix validating templates without hass

* Update service tests
2023-03-08 11:28:53 -05:00
Vincent Knoop Pathuis
b0013247ff Move Landis+Gyr sensor descriptions to sensor platform (#89382)
Move HEAT_METER_SENSOR_TYPES to sensor platform
2023-03-08 16:56:04 +01:00
Marc Mueller
bfb89fd8f2 Update pylint to 2.17.0 (#89377)
* Update pylint to 2.17.0

* Remove unused pylint disable comments
2023-03-08 10:54:19 -05:00
epenet
7982f713e1 Fix lingering tasks in plex (#89282)
* Cleanup expected_lingering_tasks in plex

* Adjust
2023-03-08 10:53:08 -05:00
J. Nick Koston
aff7345ea0 Improve event filters to reject earlier (#89337)
* Improve event filters to reject earlier

- Avoid running the callbacks for state added/removed from
  a domain if there are no listeners that care about the domain

- Remove some impossible checks in the listeners that will
  never match since they were already rejected by the filter

* leave one guard since there is a race when we return control via await
2023-03-08 10:25:42 -05:00
Franck Nijhof
3f8f38f2df Bumped version to 2023.3.2 2023-03-08 16:24:08 +01:00
epenet
0844a0b269 Fix invalid state class in litterrobot (#89380) 2023-03-08 16:23:30 +01:00
Franck Nijhof
b65180d20a Improve Supervisor API handling (#89379) 2023-03-08 16:23:26 +01:00
starkillerOG
7f8a9697f0 Fix setting Reolink focus (#89374)
fix setting focus
2023-03-08 16:23:22 +01:00
J. Nick Koston
563bd4a0dd Fix bluetooth history and device expire running in the executor (#89342) 2023-03-08 16:23:18 +01:00
J. Nick Koston
614a1b03c1 Use an event filter for event triggers (#89339)
We avoid the overhead of call_soon and event loop
scheduling if the event does not match the schema
2023-03-08 10:23:13 -05:00
Florent Thoumie
29b5ef31c1 Recreate iaqualink httpx client upon service exception (#89341) 2023-03-08 16:23:13 +01:00
Renat Sibgatulin
863f8b727d Remove invalid device class in air-Q integration (#89329)
Remove device_class from sensors using inconsistent units
2023-03-08 16:23:09 +01:00
J. Nick Koston
83ed8cf689 Fix thread diagnostics loading blocking the event loop (#89307)
* Fix thread diagnostics loading blocking the event loop

* patch target
2023-03-08 16:23:06 +01:00
Tom Harris
52cd2f9429 Fix Insteon open issues with adding devices by address and missing events (#89305)
* Add missing events

* Bump dependancies

* Update for code review
2023-03-08 16:23:02 +01:00
puddly
74d3b2374b Clean ZHA radio path with trailing whitespace (#89299)
* Clean config flow entries with trailing whitespace

* Rewrite the config entry at runtime, without upgrading

* Skip intermediate `data = config_entry.data` variable

* Perform a deepcopy to ensure the config entry will actually be updated
2023-03-08 16:22:58 +01:00
epenet
f982af2412 Ignore DSL entities if SFR box is not adsl (#89291) 2023-03-08 16:22:53 +01:00
luar123
0b5ddd9cbf Bump python-snapcast to 2.3.2 (#89259) 2023-03-08 16:22:49 +01:00
J. Nick Koston
8d1aa0132e Make sql subqueries threadsafe (#89254)
* Make sql subqueries threadsafe

fixes #89224

* fix join outside of lambda

* move statement generation into a seperate function to make it easier to test

* add cache key tests

* no need to mock hass
2023-03-08 16:22:45 +01:00
J. Nick Koston
d737b97c91 Bump sqlalchemy to 2.0.5post1 (#89253)
changelog: https://docs.sqlalchemy.org/en/20/changelog/changelog_20.html#change-2.0.5

mostly bugfixes for 2.x regressions
2023-03-08 16:22:41 +01:00
Marc Mueller
0fac12866d Fix conditional check (#89231) 2023-03-08 16:22:38 +01:00
Bram Kragten
e3fe71f76e Update frontend to 20230306.0 (#89227) 2023-03-08 16:22:34 +01:00
J. Nick Koston
eba1bfad51 Bump aioesphomeapi to 13.4.2 (#89210) 2023-03-08 16:22:30 +01:00
Franck Nijhof
1a0a385e03 Fix Tuya Python 3.11 compatibility issue (#89189) 2023-03-08 16:22:26 +01:00
MarkGodwin
c9999cd08c Fix host IP and scheme entry issues in TP-Link Omada (#89130)
Fixing host IP and scheme entry issues
2023-03-08 16:22:22 +01:00
rappenze
8252aeead2 Bump pyfibaro version to 0.6.9 (#89120) 2023-03-08 16:22:18 +01:00
J. Nick Koston
c27a69ef85 Handle InnoDB deadlocks during migration (#89073)
* Handle slow InnoDB rollback when encountering duplicates during migration

fixes #89069

* adjust

* fix mock

* tests

* return on success
2023-03-08 16:22:15 +01:00
J. Nick Koston
d4c28a1f4a Cache transient templates compiles provided via api (#89065)
* Cache transient templates compiles provided via api

partially fixes #89047 (there is more going on here)

* add a bit more coverage just to be sure

* switch method

* Revert "switch method"

This reverts commit 0e9e1c8cbe.

* tweak

* hold hass

* empty for github flakey
2023-03-08 16:22:10 +01:00
Andrew Westrope
322eb4bd83 Check type key of zone exists in geniushub (#86798)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-08 16:22:05 +01:00
J. Nick Koston
4ce36366c3 Add names to the config entry setup and shutdown tasks (#89309)
* name the entry setup tasks

* name a few more tasks

* Update homeassistant/config_entries.py

* Update homeassistant/setup.py
2023-03-08 10:19:36 -05:00
epenet
3e2ee7cd11 Add missing mock in aemet config flow tests (#89360) 2023-03-08 10:18:44 -05:00
epenet
33906059d3 Add missing mock in airq config flow tests (#89364) 2023-03-08 10:18:31 -05:00
epenet
3a40f5f35b Add missing mock in airvisual_pro config flow tests (#89362) 2023-03-08 15:18:24 +00:00
epenet
23698eb99f Add missing mock in agent_dvr config flow tests (#89361) 2023-03-08 15:18:17 +00:00
epenet
959c2205d5 Add missing mock in airvisual config flow tests (#89359) 2023-03-08 10:18:07 -05:00
epenet
b61ad43144 Add missing mock in amber config flow tests (#89358) 2023-03-08 10:17:45 -05:00
epenet
f4572a2e1c Add missing mock in atag config flow tests (#89356) 2023-03-08 10:16:51 -05:00
epenet
ea6a95176d Add missing mock in azure event hub config flow tests (#89355) 2023-03-08 10:16:28 -05:00
Florent Thoumie
2ec78ae70e Recreate iaqualink httpx client upon service exception (#89341) 2023-03-08 15:37:24 +01:00
J. Nick Koston
5374c70c97 Fix bluetooth history and device expire running in the executor (#89342) 2023-03-08 15:27:34 +01:00
epenet
2626dd2c83 Fix invalid state class in litterrobot (#89380) 2023-03-08 15:24:19 +01:00
Franck Nijhof
feb3f543be Improve Supervisor API handling (#89379) 2023-03-08 15:21:11 +01:00
starkillerOG
9381865f1c Fix setting Reolink focus (#89374)
fix setting focus
2023-03-08 12:25:51 +01:00
Renat Sibgatulin
452e1d341d Remove invalid device class in air-Q integration (#89329)
Remove device_class from sensors using inconsistent units
2023-03-08 10:00:40 +01:00
epenet
30884f6d17 Add missing mock in axis config flow tests (#89365) 2023-03-08 09:38:55 +01:00
epenet
adb4414440 Add missing mock in brother config flow tests (#89354) 2023-03-08 08:43:07 +01:00
Marc Mueller
58280dc2ec Improve gios generic typing (#89321) 2023-03-08 08:39:15 +01:00
Nathan Spencer
ff83b8adb8 Bump pybalboa to 1.0.1 (#89310) 2023-03-08 08:26:34 +01:00
J. Nick Koston
3e5e937541 Use a filter for the PersonStorageCollection EVENT_ENTITY_REGISTRY_UPDATED listener (#89335)
Avoids creating a task unless a device_tracker is removed
2023-03-07 21:07:24 -05:00
Tom Harris
008a30618c Fix Insteon open issues with adding devices by address and missing events (#89305)
* Add missing events

* Bump dependancies

* Update for code review
2023-03-07 21:06:29 -05:00
puddly
fa128fbcec Clean ZHA radio path with trailing whitespace (#89299)
* Clean config flow entries with trailing whitespace

* Rewrite the config entry at runtime, without upgrading

* Skip intermediate `data = config_entry.data` variable

* Perform a deepcopy to ensure the config entry will actually be updated
2023-03-07 20:24:08 -05:00
J. Nick Koston
bde40cde48 Fix thread diagnostics loading blocking the event loop (#89307)
* Fix thread diagnostics loading blocking the event loop

* patch target
2023-03-07 20:21:26 -05:00
J. Nick Koston
099f16f6b8 Fix missing f-string in async_listen (#89336) 2023-03-07 20:19:08 -05:00
Erik Montnemery
aa2267d68e Rename hass context variable (#89302) 2023-03-07 23:21:47 +01:00
starkillerOG
2d3c5cf8ee Reolink test init 100% (#89112)
* Split out reolink tests

* Bring __init__ coverage to 100%

* Improve docstrings

* Use patching and autospec=True for ReolinkHost

* Use fixture

* fix styling

* Parametrize tests

* Update tests/components/reolink/conftest.py

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* Apply suggestions from code review

Co-authored-by: Franck Nijhof <frenck@frenck.nl>

* Update test_config_flow.py

* convert to fixture

* review comments

* Update tests/components/reolink/conftest.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update tests/components/reolink/conftest.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update tests/components/reolink/conftest.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* fix tests

* fix imports

* Update test_init.py

* Check if host is logout on reload

---------

Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-07 20:29:38 +01:00
epenet
f9a59c0839 Ignore DSL entities if SFR box is not adsl (#89291) 2023-03-07 19:04:50 +01:00
Erik Montnemery
bc0b3abb01 Remove unittest.TestCase from service helper tests (#89283)
* Remove unittest.TestCase from service helper tests

* Update

* Improve tests
2023-03-07 16:54:35 +01:00
Erik Montnemery
058bb4c3e6 Drop deepcopy of Alexa config (#89284) 2023-03-07 16:16:46 +01:00
Erik Montnemery
f5a3c4f7f5 Drop deepcopy of intent_script config (#89285) 2023-03-07 16:16:24 +01:00
Erik Montnemery
f48b535d9d Drop deepcopy of manual alarm control panel config (#89286) 2023-03-07 16:15:48 +01:00
Erik Montnemery
3f061e9101 Drop deepcopy of manual mqtt alarm control panel config (#89287) 2023-03-07 16:15:26 +01:00
epenet
ff2a88b426 Bump ruff to 0.0.254 (#89273) 2023-03-07 13:25:31 +01:00
Franck Nijhof
8c282e2b0d Remove deprecated DSMR Reader YAML configuration (#89239) 2023-03-07 13:24:41 +01:00
epenet
14bf68ad03 Cleanup expected_lingering_tasks in knx (#89279) 2023-03-07 11:59:31 +01:00
epenet
c51bde9a26 Fail CI on lingering tasks (#88905) 2023-03-07 11:35:48 +01:00
Aidan Timson
85bcf11aeb Update systembridgeconnector to 3.4.8 (#79732)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-07 10:22:31 +01:00
Doney den Ouden
755c44d152 Add HomeKit Door accessory type (#80741)
Co-authored-by: Jason Redd <jredd46@gmail.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-06 18:07:43 -10:00
J. Nick Koston
3c70dd9b42 Make sql subqueries threadsafe (#89254)
* Make sql subqueries threadsafe

fixes #89224

* fix join outside of lambda

* move statement generation into a seperate function to make it easier to test

* add cache key tests

* no need to mock hass
2023-03-06 20:44:11 -05:00
J. Nick Koston
9672b5f02c Bump sqlalchemy to 2.0.5post1 (#89253)
changelog: https://docs.sqlalchemy.org/en/20/changelog/changelog_20.html#change-2.0.5

mostly bugfixes for 2.x regressions
2023-03-06 20:20:37 -05:00
J. Nick Koston
ee89922c1b Add support for bluetooth pairing in esphome (#88603)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
2023-03-06 14:24:35 -10:00
J. Nick Koston
5ccaa549d1 Bump aioesphomeapi to 13.5.0 (#89262) 2023-03-06 14:04:10 -10:00
luar123
7972dbf9fb Bump python-snapcast to 2.3.2 (#89259) 2023-03-06 22:48:40 +01:00
Marc Mueller
84034959ba Improve reolink generic typing (#88786)
Co-authored-by: starkillerOG <starkiller.og@gmail.com>
2023-03-06 21:54:34 +01:00
J. Nick Koston
83fa4c6c60 Bump aioesphomeapi to 13.4.2 (#89210) 2023-03-06 18:49:54 +01:00
Maciej Bieniek
1538f639ae Bump gios library to version 3.1.0 (#89044) 2023-03-06 18:12:19 +01:00
Marc Mueller
b407227d4a Update pylint to 2.16.4 (#89240) 2023-03-06 17:50:42 +01:00
starkillerOG
f9be796ca3 Reolink extend DHCP discovery (#89238) 2023-03-06 17:23:24 +01:00
epenet
91e389c58d Bump ruff to 0.0.253 (#89211)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-03-06 16:16:31 +01:00
starkillerOG
e8bdaaacd9 Add comment about Reolink Floodlight turn on brightness (#89234)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-03-06 16:08:53 +01:00
Robert Svensson
9ff45ca013 Allow loading UniFi entities on config options change (#88762)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-06 16:08:14 +01:00
epenet
ee6f969c2a Add type hints to ps4 media player (#89236) 2023-03-06 15:56:34 +01:00
Jan Bouwhuis
5ee383456f Catch exceptions and add logging when writing states on MQTT entities (#89091)
* Catch exceptions when writing states

* Do not use wrapper for logging and adjust tests

* Catch logging directly on async_write_ha_state()

* Update homeassistant/components/mqtt/models.py

Co-authored-by: Erik Montnemery <erik@montnemery.com>

* Fix test

---------

Co-authored-by: Erik Montnemery <erik@montnemery.com>
2023-03-06 15:34:47 +01:00
Marc Mueller
0c042e8f72 Fix conditional check (#89231) 2023-03-06 14:04:36 +01:00
starkillerOG
76cc4c9c08 Add Reolink light platform (#88619)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-03-06 12:48:36 +01:00
Bram Kragten
0ce9c6293a Update frontend to 20230306.0 (#89227) 2023-03-06 12:47:01 +01:00
starkillerOG
b2166c3117 Reolink add new number entities (#87932)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-06 12:42:34 +01:00
epenet
14a17b1028 Use mock_setup_entry fixture in melnor (#89226) 2023-03-06 12:28:40 +01:00
Raman Gupta
b572ecc62d Update zwave_js README with contributor instructions (#89158) 2023-03-06 12:06:53 +01:00
epenet
bf5f7c53d8 Move mock_setup_entry to conftest (#88484) 2023-03-06 11:31:50 +01:00
Fabian Pfütsch
ea4d2bd1e8 Sync tado zones after updating climate preset (#79715) 2023-03-06 10:40:34 +01:00
Erik Montnemery
ab1df8065c Refresh homeassistant_alerts when components are loaded (#76049) 2023-03-06 10:26:37 +01:00
epenet
0c65af93af Split reauth tests in plex (#89212) 2023-03-06 10:02:32 +01:00
Franck Nijhof
c7b30b61de Revert "Add device info to edl21" (#89217) 2023-03-06 08:51:33 +01:00
Stephan Uhle
fc673139cd Add device info to edl21 (#89070)
* Added device info for edl21.

* Apply suggestions from code review
2023-03-06 08:29:41 +01:00
MarkGodwin
876776e291 Fix host IP and scheme entry issues in TP-Link Omada (#89130)
Fixing host IP and scheme entry issues
2023-03-05 23:47:45 -05:00
ztamas83
811e286f0f Test coverage for Tibber config flow (#89088)
* Test coverage for Tibber config flow

* Fix isort and ruff errors
2023-03-05 20:38:47 -05:00
Matthias Alphart
36dabaaea6 Fix lingering tasks in KNX tests (#89201) 2023-03-05 20:19:42 -05:00
Franck Nijhof
ff485d4648 Refactor WLED number tests (#88582) 2023-03-05 19:49:01 -05:00
Franck Nijhof
a0ff95cef8 Update pytest to 7.2.2 (#89179) 2023-03-05 19:47:52 -05:00
Franck Nijhof
74566258ba Update watchdog to 2.3.1 (#89190) 2023-03-05 19:47:31 -05:00
Franck Nijhof
570db2a0af Update sentry-sdk to 1.16.0 (#89193) 2023-03-05 19:47:19 -05:00
Franck Nijhof
3e1d9deb29 Update coverage to 7.2.1 (#89196) 2023-03-05 19:47:07 -05:00
Franck Nijhof
216864d8f0 Refactor WLED switch tests (#89197) 2023-03-05 19:46:53 -05:00
starkillerOG
b14c5046e2 Reolink add select platform (#87946)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-05 23:43:58 +01:00
Ernst Klamer
497e3cf744 Bump bthome to 2.8.0 (#89192) 2023-03-05 23:35:48 +01:00
Franck Nijhof
d9fc932253 Fix Tuya Python 3.11 compatibility issue (#89189) 2023-03-05 22:19:40 +01:00
Tucker Kern
37ec442ffb Use title case for Transmission status sensor (#88578
* Use title case for Transmission status sensor

* Use localizations for transmission status sensor

* Assign device class and options as requested by review.

* Don't use title case for entity names
2023-03-05 22:12:30 +01:00
starkillerOG
c792631f15 Add Reolink siren platform (#88217)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-03-05 21:21:22 +01:00
starkillerOG
b2c9208dd0 Reolink add switch platform (#87943)
Co-authored-by: Franck Nijhof <git@frenck.dev>
2023-03-05 21:00:51 +01:00
Khole
da100040a5 Hive add ability to delete device (#80838) 2023-03-05 20:43:33 +01:00
G Johansson
f4cda2dfda Add device_class and state_class to sql (#85418) 2023-03-05 20:30:42 +01:00
Franck Nijhof
84402a9ae0 Remove deprecated Season YAML configuration (#89166)
* Remove deprecated Season YAML configuration

* Restore old title defaults
2023-03-05 17:07:32 +01:00
Jan Bouwhuis
a9becd8e0e Raise ValueError on date parsing of MQTT sensor with invalid date format (#89036)
* Suppress ValueError on date parsing of MQTT sensor

* Simplify, but not update state on invalid payload

* Still raise an an invalid date

* Make datetime state unknown on invalid format

* remove unrelated added new line
2023-03-05 17:06:48 +01:00
Franck Nijhof
2fc2c2efbe Remove deprecated Moon YAML configuration (#89161)
* Remove deprecated Moon YAML configuration

* Restore old title defaults
2023-03-05 17:05:32 +01:00
Greg Dowling
7b54061ab7 Add repeat to roon media player (#88851) 2023-03-05 15:43:52 +01:00
Chris Talkington
2e1f6cad96 Detect newly connected clients in jellyfin (#89168) 2023-03-05 15:00:16 +01:00
Ben Morton
680f3c27a5 Add support for Spotify podcasts (#87671) 2023-03-05 14:02:38 +01:00
Andrew Westrope
cc6721c06b Check type key of zone exists in geniushub (#86798)
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-05 13:51:02 +01:00
Geoff
b51dadbfe6 Update link to opencv in image_process log message (#89008) 2023-03-05 13:49:51 +01:00
Marc Mueller
cf369ff1a5 Unpin pandas for Python 3.11 (#89033) 2023-03-05 13:40:10 +01:00
Felix Rotthowe
189c612100 Add support for Livisi PSSO, ISS and ISS2 switch devices (#89140) 2023-03-05 13:36:56 +01:00
Carlos Cristobal
3614114a8f Revert "Replace Fitbit weight SensorStateClass measurement with total" (#89126) 2023-03-05 13:36:25 +01:00
Greg Dowling
08b3945d9b Bump pyroon to 0.1.4 (#89124) 2023-03-05 13:35:32 +01:00
starkillerOG
3f7a58786f Bump reolink-aio to 0.5.3 (#89145) 2023-03-05 13:34:07 +01:00
starkillerOG
39db0ef173 Add Reolink button platform (#88687)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-03-05 13:01:10 +01:00
Mick Vleeshouwer
85618fd3cd Bump overkiz dependency to 1.7.7 (#89163) 2023-03-05 12:54:39 +01:00
gjong
afd37c8a0a Bump youless api version to v1.0.1 (#89117) 2023-03-05 12:49:02 +01:00
J. Nick Koston
11681f3f31 Pass a helpful name when creating common asyncio tasks in core (#89171) 2023-03-05 12:46:02 +01:00
J. Nick Koston
927b43626c Bump aiodiscover to 1.4.14 (#89174) 2023-03-05 12:44:45 +01:00
Maciej Bieniek
6dc99d2ad8 Bump brother and pysnmplib backend libraries (#89100)
* Bump brother and pysnmplib

* Fix tests
2023-03-05 12:40:12 +01:00
Raman Gupta
62b0603b76 Bump pyvizio to 0.1.60 (#89160) 2023-03-05 01:03:36 -05:00
epenet
ec0223f326 Cleanup plex config flow tests (#88991) 2023-03-05 05:38:26 +01:00
Franck Nijhof
bfadc8453d Clean up import/migration repair in LaMetric (#89153) 2023-03-05 02:41:31 +01:00
Garrett
34f8e94ca9 Bump subarulink to 0.7.5 (#89162) 2023-03-04 22:26:16 +01:00
Franck Nijhof
5e2b7c6377 Refactor WLED diagnostic tests (#88581) 2023-03-04 15:09:47 +01:00
rappenze
2e5801cb6d Bump pyfibaro version to 0.6.9 (#89120) 2023-03-04 12:05:41 +01:00
Franck Nijhof
bab758c951 Refactor WLED button tests (#88580) 2023-03-04 11:45:53 +01:00
Bob van de Vijver
b27b094e27 Add day to event end to correct TwenteMilieu event timespan (#89028)
[TwenteMilieu] Add day to event end to correct event timespan

Co-authored-by: Allen Porter <allen@thebends.org>
2023-03-03 20:06:28 -08:00
J. Nick Koston
1bd9767d8c Handle InnoDB deadlocks during migration (#89073)
* Handle slow InnoDB rollback when encountering duplicates during migration

fixes #89069

* adjust

* fix mock

* tests

* return on success
2023-03-03 22:00:13 -05:00
Charles Garwood
1d9e8c873f Revert Intellifire breaking change from #88666 (#89110) 2023-03-03 17:16:12 +01:00
Felix Rotthowe
3a34f818e8 Refactor Livisi Switch and Climate to inherit from a common base class (#89085)
* Refactor Livisi entities to inherit from a common base class

* Add livisi_entity to .coveragerc

* Device location can be None

* Add use_room_as_device_name argument to constructor of LivisiEntity

When initializing, set entity name attribute only if device name differs (i.e. use_room_as_device_name=True).

* re-add comment for special handling of climate device names

* Add explicit type to constructur argument

* Make use_room_as_device_name a keyword only arg

* rename livisi_entity.py to entity.py

* change livisi_entity.py to entity.py in coveragerc

* Code quality improvements as suggested in PR

* sort .coveragerc

* fix isort issue

* fix all isort issues
2023-03-03 15:23:38 +01:00
Jeef
415190683f Updating Intellifire Naming scheme (#88666) 2023-03-03 09:04:27 -05:00
Stephan Uhle
9736fe1f99 Add missing Edl21 sensor 1-0:0.0.0*255 (#87389)
* Added missing sensor.

* OwnerShip entity is disabled by default.
2023-03-03 13:44:57 +01:00
epenet
0598417894 Enable ruff D404 (#89093) 2023-03-03 12:38:40 +01:00
epenet
9e6f869438 Set Protocol inheritance on EnergyPlatform (#89079) 2023-03-03 11:57:41 +01:00
epenet
699cc6c092 Adjust docstring on hassfest generated files (#89080) 2023-03-03 11:34:20 +01:00
epenet
4a3c0cd0a8 Adjust docstrings for ruff D404 (#89077) 2023-03-03 11:26:13 +01:00
Thibaut
a5cf8210ae Move Cycle command from cover to button (#89043)
Declare Cycle command as a button
2023-03-03 08:38:07 +01:00
epenet
0f493d85c8 Adjust xiaomi_ble tests (#89078)
Adjust xiaomi_ble test docstrings
2023-03-03 08:32:23 +01:00
Emory Penney
1cb1dfa456 Add Obihai reboot button (#88849)
* Obihai: Add reboot service

* Switch to button

* Remove button.py from coverage

* Update homeassistant/components/obihai/const.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/obihai/button.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Update homeassistant/components/obihai/button.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* PR Feedback

* Cleanup some typehints

* As a class attr

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-03 07:31:56 +01:00
Raman Gupta
a689ce7283 Remove unused constant (#89071) 2023-03-02 23:21:40 -05:00
J. Nick Koston
48b93e03ee Cache transient templates compiles provided via api (#89065)
* Cache transient templates compiles provided via api

partially fixes #89047 (there is more going on here)

* add a bit more coverage just to be sure

* switch method

* Revert "switch method"

This reverts commit 0e9e1c8cbe.

* tweak

* hold hass

* empty for github flakey
2023-03-02 21:31:12 -05:00
Guy Martin
7365522d1f Add matching on quirk_classes to zha (#87653)
* Add matching on quirk_classes.

* Add and fix tests for matching on quirk_classes.

* Black fix.

* Add a unit test to validate quirk classes.
2023-03-02 19:43:11 -05:00
Paulus Schoutsen
f0f12fd14a 2023.3.1 (#89059) 2023-03-02 15:53:50 -05:00
Mitch
1836e35717 Bump nuheat to 1.0.1 (#88958) 2023-03-02 15:15:15 -05:00
Paulus Schoutsen
4eb55146be Bumped version to 2023.3.1 2023-03-02 14:22:23 -05:00
Jan Bouwhuis
b1ee6e304e Fix check on non numeric custom sensor device classes (#89052)
* Custom device classes are not numeric

* Update homeassistant/components/sensor/__init__.py

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>

* Add test

* Update homeassistant/components/sensor/__init__.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-02 14:22:12 -05:00
Paul Bottein
d0b195516b Update frontend to 20230302.0 (#89042) 2023-03-02 14:22:11 -05:00
Franck Nijhof
a867f1d3c8 Update orjson to 3.8.7 (#89037) 2023-03-02 14:22:09 -05:00
Matthias Alphart
f7eaeb7a39 Fix KNX Keyfile upload (#89029)
* Fix KNX Keyfile upload

* use shutil.move instead
2023-03-02 14:22:08 -05:00
Erik Montnemery
3e961d3e17 Bump py-dormakaba-dkey to 1.0.4 (#88992) 2023-03-02 14:22:07 -05:00
Mitch
c28e16fa8b Bump requests to 2.28.2 (#88956)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-03-02 14:22:06 -05:00
Toni Juvani
e2e8d74aa6 Update pyTibber to 0.27.0 (#86940)
* Update pyTibber to 0.27.0

* Handle new exceptions
2023-03-02 14:22:05 -05:00
Jan Bouwhuis
8968ed1c47 Fix check on non numeric custom sensor device classes (#89052)
* Custom device classes are not numeric

* Update homeassistant/components/sensor/__init__.py

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>

* Add test

* Update homeassistant/components/sensor/__init__.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-02 14:20:26 -05:00
epenet
5cab63c5b8 Fix lingering task in debounce tests (#89019)
* Fix lingering task in debounce tests

* Correct fix

* Use async_fire_time_changed
2023-03-02 13:01:50 -05:00
epenet
eebcf70b41 Re-enable Ruff D411 (#89035) 2023-03-02 13:01:05 -05:00
Matthias Alphart
e849878a48 Fix KNX Keyfile upload (#89029)
* Fix KNX Keyfile upload

* use shutil.move instead
2023-03-02 10:13:02 -05:00
Toni Juvani
f69aa7ad9d Update pyTibber to 0.27.0 (#86940)
* Update pyTibber to 0.27.0

* Handle new exceptions
2023-03-02 10:11:34 -05:00
Paul Bottein
fd4d79d24c Update frontend to 20230302.0 (#89042) 2023-03-02 10:10:26 -05:00
Franck Nijhof
ec32b934a5 Update orjson to 3.8.7 (#89037) 2023-03-02 09:40:46 -05:00
Xavier Decuyper
1efc33d4c6 Nuki: show actual device model in device registry (#89017)
* Bump pynuki to 1.6.1 (adds friendly device model names)

* Nuki: use friendly model name for device registry

* Update global dependencies
2023-03-02 13:40:22 +01:00
Brett Adams
e5fc2d3f78 Add Turn On and Turn Off for Advantage Air climate platform (#88684)
* Added Climate On and Climate Off

* Add Tests

* Fix off and on in zone

* Add test assertions for zone HVAC mode
2023-03-02 13:13:31 +01:00
Erik Montnemery
28e8fae280 Fix flaky energy tests (#89026) 2023-03-02 12:33:04 +01:00
Erik Montnemery
aa92d05317 Bump py-dormakaba-dkey to 1.0.4 (#88992) 2023-03-01 21:07:12 -05:00
Franck Nijhof
19c08bfdd5 Refactor WLED binary sensor test (#88579) 2023-03-01 23:44:12 +01:00
Stephan Uhle
adb0455bd2 Add config flow to EDL21 (#87655)
* Added config_flow for edl21.

* Added already_configured check.

* Added config_flow test

* Added setup of the edl21 from configuration.yaml

* Ran script.gen_requirements_all

* Removed the generated translation file.

* Added a deprecation warning when importing from configuration.yaml.

* Readded the platform schema.

* Added handling of optional name for legacy configuration.

* Fixed handling of default value in legacy configuration.

* Added duplication check entries created via legacy config.

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Apply suggestions from code review

* Apply suggestions from code review

* Apply suggestions from code review

* Apply suggestions from code review

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Apply suggestions from code review

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-01 21:19:20 +01:00
Franck Nijhof
8a9fbd650a 2023.3.0 (#88979) 2023-03-01 19:53:46 +01:00
J. Nick Koston
07839cc971 Bump ulid-transform to 0.4.0 (#88982)
changelog: https://github.com/bdraco/ulid-transform/compare/v0.3.1...v0.4.0
2023-03-01 13:35:53 -05:00
Jan Bouwhuis
ae04c5d773 Clean up unused and deprecated TLS version setting on MQTT client (#88674)
* Cleanup CONF_TLS_VERSION remains

* Fix diagnostics tests
2023-03-01 18:42:34 +01:00
epenet
bdbec491eb Enable RUFF ICN001 for registries (#88875)
* Add issue_registry to RUFF extend aliases

* Add area_registry to RUFF extend aliases

* Add device_registry to RUFF extend aliases

* Add entity_registry to RUFF extend aliases

* Adjust scaffold
2023-03-01 12:40:26 -05:00
Paulus Schoutsen
3f32c5d2ad Yaml use dict (#88977)
* Use built-in dict instead of OrderedDict

* Use dict instead of OrderedDict in YAML
2023-03-01 12:29:57 -05:00
Erik Montnemery
243725efe3 Tweak OTBR tests (#88839) 2023-03-01 17:53:38 +01:00
Franck Nijhof
8d59489da8 Bumped version to 2023.3.0 2023-03-01 17:25:44 +01:00
Stefan Agner
c146413a1a Add Home Assistant with space as brand (#88976) 2023-03-01 17:25:08 +01:00
Bram Kragten
a46d63a11b Update frontend to 20230301.0 (#88975) 2023-03-01 17:25:05 +01:00
mkmer
db4f6fb94d Bump Aiosomecomfort to 0.0.11 (#88970) 2023-03-01 17:25:01 +01:00
Erik Montnemery
c50c920589 Revert "Add state_class = MEASUREMENT to Derivative sensor (#88408)" (#88952) 2023-03-01 17:24:56 +01:00
starkillerOG
fe22aa0b4b Motion Blinds DHCP restrict (#88919)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-01 17:23:00 +01:00
Aaron Godfrey
a0162e4986 Fix todoist filtering custom projects by labels (#87904)
* Fix filtering custom projects by labels.

* Don't lowercase the label.

* Labels are case-sensitive, don't lowercase them.
2023-03-01 17:22:56 +01:00
RogerSelwyn
62c5cf51f5 Fix geniushub heating hvac action (#87531) 2023-03-01 17:22:53 +01:00
Frédéric Guardia
89aebba3ab Fix Google Assistant temperature attribute (#85921) 2023-03-01 17:22:48 +01:00
Bram Kragten
89c276bb6b Update frontend to 20230301.0 (#88975) 2023-03-01 11:12:37 -05:00
Stefan Agner
b607a09e4b Add Home Assistant with space as brand (#88976) 2023-03-01 17:10:19 +01:00
epenet
ee78864b05 Adjust entity registry access in homekit tests (#88959) 2023-03-01 16:54:00 +01:00
Erik Montnemery
3818e318db Improve threshold binary sensor tests (#88972) 2023-03-01 16:53:42 +01:00
Erik Montnemery
12933353b2 Drop codeowner from threshold integration (#88973) 2023-03-01 16:46:19 +01:00
Emory Penney
137d2f0d73 Obihai config flow fixes (#88853)
* Commit split issue

* Clearer name

* Add yaml_failure test case

* Not sure why this is failing now

* Update homeassistant/components/obihai/strings.json

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* PR Feedback

* Update homeassistant/components/obihai/config_flow.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-03-01 16:33:32 +01:00
Maciej Bieniek
79bcdf43f7 Add current sensor for Shelly RPC devices (#88863) 2023-03-01 16:26:20 +01:00
epenet
b84eead3f8 Adjust entity registry access in helper tests (#88965) 2023-03-01 16:24:31 +01:00
epenet
d65dff3f9e Adjust entity registry access in tests (2) (#88960) 2023-03-01 16:23:36 +01:00
Erik Montnemery
09f1c2318d Disable gc in-between energy sensor tests (#88593) 2023-03-01 16:21:11 +01:00
mkmer
54de16875d Bump Aiosomecomfort to 0.0.11 (#88970) 2023-03-01 16:19:46 +01:00
Mitch
341d046ba7 Bump requests to 2.28.2 (#88956)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-03-01 16:17:55 +01:00
starkillerOG
eae12bd48d Motion Blinds DHCP restrict (#88919)
Co-authored-by: J. Nick Koston <nick@koston.org>
2023-03-01 16:16:04 +01:00
epenet
b94dffb7d3 Add missing mock in esphome tests (#88923) 2023-03-01 16:11:21 +01:00
epenet
9762b684c2 Adjust entity registry access in tests (3) (#88964) 2023-03-01 16:04:40 +01:00
epenet
23cdafd12f Use UnitOfVolumeFlowRate in huisbaasje and plugwise (#88967) 2023-03-01 15:26:39 +01:00
Thibaut
0c66346fb0 Add dynamic unit of measurement support for Overkiz sensor (#80490)
* Add dynamic unit support

* Import all units

* Fix typing

* Add fallback to CORE_ELECTRIC_POWER_CONSUMPTION_STATE_MEASURED_VALUE_TYPE

* Fix rebase

* Give priority to the more accurate attribute

* Don’t use hardcoded seconds unit

* Don’t change SensorDescription

* Rework comment
2023-03-01 13:46:26 +01:00
Frédéric Guardia
85f2693353 Fix Google Assistant temperature attribute (#85921) 2023-03-01 12:54:07 +01:00
RogerSelwyn
b75879194d Fix geniushub heating hvac action (#87531) 2023-03-01 12:34:41 +01:00
Aaron Godfrey
ab9bd5c29e Fix todoist filtering custom projects by labels (#87904)
* Fix filtering custom projects by labels.

* Don't lowercase the label.

* Labels are case-sensitive, don't lowercase them.
2023-03-01 12:01:54 +01:00
Mitch
42a69566ac Bump nuheat to 1.0.1 (#88958) 2023-03-01 11:39:14 +01:00
Erik Montnemery
fca5cc6ea3 Add number + sensor device class volume storage (#88312)
* Add number + sensor device class volume storage

* Fix typo

* Format code

* Update device automations
2023-03-01 11:22:57 +01:00
Erik Montnemery
29b049fc57 Don't create new venv if script/setup is run from within a venv (#88906) 2023-03-01 11:11:29 +01:00
epenet
6febe00516 Fix lingering task in entity_platform test (#88957)
* Fix lingering task in entity_platform test

* Speed up the test
2023-03-01 10:49:13 +01:00
epenet
ed3cdd8fb9 Fix lingering task in timeout test (#88953) 2023-03-01 09:42:55 +01:00
epenet
1fa3f32474 Add missing mock in notion tests (#88951) 2023-03-01 09:41:55 +01:00
epenet
853bd52a22 Adjust entity registry access in tests (1) (#88950) 2023-03-01 09:11:14 +01:00
J. Nick Koston
202bed5d51 Fix lingering reload task in notion reauth (#88949)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-03-01 09:07:46 +01:00
Erik Montnemery
9ab95b6348 Revert "Add state_class = MEASUREMENT to Derivative sensor (#88408)" (#88952) 2023-03-01 08:53:05 +01:00
epenet
42b74e7f56 Adjust entity registry access in integrations (3) (#88948) 2023-03-01 08:24:56 +01:00
epenet
f69d76702a Adjust entity registry access in integrations (2) (#88947) 2023-03-01 08:02:51 +01:00
epenet
b3d6f098d2 Adjust entity registry access in integrations (1) (#88946) 2023-03-01 08:02:34 +01:00
epenet
f2b736fad0 Adjust entity registry access in core platforms (#88944)
* Adjust entity registry access in platforms

* Adjust more core components
2023-03-01 08:02:16 +01:00
epenet
50f908ce2d Use load_json_object in fitbit (#88585)
* Use load_json_object in fitbit

* Remove unnecessary cast
2023-03-01 07:44:29 +01:00
epenet
95dd62186e Use json_loads_object in arwn (#88611) 2023-03-01 07:43:33 +01:00
Marius Stedjan
9fc6700c5a Add ZWaveDiscoverySchema for Merten 507801 (#88342)
* Add ZWaveDiscoverySchema for Merten 507801

* Add discovery tests to Merten 507801 z-wave device

* Add Z-Wave discovery schemas for Merten 507801 to disable endpoint 2 by default

* Add more discovery tests for Merten 507801 z-wave device
2023-03-01 00:47:47 -05:00
Paulus Schoutsen
6c73b9024b Bumped version to 2023.3.0b7 2023-02-28 22:18:39 -05:00
Michael Hansen
59a9ace171 Update intent sentences package (#88933)
* Actually use translated state names in response

* Change test result now that locks are excluded from HassTurnOn

* Bump home-assistant-intents and hassil versions
2023-02-28 22:18:32 -05:00
PatrickGlesner
e751948bc8 Update Tado services.yaml defaults (#88929)
Update services.yaml

Deletes default values in 'time_period' and 'requested_overlay' fields in 'set_climate_timer'.
2023-02-28 22:18:31 -05:00
djtimca
702646427d Bump auroranoaa to 0.0.3 (#88927)
* Bump aurora_api version to fix issues with NOAA conversion values. Fix #82587

* update requirements for aurora.

* Add state_class to aurora sensor.

* Fixed environment to run requirements_all script.

* Revert "Add state_class to aurora sensor."

This reverts commit 213e21e842.
2023-02-28 22:18:30 -05:00
Tom Harris
8a605b1377 Bump pyinsteon to 1.3.3 (#88925)
Bump pyinsteon
2023-02-28 22:18:29 -05:00
Erik Montnemery
8eb8415d3f Bump py-dormakaba-dkey to 1.0.3 (#88924)
* Bump py-dormakaba-dkey to 1.0.3

* Log unexpected errors in config flow
2023-02-28 22:18:28 -05:00
Volker Stolz
9f3f71d0c3 Introduce a UUID configuration option for API token (#88765)
* Introduce a UUID configuration option for API token. (#86547)

If the uuid is configured, it will be used in the HTTP headers. Otherwise,
we'll hash the salted instance URL which should be good enough(tm).

* Generate random 6-digit uuid on startup.
2023-02-28 22:18:28 -05:00
Chuck Deal
09d0128601 Add diagnostics to VeSync (#86350)
* Add diagnostics to VeSync

* Create unit tests for diagnostics and init

* Improved diagnostic test coverage

* Peer review fixes

* Fixed Peer Review comments

* Updated based on Peer Review

* Additional diagnostic redactions

* Removed account_id from diagnostic output
2023-02-28 22:12:48 -05:00
PatrickGlesner
5b49648846 Update Tado services.yaml defaults (#88929)
Update services.yaml

Deletes default values in 'time_period' and 'requested_overlay' fields in 'set_climate_timer'.
2023-02-28 22:02:52 -05:00
epenet
3e8716b37e Adjust AddEntitiesCallback import (part 2) (#88873) 2023-02-28 22:01:36 -05:00
epenet
c724e7c29f Adjust registry access in openai_conversation (#88882) 2023-02-28 21:59:44 -05:00
epenet
246f9784c8 Adjust registry access in Google Assistant (#88883) 2023-02-28 21:59:26 -05:00
epenet
ee781e4f49 Adjust registry access in scripts (#88884) 2023-02-28 21:58:47 -05:00
epenet
54f709f704 Adjust registry access in intent (#88881) 2023-02-28 21:58:19 -05:00
epenet
1bed5c7775 Adjust registry access in tests root (#88880) 2023-02-28 21:56:46 -05:00
epenet
0e4c32efe2 Adjust registry access in conversation (#88879) 2023-02-28 21:56:18 -05:00
epenet
6ab0b2751d Adjust issue_registry imports (#88878)
* Add issue_registry to RUFF extend aliases

* Adjust code accordingly

* Revert "Add issue_registry to RUFF extend aliases"

This reverts commit 4e73dd567b.

* Revert changes to common.py
2023-02-28 21:55:44 -05:00
Volker Stolz
86acc4262e Introduce a UUID configuration option for API token (#88765)
* Introduce a UUID configuration option for API token. (#86547)

If the uuid is configured, it will be used in the HTTP headers. Otherwise,
we'll hash the salted instance URL which should be good enough(tm).

* Generate random 6-digit uuid on startup.
2023-02-28 21:52:45 -05:00
Erik Montnemery
39f5f0946e Store source entity in switch_as_x entity options (#88914) 2023-02-28 21:15:44 -05:00
J. Nick Koston
8f6cfc25c0 Use ulid-transform for constructing ulids (#88939)
* Use ulid-transform for constructing ulids

A future PR will use the new library to reduce the storage
overhead of ulids in the database

* tweak

* tweak

* bump
2023-02-28 21:09:47 -05:00
Michael Hansen
e0bdb3ecc3 Update intent sentences package (#88933)
* Actually use translated state names in response

* Change test result now that locks are excluded from HassTurnOn

* Bump home-assistant-intents and hassil versions
2023-02-28 21:07:18 -05:00
djtimca
c5e39f7039 Add state class to Aurora (#88938)
* Bump aurora_api version to fix issues with NOAA conversion values. Fix #82587

* update requirements for aurora.

* Add state_class to aurora sensor.

* Fixed environment to run requirements_all script.

* Revert "Add state_class to aurora sensor."

This reverts commit 213e21e842.

* Add state class to aurora sensor.

* Revert "Fixed environment to run requirements_all script."

This reverts commit f3f624226e.

* Revert "update requirements for aurora."

This reverts commit a3546ad88d.

* Revert "Bump aurora_api version to fix issues with NOAA conversion values. Fix #82587"

This reverts commit faf3ba7b5b.

* Move state class to _attr_state_class.
2023-02-28 23:47:29 +01:00
djtimca
dccd3e277e Bump auroranoaa to 0.0.3 (#88927)
* Bump aurora_api version to fix issues with NOAA conversion values. Fix #82587

* update requirements for aurora.

* Add state_class to aurora sensor.

* Fixed environment to run requirements_all script.

* Revert "Add state_class to aurora sensor."

This reverts commit 213e21e842.
2023-02-28 23:33:05 +01:00
Tom Harris
47a3c27c9a Bump pyinsteon to 1.3.3 (#88925)
Bump pyinsteon
2023-02-28 15:34:07 -05:00
Erik Montnemery
ad55a5db11 Bump py-dormakaba-dkey to 1.0.3 (#88924)
* Bump py-dormakaba-dkey to 1.0.3

* Log unexpected errors in config flow
2023-02-28 15:33:50 -05:00
Erik Montnemery
69ce6980d6 Add number + sensor device class energy storage (#88310)
* Add number + sensor device class energy storage

* Format code

* Update device automations
2023-02-28 19:35:43 +01:00
Paulus Schoutsen
b82da9418d Bumped version to 2023.3.0b6 2023-02-28 12:13:24 -05:00
Erik Montnemery
38cf725075 Fix Dormakaba dKey binary sensor (#88922) 2023-02-28 12:12:52 -05:00
Franck Nijhof
04cedab8d4 Small improvements to middleware filter (#88921)
Small improvements middleware filter
2023-02-28 12:12:51 -05:00
Erik Montnemery
2238a3f201 Reset state of template cover on error (#88915) 2023-02-28 12:12:50 -05:00
Marcel van der Veldt
f58ca17926 Bump aiohue library to version 4.6.2 (#88907)
* Bump aiohue library to 4.6.2

* Fix long press (fixed in aiohue lib)

* fix test
2023-02-28 12:12:48 -05:00
Marcel van der Veldt
d5e517b874 Do not create Area for Hue zones (#88904)
Do not create HA area for Hue zones
2023-02-28 12:12:47 -05:00
Bram Kragten
f9eeb4f4d8 Fix string for OTBR config flow abort (#88902) 2023-02-28 12:12:46 -05:00
Marcel van der Veldt
86d5e4aaa8 Fix removal of non device-bound resources in Hue (#88897)
Fix removal of non device-bound resources (like entertainment areas)
2023-02-28 12:12:45 -05:00
b-uwe
a56935ed7c Add virtual integration for HELTUN (#88892) 2023-02-28 12:12:44 -05:00
Erik Montnemery
fc56c958c3 Only allow channel 15 during configuration of OTBR (#88874)
* Only allow channel 15 during automatic configuration of OTBR

* Also force channel 15 when creating a new network
2023-02-28 12:12:43 -05:00
Erik Montnemery
a8e1dc8962 Create repairs issue if Thread network is insecure (#88888)
* Bump python-otbr-api to 1.0.5

* Create repairs issue if Thread network is insecure

* Address review comments
2023-02-28 12:12:11 -05:00
Erik Montnemery
32b138b6c6 Add WS API for creating a Thread network (#88830)
* Add WS API for creating a Thread network

* Add tests
2023-02-28 12:11:14 -05:00
b-uwe
c444e1c860 Add virtual integration for HELTUN (#88892) 2023-02-28 18:09:52 +01:00
Erik Montnemery
2112c66804 Add confirm step to thread zeroconf flow (#88869)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-02-28 12:08:18 -05:00
Franck Nijhof
95ed6fbc08 Small improvements to middleware filter (#88921)
Small improvements middleware filter
2023-02-28 12:07:17 -05:00
Erik Montnemery
8321443193 Fix Dormakaba dKey binary sensor (#88922) 2023-02-28 12:07:01 -05:00
Erik Montnemery
7bfc7f134c Reset state of template cover on error (#88915) 2023-02-28 12:06:40 -05:00
epenet
ac6bbc2f1c Add missing mock in webostv config flow tests (#88913) 2023-02-28 12:04:40 -05:00
epenet
ee144d34a9 Adjust core test to avoid lingering task (#88918) 2023-02-28 12:03:36 -05:00
Marcel van der Veldt
36e6a879ad Bump aiohue library to version 4.6.2 (#88907)
* Bump aiohue library to 4.6.2

* Fix long press (fixed in aiohue lib)

* fix test
2023-02-28 11:53:15 -05:00
Erik Montnemery
c38df1102a Fix typo in thread (#88916) 2023-02-28 11:34:46 -05:00
Erik Montnemery
f93bd8ef2c Only allow channel 15 during configuration of OTBR (#88874)
* Only allow channel 15 during automatic configuration of OTBR

* Also force channel 15 when creating a new network
2023-02-28 11:08:45 -05:00
Marcel van der Veldt
e74613f8be Fix removal of non device-bound resources in Hue (#88897)
Fix removal of non device-bound resources (like entertainment areas)
2023-02-28 11:04:10 -05:00
Erik Montnemery
390daf1723 Sort unit lists sent to frontend (#88898) 2023-02-28 16:12:49 +01:00
Marcel van der Veldt
a2a23564a4 Do not create Area for Hue zones (#88904)
Do not create HA area for Hue zones
2023-02-28 09:50:00 -05:00
Bram Kragten
e3e4b44958 Fix string for OTBR config flow abort (#88902) 2023-02-28 15:02:40 +01:00
epenet
7b5c978b95 Add missing mock in overkiz config flow tests (#88899) 2023-02-28 08:59:48 -05:00
Felix Rotthowe
1c4aa26ab6 Add myself to codeowners of Livisi integration (#88900)
Add @planbnet to codeowners of Livisi integration
2023-02-28 14:48:13 +01:00
Erik Montnemery
f41bec6ba9 Create repairs issue if Thread network is insecure (#88888)
* Bump python-otbr-api to 1.0.5

* Create repairs issue if Thread network is insecure

* Address review comments
2023-02-28 13:50:56 +01:00
Felix Rotthowe
4d58c9de8d Add human readable name for Livisi climate devices (#88891)
* Add human readable climate device name

* Remove room name from entity name and set "has_entity_name"
2023-02-28 13:08:52 +01:00
Erik Montnemery
b6f66b3568 Add WS command weather/convertible_units (#85681) 2023-02-28 11:35:47 +01:00
Jan Bouwhuis
4e66554298 Also set hass.config_entries when mock_hass_config fixture is used (#88669)
* Set `hass.config_entries` with `mock_hass_config`

* Update tests/conftest.py

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-02-28 11:14:04 +01:00
rodriguestiago0
bef5fde832 Add stop charge button to renault integration (#88003)
* Added service to start/stop charge

* Remove comment

* Fixed service

* removed service for start/stop charge

* Remove version

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Format

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>

* Revert change

* Fix lint

* Add tests

---------

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
2023-02-28 10:28:44 +01:00
Erik Montnemery
d397217b5b Add confirm step to thread zeroconf flow (#88869)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-02-28 10:23:36 +01:00
epenet
d2ea773e7f Adjust AddEntitiesCallback import (part 1) (#88870)
Adjust AddEntitiesCallback import
2023-02-28 08:54:05 +01:00
Diogo Gomes
07c25b3dd8 Prosegur late review comments (#88859)
* address late comments on #76428

* adress review

* extra tweaks
2023-02-28 08:16:22 +01:00
Paulus Schoutsen
72c0526d87 Bumped version to 2023.3.0b5 2023-02-27 20:58:22 -05:00
Matthias Alphart
9ed4e01e94 Update xknx to 2.6.0 (#88864) 2023-02-27 20:58:11 -05:00
Paul Bottein
dcf1ecfeb5 Update frontend to 20230227.0 (#88857) 2023-02-27 20:58:10 -05:00
Klaas Schoute
b72224ceff Bump odp-amsterdam to v5.1.0 (#88847) 2023-02-27 20:58:09 -05:00
Erik Montnemery
96ad5c9666 Add thread user flow (#88842) 2023-02-27 20:58:09 -05:00
Erik Montnemery
00b59c142a Fix sensor unit conversion bug (#88825)
* Fix sensor unit conversion bug

* Ensure the correct unit is stored in the entity registry
2023-02-27 20:58:08 -05:00
Michael Davie
b054c81e13 Bump env_canada to 0.5.29 (#88821) 2023-02-27 20:58:07 -05:00
puddly
b0cbcad440 Bump ZHA dependencies (#88799)
* Bump ZHA dependencies

* Use `importlib.metadata.version` to get package versions
2023-02-27 20:58:06 -05:00
stickpin
bafe552af6 Upgrade caldav to 1.2.0 (#88791) 2023-02-27 20:58:05 -05:00
stickpin
d399855e50 Upgrade caldav to 1.1.3 (#88681)
* Update caldav to 1.1.3

* update caldav to 1.1.3

* update caldav to 1.1.3

---------

Co-authored-by: Allen Porter <allen@thebends.org>
2023-02-27 20:58:03 -05:00
mkmer
d26f430766 Bump aiosomecomfort to 0.0.10 (#88766) 2023-02-27 20:56:46 -05:00
Erik Montnemery
f2e4943a53 Catch CancelledError when setting up components (#88635)
* Catch CancelledError when setting up components

* Catch CancelledError when setting up components

* Also catch SystemExit
2023-02-27 20:56:45 -05:00
Bouwe Westerdijk
6512cd901f Correct Plugwise gas_consumed_interval sensor (#87449)
Co-authored-by: Franck Nijhof <frenck@frenck.nl>
2023-02-27 20:56:45 -05:00
Paulus Schoutsen
fbe1524f6c Bumped version to 2023.3.0b4 2023-02-26 22:37:34 -05:00
J. Nick Koston
95e337277c Avoid starting a bluetooth poll when Home Assistant is stopping (#88819)
* Avoid starting a bluetooth poll when Home Assistant is stopping

* tests
2023-02-26 22:37:26 -05:00
J. Nick Koston
1503674bd6 Prevent integrations from retrying setup once shutdown has started (#88818)
* Prevent integrations from retrying setup once shutdown has started

* coverage
2023-02-26 22:37:25 -05:00
J. Nick Koston
ab6bd75b70 Fix flux_led discovery running at shutdown (#88817) 2023-02-26 22:37:24 -05:00
J. Nick Koston
2fff836bd4 Fix lock services not removing entity fields (#88805) 2023-02-26 22:37:23 -05:00
J. Nick Koston
d8850758f1 Fix unifiprotect discovery running at shutdown (#88802)
* Fix unifiprotect discovery running at shutdown

Move the discovery start into `async_setup` so we only
start discovery once reguardless of how many config entries
for unifiprotect they have (or how many times they reload).

Always make discovery a background task so it does not get
to block shutdown

* missing decorator
2023-02-26 22:37:22 -05:00
J. Nick Koston
0449856064 Bump yalexs-ble to 2.0.4 (#88798)
changelog: https://github.com/bdraco/yalexs-ble/compare/v2.0.3...v2.0.4
2023-02-26 22:37:21 -05:00
starkillerOG
e48089e0c9 Do not block on reolink firmware check fail (#88797)
Do not block on firmware check fail
2023-02-26 22:37:20 -05:00
starkillerOG
a7e081f70d Simplify reolink update unique_id (#88794)
simplify unique_id
2023-02-26 22:37:19 -05:00
Paulus Schoutsen
fe181425d8 Check circular dependencies (#88778) 2023-02-26 22:37:18 -05:00
Joakim Plate
8c7b29db25 Update nibe library to 2.0.0 (#88769) 2023-02-26 22:37:17 -05:00
J. Nick Koston
aaa5bb9f86 Fix checking if a package is installed on py3.11 (#88768)
pkg_resources is abandoned and we need to move away
from using it https://github.com/pypa/pkg_resources

In the mean time we need to keep it working. This fixes
a new exception in py3.11 when a module is not installed
which allows proper fallback to pkg_resources.Requirement.parse
when needed

```
2023-02-25 15:46:21.101 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
  File "/opt/homebrew/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request
    resp = await request_handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/aiohttp/web_app.py", line 504, in _handle
    resp = await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/aiohttp/web_middlewares.py", line 117, in impl
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/components/http/security_filter.py", line 60, in security_filter_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/components/http/auth.py", line 235, in auth_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/components/http/view.py", line 146, in handle
    result = await result
             ^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/components/config/config_entries.py", line 148, in post
    return await super().post(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/components/http/data_validator.py", line 72, in wrapper
    result = await method(view, request, data, *args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/helpers/data_entry_flow.py", line 71, in post
    result = await self._flow_mgr.async_init(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/config_entries.py", line 826, in async_init
    flow, result = await task
                   ^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/config_entries.py", line 844, in _async_init
    flow = await self.async_create_flow(handler, context=context, data=data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/config_entries.py", line 950, in async_create_flow
    await async_process_deps_reqs(self.hass, self._hass_config, integration)
  File "/Users/bdraco/home-assistant/homeassistant/setup.py", line 384, in async_process_deps_reqs
    await requirements.async_get_integration_with_requirements(
  File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 52, in async_get_integration_with_requirements
    return await manager.async_get_integration_with_requirements(domain)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 171, in async_get_integration_with_requirements
    await self._async_process_integration(integration, done)
  File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 186, in _async_process_integration
    await self.async_process_requirements(
  File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 252, in async_process_requirements
    await self._async_process_requirements(name, missing)
  File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 284, in _async_process_requirements
    installed, failures = await self.hass.async_add_executor_job(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/python@3.11/3.11.1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/requirements.py", line 113, in _install_requirements_if_missing
    if pkg_util.is_installed(req) or _install_with_retry(req, kwargs):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bdraco/home-assistant/homeassistant/util/package.py", line 40, in is_installed
    pkg_resources.get_distribution(package)
  File "/opt/homebrew/lib/python3.11/site-packages/pkg_resources/__init__.py", line 478, in get_distribution
    dist = get_provider(dist)
           ^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/pkg_resources/__init__.py", line 354, in get_provider
    return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
                                            ~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
``
2023-02-26 22:37:17 -05:00
J. Nick Koston
5b78e0c4ff Restore previous behavior of only waiting for new tasks at shutdown (#88740)
* Restore previous behavior of only waiting for new tasks at shutdown

* cleanup

* do a swap instead

* await canceled tasks

* await canceled tasks

* fix

* not needed since we no longer clear

* log it

* reword

* wait for airvisual

* tests
2023-02-26 22:37:16 -05:00
Franck Nijhof
2063dbf00d Bumped version to 2023.3.0b3 2023-02-25 12:07:47 +01:00
Joakim Sørensen
91a03ab83d Remove homeassistant_hardware after dependency from zha (#88751) 2023-02-25 12:07:25 +01:00
J. Nick Koston
ed8f538890 Prevent new discovery flows from being created when stopping (#88743) 2023-02-25 12:07:22 +01:00
J. Nick Koston
6196607c5d Make hass.async_stop an untracked task (#88738) 2023-02-25 12:07:19 +01:00
J. Nick Koston
833ccafb76 Log futures that are blocking shutdown stages (#88736) 2023-02-25 12:07:15 +01:00
mkmer
ca539d0a09 Add missing reauth strings to Honeywell (#88733)
Add missing reauth strings
2023-02-25 12:07:12 +01:00
Austin Mroczek
0e3e954000 Bump total_connect_client to v2023.2 (#88729)
* bump total_connect_client to v2023.2

* Trigger Build
2023-02-25 12:07:09 +01:00
avee87
4ef96c76e4 Fix log message in recorder on total_increasing reset (#88710) 2023-02-25 12:07:05 +01:00
Álvaro Fernández Rojas
d5b0c1faa0 Update aioqsw v0.3.2 (#88695)
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2023-02-25 12:07:02 +01:00
Arturo
2405908cdd Fix matter light color capabilities bit map (#88693)
* Adds matter light color capabilities bit map

* Fixed matter light hue and saturation test
2023-02-25 12:06:58 +01:00
Paulus Schoutsen
b6e50135f5 Bumped version to 2023.3.0b2 2023-02-24 21:41:02 -05:00
Bram Kragten
64197aa5f5 Update frontend to 20230224.0 (#88721) 2023-02-24 21:40:56 -05:00
J. Nick Koston
5a2d7a5dd4 Reduce overhead to save json data to postgresql (#88717)
* Reduce overhead to strip nulls from json

* Reduce overhead to strip nulls from json

* small cleanup
2023-02-24 21:40:55 -05:00
J. Nick Koston
2d6f84b2a8 Fix timeout in purpleapi test (#88715)
https://github.com/home-assistant/core/actions/runs/4264644494/jobs/7423099757
2023-02-24 21:40:54 -05:00
J. Nick Koston
0c6a469218 Fix migration failing when existing data has duplicates (#88712) 2023-02-24 21:40:53 -05:00
J. Nick Koston
e69271cb46 Bump aioesphomeapi to 13.4.1 (#88703)
changelog: https://github.com/esphome/aioesphomeapi/releases/tag/v13.4.1
2023-02-24 21:40:52 -05:00
Michael Hansen
02bd3f897d Make a copy of matching states so translated state names can be used (#88683) 2023-02-24 21:40:51 -05:00
J. Nick Koston
64ad5326dd Bump mopeka_iot_ble to 0.4.1 (#88680)
* Bump mopeka_iot_ble to 0.4.1

closes #88232

* adjust tests
2023-02-24 21:40:50 -05:00
puddly
74696a3fac Name the Yellow-internal radio and multi-PAN addon as ZHA serial ports (#88208)
* Expose the Yellow-internal radio and multi-PAN addon as named serial ports

* Remove the serial number if it isn't available

* Use consistent names for the addon and Zigbee radio

* Add `homeassistant_hardware` and `_yellow` as `after_dependencies`

* Handle `hassio` not existing when listing serial ports

* Add unit tests
2023-02-24 21:40:49 -05:00
Paulus Schoutsen
70e1d14da0 Bumped version to 2023.3.0b1 2023-02-23 15:00:13 -05:00
Bram Kragten
25f066d476 Update frontend to 20230223.0 (#88677) 2023-02-23 15:00:07 -05:00
Marcel van der Veldt
5adf1dcc90 Fix support for Bridge(d) and composed devices in Matter (#88662)
* Refactor discovery of entities to support composed and bridged devices

* Bump library version to 3.1.0

* move discovery schemas to platforms

* optimize a tiny bit

* simplify even more

* fixed bug in light platform

* fix color control logic

* fix some issues

* Update homeassistant/components/matter/discovery.py

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* fix some tests

* fix light test

---------

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2023-02-23 15:00:05 -05:00
epenet
0fb28dcf9e Add missing async_setup_entry mock in openuv (#88661) 2023-02-23 15:00:04 -05:00
Allen Porter
2fddbcedcf Fix local calendar issue with events created with fixed UTC offsets (#88650)
Fix issue with events created with UTC offsets
2023-02-23 15:00:03 -05:00
J. Nick Koston
951df3df57 Fix untrapped exceptions during Yale Access Bluetooth first setup (#88642) 2023-02-23 15:00:02 -05:00
starkillerOG
35142e456a Bump reolink-aio to 0.5.1 and check if update supported (#88641) 2023-02-23 15:00:01 -05:00
Paulus Schoutsen
cfaba87dd6 Error checking for OTBR (#88620)
* Error checking for OTBR

* Other errors in flow too

* Tests
2023-02-23 15:00:00 -05:00
Erik Montnemery
2db8d4b73a Bump python-otbr-api to 1.0.4 (#88613)
* Bump python-otbr-api to 1.0.4

* Adjust tests
2023-02-23 14:59:59 -05:00
Raman Gupta
0d2006bf33 Add support for firmware target in zwave_js FirmwareUploadView (#88523)
* Add support for firmware target in zwave_js FirmwareUploadView

fix

* Update tests/components/zwave_js/test_api.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Update tests/components/zwave_js/test_api.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Update tests/components/zwave_js/test_api.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Update tests/components/zwave_js/test_api.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* fix types

* Switch back to using Any

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2023-02-23 14:59:58 -05:00
puddly
45547d226e Disable the ZHA bellows UART thread when connecting to a TCP coordinator (#88202)
Disable the bellows UART thread when connecting to a TCP coordinator
2023-02-23 14:59:56 -05:00
Franck Nijhof
cebc6dd096 Bumped version to 2023.3.0b0 2023-02-22 20:44:37 +01:00
2893 changed files with 154466 additions and 51493 deletions

View File

@@ -125,6 +125,7 @@ tests: &tests
- tests/mock/**
- tests/pylint/**
- tests/scripts/**
- tests/syrupy.py
- tests/test_util/**
- tests/testing_config/**
- tests/util/**

View File

@@ -36,6 +36,7 @@ omit =
homeassistant/components/airnow/__init__.py
homeassistant/components/airnow/sensor.py
homeassistant/components/airq/__init__.py
homeassistant/components/airq/coordinator.py
homeassistant/components/airq/sensor.py
homeassistant/components/airthings/__init__.py
homeassistant/components/airthings/sensor.py
@@ -197,7 +198,6 @@ omit =
homeassistant/components/denonavr/__init__.py
homeassistant/components/denonavr/media_player.py
homeassistant/components/denonavr/receiver.py
homeassistant/components/devolo_home_control/switch.py
homeassistant/components/digital_ocean/*
homeassistant/components/discogs/sensor.py
homeassistant/components/discord/__init__.py
@@ -226,6 +226,7 @@ omit =
homeassistant/components/dublin_bus_transport/sensor.py
homeassistant/components/dunehd/__init__.py
homeassistant/components/dunehd/media_player.py
homeassistant/components/dwd_weather_warnings/const.py
homeassistant/components/dwd_weather_warnings/sensor.py
homeassistant/components/dweet/*
homeassistant/components/ebox/sensor.py
@@ -249,7 +250,8 @@ omit =
homeassistant/components/ecowitt/sensor.py
homeassistant/components/eddystone_temperature/sensor.py
homeassistant/components/edimax/switch.py
homeassistant/components/edl21/*
homeassistant/components/edl21/__init__.py
homeassistant/components/edl21/sensor.py
homeassistant/components/egardia/*
homeassistant/components/eight_sleep/__init__.py
homeassistant/components/eight_sleep/binary_sensor.py
@@ -384,7 +386,10 @@ omit =
homeassistant/components/foscam/camera.py
homeassistant/components/foursquare/*
homeassistant/components/free_mobile/notify.py
homeassistant/components/freebox/camera.py
homeassistant/components/freebox/device_tracker.py
homeassistant/components/freebox/home_base.py
homeassistant/components/freebox/router.py
homeassistant/components/freebox/sensor.py
homeassistant/components/freebox/switch.py
homeassistant/components/fritz/common.py
@@ -394,7 +399,8 @@ omit =
homeassistant/components/fritzbox_callmonitor/__init__.py
homeassistant/components/fritzbox_callmonitor/base.py
homeassistant/components/fritzbox_callmonitor/sensor.py
homeassistant/components/frontier_silicon/const.py
homeassistant/components/frontier_silicon/__init__.py
homeassistant/components/frontier_silicon/browse_media.py
homeassistant/components/frontier_silicon/media_player.py
homeassistant/components/futurenow/light.py
homeassistant/components/garadget/cover.py
@@ -477,8 +483,6 @@ omit =
homeassistant/components/homematic/sensor.py
homeassistant/components/homematic/switch.py
homeassistant/components/homeworks/*
homeassistant/components/honeywell/__init__.py
homeassistant/components/honeywell/climate.py
homeassistant/components/horizon/media_player.py
homeassistant/components/hp_ilo/sensor.py
homeassistant/components/huawei_lte/__init__.py
@@ -516,9 +520,6 @@ omit =
homeassistant/components/ifttt/alarm_control_panel.py
homeassistant/components/iglo/light.py
homeassistant/components/ihc/*
homeassistant/components/imap/__init__.py
homeassistant/components/imap/coordinator.py
homeassistant/components/imap/sensor.py
homeassistant/components/imap_email_content/sensor.py
homeassistant/components/incomfort/*
homeassistant/components/insteon/binary_sensor.py
@@ -627,9 +628,6 @@ omit =
homeassistant/components/lg_netcast/media_player.py
homeassistant/components/lg_soundbar/__init__.py
homeassistant/components/lg_soundbar/media_player.py
homeassistant/components/lidarr/__init__.py
homeassistant/components/lidarr/coordinator.py
homeassistant/components/lidarr/sensor.py
homeassistant/components/life360/__init__.py
homeassistant/components/life360/coordinator.py
homeassistant/components/life360/device_tracker.py
@@ -640,8 +638,10 @@ omit =
homeassistant/components/linux_battery/sensor.py
homeassistant/components/lirc/*
homeassistant/components/livisi/__init__.py
homeassistant/components/livisi/binary_sensor.py
homeassistant/components/livisi/climate.py
homeassistant/components/livisi/coordinator.py
homeassistant/components/livisi/entity.py
homeassistant/components/livisi/switch.py
homeassistant/components/llamalab_automate/notify.py
homeassistant/components/logi_circle/__init__.py
@@ -674,7 +674,6 @@ omit =
homeassistant/components/lyric/api.py
homeassistant/components/lyric/climate.py
homeassistant/components/lyric/sensor.py
homeassistant/components/magicseaweed/sensor.py
homeassistant/components/mailgun/notify.py
homeassistant/components/map/*
homeassistant/components/mastodon/notify.py
@@ -775,7 +774,11 @@ omit =
homeassistant/components/nexia/climate.py
homeassistant/components/nexia/entity.py
homeassistant/components/nexia/switch.py
homeassistant/components/nextcloud/*
homeassistant/components/nextcloud/__init__.py
homeassistant/components/nextcloud/binary_sensor.py
homeassistant/components/nextcloud/coordinator.py
homeassistant/components/nextcloud/entity.py
homeassistant/components/nextcloud/sensor.py
homeassistant/components/nfandroidtv/__init__.py
homeassistant/components/nfandroidtv/notify.py
homeassistant/components/nibe_heatpump/__init__.py
@@ -807,6 +810,8 @@ omit =
homeassistant/components/nuki/sensor.py
homeassistant/components/nx584/alarm_control_panel.py
homeassistant/components/oasa_telematics/sensor.py
homeassistant/components/obihai/__init__.py
homeassistant/components/obihai/button.py
homeassistant/components/obihai/connectivity.py
homeassistant/components/obihai/sensor.py
homeassistant/components/octoprint/__init__.py
@@ -828,6 +833,7 @@ omit =
homeassistant/components/onvif/event.py
homeassistant/components/onvif/parsers.py
homeassistant/components/onvif/sensor.py
homeassistant/components/onvif/util.py
homeassistant/components/open_meteo/weather.py
homeassistant/components/opencv/*
homeassistant/components/openevse/sensor.py
@@ -935,6 +941,7 @@ omit =
homeassistant/components/pushover/notify.py
homeassistant/components/pushsafer/notify.py
homeassistant/components/pyload/sensor.py
homeassistant/components/qbittorrent/__init__.py
homeassistant/components/qbittorrent/sensor.py
homeassistant/components/qnap/sensor.py
homeassistant/components/qrcode/image_processing.py
@@ -971,22 +978,28 @@ omit =
homeassistant/components/rejseplanen/sensor.py
homeassistant/components/remember_the_milk/__init__.py
homeassistant/components/remote_rpi_gpio/*
homeassistant/components/reolink/__init__.py
homeassistant/components/reolink/binary_sensor.py
homeassistant/components/reolink/button.py
homeassistant/components/reolink/camera.py
homeassistant/components/reolink/entity.py
homeassistant/components/reolink/host.py
homeassistant/components/reolink/light.py
homeassistant/components/reolink/number.py
homeassistant/components/reolink/select.py
homeassistant/components/reolink/siren.py
homeassistant/components/reolink/switch.py
homeassistant/components/reolink/update.py
homeassistant/components/repetier/__init__.py
homeassistant/components/repetier/sensor.py
homeassistant/components/rest/notify.py
homeassistant/components/rest/switch.py
homeassistant/components/ridwell/__init__.py
homeassistant/components/ridwell/calendar.py
homeassistant/components/ridwell/coordinator.py
homeassistant/components/ridwell/switch.py
homeassistant/components/ring/camera.py
homeassistant/components/ripple/sensor.py
homeassistant/components/roborock/coordinator.py
homeassistant/components/rocketchat/notify.py
homeassistant/components/roomba/__init__.py
homeassistant/components/roomba/binary_sensor.py
@@ -1092,7 +1105,9 @@ omit =
homeassistant/components/sms/notify.py
homeassistant/components/sms/sensor.py
homeassistant/components/smtp/notify.py
homeassistant/components/snapcast/*
homeassistant/components/snapcast/__init__.py
homeassistant/components/snapcast/media_player.py
homeassistant/components/snapcast/server.py
homeassistant/components/snmp/device_tracker.py
homeassistant/components/snmp/sensor.py
homeassistant/components/snmp/switch.py
@@ -1281,9 +1296,11 @@ omit =
homeassistant/components/touchline/climate.py
homeassistant/components/tplink_lte/*
homeassistant/components/tplink_omada/__init__.py
homeassistant/components/tplink_omada/controller.py
homeassistant/components/tplink_omada/coordinator.py
homeassistant/components/tplink_omada/entity.py
homeassistant/components/tplink_omada/switch.py
homeassistant/components/tplink_omada/update.py
homeassistant/components/traccar/device_tracker.py
homeassistant/components/tractive/__init__.py
homeassistant/components/tractive/binary_sensor.py
@@ -1351,6 +1368,7 @@ omit =
homeassistant/components/velbus/entity.py
homeassistant/components/velbus/light.py
homeassistant/components/velbus/sensor.py
homeassistant/components/velbus/select.py
homeassistant/components/velbus/switch.py
homeassistant/components/velux/__init__.py
homeassistant/components/velux/cover.py
@@ -1368,8 +1386,6 @@ omit =
homeassistant/components/verisure/sensor.py
homeassistant/components/verisure/switch.py
homeassistant/components/versasense/*
homeassistant/components/vesync/__init__.py
homeassistant/components/vesync/common.py
homeassistant/components/vesync/fan.py
homeassistant/components/vesync/light.py
homeassistant/components/vesync/sensor.py
@@ -1425,7 +1441,6 @@ omit =
homeassistant/components/xbox/media_player.py
homeassistant/components/xbox/remote.py
homeassistant/components/xbox/sensor.py
homeassistant/components/xbox_live/sensor.py
homeassistant/components/xeoma/camera.py
homeassistant/components/xiaomi/camera.py
homeassistant/components/xiaomi_aqara/__init__.py
@@ -1498,8 +1513,8 @@ omit =
homeassistant/components/zeversolar/coordinator.py
homeassistant/components/zeversolar/entity.py
homeassistant/components/zeversolar/sensor.py
homeassistant/components/zha/api.py
homeassistant/components/zha/core/channels/*
homeassistant/components/zha/websocket_api.py
homeassistant/components/zha/core/cluster_handlers/*
homeassistant/components/zha/core/device.py
homeassistant/components/zha/core/gateway.py
homeassistant/components/zha/core/helpers.py

View File

@@ -20,7 +20,6 @@
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.formatting.blackPath": "/usr/local/bin/black",
"python.linting.flake8Path": "/usr/local/bin/flake8",
"python.linting.pycodestylePath": "/usr/local/bin/pycodestyle",
"python.linting.pydocstylePath": "/usr/local/bin/pydocstyle",
"python.linting.mypyPath": "/usr/local/bin/mypy",

1
.gitattributes vendored
View File

@@ -8,5 +8,6 @@
*.png binary
*.zip binary
*.mp3 binary
*.pcm binary
Dockerfile.dev linguist-language=Dockerfile

View File

@@ -31,9 +31,9 @@ body:
label: What version of Home Assistant Core has the issue?
placeholder: core-
description: >
Can be found in: [Settings -> About](https://my.home-assistant.io/redirect/info/).
Can be found in: [Settings ⇒ System ⇒ Repairs ⇒ Three Dots in Upper Right ⇒ System information](https://my.home-assistant.io/redirect/system_health/).
[![Open your Home Assistant instance and show your Home Assistant version information.](https://my.home-assistant.io/badges/info.svg)](https://my.home-assistant.io/redirect/info/)
[![Open your Home Assistant instance and show the system information.](https://my.home-assistant.io/badges/system_health.svg)](https://my.home-assistant.io/redirect/system_health/)
- type: input
attributes:
label: What was the last working version of Home Assistant Core?
@@ -46,9 +46,9 @@ body:
attributes:
label: What type of installation are you running?
description: >
Can be found in: [Settings -> System-> Repairs -> Three Dots in Upper Right -> System information](https://my.home-assistant.io/redirect/system_health/).
Can be found in: [Settings System Repairs Three Dots in Upper Right System information](https://my.home-assistant.io/redirect/system_health/).
[![Open your Home Assistant instance and show health information about your system.](https://my.home-assistant.io/badges/system_health.svg)](https://my.home-assistant.io/redirect/system_health/)
[![Open your Home Assistant instance and show the system information.](https://my.home-assistant.io/badges/system_health.svg)](https://my.home-assistant.io/redirect/system_health/)
options:
- Home Assistant OS
- Home Assistant Container

View File

@@ -1,6 +1,6 @@
blank_issues_enabled: false
contact_links:
- name: Report a bug with the UI, Frontend or Lovelace
- name: Report a bug with the UI, Frontend or Dashboards
url: https://github.com/home-assistant/frontend/issues
about: This is the issue tracker for our backend. Please report issues with the UI in the frontend repository.
- name: Report incorrect or missing information on our website

View File

@@ -59,6 +59,7 @@
- [ ] Local tests pass. **Your PR cannot be merged unless tests pass**
- [ ] There is no commented out code in this PR.
- [ ] I have followed the [development checklist][dev-checklist]
- [ ] I have followed the [perfect PR recommendations][perfect-pr]
- [ ] The code has been formatted using Black (`black --fast homeassistant tests`)
- [ ] Tests have been added to verify that the new code works.
@@ -107,3 +108,4 @@ To help with the load of incoming pull requests:
[manifest-docs]: https://developers.home-assistant.io/docs/en/creating_integration_manifest.html
[quality-scale]: https://developers.home-assistant.io/docs/en/next/integration_quality_scale_index.html
[docs-repository]: https://github.com/home-assistant/home-assistant.io
[perfect-pr]: https://developers.home-assistant.io/docs/review-process/#creating-the-perfect-pr

View File

@@ -24,12 +24,12 @@ jobs:
publish: ${{ steps.version.outputs.publish }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
with:
fetch-depth: 0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -67,10 +67,10 @@ jobs:
if: github.repository_owner == 'home-assistant' && needs.init.outputs.publish == 'true'
steps:
- name: Checkout the repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -105,7 +105,7 @@ jobs:
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Download nightly wheels of frontend
if: needs.init.outputs.channel == 'dev'
@@ -131,7 +131,7 @@ jobs:
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
if: needs.init.outputs.channel == 'dev'
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
@@ -198,7 +198,7 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build base image
uses: home-assistant/builder@2022.11.0
uses: home-assistant/builder@2023.03.0
with:
args: |
$BUILD_ARGS \
@@ -232,6 +232,7 @@ jobs:
- khadas-vim3
- odroid-c2
- odroid-c4
- odroid-m1
- odroid-n2
- odroid-xu
- qemuarm
@@ -248,7 +249,7 @@ jobs:
- yellow
steps:
- name: Checkout the repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set build additional args
run: |
@@ -275,7 +276,7 @@ jobs:
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build base image
uses: home-assistant/builder@2022.11.0
uses: home-assistant/builder@2023.03.0
with:
args: |
$BUILD_ARGS \
@@ -291,7 +292,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Initialize git
uses: home-assistant/actions/helpers/git-init@master
@@ -330,7 +331,7 @@ jobs:
- "homeassistant"
steps:
- name: Checkout the repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Login to DockerHub
if: matrix.registry == 'homeassistant'

View File

@@ -1,4 +1,5 @@
name: CI
run-name: "${{ github.event_name == 'workflow_dispatch' && format('CI: {0}', github.ref_name) || '' }}"
# yamllint disable-line rule:truthy
on:
@@ -31,7 +32,7 @@ env:
CACHE_VERSION: 5
PIP_CACHE_VERSION: 4
MYPY_CACHE_VERSION: 4
HA_SHORT_VERSION: 2023.4
HA_SHORT_VERSION: 2023.5
DEFAULT_PYTHON: "3.10"
ALL_PYTHON_VERSIONS: "['3.10', '3.11']"
# 10.3 is the oldest supported version
@@ -40,7 +41,9 @@ env:
# - 10.6.10 is the version currently shipped with the Add-on (as of 31 Jan 2023)
# 10.10 is the latest short-term-support
# - 10.10.3 is the latest (as of 6 Feb 2023)
MARIADB_VERSIONS: "['mariadb:10.3.32','mariadb:10.6.10','mariadb:10.10.3']"
# mysql 8.0.32 does not always behave the same as MariaDB
# and some queries that work on MariaDB do not work on MySQL
MARIADB_VERSIONS: "['mariadb:10.3.32','mariadb:10.6.10','mariadb:10.10.3','mysql:8.0.32']"
# 12 is the oldest supported version
# - 12.14 is the latest (as of 9 Feb 2023)
# 15 is the latest version
@@ -79,7 +82,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Generate partial Python venv restore key
id: generate_python_cache_key
run: >-
@@ -203,16 +206,16 @@ jobs:
- info
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.2.6
uses: actions/cache@v3.3.1
with:
path: venv
key: >-
@@ -227,9 +230,10 @@ jobs:
pip install "$(cat requirements_test.txt | grep pre-commit)"
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache@v3.2.6
uses: actions/cache@v3.3.1
with:
path: ${{ env.PRE_COMMIT_CACHE }}
lookup-only: true
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.pre-commit_cache_key }}
@@ -247,16 +251,16 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -265,7 +269,7 @@ jobs:
needs.info.outputs.pre-commit_cache_key }}
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: ${{ env.PRE_COMMIT_CACHE }}
fail-on-cache-miss: true
@@ -285,55 +289,6 @@ jobs:
shopt -s globstar
pre-commit run --hook-stage manual black --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*} --show-diff-on-failure
lint-flake8:
name: Check flake8
runs-on: ubuntu-22.04
needs:
- info
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.5.0
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
with:
path: venv
fail-on-cache-miss: true
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
needs.info.outputs.pre-commit_cache_key }}
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v3.2.6
with:
path: ${{ env.PRE_COMMIT_CACHE }}
fail-on-cache-miss: true
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.pre-commit_cache_key }}
- name: Register flake8 problem matcher
run: |
echo "::add-matcher::.github/workflows/matchers/flake8.json"
- name: Run flake8 (fully)
if: needs.info.outputs.test_full_suite == 'true'
run: |
. venv/bin/activate
pre-commit run --hook-stage manual flake8 --all-files
- name: Run flake8 (partially)
if: needs.info.outputs.test_full_suite == 'false'
shell: bash
run: |
. venv/bin/activate
shopt -s globstar
pre-commit run --hook-stage manual flake8 --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*}
lint-ruff:
name: Check ruff
runs-on: ubuntu-22.04
@@ -342,16 +297,16 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -360,7 +315,7 @@ jobs:
needs.info.outputs.pre-commit_cache_key }}
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: ${{ env.PRE_COMMIT_CACHE }}
fail-on-cache-miss: true
@@ -391,16 +346,16 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -409,7 +364,7 @@ jobs:
needs.info.outputs.pre-commit_cache_key }}
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: ${{ env.PRE_COMMIT_CACHE }}
fail-on-cache-miss: true
@@ -429,16 +384,16 @@ jobs:
- pre-commit
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
id: python
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -447,7 +402,7 @@ jobs:
needs.info.outputs.pre-commit_cache_key }}
- name: Restore pre-commit environment from cache
id: cache-precommit
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: ${{ env.PRE_COMMIT_CACHE }}
fail-on-cache-miss: true
@@ -455,19 +410,6 @@ jobs:
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.pre-commit_cache_key }}
- name: Run pyupgrade (fully)
if: needs.info.outputs.test_full_suite == 'true'
run: |
. venv/bin/activate
pre-commit run --hook-stage manual pyupgrade --all-files --show-diff-on-failure
- name: Run pyupgrade (partially)
if: needs.info.outputs.test_full_suite == 'false'
shell: bash
run: |
. venv/bin/activate
shopt -s globstar
pre-commit run --hook-stage manual pyupgrade --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*} --show-diff-on-failure
- name: Register yamllint problem matcher
run: |
echo "::add-matcher::.github/workflows/matchers/yamllint.json"
@@ -495,6 +437,7 @@ jobs:
shell: bash
run: |
. venv/bin/activate
shopt -s globstar
pre-commit run --hook-stage manual prettier --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*}
- name: Register check executables problem matcher
@@ -548,10 +491,10 @@ jobs:
python-version: ${{ fromJSON(needs.info.outputs.python_versions) }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ matrix.python-version }}
check-latest: true
@@ -562,15 +505,16 @@ jobs:
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache@v3.2.6
uses: actions/cache@v3.3.1
with:
path: venv
lookup-only: true
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_key }}
- name: Restore pip wheel cache
if: steps.cache-venv.outputs.cache-hit != 'true'
uses: actions/cache@v3.2.6
uses: actions/cache@v3.3.1
with:
path: ${{ env.PIP_CACHE }}
key: >-
@@ -599,7 +543,7 @@ jobs:
python -m venv venv
. venv/bin/activate
python --version
pip install --cache-dir=$PIP_CACHE -U "pip>=21.0,<23.1" setuptools wheel
pip install --cache-dir=$PIP_CACHE -U "pip>=21.0,<23.2" setuptools wheel
pip install --cache-dir=$PIP_CACHE -r requirements_all.txt --use-deprecated=legacy-resolver
pip install --cache-dir=$PIP_CACHE -r requirements_test.txt --use-deprecated=legacy-resolver
pip install -e .
@@ -615,16 +559,16 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -647,16 +591,16 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore base Python virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -680,16 +624,16 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -724,10 +668,10 @@ jobs:
- base
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
@@ -740,7 +684,7 @@ jobs:
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -748,7 +692,7 @@ jobs:
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_key }}
- name: Restore mypy cache
uses: actions/cache@v3.2.6
uses: actions/cache@v3.3.1
with:
path: .mypy_cache
key: >-
@@ -790,16 +734,16 @@ jobs:
name: Run pip check ${{ matrix.python-version }}
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -843,16 +787,16 @@ jobs:
bluez \
ffmpeg
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -969,16 +913,16 @@ jobs:
ffmpeg \
libmariadb-dev-compat
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache/restore@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -1001,6 +945,10 @@ jobs:
run: |
. venv/bin/activate
pip install mysqlclient sqlalchemy_utils
- name: Compile English translations
run: |
. venv/bin/activate
python3 -m script.translations develop --all
- name: Run pytest (partially)
timeout-minutes: 20
shell: bash
@@ -1073,16 +1021,16 @@ jobs:
ffmpeg \
postgresql-server-dev-14
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ matrix.python-version }}
id: python
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Restore full Python ${{ matrix.python-version }} virtual environment
id: cache-venv
uses: actions/cache@v3.2.6
uses: actions/cache/restore@v3.3.1
with:
path: venv
fail-on-cache-miss: true
@@ -1105,6 +1053,10 @@ jobs:
run: |
. venv/bin/activate
pip install psycopg2 sqlalchemy_utils
- name: Compile English translations
run: |
. venv/bin/activate
python3 -m script.translations develop --all
- name: Run pytest (partially)
timeout-minutes: 20
shell: bash
@@ -1143,16 +1095,28 @@ jobs:
needs:
- info
- pytest
timeout-minutes: 10
steps:
- name: Check out code from GitHub
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Download all coverage artifacts
uses: actions/download-artifact@v3
- name: Upload coverage to Codecov (full coverage)
if: needs.info.outputs.test_full_suite == 'true'
uses: codecov/codecov-action@v3.1.1
uses: Wandalen/wretry.action@v1.0.36
with:
flags: full-suite
action: codecov/codecov-action@v3.1.3
with: |
fail_ci_if_error: true
flags: full-suite
attempt_limit: 5
attempt_delay: 30000
- name: Upload coverage to Codecov (partial coverage)
if: needs.info.outputs.test_full_suite == 'false'
uses: codecov/codecov-action@v3.1.1
uses: Wandalen/wretry.action@v1.0.36
with:
action: codecov/codecov-action@v3.1.3
with: |
fail_ci_if_error: true
attempt_limit: 5
attempt_delay: 30000

View File

@@ -1,30 +0,0 @@
{
"problemMatcher": [
{
"owner": "flake8-error",
"severity": "error",
"pattern": [
{
"regexp": "^(.*):(\\d+):(\\d+):\\s([EF]\\d{3}\\s.*)$",
"file": 1,
"line": 2,
"column": 3,
"message": 4
}
]
},
{
"owner": "flake8-warning",
"severity": "warning",
"pattern": [
{
"regexp": "^(.*):(\\d+):(\\d+):\\s([CDNW]\\d{3}\\s.*)$",
"file": 1,
"line": 2,
"column": 3,
"message": 4
}
]
}
]
}

View File

@@ -17,7 +17,7 @@ jobs:
# - No PRs marked as no-stale
# - No issues (-1)
- name: 90 days stale PRs policy
uses: actions/stale@v7.0.0
uses: actions/stale@v8.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 90
@@ -53,7 +53,7 @@ jobs:
# - No issues marked as no-stale or help-wanted
# - No PRs (-1)
- name: 90 days stale issues
uses: actions/stale@v7.0.0
uses: actions/stale@v8.0.0
with:
repo-token: ${{ steps.token.outputs.token }}
days-before-stale: 90
@@ -83,7 +83,7 @@ jobs:
# - No Issues marked as no-stale or help-wanted
# - No PRs (-1)
- name: Needs more information stale issues policy
uses: actions/stale@v7.0.0
uses: actions/stale@v8.0.0
with:
repo-token: ${{ steps.token.outputs.token }}
only-labels: "needs-more-information"

View File

@@ -19,10 +19,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
uses: actions/setup-python@v4.5.0
uses: actions/setup-python@v4.6.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}

View File

@@ -13,6 +13,10 @@ on:
- "requirements.txt"
- "requirements_all.txt"
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name}}
cancel-in-progress: true
jobs:
init:
name: Initialize wheels builder
@@ -22,7 +26,7 @@ jobs:
architectures: ${{ steps.info.outputs.architectures }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Get information
id: info
@@ -54,6 +58,9 @@ jobs:
# OpenCV headless installation
echo "CI_BUILD=1"
echo "ENABLE_HEADLESS=1"
# Use C-Extension for sqlalchemy
echo "REQUIRE_SQLALCHEMY_CEXT=1"
) > .env_file
- name: Upload env_file
@@ -69,17 +76,18 @@ jobs:
path: ./requirements_diff.txt
core:
name: Build musllinux wheels with musllinux_1_2 / cp310 at ${{ matrix.arch }} for core
name: Build Core wheels ${{ matrix.abi }} for ${{ matrix.arch }} (musllinux_1_2)
if: github.repository_owner == 'home-assistant'
needs: init
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
abi: ["cp310", "cp311"]
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Download env_file
uses: actions/download-artifact@v3
@@ -92,9 +100,9 @@ jobs:
name: requirements_diff
- name: Build wheels
uses: home-assistant/wheels@2022.10.1
uses: home-assistant/wheels@2023.04.0
with:
abi: cp310
abi: ${{ matrix.abi }}
tag: musllinux_1_2
arch: ${{ matrix.arch }}
wheels-key: ${{ secrets.WHEELS_KEY }}
@@ -105,18 +113,19 @@ jobs:
requirements-diff: "requirements_diff.txt"
requirements: "requirements.txt"
integrations:
name: Build musllinux wheels with musllinux_1_2 / cp310 at ${{ matrix.arch }} for integrations
integrations_cp310:
name: Build wheels ${{ matrix.abi }} for ${{ matrix.arch }}
if: github.repository_owner == 'home-assistant'
needs: init
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
abi: ["cp310"]
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3.5.2
- name: Download env_file
uses: actions/download-artifact@v3
@@ -132,6 +141,7 @@ jobs:
run: |
requirement_files="requirements_all.txt requirements_diff.txt"
for requirement_file in ${requirement_files}; do
sed -i "s|# azure-servicebus|azure-servicebus|g" ${requirement_file}
sed -i "s|# pybluez|pybluez|g" ${requirement_file}
sed -i "s|# beacontools|beacontools|g" ${requirement_file}
sed -i "s|# fritzconnection|fritzconnection|g" ${requirement_file}
@@ -168,30 +178,177 @@ jobs:
sed -i "/numpy/d" homeassistant/package_constraints.txt
- name: Build wheels (part 1)
uses: home-assistant/wheels@2022.10.1
uses: home-assistant/wheels@2023.04.0
with:
abi: cp310
abi: ${{ matrix.abi }}
tag: musllinux_1_2
arch: ${{ matrix.arch }}
wheels-key: ${{ secrets.WHEELS_KEY }}
env-file: true
apk: "libexecinfo-dev;bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev"
skip-binary: aiohttp;grpcio
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev"
skip-binary: aiohttp;grpcio;sqlalchemy;protobuf
legacy: true
constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt"
requirements: "requirements_all.txtaa"
- name: Build wheels (part 2)
uses: home-assistant/wheels@2022.10.1
uses: home-assistant/wheels@2023.04.0
with:
abi: cp310
abi: ${{ matrix.abi }}
tag: musllinux_1_2
arch: ${{ matrix.arch }}
wheels-key: ${{ secrets.WHEELS_KEY }}
env-file: true
apk: "libexecinfo-dev;bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev"
skip-binary: aiohttp;grpcio
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev"
skip-binary: aiohttp;grpcio;sqlalchemy;protobuf
legacy: true
constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt"
requirements: "requirements_all.txtab"
# Wheels building for the cp311 ABI is currently split
# This is mainly until we have figured out to get all wheels built.
# Without harming our current workflow.
integrations_cp311:
name: Build wheels ${{ matrix.abi }} for ${{ matrix.arch }}
if: github.repository_owner == 'home-assistant'
needs: init
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
abi: ["cp311"]
arch: ${{ fromJson(needs.init.outputs.architectures) }}
steps:
- name: Checkout the repository
uses: actions/checkout@v3.5.2
- name: Write alternative env-file for cp311
run: |
(
echo "GRPC_BUILD_WITH_BORING_SSL_ASM=false"
echo "GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=true"
echo "GRPC_PYTHON_BUILD_WITH_CYTHON=true"
echo "GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=true"
# GRPC on armv7 needed -lexecinfo (issue #56669) since home assistant installed
# execinfo-dev when building wheels. However, this package is no longer available
# Alpine 3.17, which we use for the cp311 ABI, so the flag should no longer be needed.
echo "GRPC_PYTHON_LDFLAGS=-lpthread -Wl,-wrap,memcpy -static-libgcc" # -lexecinfo
# Fix out of memory issues with rust
echo "CARGO_NET_GIT_FETCH_WITH_CLI=true"
# OpenCV headless installation
echo "CI_BUILD=1"
echo "ENABLE_HEADLESS=1"
# Use C-Extension for sqlalchemy
echo "REQUIRE_SQLALCHEMY_CEXT=1"
) > .env_file
- name: Download requirements_diff
uses: actions/download-artifact@v3
with:
name: requirements_diff
- name: (Un)comment packages
run: |
requirement_files="requirements_all.txt requirements_diff.txt"
for requirement_file in ${requirement_files}; do
# PyBluez no longer compiles. Commented it out for now.
# It need further cleanup down the line, as all machine images
# try to install it.
# sed -i "s|# pybluez|pybluez|g" ${requirement_file}
# beacontools requires PyBluez.
# sed -i "s|# beacontools|beacontools|g" ${requirement_file}
# azure-servicebus requires uamqp, which requires OpenSSL 1.1 to
# compile/build. This is not available on Alpine 3.17. The compat
# layer offered by Alpine conflicts, so we have no way to build
# this package.
# sed -i "s|# azure-servicebus|azure-servicebus|g" ${requirement_file}
# It doesn't build for some reason, so we skip it for now.
# Bumping to the latest version (4.7.0.72) supporting Python 3.11
# doesn't help. Reverted bump in #91871. There are 8 registered
# instances using this integration according to analytics.
# sed -i "s|# opencv-python-headless|opencv-python-headless|g" ${requirement_file}
sed -i "s|# fritzconnection|fritzconnection|g" ${requirement_file}
sed -i "s|# pyuserinput|pyuserinput|g" ${requirement_file}
sed -i "s|# evdev|evdev|g" ${requirement_file}
sed -i "s|# pycups|pycups|g" ${requirement_file}
sed -i "s|# homekit|homekit|g" ${requirement_file}
sed -i "s|# decora_wifi|decora_wifi|g" ${requirement_file}
sed -i "s|# python-gammu|python-gammu|g" ${requirement_file}
# Some packages are not buildable on armhf anymore
if [ "${{ matrix.arch }}" = "armhf" ]; then
# Pandas has issues building on armhf, it is expected they
# will drop the platform in the near future (they consider it
# "flimsy" on 386). The following packages depend on pandas,
# so we comment them out.
sed -i "s|env_canada|# env_canada|g" ${requirement_file}
sed -i "s|noaa-coops|# noaa-coops|g" ${requirement_file}
sed -i "s|pyezviz|# pyezviz|g" ${requirement_file}
sed -i "s|pykrakenapi|# pykrakenapi|g" ${requirement_file}
fi
done
- name: Split requirements all
run: |
# We split requirements all into two different files.
# This is to prevent the build from running out of memory when
# resolving packages on 32-bits systems (like armhf, armv7).
split -l $(expr $(expr $(cat requirements_all.txt | wc -l) + 1) / 2) requirements_all.txt requirements_all.txt
- name: Adjust build env
run: |
if [ "${{ matrix.arch }}" = "i386" ]; then
echo "NPY_DISABLE_SVML=1" >> .env_file
fi
# Probably not an issue anymore. Removing for now.
# (
# # cmake > 3.22.2 have issue on arm
# # Tested until 3.22.5
# echo "cmake==3.22.2"
# ) >> homeassistant/package_constraints.txt
# Do not pin numpy in wheels building
sed -i "/numpy/d" homeassistant/package_constraints.txt
- name: Build wheels (part 1)
uses: home-assistant/wheels@2023.04.0
with:
abi: ${{ matrix.abi }}
tag: musllinux_1_2
arch: ${{ matrix.arch }}
wheels-key: ${{ secrets.WHEELS_KEY }}
env-file: true
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev"
skip-binary: aiohttp;grpcio;sqlalchemy;protobuf
legacy: true
constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt"
requirements: "requirements_all.txtaa"
- name: Build wheels (part 2)
uses: home-assistant/wheels@2023.04.0
with:
abi: ${{ matrix.abi }}
tag: musllinux_1_2
arch: ${{ matrix.arch }}
wheels-key: ${{ secrets.WHEELS_KEY }}
env-file: true
apk: "bluez-dev;libffi-dev;openssl-dev;glib-dev;eudev-dev;libxml2-dev;libxslt-dev;libpng-dev;libjpeg-turbo-dev;tiff-dev;cups-dev;gmp-dev;mpfr-dev;mpc1-dev;ffmpeg-dev;gammu-dev;yaml-dev;openblas-dev;fftw-dev;lapack-dev;gfortran;blas-dev;eigen-dev;freetype-dev;glew-dev;harfbuzz-dev;hdf5-dev;libdc1394-dev;libtbb-dev;mesa-dev;openexr-dev;openjpeg-dev;uchardet-dev"
skip-binary: aiohttp;grpcio;sqlalchemy;protobuf
legacy: true
constraints: "homeassistant/package_constraints.txt"
requirements-diff: "requirements_diff.txt"

View File

@@ -1,26 +1,12 @@
repos:
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: v0.0.247
rev: v0.0.262
hooks:
- id: ruff
args:
- --fix
- repo: https://github.com/asottile/pyupgrade
rev: v3.3.1
hooks:
- id: pyupgrade
args: [--py310-plus]
stages: [manual]
- repo: https://github.com/PyCQA/autoflake
rev: v2.0.0
hooks:
- id: autoflake
args:
- --in-place
- --remove-all-unused-imports
stages: [manual]
- repo: https://github.com/psf/black
rev: 23.1.0
rev: 23.3.0
hooks:
- id: black
args:
@@ -36,20 +22,6 @@ repos:
- --quiet-level=2
exclude_types: [csv, json]
exclude: ^tests/fixtures/|homeassistant/generated/
- repo: https://github.com/PyCQA/flake8
rev: 6.0.0
hooks:
- id: flake8
additional_dependencies:
- pycodestyle==2.10.0
- pyflakes==3.0.1
- flake8-docstrings==1.6.0
- pydocstyle==6.2.3
- flake8-comprehensions==3.10.1
- flake8-noqa==1.3.0
- mccabe==0.7.0
exclude: docs/source/conf.py
stages: [manual]
- repo: https://github.com/PyCQA/bandit
rev: 1.7.4
hooks:

View File

@@ -4,3 +4,5 @@ azure-*.yml
docs/source/_templates/*
homeassistant/components/*/translations/*.json
homeassistant/generated/*
tests/components/lidarr/fixtures/initialize.js
tests/components/lidarr/fixtures/initialize-wrong.js

View File

@@ -57,10 +57,12 @@ homeassistant.components.ambient_station.*
homeassistant.components.amcrest.*
homeassistant.components.ampio.*
homeassistant.components.analytics.*
homeassistant.components.anova.*
homeassistant.components.anthemav.*
homeassistant.components.apcupsd.*
homeassistant.components.aqualogic.*
homeassistant.components.aseko_pool_live.*
homeassistant.components.assist_pipeline.*
homeassistant.components.asuswrt.*
homeassistant.components.auth.*
homeassistant.components.automation.*
@@ -137,6 +139,7 @@ homeassistant.components.hardkernel.*
homeassistant.components.hardware.*
homeassistant.components.here_travel_time.*
homeassistant.components.history.*
homeassistant.components.homeassistant.exposed_entities
homeassistant.components.homeassistant.triggers.event
homeassistant.components.homeassistant_alerts.*
homeassistant.components.homeassistant_hardware.*
@@ -297,6 +300,7 @@ homeassistant.components.tag.*
homeassistant.components.tailscale.*
homeassistant.components.tautulli.*
homeassistant.components.tcp.*
homeassistant.components.threshold.*
homeassistant.components.tibber.*
homeassistant.components.tile.*
homeassistant.components.tilt_ble.*
@@ -310,7 +314,7 @@ homeassistant.components.trafikverket_train.*
homeassistant.components.trafikverket_weatherstation.*
homeassistant.components.tts.*
homeassistant.components.twentemilieu.*
homeassistant.components.unifi.update
homeassistant.components.unifi.*
homeassistant.components.unifiprotect.*
homeassistant.components.upcloud.*
homeassistant.components.update.*

4
.vscode/launch.json vendored
View File

@@ -23,7 +23,7 @@
"preLaunchTask": "Compile English translations"
},
{
// Debug by attaching to local Home Asistant server using Remote Python Debugger.
// Debug by attaching to local Home Assistant server using Remote Python Debugger.
// See https://www.home-assistant.io/integrations/debugpy/
"name": "Home Assistant: Attach Local",
"type": "python",
@@ -38,7 +38,7 @@
]
},
{
// Debug by attaching to remote Home Asistant server using Remote Python Debugger.
// Debug by attaching to remote Home Assistant server using Remote Python Debugger.
// See https://www.home-assistant.io/integrations/debugpy/
"name": "Home Assistant: Attach Remote",
"type": "python",

14
.vscode/tasks.json vendored
View File

@@ -42,20 +42,6 @@
},
"problemMatcher": []
},
{
"label": "Flake8",
"type": "shell",
"command": "pre-commit run flake8 --all-files",
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": []
},
{
"label": "Ruff",
"type": "shell",

View File

@@ -25,7 +25,7 @@ rules:
comments:
level: error
require-starting-space: true
min-spaces-from-content: 2
min-spaces-from-content: 1
comments-indentation:
level: error
document-end:

View File

@@ -80,6 +80,10 @@ build.json @home-assistant/supervisor
/tests/components/android_ip_webcam/ @engrbm87
/homeassistant/components/androidtv/ @JeffLIrion @ollo69
/tests/components/androidtv/ @JeffLIrion @ollo69
/homeassistant/components/androidtv_remote/ @tronikos
/tests/components/androidtv_remote/ @tronikos
/homeassistant/components/anova/ @Lash-L
/tests/components/anova/ @Lash-L
/homeassistant/components/anthemav/ @hyralex
/tests/components/anthemav/ @hyralex
/homeassistant/components/apache_kafka/ @bachya
@@ -103,6 +107,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/arris_tg2492lg/ @vanbalken
/homeassistant/components/aseko_pool_live/ @milanmeu
/tests/components/aseko_pool_live/ @milanmeu
/homeassistant/components/assist_pipeline/ @balloob @synesthesiam
/tests/components/assist_pipeline/ @balloob @synesthesiam
/homeassistant/components/asuswrt/ @kennedyshead @ollo69
/tests/components/asuswrt/ @kennedyshead @ollo69
/homeassistant/components/atag/ @MatsNL
@@ -168,6 +174,8 @@ build.json @home-assistant/supervisor
/tests/components/broadlink/ @danielhiversen @felipediel @L-I-Am
/homeassistant/components/brother/ @bieniu
/tests/components/brother/ @bieniu
/homeassistant/components/brottsplatskartan/ @gjohansson-ST
/tests/components/brottsplatskartan/ @gjohansson-ST
/homeassistant/components/brunt/ @eavanvalkenburg
/tests/components/brunt/ @eavanvalkenburg
/homeassistant/components/bsblan/ @liudger
@@ -215,8 +223,6 @@ build.json @home-assistant/supervisor
/tests/components/conversation/ @home-assistant/core @synesthesiam
/homeassistant/components/coolmaster/ @OnFreund
/tests/components/coolmaster/ @OnFreund
/homeassistant/components/coronavirus/ @home-assistant/core
/tests/components/coronavirus/ @home-assistant/core
/homeassistant/components/counter/ @fabaff
/tests/components/counter/ @fabaff
/homeassistant/components/cover/ @home-assistant/core
@@ -228,8 +234,6 @@ build.json @home-assistant/supervisor
/homeassistant/components/cups/ @fabaff
/homeassistant/components/daikin/ @fredrike
/tests/components/daikin/ @fredrike
/homeassistant/components/darksky/ @fabaff
/tests/components/darksky/ @fabaff
/homeassistant/components/debugpy/ @frenck
/tests/components/debugpy/ @frenck
/homeassistant/components/deconz/ @Kane610
@@ -283,7 +287,7 @@ build.json @home-assistant/supervisor
/tests/components/dsmr_reader/ @depl0y @glodenox
/homeassistant/components/dunehd/ @bieniu
/tests/components/dunehd/ @bieniu
/homeassistant/components/dwd_weather_warnings/ @runningman84 @stephan192 @Hummel95
/homeassistant/components/dwd_weather_warnings/ @runningman84 @stephan192 @Hummel95 @andarotajo
/homeassistant/components/dynalite/ @ziv1234
/tests/components/dynalite/ @ziv1234
/homeassistant/components/eafm/ @Jc2k
@@ -401,6 +405,7 @@ build.json @home-assistant/supervisor
/homeassistant/components/frontend/ @home-assistant/frontend
/tests/components/frontend/ @home-assistant/frontend
/homeassistant/components/frontier_silicon/ @wlcrs
/tests/components/frontier_silicon/ @wlcrs
/homeassistant/components/fully_kiosk/ @cgarwood
/tests/components/fully_kiosk/ @cgarwood
/homeassistant/components/garages_amsterdam/ @klaasnicolaas
@@ -545,8 +550,8 @@ build.json @home-assistant/supervisor
/tests/components/image_processing/ @home-assistant/core
/homeassistant/components/image_upload/ @home-assistant/core
/tests/components/image_upload/ @home-assistant/core
/homeassistant/components/imap/ @engrbm87
/tests/components/imap/ @engrbm87
/homeassistant/components/imap/ @engrbm87 @jbouwh
/tests/components/imap/ @engrbm87 @jbouwh
/homeassistant/components/incomfort/ @zxdavb
/homeassistant/components/influxdb/ @mdegat01
/tests/components/influxdb/ @mdegat01
@@ -650,8 +655,8 @@ build.json @home-assistant/supervisor
/tests/components/lidarr/ @tkdrob
/homeassistant/components/life360/ @pnbruckner
/tests/components/life360/ @pnbruckner
/homeassistant/components/lifx/ @bdraco @Djelibeybi
/tests/components/lifx/ @bdraco @Djelibeybi
/homeassistant/components/lifx/ @bdraco
/tests/components/lifx/ @bdraco
/homeassistant/components/light/ @home-assistant/core
/tests/components/light/ @home-assistant/core
/homeassistant/components/linux_battery/ @fabaff
@@ -659,8 +664,8 @@ build.json @home-assistant/supervisor
/tests/components/litejet/ @joncar
/homeassistant/components/litterrobot/ @natekspencer @tkdrob
/tests/components/litterrobot/ @natekspencer @tkdrob
/homeassistant/components/livisi/ @StefanIacobLivisi
/tests/components/livisi/ @StefanIacobLivisi
/homeassistant/components/livisi/ @StefanIacobLivisi @planbnet
/tests/components/livisi/ @StefanIacobLivisi @planbnet
/homeassistant/components/local_calendar/ @allenporter
/tests/components/local_calendar/ @allenporter
/homeassistant/components/local_ip/ @issacg
@@ -784,7 +789,8 @@ build.json @home-assistant/supervisor
/tests/components/nexia/ @bdraco
/homeassistant/components/nextbus/ @vividboarder
/tests/components/nextbus/ @vividboarder
/homeassistant/components/nextcloud/ @meichthys
/homeassistant/components/nextcloud/ @mib1185
/tests/components/nextcloud/ @mib1185
/homeassistant/components/nextdns/ @bieniu
/tests/components/nextdns/ @bieniu
/homeassistant/components/nfandroidtv/ @tkdrob
@@ -819,8 +825,8 @@ build.json @home-assistant/supervisor
/tests/components/numato/ @clssn
/homeassistant/components/number/ @home-assistant/core @Shulyaka
/tests/components/number/ @home-assistant/core @Shulyaka
/homeassistant/components/nut/ @bdraco @ollo69
/tests/components/nut/ @bdraco @ollo69
/homeassistant/components/nut/ @bdraco @ollo69 @pestevez
/tests/components/nut/ @bdraco @ollo69 @pestevez
/homeassistant/components/nws/ @MatthewFlamm @kamiyo
/tests/components/nws/ @MatthewFlamm @kamiyo
/homeassistant/components/nzbget/ @chriscla
@@ -893,8 +899,8 @@ build.json @home-assistant/supervisor
/tests/components/plaato/ @JohNan
/homeassistant/components/plex/ @jjlawren
/tests/components/plex/ @jjlawren
/homeassistant/components/plugwise/ @CoMPaTech @bouwew @brefra @frenck
/tests/components/plugwise/ @CoMPaTech @bouwew @brefra @frenck
/homeassistant/components/plugwise/ @CoMPaTech @bouwew @frenck
/tests/components/plugwise/ @CoMPaTech @bouwew @frenck
/homeassistant/components/plum_lightpad/ @ColinHarrington @prystupa
/tests/components/plum_lightpad/ @ColinHarrington @prystupa
/homeassistant/components/point/ @fredrike
@@ -931,6 +937,7 @@ build.json @home-assistant/supervisor
/homeassistant/components/pvpc_hourly_pricing/ @azogue
/tests/components/pvpc_hourly_pricing/ @azogue
/homeassistant/components/qbittorrent/ @geoffreylagaisse
/tests/components/qbittorrent/ @geoffreylagaisse
/homeassistant/components/qingping/ @bdraco @skgsergio
/tests/components/qingping/ @bdraco @skgsergio
/homeassistant/components/qld_bushfire/ @exxamalte
@@ -958,6 +965,8 @@ build.json @home-assistant/supervisor
/tests/components/rainmachine/ @bachya
/homeassistant/components/random/ @fabaff
/tests/components/random/ @fabaff
/homeassistant/components/rapt_ble/ @sairon
/tests/components/rapt_ble/ @sairon
/homeassistant/components/raspberry_pi/ @home-assistant/core
/tests/components/raspberry_pi/ @home-assistant/core
/homeassistant/components/rdw/ @frenck
@@ -976,6 +985,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/repairs/ @home-assistant/core
/tests/components/repairs/ @home-assistant/core
/homeassistant/components/repetier/ @MTrab @ShadowBr0ther
/homeassistant/components/rest/ @epenet
/tests/components/rest/ @epenet
/homeassistant/components/rflink/ @javicalle
/tests/components/rflink/ @javicalle
/homeassistant/components/rfxtrx/ @danielhiversen @elupus @RobBie1221
@@ -990,6 +1001,8 @@ build.json @home-assistant/supervisor
/tests/components/rituals_perfume_genie/ @milanmeu
/homeassistant/components/rmvtransport/ @cgtobi
/tests/components/rmvtransport/ @cgtobi
/homeassistant/components/roborock/ @humbertogontijo @Lash-L
/tests/components/roborock/ @humbertogontijo @Lash-L
/homeassistant/components/roku/ @ctalkington
/tests/components/roku/ @ctalkington
/homeassistant/components/roomba/ @pschmitt @cyr-ius @shenxn
@@ -1056,8 +1069,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/seven_segments/ @fabaff
/homeassistant/components/sfr_box/ @epenet
/tests/components/sfr_box/ @epenet
/homeassistant/components/sharkiq/ @JeffResc @funkybunch @AritroSaha10
/tests/components/sharkiq/ @JeffResc @funkybunch @AritroSaha10
/homeassistant/components/sharkiq/ @JeffResc @funkybunch
/tests/components/sharkiq/ @JeffResc @funkybunch
/homeassistant/components/shell_command/ @home-assistant/core
/tests/components/shell_command/ @home-assistant/core
/homeassistant/components/shelly/ @balloob @bieniu @thecode @chemelli74 @bdraco
@@ -1101,6 +1114,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/smhi/ @gjohansson-ST
/tests/components/smhi/ @gjohansson-ST
/homeassistant/components/sms/ @ocalvo
/homeassistant/components/snapcast/ @luar123
/tests/components/snapcast/ @luar123
/homeassistant/components/snooz/ @AustinBrunkhorst
/tests/components/snooz/ @AustinBrunkhorst
/homeassistant/components/solaredge/ @frenck
@@ -1129,8 +1144,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/splunk/ @Bre77
/homeassistant/components/spotify/ @frenck
/tests/components/spotify/ @frenck
/homeassistant/components/sql/ @dgomes @gjohansson-ST
/tests/components/sql/ @dgomes @gjohansson-ST
/homeassistant/components/sql/ @dgomes @gjohansson-ST @dougiteixeira
/tests/components/sql/ @dgomes @gjohansson-ST @dougiteixeira
/homeassistant/components/squeezebox/ @rajlaud
/tests/components/squeezebox/ @rajlaud
/homeassistant/components/srp_energy/ @briglx
@@ -1152,8 +1167,8 @@ build.json @home-assistant/supervisor
/tests/components/stookwijzer/ @fwestenberg
/homeassistant/components/stream/ @hunterjm @uvjustin @allenporter
/tests/components/stream/ @hunterjm @uvjustin @allenporter
/homeassistant/components/stt/ @pvizeli
/tests/components/stt/ @pvizeli
/homeassistant/components/stt/ @home-assistant/core @pvizeli
/tests/components/stt/ @home-assistant/core @pvizeli
/homeassistant/components/subaru/ @G-Two
/tests/components/subaru/ @G-Two
/homeassistant/components/suez_water/ @ooii
@@ -1213,8 +1228,6 @@ build.json @home-assistant/supervisor
/homeassistant/components/thethingsnetwork/ @fabaff
/homeassistant/components/thread/ @home-assistant/core
/tests/components/thread/ @home-assistant/core
/homeassistant/components/threshold/ @fabaff
/tests/components/threshold/ @fabaff
/homeassistant/components/tibber/ @danielhiversen
/tests/components/tibber/ @danielhiversen
/homeassistant/components/tile/ @bachya
@@ -1250,8 +1263,8 @@ build.json @home-assistant/supervisor
/tests/components/trafikverket_weatherstation/ @endor-force @gjohansson-ST
/homeassistant/components/transmission/ @engrbm87 @JPHutchins
/tests/components/transmission/ @engrbm87 @JPHutchins
/homeassistant/components/tts/ @pvizeli
/tests/components/tts/ @pvizeli
/homeassistant/components/tts/ @home-assistant/core @pvizeli
/tests/components/tts/ @home-assistant/core @pvizeli
/homeassistant/components/tuya/ @Tuya @zlinoliver @frenck
/tests/components/tuya/ @Tuya @zlinoliver @frenck
/homeassistant/components/twentemilieu/ @frenck
@@ -1263,8 +1276,8 @@ build.json @home-assistant/supervisor
/homeassistant/components/unifi/ @Kane610
/tests/components/unifi/ @Kane610
/homeassistant/components/unifiled/ @florisvdk
/homeassistant/components/unifiprotect/ @briis @AngellusMortis @bdraco
/tests/components/unifiprotect/ @briis @AngellusMortis @bdraco
/homeassistant/components/unifiprotect/ @AngellusMortis @bdraco
/tests/components/unifiprotect/ @AngellusMortis @bdraco
/homeassistant/components/upb/ @gwww
/tests/components/upb/ @gwww
/homeassistant/components/upc_connect/ @pvizeli @fabaff
@@ -1293,15 +1306,13 @@ build.json @home-assistant/supervisor
/homeassistant/components/velux/ @Julius2342
/homeassistant/components/venstar/ @garbled1
/tests/components/venstar/ @garbled1
/homeassistant/components/verisure/ @frenck
/tests/components/verisure/ @frenck
/homeassistant/components/verisure/ @frenck @niro1987
/tests/components/verisure/ @frenck @niro1987
/homeassistant/components/versasense/ @flamm3blemuff1n
/homeassistant/components/version/ @ludeeus
/tests/components/version/ @ludeeus
/homeassistant/components/vesync/ @markperdue @webdjoe @thegardenmonkey
/tests/components/vesync/ @markperdue @webdjoe @thegardenmonkey
/homeassistant/components/vicare/ @oischinger
/tests/components/vicare/ @oischinger
/homeassistant/components/vilfo/ @ManneW
/tests/components/vilfo/ @ManneW
/homeassistant/components/vivotek/ @HarlemSquirrel
@@ -1309,6 +1320,8 @@ build.json @home-assistant/supervisor
/tests/components/vizio/ @raman325
/homeassistant/components/vlc_telnet/ @rodripf @MartinHjelmare
/tests/components/vlc_telnet/ @rodripf @MartinHjelmare
/homeassistant/components/voip/ @balloob @synesthesiam
/tests/components/voip/ @balloob @synesthesiam
/homeassistant/components/volumio/ @OnFreund
/tests/components/volumio/ @OnFreund
/homeassistant/components/volvooncall/ @molobrakos
@@ -1354,15 +1367,16 @@ build.json @home-assistant/supervisor
/tests/components/wled/ @frenck
/homeassistant/components/wolflink/ @adamkrol93
/tests/components/wolflink/ @adamkrol93
/homeassistant/components/workday/ @fabaff
/tests/components/workday/ @fabaff
/homeassistant/components/workday/ @fabaff @gjohansson-ST
/tests/components/workday/ @fabaff @gjohansson-ST
/homeassistant/components/worldclock/ @fabaff
/tests/components/worldclock/ @fabaff
/homeassistant/components/ws66i/ @ssaenger
/tests/components/ws66i/ @ssaenger
/homeassistant/components/wyoming/ @balloob @synesthesiam
/tests/components/wyoming/ @balloob @synesthesiam
/homeassistant/components/xbox/ @hunterjm
/tests/components/xbox/ @hunterjm
/homeassistant/components/xbox_live/ @MartinHjelmare
/homeassistant/components/xiaomi_aqara/ @danielhiversen @syssi
/tests/components/xiaomi_aqara/ @danielhiversen @syssi
/homeassistant/components/xiaomi_ble/ @Jc2k @Ernst79

View File

@@ -132,8 +132,8 @@ For answers to common questions about this code of conduct, see the FAQ at
<https://www.contributor-covenant.org/faq>. Translations are available at
<https://www.contributor-covenant.org/translations>.
[coc-blog]: /blog/2017/01/21/home-assistant-governance/
[coc2-blog]: /blog/2020/05/25/code-of-conduct-updated/
[coc-blog]: https://www.home-assistant.io/blog/2017/01/21/home-assistant-governance/
[coc2-blog]: https://www.home-assistant.io/blog/2020/05/25/code-of-conduct-updated/
[email]: mailto:safety@home-assistant.io
[homepage]: http://contributor-covenant.org
[mozilla]: https://github.com/mozilla/diversity

View File

@@ -4,12 +4,12 @@ SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# Uninstall pre-installed formatting and linting tools
# They would conflict with our pinned versions
RUN pipx uninstall black
RUN pipx uninstall flake8
RUN pipx uninstall pydocstyle
RUN pipx uninstall pycodestyle
RUN pipx uninstall mypy
RUN pipx uninstall pylint
RUN \
pipx uninstall black \
&& pipx uninstall pydocstyle \
&& pipx uninstall pycodestyle \
&& pipx uninstall mypy \
&& pipx uninstall pylint
RUN \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \

View File

@@ -4,7 +4,7 @@ Home Assistant |Chat Status|
Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.
Check out `home-assistant.io <https://home-assistant.io>`__ for `a
demo <https://home-assistant.io/demo/>`__, `installation instructions <https://home-assistant.io/getting-started/>`__,
demo <https://demo.home-assistant.io>`__, `installation instructions <https://home-assistant.io/getting-started/>`__,
`tutorials <https://home-assistant.io/getting-started/automation/>`__ and `documentation <https://home-assistant.io/docs/>`__.
|screenshot-states|
@@ -23,6 +23,6 @@ of a component, check the `Home Assistant help section <https://home-assistant.i
.. |Chat Status| image:: https://img.shields.io/discord/330944238910963714.svg
:target: https://discord.gg/c5DvZ4e
.. |screenshot-states| image:: https://raw.githubusercontent.com/home-assistant/core/master/docs/screenshots.png
:target: https://home-assistant.io/demo/
:target: https://demo.home-assistant.io
.. |screenshot-integrations| image:: https://raw.githubusercontent.com/home-assistant/core/dev/docs/screenshot-integrations.png
:target: https://home-assistant.io/integrations/

View File

@@ -1,11 +1,11 @@
image: homeassistant/{arch}-homeassistant
shadow_repository: ghcr.io/home-assistant
build_from:
aarch64: ghcr.io/home-assistant/aarch64-homeassistant-base:2023.02.0
armhf: ghcr.io/home-assistant/armhf-homeassistant-base:2023.02.0
armv7: ghcr.io/home-assistant/armv7-homeassistant-base:2023.02.0
amd64: ghcr.io/home-assistant/amd64-homeassistant-base:2023.02.0
i386: ghcr.io/home-assistant/i386-homeassistant-base:2023.02.0
aarch64: ghcr.io/home-assistant/aarch64-homeassistant-base:2023.04.0
armhf: ghcr.io/home-assistant/armhf-homeassistant-base:2023.04.0
armv7: ghcr.io/home-assistant/armv7-homeassistant-base:2023.04.0
amd64: ghcr.io/home-assistant/amd64-homeassistant-base:2023.04.0
i386: ghcr.io/home-assistant/i386-homeassistant-base:2023.04.0
codenotary:
signer: notary@home-assistant.io
base_image: notary@home-assistant.io

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 164 KiB

View File

@@ -14,7 +14,7 @@ from homeassistant.core import CALLBACK_TYPE, HomeAssistant, callback
from homeassistant.data_entry_flow import FlowResult
from homeassistant.util import dt as dt_util
from . import auth_store, models
from . import auth_store, jwt_wrapper, models
from .const import ACCESS_TOKEN_EXPIRATION, GROUP_ID_ADMIN
from .mfa_modules import MultiFactorAuthModule, auth_mfa_module_from_config
from .providers import AuthProvider, LoginFlow, auth_provider_from_config
@@ -555,9 +555,7 @@ class AuthManager:
) -> models.RefreshToken | None:
"""Return refresh token if an access token is valid."""
try:
unverif_claims = jwt.decode(
token, algorithms=["HS256"], options={"verify_signature": False}
)
unverif_claims = jwt_wrapper.unverified_hs256_token_decode(token)
except jwt.InvalidTokenError:
return None
@@ -573,7 +571,9 @@ class AuthManager:
issuer = refresh_token.id
try:
jwt.decode(token, jwt_key, leeway=10, issuer=issuer, algorithms=["HS256"])
jwt_wrapper.verify_and_decode(
token, jwt_key, leeway=10, issuer=issuer, algorithms=["HS256"]
)
except jwt.InvalidTokenError:
return None

View File

@@ -0,0 +1,116 @@
"""Provide a wrapper around JWT that caches decoding tokens.
Since we decode the same tokens over and over again
we can cache the result of the decode of valid tokens
to speed up the process.
"""
from __future__ import annotations
from datetime import timedelta
from functools import lru_cache, partial
from typing import Any
from jwt import DecodeError, PyJWS, PyJWT
from homeassistant.util.json import json_loads
JWT_TOKEN_CACHE_SIZE = 16
MAX_TOKEN_SIZE = 8192
_VERIFY_KEYS = ("signature", "exp", "nbf", "iat", "aud", "iss")
_VERIFY_OPTIONS: dict[str, Any] = {f"verify_{key}": True for key in _VERIFY_KEYS} | {
"require": []
}
_NO_VERIFY_OPTIONS = {f"verify_{key}": False for key in _VERIFY_KEYS}
class _PyJWSWithLoadCache(PyJWS):
"""PyJWS with a dedicated load implementation."""
@lru_cache(maxsize=JWT_TOKEN_CACHE_SIZE)
# We only ever have a global instance of this class
# so we do not have to worry about the LRU growing
# each time we create a new instance.
def _load(self, jwt: str | bytes) -> tuple[bytes, bytes, dict, bytes]:
"""Load a JWS."""
return super()._load(jwt)
_jws = _PyJWSWithLoadCache()
@lru_cache(maxsize=JWT_TOKEN_CACHE_SIZE)
def _decode_payload(json_payload: str) -> dict[str, Any]:
"""Decode the payload from a JWS dictionary."""
try:
payload = json_loads(json_payload)
except ValueError as err:
raise DecodeError(f"Invalid payload string: {err}") from err
if not isinstance(payload, dict):
raise DecodeError("Invalid payload string: must be a json object")
return payload
class _PyJWTWithVerify(PyJWT):
"""PyJWT with a fast decode implementation."""
def decode_payload(
self, jwt: str, key: str, options: dict[str, Any], algorithms: list[str]
) -> dict[str, Any]:
"""Decode a JWT's payload."""
if len(jwt) > MAX_TOKEN_SIZE:
# Avoid caching impossible tokens
raise DecodeError("Token too large")
return _decode_payload(
_jws.decode_complete(
jwt=jwt,
key=key,
algorithms=algorithms,
options=options,
)["payload"]
)
def verify_and_decode(
self,
jwt: str,
key: str,
algorithms: list[str],
issuer: str | None = None,
leeway: int | float | timedelta = 0,
options: dict[str, Any] | None = None,
) -> dict[str, Any]:
"""Verify a JWT's signature and claims."""
merged_options = {**_VERIFY_OPTIONS, **(options or {})}
payload = self.decode_payload(
jwt=jwt,
key=key,
options=merged_options,
algorithms=algorithms,
)
# These should never be missing since we verify them
# but this is an additional safeguard to make sure
# nothing slips through.
assert "exp" in payload, "exp claim is required"
assert "iat" in payload, "iat claim is required"
self._validate_claims( # type: ignore[no-untyped-call]
payload=payload,
options=merged_options,
issuer=issuer,
leeway=leeway,
)
return payload
_jwt = _PyJWTWithVerify() # type: ignore[no-untyped-call]
verify_and_decode = _jwt.verify_and_decode
unverified_hs256_token_decode = lru_cache(maxsize=JWT_TOKEN_CACHE_SIZE)(
partial(
_jwt.decode_payload, key="", algorithms=["HS256"], options=_NO_VERIFY_OPTIONS
)
)
__all__ = [
"unverified_hs256_token_decode",
"verify_and_decode",
]

View File

@@ -6,15 +6,12 @@ from typing import TYPE_CHECKING
import attr
if TYPE_CHECKING:
from homeassistant.helpers import (
device_registry as dev_reg,
entity_registry as ent_reg,
)
from homeassistant.helpers import device_registry as dr, entity_registry as er
@attr.s(slots=True)
class PermissionLookup:
"""Class to hold data for permission lookups."""
entity_registry: ent_reg.EntityRegistry = attr.ib()
device_registry: dev_reg.DeviceRegistry = attr.ib()
entity_registry: er.EntityRegistry = attr.ib()
device_registry: dr.DeviceRegistry = attr.ib()

View File

@@ -8,7 +8,7 @@ from .util.async_ import protect_loop
def enable() -> None:
"""Enable the detection of blocking calls in the event loop."""
# Prevent urllib3 and requests doing I/O in event loop
HTTPConnection.putrequest = protect_loop( # type: ignore[assignment]
HTTPConnection.putrequest = protect_loop( # type: ignore[method-assign]
HTTPConnection.putrequest
)

View File

@@ -31,6 +31,7 @@ from .helpers import (
entity_registry,
issue_registry,
recorder,
template,
)
from .helpers.dispatcher import async_dispatcher_send
from .helpers.typing import ConfigType
@@ -238,12 +239,14 @@ async def load_registries(hass: core.HomeAssistant) -> None:
# Load the registries and cache the result of platform.uname().processor
entity.async_setup(hass)
template.async_setup(hass)
await asyncio.gather(
area_registry.async_load(hass),
device_registry.async_load(hass),
entity_registry.async_load(hass),
issue_registry.async_load(hass),
hass.async_add_executor_job(_cache_uname_processor),
template.async_load_custom_templates(hass),
)
@@ -508,19 +511,20 @@ async def async_setup_multi_components(
) -> None:
"""Set up multiple domains. Log on failure."""
futures = {
domain: hass.async_create_task(async_setup_component(hass, domain, config))
domain: hass.async_create_task(
async_setup_component(hass, domain, config), f"setup component {domain}"
)
for domain in domains
}
await asyncio.wait(futures.values())
errors = [domain for domain in domains if futures[domain].exception()]
for domain in errors:
exception = futures[domain].exception()
assert exception is not None
_LOGGER.error(
"Error setting up integration %s - received exception",
domain,
exc_info=(type(exception), exception, exception.__traceback__),
)
results = await asyncio.gather(*futures.values(), return_exceptions=True)
for idx, domain in enumerate(futures):
result = results[idx]
if isinstance(result, BaseException):
_LOGGER.error(
"Error setting up integration %s - received exception",
domain,
exc_info=(type(result), result, result.__traceback__),
)
async def _async_set_up_integrations(
@@ -625,6 +629,9 @@ async def _async_set_up_integrations(
- stage_1_domains
)
# Enables after dependencies when setting up stage 1 domains
async_set_domains_to_be_loaded(hass, stage_1_domains)
# Start setup
if stage_1_domains:
_LOGGER.info("Setting up stage 1: %s", stage_1_domains)
@@ -636,7 +643,7 @@ async def _async_set_up_integrations(
except asyncio.TimeoutError:
_LOGGER.warning("Setup timed out for stage 1 - moving forward")
# Enables after dependencies
# Add after dependencies when setting up stage 2 domains
async_set_domains_to_be_loaded(hass, stage_2_domains)
if stage_2_domains:

View File

@@ -0,0 +1,5 @@
{
"domain": "heltun",
"name": "HELTUN",
"iot_standards": ["zwave"]
}

View File

@@ -0,0 +1,5 @@
{
"domain": "homeseer",
"name": "HomeSeer",
"iot_standards": ["zwave"]
}

View File

@@ -10,7 +10,6 @@
"microsoft_face",
"microsoft",
"msteams",
"xbox",
"xbox_live"
"xbox"
]
}

View File

@@ -1,4 +1,4 @@
"""This package contains components that can be plugged into Home Assistant.
"""Contains components that can be plugged into Home Assistant.
Component design guidelines:
- Each component defines a constant DOMAIN that is equal to its filename.

View File

@@ -10,14 +10,15 @@ from aiohttp import ClientSession
from aiohttp.client_exceptions import ClientConnectorError
from async_timeout import timeout
from homeassistant.components.sensor import DOMAIN as SENSOR_PLATFORM
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_API_KEY, CONF_NAME, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.device_registry import DeviceEntryType
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from homeassistant.util.unit_system import METRIC_SYSTEM
from .const import ATTR_FORECAST, CONF_FORECAST, DOMAIN, MANUFACTURER
@@ -49,6 +50,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
# Remove ozone sensors from registry if they exist
ent_reg = er.async_get(hass)
for day in range(0, 5):
unique_id = f"{coordinator.location_key}-ozone-{day}"
if entity_id := ent_reg.async_get_entity_id(SENSOR_PLATFORM, DOMAIN, unique_id):
_LOGGER.debug("Removing ozone sensor entity %s", entity_id)
ent_reg.async_remove(entity_id)
return True
@@ -116,11 +125,7 @@ class AccuWeatherDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
async with timeout(10):
current = await self.accuweather.async_get_current_conditions()
forecast = (
await self.accuweather.async_get_forecast(
metric=self.hass.config.units is METRIC_SYSTEM
)
if self.forecast
else {}
await self.accuweather.async_get_forecast() if self.forecast else {}
)
except (
ApiError,

View File

@@ -20,7 +20,6 @@ from homeassistant.components.weather import (
ATTR_CONDITION_WINDY,
)
API_IMPERIAL: Final = "Imperial"
API_METRIC: Final = "Metric"
ATTRIBUTION: Final = "Data provided by AccuWeather"
ATTR_CATEGORY: Final = "Category"

View File

@@ -8,5 +8,5 @@
"iot_class": "cloud_polling",
"loggers": ["accuweather"],
"quality_scale": "platinum",
"requirements": ["accuweather==0.5.0"]
"requirements": ["accuweather==0.5.1"]
}

View File

@@ -26,11 +26,9 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from homeassistant.util.unit_system import METRIC_SYSTEM
from . import AccuWeatherDataUpdateCoordinator
from .const import (
API_IMPERIAL,
API_METRIC,
ATTR_CATEGORY,
ATTR_DIRECTION,
@@ -51,7 +49,7 @@ PARALLEL_UPDATES = 1
class AccuWeatherSensorDescriptionMixin:
"""Mixin for AccuWeather sensor."""
value_fn: Callable[[dict[str, Any], str], StateType]
value_fn: Callable[[dict[str, Any]], StateType]
@dataclass
@@ -61,18 +59,25 @@ class AccuWeatherSensorDescription(
"""Class describing AccuWeather sensor entities."""
attr_fn: Callable[[dict[str, Any]], dict[str, StateType]] = lambda _: {}
metric_unit: str | None = None
us_customary_unit: str | None = None
FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
AccuWeatherSensorDescription(
key="AirQuality",
icon="mdi:air-filter",
name="Air quality",
value_fn=lambda data: cast(str, data[ATTR_CATEGORY]),
device_class=SensorDeviceClass.ENUM,
options=["good", "hazardous", "high", "low", "moderate", "unhealthy"],
translation_key="air_quality",
),
AccuWeatherSensorDescription(
key="CloudCoverDay",
icon="mdi:weather-cloudy",
name="Cloud cover day",
entity_registry_enabled_default=False,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data, _: cast(int, data),
value_fn=lambda data: cast(int, data),
),
AccuWeatherSensorDescription(
key="CloudCoverNight",
@@ -80,7 +85,7 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Cloud cover night",
entity_registry_enabled_default=False,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data, _: cast(int, data),
value_fn=lambda data: cast(int, data),
),
AccuWeatherSensorDescription(
key="Grass",
@@ -88,15 +93,16 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Grass pollen",
entity_registry_enabled_default=False,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key="grass_pollen",
),
AccuWeatherSensorDescription(
key="HoursOfSun",
icon="mdi:weather-partly-cloudy",
name="Hours of sun",
native_unit_of_measurement=UnitOfTime.HOURS,
value_fn=lambda data, _: cast(float, data),
value_fn=lambda data: cast(float, data),
),
AccuWeatherSensorDescription(
key="Mold",
@@ -104,16 +110,9 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Mold pollen",
entity_registry_enabled_default=False,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
),
AccuWeatherSensorDescription(
key="Ozone",
icon="mdi:vector-triangle",
name="Ozone",
entity_registry_enabled_default=False,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key="mold_pollen",
),
AccuWeatherSensorDescription(
key="Ragweed",
@@ -121,56 +120,53 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Ragweed pollen",
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
entity_registry_enabled_default=False,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key="ragweed_pollen",
),
AccuWeatherSensorDescription(
key="RealFeelTemperatureMax",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature max",
metric_unit=UnitOfTemperature.CELSIUS,
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="RealFeelTemperatureMin",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature min",
metric_unit=UnitOfTemperature.CELSIUS,
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="RealFeelTemperatureShadeMax",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature shade max",
entity_registry_enabled_default=False,
metric_unit=UnitOfTemperature.CELSIUS,
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="RealFeelTemperatureShadeMin",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature shade min",
entity_registry_enabled_default=False,
metric_unit=UnitOfTemperature.CELSIUS,
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
value_fn=lambda data, _: cast(float, data[ATTR_VALUE]),
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="ThunderstormProbabilityDay",
icon="mdi:weather-lightning",
name="Thunderstorm probability day",
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data, _: cast(int, data),
value_fn=lambda data: cast(int, data),
),
AccuWeatherSensorDescription(
key="ThunderstormProbabilityNight",
icon="mdi:weather-lightning",
name="Thunderstorm probability night",
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data, _: cast(int, data),
value_fn=lambda data: cast(int, data),
),
AccuWeatherSensorDescription(
key="Tree",
@@ -178,25 +174,26 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Tree pollen",
native_unit_of_measurement=CONCENTRATION_PARTS_PER_CUBIC_METER,
entity_registry_enabled_default=False,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key="tree_pollen",
),
AccuWeatherSensorDescription(
key="UVIndex",
icon="mdi:weather-sunny",
name="UV index",
native_unit_of_measurement=UV_INDEX,
value_fn=lambda data, _: cast(int, data[ATTR_VALUE]),
value_fn=lambda data: cast(int, data[ATTR_VALUE]),
attr_fn=lambda data: {ATTR_LEVEL: data[ATTR_CATEGORY]},
translation_key="uv_index",
),
AccuWeatherSensorDescription(
key="WindGustDay",
device_class=SensorDeviceClass.WIND_SPEED,
name="Wind gust day",
entity_registry_enabled_default=False,
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
),
AccuWeatherSensorDescription(
@@ -204,27 +201,24 @@ FORECAST_SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
device_class=SensorDeviceClass.WIND_SPEED,
name="Wind gust night",
entity_registry_enabled_default=False,
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
),
AccuWeatherSensorDescription(
key="WindDay",
device_class=SensorDeviceClass.WIND_SPEED,
name="Wind day",
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
),
AccuWeatherSensorDescription(
key="WindNight",
device_class=SensorDeviceClass.WIND_SPEED,
name="Wind night",
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
value_fn=lambda data, _: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][ATTR_VALUE]),
attr_fn=lambda data: {"direction": data[ATTR_DIRECTION][ATTR_ENGLISH]},
),
)
@@ -236,9 +230,8 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Apparent temperature",
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
metric_unit=UnitOfTemperature.CELSIUS,
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[API_METRIC][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="Ceiling",
@@ -246,9 +239,8 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
icon="mdi:weather-fog",
name="Cloud ceiling",
state_class=SensorStateClass.MEASUREMENT,
metric_unit=UnitOfLength.METERS,
us_customary_unit=UnitOfLength.FEET,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
native_unit_of_measurement=UnitOfLength.METERS,
value_fn=lambda data: cast(float, data[API_METRIC][ATTR_VALUE]),
suggested_display_precision=0,
),
AccuWeatherSensorDescription(
@@ -258,7 +250,7 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data, _: cast(int, data),
value_fn=lambda data: cast(int, data),
),
AccuWeatherSensorDescription(
key="DewPoint",
@@ -266,18 +258,16 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Dew point",
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
metric_unit=UnitOfTemperature.CELSIUS,
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[API_METRIC][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="RealFeelTemperature",
device_class=SensorDeviceClass.TEMPERATURE,
name="RealFeel temperature",
state_class=SensorStateClass.MEASUREMENT,
metric_unit=UnitOfTemperature.CELSIUS,
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[API_METRIC][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="RealFeelTemperatureShade",
@@ -285,18 +275,16 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="RealFeel temperature shade",
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
metric_unit=UnitOfTemperature.CELSIUS,
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[API_METRIC][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="Precipitation",
device_class=SensorDeviceClass.PRECIPITATION_INTENSITY,
name="Precipitation",
state_class=SensorStateClass.MEASUREMENT,
metric_unit=UnitOfVolumetricFlux.MILLIMETERS_PER_HOUR,
us_customary_unit=UnitOfVolumetricFlux.INCHES_PER_HOUR,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
native_unit_of_measurement=UnitOfVolumetricFlux.MILLIMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[API_METRIC][ATTR_VALUE]),
attr_fn=lambda data: {"type": data["PrecipitationType"]},
),
AccuWeatherSensorDescription(
@@ -306,7 +294,7 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Pressure tendency",
options=["falling", "rising", "steady"],
translation_key="pressure_tendency",
value_fn=lambda data, _: cast(str, data["LocalizedText"]).lower(),
value_fn=lambda data: cast(str, data["LocalizedText"]).lower(),
),
AccuWeatherSensorDescription(
key="UVIndex",
@@ -314,7 +302,7 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="UV index",
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=UV_INDEX,
value_fn=lambda data, _: cast(int, data),
value_fn=lambda data: cast(int, data),
attr_fn=lambda data: {ATTR_LEVEL: data["UVIndexText"]},
),
AccuWeatherSensorDescription(
@@ -323,9 +311,8 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Wet bulb temperature",
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
metric_unit=UnitOfTemperature.CELSIUS,
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[API_METRIC][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="WindChillTemperature",
@@ -333,18 +320,16 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Wind chill temperature",
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
metric_unit=UnitOfTemperature.CELSIUS,
us_customary_unit=UnitOfTemperature.FAHRENHEIT,
value_fn=lambda data, unit: cast(float, data[unit][ATTR_VALUE]),
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: cast(float, data[API_METRIC][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="Wind",
device_class=SensorDeviceClass.WIND_SPEED,
name="Wind",
state_class=SensorStateClass.MEASUREMENT,
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
value_fn=lambda data, unit: cast(float, data[ATTR_SPEED][unit][ATTR_VALUE]),
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][API_METRIC][ATTR_VALUE]),
),
AccuWeatherSensorDescription(
key="WindGust",
@@ -352,9 +337,8 @@ SENSOR_TYPES: tuple[AccuWeatherSensorDescription, ...] = (
name="Wind gust",
entity_registry_enabled_default=False,
state_class=SensorStateClass.MEASUREMENT,
metric_unit=UnitOfSpeed.KILOMETERS_PER_HOUR,
us_customary_unit=UnitOfSpeed.MILES_PER_HOUR,
value_fn=lambda data, unit: cast(float, data[ATTR_SPEED][unit][ATTR_VALUE]),
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
value_fn=lambda data: cast(float, data[ATTR_SPEED][API_METRIC][ATTR_VALUE]),
),
)
@@ -374,7 +358,7 @@ async def async_setup_entry(
# Some air quality/allergy sensors are only available for certain
# locations.
sensors.extend(
AccuWeatherForecastSensor(coordinator, description, forecast_day=day)
AccuWeatherSensor(coordinator, description, forecast_day=day)
for day in range(MAX_FORECAST_DAYS + 1)
for description in FORECAST_SENSOR_TYPES
if description.key in coordinator.data[ATTR_FORECAST][0]
@@ -413,34 +397,27 @@ class AccuWeatherSensor(
self._attr_unique_id = (
f"{coordinator.location_key}-{description.key}".lower()
)
self._attr_native_unit_of_measurement = description.native_unit_of_measurement
if self.coordinator.hass.config.units is METRIC_SYSTEM:
self._unit_system = API_METRIC
if metric_unit := description.metric_unit:
self._attr_native_unit_of_measurement = metric_unit
else:
self._unit_system = API_IMPERIAL
if us_customary_unit := description.us_customary_unit:
self._attr_native_unit_of_measurement = us_customary_unit
self._attr_device_info = coordinator.device_info
if forecast_day is not None:
self.forecast_day = forecast_day
self.forecast_day = forecast_day
@property
def native_value(self) -> StateType:
"""Return the state."""
return self.entity_description.value_fn(self._sensor_data, self._unit_system)
return self.entity_description.value_fn(self._sensor_data)
@property
def extra_state_attributes(self) -> dict[str, Any]:
"""Return the state attributes."""
if self.forecast_day is not None:
return self.entity_description.attr_fn(self._sensor_data)
return self.entity_description.attr_fn(self.coordinator.data)
@callback
def _handle_coordinator_update(self) -> None:
"""Handle data update."""
self._sensor_data = _get_sensor_data(
self.coordinator.data, self.entity_description.key
self.coordinator.data, self.entity_description.key, self.forecast_day
)
self.async_write_ha_state()
@@ -458,20 +435,3 @@ def _get_sensor_data(
return sensors["PrecipitationSummary"]["PastHour"]
return sensors[kind]
class AccuWeatherForecastSensor(AccuWeatherSensor):
"""Define an AccuWeather forecast entity."""
@property
def extra_state_attributes(self) -> dict[str, Any]:
"""Return the state attributes."""
return self.entity_description.attr_fn(self._sensor_data)
@callback
def _handle_coordinator_update(self) -> None:
"""Handle data update."""
self._sensor_data = _get_sensor_data(
self.coordinator.data, self.entity_description.key, self.forecast_day
)
self.async_write_ha_state()

View File

@@ -30,6 +30,91 @@
"rising": "Rising",
"falling": "Falling"
}
},
"air_quality": {
"state": {
"good": "Good",
"hazardous": "Hazardous",
"high": "High",
"low": "Low",
"moderate": "Moderate",
"unhealthy": "Unhealthy"
}
},
"grass_pollen": {
"state_attributes": {
"level": {
"name": "Level",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
},
"mold_pollen": {
"state_attributes": {
"level": {
"name": "Level",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
},
"ragweed_pollen": {
"state_attributes": {
"level": {
"name": "Level",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
},
"tree_pollen": {
"state_attributes": {
"level": {
"name": "Level",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
},
"uv_index": {
"state_attributes": {
"level": {
"name": "Level",
"state": {
"good": "[%key:component::accuweather::entity::sensor::air_quality::state::good%]",
"hazardous": "[%key:component::accuweather::entity::sensor::air_quality::state::hazardous%]",
"high": "[%key:component::accuweather::entity::sensor::air_quality::state::high%]",
"low": "[%key:component::accuweather::entity::sensor::air_quality::state::low%]",
"moderate": "[%key:component::accuweather::entity::sensor::air_quality::state::moderate%]",
"unhealthy": "[%key:component::accuweather::entity::sensor::air_quality::state::unhealthy%]"
}
}
}
}
}
},

View File

@@ -28,17 +28,9 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from homeassistant.util.dt import utc_from_timestamp
from homeassistant.util.unit_system import METRIC_SYSTEM
from . import AccuWeatherDataUpdateCoordinator
from .const import (
API_IMPERIAL,
API_METRIC,
ATTR_FORECAST,
ATTRIBUTION,
CONDITION_CLASSES,
DOMAIN,
)
from .const import API_METRIC, ATTR_FORECAST, ATTRIBUTION, CONDITION_CLASSES, DOMAIN
PARALLEL_UPDATES = 1
@@ -66,20 +58,11 @@ class AccuWeatherEntity(
# Coordinator data is used also for sensors which don't have units automatically
# converted, hence the weather entity's native units follow the configured unit
# system
if coordinator.hass.config.units is METRIC_SYSTEM:
self._attr_native_precipitation_unit = UnitOfPrecipitationDepth.MILLIMETERS
self._attr_native_pressure_unit = UnitOfPressure.HPA
self._attr_native_temperature_unit = UnitOfTemperature.CELSIUS
self._attr_native_visibility_unit = UnitOfLength.KILOMETERS
self._attr_native_wind_speed_unit = UnitOfSpeed.KILOMETERS_PER_HOUR
self._unit_system = API_METRIC
else:
self._unit_system = API_IMPERIAL
self._attr_native_precipitation_unit = UnitOfPrecipitationDepth.INCHES
self._attr_native_pressure_unit = UnitOfPressure.INHG
self._attr_native_temperature_unit = UnitOfTemperature.FAHRENHEIT
self._attr_native_visibility_unit = UnitOfLength.MILES
self._attr_native_wind_speed_unit = UnitOfSpeed.MILES_PER_HOUR
self._attr_native_precipitation_unit = UnitOfPrecipitationDepth.MILLIMETERS
self._attr_native_pressure_unit = UnitOfPressure.HPA
self._attr_native_temperature_unit = UnitOfTemperature.CELSIUS
self._attr_native_visibility_unit = UnitOfLength.KILOMETERS
self._attr_native_wind_speed_unit = UnitOfSpeed.KILOMETERS_PER_HOUR
self._attr_unique_id = coordinator.location_key
self._attr_attribution = ATTRIBUTION
self._attr_device_info = coordinator.device_info
@@ -99,16 +82,12 @@ class AccuWeatherEntity(
@property
def native_temperature(self) -> float:
"""Return the temperature."""
return cast(
float, self.coordinator.data["Temperature"][self._unit_system]["Value"]
)
return cast(float, self.coordinator.data["Temperature"][API_METRIC]["Value"])
@property
def native_pressure(self) -> float:
"""Return the pressure."""
return cast(
float, self.coordinator.data["Pressure"][self._unit_system]["Value"]
)
return cast(float, self.coordinator.data["Pressure"][API_METRIC]["Value"])
@property
def humidity(self) -> int:
@@ -118,9 +97,7 @@ class AccuWeatherEntity(
@property
def native_wind_speed(self) -> float:
"""Return the wind speed."""
return cast(
float, self.coordinator.data["Wind"]["Speed"][self._unit_system]["Value"]
)
return cast(float, self.coordinator.data["Wind"]["Speed"][API_METRIC]["Value"])
@property
def wind_bearing(self) -> int:
@@ -130,19 +107,7 @@ class AccuWeatherEntity(
@property
def native_visibility(self) -> float:
"""Return the visibility."""
return cast(
float, self.coordinator.data["Visibility"][self._unit_system]["Value"]
)
@property
def ozone(self) -> int | None:
"""Return the ozone level."""
# We only have ozone data for certain locations and only in the forecast data.
if self.coordinator.forecast and self.coordinator.data[ATTR_FORECAST][0].get(
"Ozone"
):
return cast(int, self.coordinator.data[ATTR_FORECAST][0]["Ozone"]["Value"])
return None
return cast(float, self.coordinator.data["Visibility"][API_METRIC]["Value"])
@property
def forecast(self) -> list[Forecast] | None:

View File

@@ -40,7 +40,7 @@ def get_scanner(
class ActiontecDeviceScanner(DeviceScanner):
"""This class queries an actiontec router for connected devices."""
"""Class which queries an actiontec router for connected devices."""
def __init__(self, config: ConfigType) -> None:
"""Initialize the scanner."""

View File

@@ -7,11 +7,11 @@ from advantage_air import ApiError, advantage_air
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_IP_ADDRESS, CONF_PORT, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import ADVANTAGE_AIR_RETRY, DOMAIN
from .models import AdvantageAirData
ADVANTAGE_AIR_SYNC_INTERVAL = 15
PLATFORMS = [
@@ -53,29 +53,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
update_interval=timedelta(seconds=ADVANTAGE_AIR_SYNC_INTERVAL),
)
def error_handle_factory(func):
"""Return the provided API function wrapped.
Adds an error handler and coordinator refresh.
"""
async def error_handle(param):
try:
if await func(param):
await coordinator.async_refresh()
except ApiError as err:
raise HomeAssistantError(err) from err
return error_handle
await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = {
"coordinator": coordinator,
"aircon": error_handle_factory(api.aircon.async_set),
"lights": error_handle_factory(api.lights.async_set),
}
hass.data[DOMAIN][entry.entry_id] = AdvantageAirData(coordinator, api)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

View File

@@ -1,8 +1,6 @@
"""Binary Sensor platform for Advantage Air integration."""
from __future__ import annotations
from typing import Any
from homeassistant.components.binary_sensor import (
BinarySensorDeviceClass,
BinarySensorEntity,
@@ -14,6 +12,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN as ADVANTAGE_AIR_DOMAIN
from .entity import AdvantageAirAcEntity, AdvantageAirZoneEntity
from .models import AdvantageAirData
PARALLEL_UPDATES = 0
@@ -25,10 +24,10 @@ async def async_setup_entry(
) -> None:
"""Set up AdvantageAir Binary Sensor platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
instance: AdvantageAirData = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
entities: list[BinarySensorEntity] = []
if aircons := instance["coordinator"].data.get("aircons"):
if aircons := instance.coordinator.data.get("aircons"):
for ac_key, ac_device in aircons.items():
entities.append(AdvantageAirFilter(instance, ac_key))
for zone_key, zone in ac_device["zones"].items():
@@ -48,7 +47,7 @@ class AdvantageAirFilter(AdvantageAirAcEntity, BinarySensorEntity):
_attr_entity_category = EntityCategory.DIAGNOSTIC
_attr_name = "Filter"
def __init__(self, instance: dict[str, Any], ac_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str) -> None:
"""Initialize an Advantage Air Filter sensor."""
super().__init__(instance, ac_key)
self._attr_unique_id += "-filter"
@@ -64,7 +63,7 @@ class AdvantageAirZoneMotion(AdvantageAirZoneEntity, BinarySensorEntity):
_attr_device_class = BinarySensorDeviceClass.MOTION
def __init__(self, instance: dict[str, Any], ac_key: str, zone_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone Motion sensor."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = f'{self._zone["name"]} motion'
@@ -82,7 +81,7 @@ class AdvantageAirZoneMyZone(AdvantageAirZoneEntity, BinarySensorEntity):
_attr_entity_registry_enabled_default = False
_attr_entity_category = EntityCategory.DIAGNOSTIC
def __init__(self, instance: dict[str, Any], ac_key: str, zone_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone MyZone sensor."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = f'{self._zone["name"]} myZone'

View File

@@ -5,6 +5,8 @@ import logging
from typing import Any
from homeassistant.components.climate import (
ATTR_TARGET_TEMP_HIGH,
ATTR_TARGET_TEMP_LOW,
FAN_AUTO,
FAN_HIGH,
FAN_LOW,
@@ -26,24 +28,17 @@ from .const import (
DOMAIN as ADVANTAGE_AIR_DOMAIN,
)
from .entity import AdvantageAirAcEntity, AdvantageAirZoneEntity
from .models import AdvantageAirData
ADVANTAGE_AIR_HVAC_MODES = {
"heat": HVACMode.HEAT,
"cool": HVACMode.COOL,
"vent": HVACMode.FAN_ONLY,
"dry": HVACMode.DRY,
"myauto": HVACMode.AUTO,
"myauto": HVACMode.HEAT_COOL,
}
HASS_HVAC_MODES = {v: k for k, v in ADVANTAGE_AIR_HVAC_MODES.items()}
AC_HVAC_MODES = [
HVACMode.OFF,
HVACMode.COOL,
HVACMode.HEAT,
HVACMode.FAN_ONLY,
HVACMode.DRY,
]
ADVANTAGE_AIR_FAN_MODES = {
"autoAA": FAN_AUTO,
"low": FAN_LOW,
@@ -53,7 +48,14 @@ ADVANTAGE_AIR_FAN_MODES = {
HASS_FAN_MODES = {v: k for k, v in ADVANTAGE_AIR_FAN_MODES.items()}
FAN_SPEEDS = {FAN_LOW: 30, FAN_MEDIUM: 60, FAN_HIGH: 100}
ZONE_HVAC_MODES = [HVACMode.OFF, HVACMode.HEAT_COOL]
ADVANTAGE_AIR_AUTOFAN = "aaAutoFanModeEnabled"
ADVANTAGE_AIR_MYZONE = "MyZone"
ADVANTAGE_AIR_MYAUTO = "MyAuto"
ADVANTAGE_AIR_MYAUTO_ENABLED = "myAutoModeEnabled"
ADVANTAGE_AIR_MYTEMP = "MyTemp"
ADVANTAGE_AIR_MYTEMP_ENABLED = "climateControlModeEnabled"
ADVANTAGE_AIR_HEAT_TARGET = "myAutoHeatTargetTemp"
ADVANTAGE_AIR_COOL_TARGET = "myAutoCoolTargetTemp"
PARALLEL_UPDATES = 0
@@ -67,15 +69,15 @@ async def async_setup_entry(
) -> None:
"""Set up AdvantageAir climate platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
instance: AdvantageAirData = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
entities: list[ClimateEntity] = []
if aircons := instance["coordinator"].data.get("aircons"):
if aircons := instance.coordinator.data.get("aircons"):
for ac_key, ac_device in aircons.items():
entities.append(AdvantageAirAC(instance, ac_key))
for zone_key, zone in ac_device["zones"].items():
# Only add zone climate control when zone is in temperature control
if zone["type"] != 0:
if zone["type"] > 0:
entities.append(AdvantageAirZone(instance, ac_key, zone_key))
async_add_entities(entities)
@@ -83,24 +85,56 @@ async def async_setup_entry(
class AdvantageAirAC(AdvantageAirAcEntity, ClimateEntity):
"""AdvantageAir AC unit."""
_attr_fan_modes = [FAN_LOW, FAN_MEDIUM, FAN_HIGH]
_attr_temperature_unit = UnitOfTemperature.CELSIUS
_attr_target_temperature_step = PRECISION_WHOLE
_attr_max_temp = 32
_attr_min_temp = 16
_attr_fan_modes = [FAN_AUTO, FAN_LOW, FAN_MEDIUM, FAN_HIGH]
_attr_hvac_modes = AC_HVAC_MODES
_attr_supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE
)
def __init__(self, instance: dict[str, Any], ac_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str) -> None:
"""Initialize an AdvantageAir AC unit."""
super().__init__(instance, ac_key)
if self._ac.get("myAutoModeEnabled"):
self._attr_hvac_modes = AC_HVAC_MODES + [HVACMode.AUTO]
# Set supported features and HVAC modes based on current operating mode
if self._ac.get(ADVANTAGE_AIR_MYAUTO_ENABLED):
# MyAuto
self._attr_supported_features = (
ClimateEntityFeature.FAN_MODE
| ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
)
self._attr_hvac_modes = [
HVACMode.OFF,
HVACMode.COOL,
HVACMode.HEAT,
HVACMode.FAN_ONLY,
HVACMode.DRY,
HVACMode.HEAT_COOL,
]
elif self._ac.get(ADVANTAGE_AIR_MYTEMP_ENABLED):
# MyTemp
self._attr_supported_features = ClimateEntityFeature.FAN_MODE
self._attr_hvac_modes = [HVACMode.OFF, HVACMode.COOL, HVACMode.HEAT]
else:
# MyZone
self._attr_supported_features = (
ClimateEntityFeature.FAN_MODE | ClimateEntityFeature.TARGET_TEMPERATURE
)
self._attr_hvac_modes = [
HVACMode.OFF,
HVACMode.COOL,
HVACMode.HEAT,
HVACMode.FAN_ONLY,
HVACMode.DRY,
]
# Add "ezfan" mode if supported
if self._ac.get(ADVANTAGE_AIR_AUTOFAN):
self._attr_fan_modes += [FAN_AUTO]
@property
def target_temperature(self) -> float:
def target_temperature(self) -> float | None:
"""Return the current target temperature."""
return self._ac["setTemp"]
@@ -116,53 +150,71 @@ class AdvantageAirAC(AdvantageAirAcEntity, ClimateEntity):
"""Return the current fan modes."""
return ADVANTAGE_AIR_FAN_MODES.get(self._ac["fan"])
@property
def target_temperature_high(self) -> float | None:
"""Return the temperature cool mode is enabled."""
return self._ac.get(ADVANTAGE_AIR_COOL_TARGET)
@property
def target_temperature_low(self) -> float | None:
"""Return the temperature heat mode is enabled."""
return self._ac.get(ADVANTAGE_AIR_HEAT_TARGET)
async def async_turn_on(self) -> None:
"""Set the HVAC State to on."""
await self.async_update_ac({"state": ADVANTAGE_AIR_STATE_ON})
async def async_turn_off(self) -> None:
"""Set the HVAC State to off."""
await self.async_update_ac(
{
"state": ADVANTAGE_AIR_STATE_OFF,
}
)
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set the HVAC Mode and State."""
if hvac_mode == HVACMode.OFF:
await self.aircon(
{self.ac_key: {"info": {"state": ADVANTAGE_AIR_STATE_OFF}}}
)
await self.async_update_ac({"state": ADVANTAGE_AIR_STATE_OFF})
else:
await self.aircon(
await self.async_update_ac(
{
self.ac_key: {
"info": {
"state": ADVANTAGE_AIR_STATE_ON,
"mode": HASS_HVAC_MODES.get(hvac_mode),
}
}
"state": ADVANTAGE_AIR_STATE_ON,
"mode": HASS_HVAC_MODES.get(hvac_mode),
}
)
async def async_set_fan_mode(self, fan_mode: str) -> None:
"""Set the Fan Mode."""
await self.aircon(
{self.ac_key: {"info": {"fan": HASS_FAN_MODES.get(fan_mode)}}}
)
await self.async_update_ac({"fan": HASS_FAN_MODES.get(fan_mode)})
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set the Temperature."""
temp = kwargs.get(ATTR_TEMPERATURE)
await self.aircon({self.ac_key: {"info": {"setTemp": temp}}})
if ATTR_TEMPERATURE in kwargs:
await self.async_update_ac({"setTemp": kwargs[ATTR_TEMPERATURE]})
if ATTR_TARGET_TEMP_LOW in kwargs and ATTR_TARGET_TEMP_HIGH in kwargs:
await self.async_update_ac(
{
ADVANTAGE_AIR_COOL_TARGET: kwargs[ATTR_TARGET_TEMP_HIGH],
ADVANTAGE_AIR_HEAT_TARGET: kwargs[ATTR_TARGET_TEMP_LOW],
}
)
class AdvantageAirZone(AdvantageAirZoneEntity, ClimateEntity):
"""AdvantageAir Zone control."""
"""AdvantageAir MyTemp Zone control."""
_attr_hvac_modes = [HVACMode.OFF, HVACMode.HEAT_COOL]
_attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
_attr_temperature_unit = UnitOfTemperature.CELSIUS
_attr_target_temperature_step = PRECISION_WHOLE
_attr_max_temp = 32
_attr_min_temp = 16
_attr_hvac_modes = ZONE_HVAC_MODES
_attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE
def __init__(self, instance: dict[str, Any], ac_key: str, zone_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an AdvantageAir Zone control."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = self._zone["name"]
self._attr_unique_id = (
f'{self.coordinator.data["system"]["rid"]}-{ac_key}-{zone_key}'
)
@property
def hvac_mode(self) -> HVACMode:
@@ -172,7 +224,7 @@ class AdvantageAirZone(AdvantageAirZoneEntity, ClimateEntity):
return HVACMode.OFF
@property
def current_temperature(self) -> float:
def current_temperature(self) -> float | None:
"""Return the current temperature."""
return self._zone["measuredTemp"]
@@ -181,26 +233,22 @@ class AdvantageAirZone(AdvantageAirZoneEntity, ClimateEntity):
"""Return the target temperature."""
return self._zone["setTemp"]
async def async_turn_on(self) -> None:
"""Set the HVAC State to on."""
await self.async_update_zone({"state": ADVANTAGE_AIR_STATE_OPEN})
async def async_turn_off(self) -> None:
"""Set the HVAC State to off."""
await self.async_update_zone({"state": ADVANTAGE_AIR_STATE_CLOSE})
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set the HVAC Mode and State."""
if hvac_mode == HVACMode.OFF:
await self.aircon(
{
self.ac_key: {
"zones": {self.zone_key: {"state": ADVANTAGE_AIR_STATE_CLOSE}}
}
}
)
await self.async_turn_off()
else:
await self.aircon(
{
self.ac_key: {
"zones": {self.zone_key: {"state": ADVANTAGE_AIR_STATE_OPEN}}
}
}
)
await self.async_turn_on()
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set the Temperature."""
temp = kwargs.get(ATTR_TEMPERATURE)
await self.aircon({self.ac_key: {"zones": {self.zone_key: {"setTemp": temp}}}})
await self.async_update_zone({"setTemp": temp})

View File

@@ -16,7 +16,8 @@ from .const import (
ADVANTAGE_AIR_STATE_OPEN,
DOMAIN as ADVANTAGE_AIR_DOMAIN,
)
from .entity import AdvantageAirZoneEntity
from .entity import AdvantageAirThingEntity, AdvantageAirZoneEntity
from .models import AdvantageAirData
PARALLEL_UPDATES = 0
@@ -28,15 +29,25 @@ async def async_setup_entry(
) -> None:
"""Set up AdvantageAir cover platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
instance: AdvantageAirData = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
entities: list[CoverEntity] = []
if aircons := instance["coordinator"].data.get("aircons"):
if aircons := instance.coordinator.data.get("aircons"):
for ac_key, ac_device in aircons.items():
for zone_key, zone in ac_device["zones"].items():
# Only add zone vent controls when zone in vent control mode.
if zone["type"] == 0:
entities.append(AdvantageAirZoneVent(instance, ac_key, zone_key))
if things := instance.coordinator.data.get("myThings"):
for thing in things["things"].values():
if thing["channelDipState"] in [1, 2]: # 1 = "Blind", 2 = "Blind 2"
entities.append(
AdvantageAirThingCover(instance, thing, CoverDeviceClass.BLIND)
)
elif thing["channelDipState"] == 3: # 3 = "Garage door"
entities.append(
AdvantageAirThingCover(instance, thing, CoverDeviceClass.GARAGE)
)
async_add_entities(entities)
@@ -50,7 +61,7 @@ class AdvantageAirZoneVent(AdvantageAirZoneEntity, CoverEntity):
| CoverEntityFeature.SET_POSITION
)
def __init__(self, instance: dict[str, Any], ac_key: str, zone_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone Vent."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = self._zone["name"]
@@ -69,47 +80,52 @@ class AdvantageAirZoneVent(AdvantageAirZoneEntity, CoverEntity):
async def async_open_cover(self, **kwargs: Any) -> None:
"""Fully open zone vent."""
await self.aircon(
{
self.ac_key: {
"zones": {
self.zone_key: {"state": ADVANTAGE_AIR_STATE_OPEN, "value": 100}
}
}
}
await self.async_update_zone(
{"state": ADVANTAGE_AIR_STATE_OPEN, "value": 100},
)
async def async_close_cover(self, **kwargs: Any) -> None:
"""Fully close zone vent."""
await self.aircon(
{
self.ac_key: {
"zones": {self.zone_key: {"state": ADVANTAGE_AIR_STATE_CLOSE}}
}
}
)
await self.async_update_zone({"state": ADVANTAGE_AIR_STATE_CLOSE})
async def async_set_cover_position(self, **kwargs: Any) -> None:
"""Change vent position."""
position = round(kwargs[ATTR_POSITION] / 5) * 5
if position == 0:
await self.aircon(
{
self.ac_key: {
"zones": {self.zone_key: {"state": ADVANTAGE_AIR_STATE_CLOSE}}
}
}
)
await self.async_update_zone({"state": ADVANTAGE_AIR_STATE_CLOSE})
else:
await self.aircon(
await self.async_update_zone(
{
self.ac_key: {
"zones": {
self.zone_key: {
"state": ADVANTAGE_AIR_STATE_OPEN,
"value": position,
}
}
}
"state": ADVANTAGE_AIR_STATE_OPEN,
"value": position,
}
)
class AdvantageAirThingCover(AdvantageAirThingEntity, CoverEntity):
"""Representation of Advantage Air Cover controlled by MyPlace."""
_attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
def __init__(
self,
instance: AdvantageAirData,
thing: dict[str, Any],
device_class: CoverDeviceClass,
) -> None:
"""Initialize an Advantage Air Things Cover."""
super().__init__(instance, thing)
self._attr_device_class = device_class
@property
def is_closed(self) -> bool:
"""Return if cover is fully closed."""
return self._data["value"] == 0
async def async_open_cover(self, **kwargs: Any) -> None:
"""Fully open zone vent."""
return await self.async_turn_on()
async def async_close_cover(self, **kwargs: Any) -> None:
"""Fully close zone vent."""
return await self.async_turn_off()

View File

@@ -1,11 +1,14 @@
"""Advantage Air parent entity class."""
from typing import Any
from advantage_air import ApiError
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN
from .models import AdvantageAirData
class AdvantageAirEntity(CoordinatorEntity):
@@ -13,19 +16,34 @@ class AdvantageAirEntity(CoordinatorEntity):
_attr_has_entity_name = True
def __init__(self, instance: dict[str, Any]) -> None:
def __init__(self, instance: AdvantageAirData) -> None:
"""Initialize common aspects of an Advantage Air entity."""
super().__init__(instance["coordinator"])
super().__init__(instance.coordinator)
self._attr_unique_id: str = self.coordinator.data["system"]["rid"]
def update_handle_factory(self, func, *keys):
"""Return the provided API function wrapped.
Adds an error handler and coordinator refresh, and presets keys.
"""
async def update_handle(*values):
try:
if await func(*keys, *values):
await self.coordinator.async_refresh()
except ApiError as err:
raise HomeAssistantError(err) from err
return update_handle
class AdvantageAirAcEntity(AdvantageAirEntity):
"""Parent class for Advantage Air AC Entities."""
def __init__(self, instance: dict[str, Any], ac_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str) -> None:
"""Initialize common aspects of an Advantage Air ac entity."""
super().__init__(instance)
self.aircon = instance["aircon"]
self.ac_key: str = ac_key
self._attr_unique_id += f"-{ac_key}"
@@ -36,6 +54,9 @@ class AdvantageAirAcEntity(AdvantageAirEntity):
model=self.coordinator.data["system"]["sysType"],
name=self.coordinator.data["aircons"][self.ac_key]["info"]["name"],
)
self.async_update_ac = self.update_handle_factory(
instance.api.aircon.async_update_ac, self.ac_key
)
@property
def _ac(self) -> dict[str, Any]:
@@ -45,12 +66,56 @@ class AdvantageAirAcEntity(AdvantageAirEntity):
class AdvantageAirZoneEntity(AdvantageAirAcEntity):
"""Parent class for Advantage Air Zone Entities."""
def __init__(self, instance: dict[str, Any], ac_key: str, zone_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize common aspects of an Advantage Air zone entity."""
super().__init__(instance, ac_key)
self.zone_key: str = zone_key
self._attr_unique_id += f"-{zone_key}"
self.async_update_zone = self.update_handle_factory(
instance.api.aircon.async_update_zone, self.ac_key, self.zone_key
)
@property
def _zone(self) -> dict[str, Any]:
return self.coordinator.data["aircons"][self.ac_key]["zones"][self.zone_key]
class AdvantageAirThingEntity(AdvantageAirEntity):
"""Parent class for Advantage Air Things Entities."""
def __init__(self, instance: AdvantageAirData, thing: dict[str, Any]) -> None:
"""Initialize common aspects of an Advantage Air Things entity."""
super().__init__(instance)
self._id = thing["id"]
self._attr_unique_id += f"-{self._id}"
self._attr_device_info = DeviceInfo(
via_device=(DOMAIN, self.coordinator.data["system"]["rid"]),
identifiers={(DOMAIN, self._attr_unique_id)},
manufacturer="Advantage Air",
model="MyPlace",
name=thing["name"],
)
self.async_update_value = self.update_handle_factory(
instance.api.things.async_update_value, self._id
)
@property
def _data(self) -> dict:
"""Return the thing data."""
return self.coordinator.data["myThings"]["things"][self._id]
@property
def is_on(self):
"""Return if the thing is considered on."""
return self._data["value"] > 0
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the thing on."""
await self.async_update_value(True)
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn the thing off."""
await self.async_update_value(False)

View File

@@ -7,12 +7,9 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import (
ADVANTAGE_AIR_STATE_OFF,
ADVANTAGE_AIR_STATE_ON,
DOMAIN as ADVANTAGE_AIR_DOMAIN,
)
from .entity import AdvantageAirEntity
from .const import ADVANTAGE_AIR_STATE_ON, DOMAIN as ADVANTAGE_AIR_DOMAIN
from .entity import AdvantageAirEntity, AdvantageAirThingEntity
from .models import AdvantageAirData
async def async_setup_entry(
@@ -22,15 +19,21 @@ async def async_setup_entry(
) -> None:
"""Set up AdvantageAir light platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
instance: AdvantageAirData = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
entities: list[LightEntity] = []
if my_lights := instance["coordinator"].data.get("myLights"):
if my_lights := instance.coordinator.data.get("myLights"):
for light in my_lights["lights"].values():
if light.get("relay"):
entities.append(AdvantageAirLight(instance, light))
else:
entities.append(AdvantageAirLightDimmable(instance, light))
if things := instance.coordinator.data.get("myThings"):
for thing in things["things"].values():
if thing["channelDipState"] == 4: # 4 = "Light (on/off)""
entities.append(AdvantageAirThingLight(instance, thing))
elif thing["channelDipState"] == 5: # 5 = "Light (Dimmable)""
entities.append(AdvantageAirThingLightDimmable(instance, thing))
async_add_entities(entities)
@@ -39,10 +42,10 @@ class AdvantageAirLight(AdvantageAirEntity, LightEntity):
_attr_supported_color_modes = {ColorMode.ONOFF}
def __init__(self, instance: dict[str, Any], light: dict[str, Any]) -> None:
def __init__(self, instance: AdvantageAirData, light: dict[str, Any]) -> None:
"""Initialize an Advantage Air Light."""
super().__init__(instance)
self.lights = instance["lights"]
self._id: str = light["id"]
self._attr_unique_id += f"-{self._id}"
self._attr_device_info = DeviceInfo(
@@ -52,24 +55,27 @@ class AdvantageAirLight(AdvantageAirEntity, LightEntity):
model=light.get("moduleType"),
name=light["name"],
)
self.async_update_state = self.update_handle_factory(
instance.api.lights.async_update_state, self._id
)
@property
def _light(self) -> dict[str, Any]:
def _data(self) -> dict[str, Any]:
"""Return the light object."""
return self.coordinator.data["myLights"]["lights"][self._id]
@property
def is_on(self) -> bool:
"""Return if the light is on."""
return self._light["state"] == ADVANTAGE_AIR_STATE_ON
return self._data["state"] == ADVANTAGE_AIR_STATE_ON
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the light on."""
await self.lights({"id": self._id, "state": ADVANTAGE_AIR_STATE_ON})
await self.async_update_state(True)
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn the light off."""
await self.lights({"id": self._id, "state": ADVANTAGE_AIR_STATE_OFF})
await self.async_update_state(False)
class AdvantageAirLightDimmable(AdvantageAirLight):
@@ -77,14 +83,41 @@ class AdvantageAirLightDimmable(AdvantageAirLight):
_attr_supported_color_modes = {ColorMode.ONOFF, ColorMode.BRIGHTNESS}
def __init__(self, instance: AdvantageAirData, light: dict[str, Any]) -> None:
"""Initialize an Advantage Air Dimmable Light."""
super().__init__(instance, light)
self.async_update_value = self.update_handle_factory(
instance.api.lights.async_update_value, self._id
)
@property
def brightness(self) -> int:
"""Return the brightness of this light between 0..255."""
return round(self._light["value"] * 255 / 100)
return round(self._data["value"] * 255 / 100)
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the light on and optionally set the brightness."""
data: dict[str, Any] = {"id": self._id, "state": ADVANTAGE_AIR_STATE_ON}
if ATTR_BRIGHTNESS in kwargs:
data["value"] = round(kwargs[ATTR_BRIGHTNESS] * 100 / 255)
await self.lights(data)
return await self.async_update_value(round(kwargs[ATTR_BRIGHTNESS] / 2.55))
return await self.async_update_state(True)
class AdvantageAirThingLight(AdvantageAirThingEntity, LightEntity):
"""Representation of Advantage Air Light controlled by myThings."""
_attr_supported_color_modes = {ColorMode.ONOFF}
class AdvantageAirThingLightDimmable(AdvantageAirThingEntity, LightEntity):
"""Representation of Advantage Air Dimmable Light controlled by myThings."""
_attr_supported_color_modes = {ColorMode.ONOFF, ColorMode.BRIGHTNESS}
@property
def brightness(self) -> int:
"""Return the brightness of this light between 0..255."""
return round(self._data["value"] * 255 / 100)
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the light on by setting the brightness."""
await self.async_update_value(round(kwargs.get(ATTR_BRIGHTNESS, 255) / 2.55))

View File

@@ -7,5 +7,5 @@
"iot_class": "local_polling",
"loggers": ["advantage_air"],
"quality_scale": "platinum",
"requirements": ["advantage_air==0.4.1"]
"requirements": ["advantage_air==0.4.4"]
}

View File

@@ -0,0 +1,16 @@
"""The Advantage Air integration models."""
from __future__ import annotations
from dataclasses import dataclass
from advantage_air import advantage_air
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
@dataclass
class AdvantageAirData:
"""Data for the Advantage Air integration."""
coordinator: DataUpdateCoordinator
api: advantage_air

View File

@@ -1,5 +1,4 @@
"""Select platform for Advantage Air integration."""
from typing import Any
from homeassistant.components.select import SelectEntity
from homeassistant.config_entries import ConfigEntry
@@ -8,6 +7,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN as ADVANTAGE_AIR_DOMAIN
from .entity import AdvantageAirAcEntity
from .models import AdvantageAirData
ADVANTAGE_AIR_INACTIVE = "Inactive"
@@ -19,10 +19,10 @@ async def async_setup_entry(
) -> None:
"""Set up AdvantageAir select platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
instance: AdvantageAirData = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
entities: list[SelectEntity] = []
if aircons := instance["coordinator"].data.get("aircons"):
if aircons := instance.coordinator.data.get("aircons"):
for ac_key in aircons:
entities.append(AdvantageAirMyZone(instance, ac_key))
async_add_entities(entities)
@@ -34,7 +34,7 @@ class AdvantageAirMyZone(AdvantageAirAcEntity, SelectEntity):
_attr_icon = "mdi:home-thermometer"
_attr_name = "MyZone"
def __init__(self, instance: dict[str, Any], ac_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str) -> None:
"""Initialize an Advantage Air MyZone control."""
super().__init__(instance, ac_key)
self._attr_unique_id += "-myzone"
@@ -42,11 +42,12 @@ class AdvantageAirMyZone(AdvantageAirAcEntity, SelectEntity):
self._number_to_name = {0: ADVANTAGE_AIR_INACTIVE}
self._name_to_number = {ADVANTAGE_AIR_INACTIVE: 0}
for zone in instance["coordinator"].data["aircons"][ac_key]["zones"].values():
if zone["type"] > 0:
self._name_to_number[zone["name"]] = zone["number"]
self._number_to_name[zone["number"]] = zone["name"]
self._attr_options.append(zone["name"])
if "aircons" in instance.coordinator.data:
for zone in instance.coordinator.data["aircons"][ac_key]["zones"].values():
if zone["type"] > 0:
self._name_to_number[zone["name"]] = zone["number"]
self._number_to_name[zone["number"]] = zone["name"]
self._attr_options.append(zone["name"])
@property
def current_option(self) -> str:
@@ -55,6 +56,4 @@ class AdvantageAirMyZone(AdvantageAirAcEntity, SelectEntity):
async def async_select_option(self, option: str) -> None:
"""Set the MyZone."""
await self.aircon(
{self.ac_key: {"info": {"myZone": self._name_to_number[option]}}}
)
await self.async_update_ac({"myZone": self._name_to_number[option]})

View File

@@ -19,6 +19,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import ADVANTAGE_AIR_STATE_OPEN, DOMAIN as ADVANTAGE_AIR_DOMAIN
from .entity import AdvantageAirAcEntity, AdvantageAirZoneEntity
from .models import AdvantageAirData
ADVANTAGE_AIR_SET_COUNTDOWN_VALUE = "minutes"
ADVANTAGE_AIR_SET_COUNTDOWN_UNIT = "min"
@@ -34,10 +35,10 @@ async def async_setup_entry(
) -> None:
"""Set up AdvantageAir sensor platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
instance: AdvantageAirData = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
entities: list[SensorEntity] = []
if aircons := instance["coordinator"].data.get("aircons"):
if aircons := instance.coordinator.data.get("aircons"):
for ac_key, ac_device in aircons.items():
entities.append(AdvantageAirTimeTo(instance, ac_key, "On"))
entities.append(AdvantageAirTimeTo(instance, ac_key, "Off"))
@@ -65,7 +66,7 @@ class AdvantageAirTimeTo(AdvantageAirAcEntity, SensorEntity):
_attr_native_unit_of_measurement = ADVANTAGE_AIR_SET_COUNTDOWN_UNIT
_attr_entity_category = EntityCategory.DIAGNOSTIC
def __init__(self, instance: dict[str, Any], ac_key: str, action: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str, action: str) -> None:
"""Initialize the Advantage Air timer control."""
super().__init__(instance, ac_key)
self.action = action
@@ -88,7 +89,7 @@ class AdvantageAirTimeTo(AdvantageAirAcEntity, SensorEntity):
async def set_time_to(self, **kwargs: Any) -> None:
"""Set the timer value."""
value = min(720, max(0, int(kwargs[ADVANTAGE_AIR_SET_COUNTDOWN_VALUE])))
await self.aircon({self.ac_key: {"info": {self._time_key: value}}})
await self.async_update_ac({self._time_key: value})
class AdvantageAirZoneVent(AdvantageAirZoneEntity, SensorEntity):
@@ -98,7 +99,7 @@ class AdvantageAirZoneVent(AdvantageAirZoneEntity, SensorEntity):
_attr_state_class = SensorStateClass.MEASUREMENT
_attr_entity_category = EntityCategory.DIAGNOSTIC
def __init__(self, instance: dict[str, Any], ac_key: str, zone_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone Vent Sensor."""
super().__init__(instance, ac_key, zone_key=zone_key)
self._attr_name = f'{self._zone["name"]} vent'
@@ -126,7 +127,7 @@ class AdvantageAirZoneSignal(AdvantageAirZoneEntity, SensorEntity):
_attr_state_class = SensorStateClass.MEASUREMENT
_attr_entity_category = EntityCategory.DIAGNOSTIC
def __init__(self, instance: dict[str, Any], ac_key: str, zone_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone wireless signal sensor."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = f'{self._zone["name"]} signal'
@@ -160,7 +161,7 @@ class AdvantageAirZoneTemp(AdvantageAirZoneEntity, SensorEntity):
_attr_entity_registry_enabled_default = False
_attr_entity_category = EntityCategory.DIAGNOSTIC
def __init__(self, instance: dict[str, Any], ac_key: str, zone_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone Temp Sensor."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = f'{self._zone["name"]} temperature'

View File

@@ -1,7 +1,7 @@
"""Switch platform for Advantage Air integration."""
from typing import Any
from homeassistant.components.switch import SwitchEntity
from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@@ -11,7 +11,8 @@ from .const import (
ADVANTAGE_AIR_STATE_ON,
DOMAIN as ADVANTAGE_AIR_DOMAIN,
)
from .entity import AdvantageAirAcEntity
from .entity import AdvantageAirAcEntity, AdvantageAirThingEntity
from .models import AdvantageAirData
async def async_setup_entry(
@@ -21,13 +22,17 @@ async def async_setup_entry(
) -> None:
"""Set up AdvantageAir switch platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
instance: AdvantageAirData = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
entities: list[SwitchEntity] = []
if aircons := instance["coordinator"].data.get("aircons"):
if aircons := instance.coordinator.data.get("aircons"):
for ac_key, ac_device in aircons.items():
if ac_device["info"]["freshAirStatus"] != "none":
entities.append(AdvantageAirFreshAir(instance, ac_key))
if things := instance.coordinator.data.get("myThings"):
for thing in things["things"].values():
if thing["channelDipState"] == 8: # 8 = Other relay
entities.append(AdvantageAirRelay(instance, thing))
async_add_entities(entities)
@@ -36,8 +41,9 @@ class AdvantageAirFreshAir(AdvantageAirAcEntity, SwitchEntity):
_attr_icon = "mdi:air-filter"
_attr_name = "Fresh air"
_attr_device_class = SwitchDeviceClass.SWITCH
def __init__(self, instance: dict[str, Any], ac_key: str) -> None:
def __init__(self, instance: AdvantageAirData, ac_key: str) -> None:
"""Initialize an Advantage Air fresh air control."""
super().__init__(instance, ac_key)
self._attr_unique_id += "-freshair"
@@ -49,12 +55,14 @@ class AdvantageAirFreshAir(AdvantageAirAcEntity, SwitchEntity):
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn fresh air on."""
await self.aircon(
{self.ac_key: {"info": {"freshAirStatus": ADVANTAGE_AIR_STATE_ON}}}
)
await self.async_update_ac({"freshAirStatus": ADVANTAGE_AIR_STATE_ON})
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn fresh air off."""
await self.aircon(
{self.ac_key: {"info": {"freshAirStatus": ADVANTAGE_AIR_STATE_OFF}}}
)
await self.async_update_ac({"freshAirStatus": ADVANTAGE_AIR_STATE_OFF})
class AdvantageAirRelay(AdvantageAirThingEntity, SwitchEntity):
"""Representation of Advantage Air Thing."""
_attr_device_class = SwitchDeviceClass.SWITCH

View File

@@ -1,5 +1,4 @@
"""Advantage Air Update platform."""
from typing import Any
from homeassistant.components.update import UpdateEntity
from homeassistant.config_entries import ConfigEntry
@@ -9,6 +8,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN as ADVANTAGE_AIR_DOMAIN
from .entity import AdvantageAirEntity
from .models import AdvantageAirData
async def async_setup_entry(
@@ -18,7 +18,7 @@ async def async_setup_entry(
) -> None:
"""Set up AdvantageAir update platform."""
instance = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
instance: AdvantageAirData = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]
async_add_entities([AdvantageAirApp(instance)])
@@ -28,7 +28,7 @@ class AdvantageAirApp(AdvantageAirEntity, UpdateEntity):
_attr_name = "App"
def __init__(self, instance: dict[str, Any]) -> None:
def __init__(self, instance: AdvantageAirData) -> None:
"""Initialize the Advantage Air App."""
super().__init__(instance)
self._attr_device_info = DeviceInfo(

View File

@@ -68,7 +68,7 @@ SENSOR_TYPES: tuple[AirlySensorEntityDescription, ...] = (
AirlySensorEntityDescription(
key=ATTR_API_CAQI,
icon="mdi:air-filter",
name=ATTR_API_CAQI,
translation_key="caqi",
native_unit_of_measurement="CAQI",
suggested_display_precision=0,
attrs=lambda data: {
@@ -80,7 +80,7 @@ SENSOR_TYPES: tuple[AirlySensorEntityDescription, ...] = (
AirlySensorEntityDescription(
key=ATTR_API_PM1,
device_class=SensorDeviceClass.PM1,
name="PM1.0",
translation_key="pm1",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
suggested_display_precision=0,
@@ -88,7 +88,7 @@ SENSOR_TYPES: tuple[AirlySensorEntityDescription, ...] = (
AirlySensorEntityDescription(
key=ATTR_API_PM25,
device_class=SensorDeviceClass.PM25,
name="PM2.5",
translation_key="pm25",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
suggested_display_precision=0,
@@ -100,7 +100,7 @@ SENSOR_TYPES: tuple[AirlySensorEntityDescription, ...] = (
AirlySensorEntityDescription(
key=ATTR_API_PM10,
device_class=SensorDeviceClass.PM10,
name=ATTR_API_PM10,
translation_key="pm10",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
suggested_display_precision=0,
@@ -112,7 +112,7 @@ SENSOR_TYPES: tuple[AirlySensorEntityDescription, ...] = (
AirlySensorEntityDescription(
key=ATTR_API_HUMIDITY,
device_class=SensorDeviceClass.HUMIDITY,
name=ATTR_API_HUMIDITY.capitalize(),
translation_key="humidity",
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
suggested_display_precision=1,
@@ -120,7 +120,7 @@ SENSOR_TYPES: tuple[AirlySensorEntityDescription, ...] = (
AirlySensorEntityDescription(
key=ATTR_API_PRESSURE,
device_class=SensorDeviceClass.PRESSURE,
name=ATTR_API_PRESSURE.capitalize(),
translation_key="pressure",
native_unit_of_measurement=UnitOfPressure.HPA,
state_class=SensorStateClass.MEASUREMENT,
suggested_display_precision=0,
@@ -128,14 +128,14 @@ SENSOR_TYPES: tuple[AirlySensorEntityDescription, ...] = (
AirlySensorEntityDescription(
key=ATTR_API_TEMPERATURE,
device_class=SensorDeviceClass.TEMPERATURE,
name=ATTR_API_TEMPERATURE.capitalize(),
translation_key="temperature",
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
suggested_display_precision=1,
),
AirlySensorEntityDescription(
key=ATTR_API_CO,
name="Carbon monoxide",
translation_key="co",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
suggested_display_precision=0,
@@ -147,7 +147,7 @@ SENSOR_TYPES: tuple[AirlySensorEntityDescription, ...] = (
AirlySensorEntityDescription(
key=ATTR_API_NO2,
device_class=SensorDeviceClass.NITROGEN_DIOXIDE,
name="Nitrogen dioxide",
translation_key="no2",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
suggested_display_precision=0,
@@ -159,7 +159,7 @@ SENSOR_TYPES: tuple[AirlySensorEntityDescription, ...] = (
AirlySensorEntityDescription(
key=ATTR_API_SO2,
device_class=SensorDeviceClass.SULPHUR_DIOXIDE,
name="Sulphur dioxide",
translation_key="so2",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
suggested_display_precision=0,
@@ -171,7 +171,7 @@ SENSOR_TYPES: tuple[AirlySensorEntityDescription, ...] = (
AirlySensorEntityDescription(
key=ATTR_API_O3,
device_class=SensorDeviceClass.OZONE,
name="Ozone",
translation_key="o3",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
suggested_display_precision=0,

View File

@@ -26,5 +26,42 @@
"requests_remaining": "Remaining allowed requests",
"requests_per_day": "Allowed requests per day"
}
},
"entity": {
"sensor": {
"caqi": {
"name": "Common air quality index"
},
"pm1": {
"name": "[%key:component::sensor::entity_component::pm1::name%]"
},
"pm25": {
"name": "[%key:component::sensor::entity_component::pm25::name%]"
},
"pm10": {
"name": "[%key:component::sensor::entity_component::pm10::name%]"
},
"humidity": {
"name": "[%key:component::sensor::entity_component::humidity::name%]"
},
"pressure": {
"name": "[%key:component::sensor::entity_component::pressure::name%]"
},
"temperature": {
"name": "[%key:component::sensor::entity_component::temperature::name%]"
},
"co": {
"name": "[%key:component::sensor::entity_component::carbon_monoxide::name%]"
},
"no2": {
"name": "[%key:component::sensor::entity_component::nitrogen_dioxide::name%]"
},
"so2": {
"name": "[%key:component::sensor::entity_component::sulphur_dioxide::name%]"
},
"o3": {
"name": "[%key:component::sensor::entity_component::ozone::name%]"
}
}
}
}

View File

@@ -1,58 +1,16 @@
"""The air-Q integration."""
from __future__ import annotations
from datetime import timedelta
import logging
from aioairq import AirQ
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD, Platform
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import DOMAIN, MANUFACTURER, TARGET_ROUTE, UPDATE_INTERVAL
_LOGGER = logging.getLogger(__name__)
from .const import DOMAIN
from .coordinator import AirQCoordinator
PLATFORMS: list[Platform] = [Platform.SENSOR]
class AirQCoordinator(DataUpdateCoordinator):
"""Coordinator is responsible for querying the device at a specified route."""
def __init__(
self,
hass: HomeAssistant,
entry: ConfigEntry,
) -> None:
"""Initialise a custom coordinator."""
super().__init__(
hass,
_LOGGER,
name=DOMAIN,
update_interval=timedelta(seconds=UPDATE_INTERVAL),
)
session = async_get_clientsession(hass)
self.airq = AirQ(
entry.data[CONF_IP_ADDRESS], entry.data[CONF_PASSWORD], session
)
self.device_id = entry.unique_id
assert self.device_id is not None
self.device_info = DeviceInfo(
manufacturer=MANUFACTURER,
identifiers={(DOMAIN, self.device_id)},
)
self.device_info.update(entry.data["device_info"])
async def _async_update_data(self) -> dict:
"""Fetch the data from the device."""
data = await self.airq.get(TARGET_ROUTE)
return self.airq.drop_uncertainties_from_data(data)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up air-Q from a config entry."""

View File

@@ -74,12 +74,11 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
)
device_info = await airq.fetch_device_info()
await self.async_set_unique_id(device_info.pop("id"))
await self.async_set_unique_id(device_info["id"])
self._abort_if_unique_id_configured()
return self.async_create_entry(
title=device_info["name"],
data=user_input | {"device_info": device_info},
title=device_info["name"], data=user_input
)
return self.async_show_form(

View File

@@ -0,0 +1,61 @@
"""The air-Q integration."""
from __future__ import annotations
from datetime import timedelta
import logging
from aioairq import AirQ
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD
from homeassistant.core import HomeAssistant
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import DOMAIN, MANUFACTURER, TARGET_ROUTE, UPDATE_INTERVAL
_LOGGER = logging.getLogger(__name__)
class AirQCoordinator(DataUpdateCoordinator):
"""Coordinator is responsible for querying the device at a specified route."""
def __init__(
self,
hass: HomeAssistant,
entry: ConfigEntry,
) -> None:
"""Initialise a custom coordinator."""
super().__init__(
hass,
_LOGGER,
name=DOMAIN,
update_interval=timedelta(seconds=UPDATE_INTERVAL),
)
session = async_get_clientsession(hass)
self.airq = AirQ(
entry.data[CONF_IP_ADDRESS], entry.data[CONF_PASSWORD], session
)
self.device_id = entry.unique_id
assert self.device_id is not None
self.device_info = DeviceInfo(
manufacturer=MANUFACTURER,
identifiers={(DOMAIN, self.device_id)},
)
async def _async_update_data(self) -> dict:
"""Fetch the data from the device."""
if "name" not in self.device_info:
info = await self.airq.fetch_device_info()
self.device_info.update(
DeviceInfo(
name=info["name"],
model=info["model"],
sw_version=info["sw_version"],
hw_version=info["hw_version"],
)
)
data = await self.airq.get(TARGET_ROUTE)
return self.airq.drop_uncertainties_from_data(data)

View File

@@ -51,6 +51,13 @@ class AirQEntityDescription(SensorEntityDescription, AirQEntityDescriptionMixin)
# Keys must match those in the data dictionary
SENSOR_TYPES: list[AirQEntityDescription] = [
AirQEntityDescription(
key="c2h4o",
name="Acetaldehyde",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("c2h4o"),
),
AirQEntityDescription(
key="nh3_MR100",
name="Ammonia",
@@ -58,6 +65,27 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("nh3_MR100"),
),
AirQEntityDescription(
key="ash3",
name="Arsine",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("ash3"),
),
AirQEntityDescription(
key="br2",
name="Bromine",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("br2"),
),
AirQEntityDescription(
key="ch4s",
name="CH4S",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("ch4s"),
),
AirQEntityDescription(
key="cl2_M20",
name="Chlorine",
@@ -65,10 +93,16 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("cl2_M20"),
),
AirQEntityDescription(
key="clo2",
name="ClO2",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("clo2"),
),
AirQEntityDescription(
key="co",
name="CO",
device_class=SensorDeviceClass.CO,
native_unit_of_measurement=CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("co"),
@@ -81,6 +115,13 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("co2"),
),
AirQEntityDescription(
key="cs2",
name="CS2",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("cs2"),
),
AirQEntityDescription(
key="dewpt",
name="Dew point",
@@ -96,6 +137,13 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("ethanol"),
),
AirQEntityDescription(
key="c2h4",
name="Ethylene",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("c2h4"),
),
AirQEntityDescription(
key="ch2o_M10",
name="Formaldehyde",
@@ -103,6 +151,13 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("ch2o_M10"),
),
AirQEntityDescription(
key="f2",
name="Fluorine",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("f2"),
),
AirQEntityDescription(
key="h2s",
name="H2S",
@@ -110,6 +165,27 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("h2s"),
),
AirQEntityDescription(
key="hcl",
name="HCl",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("hcl"),
),
AirQEntityDescription(
key="hcn",
name="HCN",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("hcn"),
),
AirQEntityDescription(
key="hf",
name="HF",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("hf"),
),
AirQEntityDescription(
key="health",
name="Health Index",
@@ -141,6 +217,13 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("h2_M1000"),
),
AirQEntityDescription(
key="h2o2",
name="Hydrogen peroxide",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("h2o2"),
),
AirQEntityDescription(
key="ch4_MIPEX",
name="Methane",
@@ -173,12 +256,11 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
value=lambda data: data.get("no2"),
),
AirQEntityDescription(
key="o3",
name="Ozone",
device_class=SensorDeviceClass.OZONE,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
key="acid_M100",
name="Organic acid",
native_unit_of_measurement=CONCENTRATION_PARTS_PER_BILLION,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("o3"),
value=lambda data: data.get("acid_M100"),
),
AirQEntityDescription(
key="oxygen",
@@ -188,6 +270,14 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
value=lambda data: data.get("oxygen"),
icon="mdi:leaf",
),
AirQEntityDescription(
key="o3",
name="Ozone",
device_class=SensorDeviceClass.OZONE,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("o3"),
),
AirQEntityDescription(
key="performance",
name="Performance Index",
@@ -196,6 +286,13 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
icon="mdi:head-check",
value=lambda data: data.get("performance", 0.0) / 10.0,
),
AirQEntityDescription(
key="ph3",
name="PH3",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("ph3"),
),
AirQEntityDescription(
key="pm1",
name="PM1",
@@ -246,6 +343,20 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("c3h8_MIPEX"),
),
AirQEntityDescription(
key="refigerant",
name="Refrigerant",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("refigerant"),
),
AirQEntityDescription(
key="sih4",
name="SiH4",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("sih4"),
),
AirQEntityDescription(
key="so2",
name="SO2",
@@ -289,7 +400,6 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
AirQEntityDescription(
key="tvoc",
name="VOC",
device_class=SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_BILLION,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("tvoc"),
@@ -297,11 +407,18 @@ SENSOR_TYPES: list[AirQEntityDescription] = [
AirQEntityDescription(
key="tvoc_ionsc",
name="VOC (Industrial)",
device_class=SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_BILLION,
state_class=SensorStateClass.MEASUREMENT,
value=lambda data: data.get("tvoc_ionsc"),
),
AirQEntityDescription(
key="virus",
name="Virus Index",
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
icon="mdi:virus-off",
value=lambda data: data.get("virus", 0.0),
),
]

View File

@@ -380,7 +380,6 @@ async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
)
else:
entry.version = version
hass.config_entries.async_update_entry(entry)
LOGGER.info("Migration to version %s successful", version)

View File

@@ -4,7 +4,7 @@ from __future__ import annotations
from datetime import timedelta
from typing import Any
from AIOAladdinConnect import AladdinConnectClient
from AIOAladdinConnect import AladdinConnectClient, session_manager
from homeassistant.components.cover import CoverDeviceClass, CoverEntity
from homeassistant.config_entries import ConfigEntry
@@ -46,7 +46,7 @@ class AladdinDevice(CoverEntity):
) -> None:
"""Initialize the Aladdin Connect cover."""
self._acc = acc
self._entry_id = entry.entry_id
self._device_id = device["device_id"]
self._number = device["door_number"]
self._name = device["name"]
@@ -85,7 +85,18 @@ class AladdinDevice(CoverEntity):
async def async_update(self) -> None:
"""Update status of cover."""
await self._acc.get_doors(self._serial)
try:
await self._acc.get_doors(self._serial)
self._attr_available = True
except session_manager.ConnectionError:
self._attr_available = False
except session_manager.InvalidPasswordError:
self._attr_available = False
await self.hass.async_create_task(
self.hass.config_entries.async_reload(self._entry_id)
)
@property
def is_closed(self) -> bool | None:

View File

@@ -21,7 +21,7 @@ from homeassistant.const import (
SERVICE_ALARM_TRIGGER,
)
from homeassistant.core import Context, HomeAssistant
from homeassistant.helpers import entity_registry
from homeassistant.helpers import entity_registry as er
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import get_supported_features
from homeassistant.helpers.typing import ConfigType, TemplateVarsType
@@ -57,11 +57,11 @@ async def async_get_actions(
hass: HomeAssistant, device_id: str
) -> list[dict[str, str]]:
"""List device actions for Alarm control panel devices."""
registry = entity_registry.async_get(hass)
registry = er.async_get(hass)
actions = []
# Get all the integrations entities for this device
for entry in entity_registry.async_entries_for_device(registry, device_id):
for entry in er.async_entries_for_device(registry, device_id):
if entry.domain != DOMAIN:
continue

View File

@@ -21,7 +21,11 @@ from homeassistant.const import (
STATE_ALARM_TRIGGERED,
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import condition, config_validation as cv, entity_registry
from homeassistant.helpers import (
condition,
config_validation as cv,
entity_registry as er,
)
from homeassistant.helpers.config_validation import DEVICE_CONDITION_BASE_SCHEMA
from homeassistant.helpers.entity import get_supported_features
from homeassistant.helpers.typing import ConfigType, TemplateVarsType
@@ -64,11 +68,11 @@ async def async_get_conditions(
hass: HomeAssistant, device_id: str
) -> list[dict[str, str]]:
"""List device conditions for Alarm control panel devices."""
registry = entity_registry.async_get(hass)
registry = er.async_get(hass)
conditions = []
# Get all the integrations entities for this device
for entry in entity_registry.async_entries_for_device(registry, device_id):
for entry in er.async_entries_for_device(registry, device_id):
if entry.domain != DOMAIN:
continue

View File

@@ -23,7 +23,7 @@ from homeassistant.const import (
STATE_ALARM_TRIGGERED,
)
from homeassistant.core import CALLBACK_TYPE, HomeAssistant
from homeassistant.helpers import config_validation as cv, entity_registry
from homeassistant.helpers import config_validation as cv, entity_registry as er
from homeassistant.helpers.entity import get_supported_features
from homeassistant.helpers.trigger import TriggerActionType, TriggerInfo
from homeassistant.helpers.typing import ConfigType
@@ -57,11 +57,11 @@ async def async_get_triggers(
hass: HomeAssistant, device_id: str
) -> list[dict[str, str]]:
"""List device triggers for Alarm control panel devices."""
registry = entity_registry.async_get(hass)
registry = er.async_get(hass)
triggers: list[dict[str, str]] = []
# Get all the integrations entities for this device
for entry in entity_registry.async_entries_for_device(registry, device_id):
for entry in er.async_entries_for_device(registry, device_id):
if entry.domain != DOMAIN:
continue

View File

@@ -26,19 +26,41 @@
"armed_vacation": "{entity_name} armed vacation"
}
},
"state": {
"entity_component": {
"_": {
"armed": "Armed",
"disarmed": "Disarmed",
"armed_home": "Armed home",
"armed_away": "Armed away",
"armed_night": "Armed night",
"armed_vacation": "Armed vacation",
"armed_custom_bypass": "Armed custom bypass",
"pending": "Pending",
"arming": "Arming",
"disarming": "Disarming",
"triggered": "Triggered"
"name": "[%key:component::alarm_control_panel::title%]",
"state": {
"armed": "Armed",
"disarmed": "Disarmed",
"armed_home": "Armed home",
"armed_away": "Armed away",
"armed_night": "Armed night",
"armed_vacation": "Armed vacation",
"armed_custom_bypass": "Armed custom bypass",
"pending": "Pending",
"arming": "Arming",
"disarming": "Disarming",
"triggered": "Triggered"
},
"state_attributes": {
"code_format": {
"name": "Code format",
"state": {
"text": "Text",
"number": "Number"
}
},
"changed_by": {
"name": "Changed by"
},
"code_arm_required": {
"name": "Code for arming",
"state": {
"true": "Required",
"false": "Not required"
}
}
}
}
}
}

View File

@@ -25,7 +25,7 @@ from homeassistant.const import (
STATE_OFF,
STATE_ON,
)
from homeassistant.core import Event, HomeAssistant
from homeassistant.core import Event, HassJob, HomeAssistant
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
from homeassistant.helpers.entity_component import EntityComponent
@@ -237,7 +237,13 @@ class Alert(Entity):
"""Schedule a notification."""
delay = self._delay[self._next_delay]
next_msg = now() + delay
self._cancel = async_track_point_in_time(self.hass, self._notify, next_msg)
self._cancel = async_track_point_in_time(
self.hass,
HassJob(
self._notify, name="Schedule notify alert", cancel_on_shutdown=True
),
next_msg,
)
self._next_delay = min(self._next_delay + 1, len(self._delay) - 1)
async def _notify(self, *args: Any) -> None:

View File

@@ -1,10 +1,13 @@
{
"title": "Alert",
"state": {
"entity_component": {
"_": {
"idle": "[%key:common::state::idle%]",
"off": "Acknowledged",
"on": "[%key:common::state::active%]"
"name": "[%key:component::alert::title%]",
"state": {
"idle": "[%key:common::state::idle%]",
"off": "Acknowledged",
"on": "[%key:common::state::active%]"
}
}
}
}

View File

@@ -9,7 +9,7 @@ from .const import API_TEMP_UNITS
class UnsupportedProperty(HomeAssistantError):
"""This entity does not support the requested Smart Home API property."""
"""Does not support the requested Smart Home API property."""
class NoTokenAvailable(HomeAssistantError):

View File

@@ -1,5 +1,4 @@
"""Support for Alexa skill service end point."""
import copy
import hmac
from http import HTTPStatus
import logging
@@ -48,7 +47,7 @@ class AlexaFlashBriefingView(http.HomeAssistantView):
def __init__(self, hass, flash_briefings):
"""Initialize Alexa view."""
super().__init__()
self.flash_briefings = copy.deepcopy(flash_briefings)
self.flash_briefings = flash_briefings
template.attach(hass, self.flash_briefings)
@callback

View File

@@ -60,6 +60,7 @@ class AlexaConfig(AbstractConfig):
"""Return an identifier for the user that represents this config."""
return ""
@core.callback
def should_expose(self, entity_id):
"""If an entity should be exposed."""
if not self._config[CONF_FILTER].empty_filter:

View File

@@ -34,49 +34,49 @@ CONF_TEXT_TYPE: Final = "text_type"
SUPPORTED_VOICES: Final[list[str]] = [
"Aditi", # Hindi
"Amy",
"Aria",
"Amy", # English (British)
"Aria", # English (New Zealand), Neural
"Arlet", # Catalan, Neural
"Arthur", # English, Neural
"Astrid", # Swedish
"Ayanda",
"Ayanda", # English (South African), Neural
"Bianca", # Italian
"Brian",
"Brian", # English (British)
"Camila", # Portuguese, Brazilian
"Carla",
"Carla", # Italian
"Carmen", # Romanian
"Celine",
"Celine", # French
"Chantal", # French Canadian
"Conchita",
"Cristiano",
"Conchita", # Spanish (European)
"Cristiano", # Portuguese (European)
"Daniel", # German, Neural
"Dora", # Icelandic
"Elin", # Swedish, Neural
"Emma", # English
"Enrique",
"Ewa",
"Enrique", # Spanish (European)
"Ewa", # Polish
"Filiz", # Turkish
"Gabrielle",
"Gabrielle", # French (Canadian)
"Geraint", # English Welsh
"Giorgio",
"Giorgio", # Italian
"Gwyneth", # Welsh
"Hala", # Arabic (Gulf), Neural
"Hannah", # German (Austrian), Neural
"Hans",
"Hans", # German
"Hiujin", # Chinese (Cantonese), Neural
"Ida", # Norwegian, Neural
"Ines", # Portuguese, European
"Ivy",
"Jacek",
"Jan",
"Joanna",
"Joey",
"Justin",
"Ivy", # English
"Jacek", # Polish
"Jan", # Polish
"Joanna", # English
"Joey", # English
"Justin", # English
"Kajal", # English (Indian)/Hindi (Bilingual ), Neural
"Karl",
"Kendra",
"Kevin",
"Kimberly",
"Karl", # Icelandic
"Kendra", # English
"Kevin", # English, Neural
"Kimberly", # English
"Laura", # Dutch, Neural
"Lea", # French
"Liam", # Canadian French, Neural
@@ -84,12 +84,12 @@ SUPPORTED_VOICES: Final[list[str]] = [
"Lotte", # Dutch
"Lucia", # Spanish European
"Lupe", # Spanish US
"Mads",
"Mads", # Danish
"Maja", # Polish
"Marlene",
"Mathieu",
"Matthew",
"Maxim",
"Marlene", # German
"Mathieu", # French
"Matthew", # English
"Maxim", # Russian
"Mia", # Spanish Mexican
"Miguel", # Spanish US
"Mizuki", # Japanese
@@ -100,17 +100,19 @@ SUPPORTED_VOICES: Final[list[str]] = [
"Penelope", # Spanish US
"Pedro", # Spanish US, Neural
"Raveena", # English, Indian
"Ricardo",
"Ruben",
"Russell",
"Ricardo", # Portuguese (Brazilian)
"Ruben", # Dutch
"Russell", # English (Australian)
"Ruth", # English, Neural
"Salli", # English
"Seoyeon", # Korean
"Stephen", # English, Neural
"Suvi", # Finnish
"Takumi",
"Takumi", # Japanese
"Tatyana", # Russian
"Vicki", # German
"Vitoria", # Portuguese, Brazilian
"Zeina",
"Zeina", # Arabic
"Zhiyu", # Chinese
]

View File

@@ -2,7 +2,7 @@
from __future__ import annotations
import logging
from typing import Final
from typing import Any, Final
import boto3
import botocore
@@ -166,8 +166,8 @@ class AmazonPollyProvider(Provider):
def get_tts_audio(
self,
message: str,
language: str | None = None,
options: dict[str, str] | None = None,
language: str,
options: dict[str, Any] | None = None,
) -> TtsAudioType:
"""Request TTS file from Polly."""
if options is None or language is None:

View File

@@ -117,7 +117,6 @@ async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
en_reg.async_clear_config_entry(entry.entry_id)
version = entry.version = 2
hass.config_entries.async_update_entry(entry)
LOGGER.info("Migration to version %s successful", version)

View File

@@ -7,5 +7,5 @@
"integration_type": "hub",
"iot_class": "cloud_push",
"loggers": ["aioambient"],
"requirements": ["aioambient==2021.11.0"]
"requirements": ["aioambient==2023.04.0"]
}

View File

@@ -20,13 +20,12 @@ from homeassistant.components.camera import (
from homeassistant.components.ffmpeg import FFmpegManager, get_ffmpeg_manager
from homeassistant.const import ATTR_ENTITY_ID, CONF_NAME, STATE_OFF, STATE_ON
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry
from homeassistant.helpers import config_validation as cv, entity_registry as er
from homeassistant.helpers.aiohttp_client import (
async_aiohttp_proxy_stream,
async_aiohttp_proxy_web,
async_get_clientsession,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
@@ -146,7 +145,7 @@ async def async_setup_platform(
# with this version, update the old entity with the new unique id.
serial_number = await device.api.async_serial_number
serial_number = serial_number.strip()
registry = entity_registry.async_get(hass)
registry = er.async_get(hass)
entity_id = registry.async_get_entity_id(CAMERA_DOMAIN, DOMAIN, serial_number)
if entity_id is not None:
_LOGGER.debug("Updating unique id for camera %s", entity_id)

View File

@@ -19,7 +19,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from homeassistant.util import Throttle
from .const import ATTRIBUTION, CONF_STATION_ID, SCAN_INTERVAL
from .const import CONF_STATION_ID, SCAN_INTERVAL
_LOGGER: Final = logging.getLogger(__name__)
@@ -54,6 +54,8 @@ async def async_setup_platform(
class AmpioSmogQuality(AirQualityEntity):
"""Implementation of an Ampio Smog air quality entity."""
_attr_attribution = "Data provided by Ampio"
def __init__(
self, api: AmpioSmogMapData, station_id: str, name: str | None
) -> None:
@@ -82,11 +84,6 @@ class AmpioSmogQuality(AirQualityEntity):
"""Return the particulate matter 10 level."""
return self._ampio.api.pm10 # type: ignore[no-any-return]
@property
def attribution(self) -> str:
"""Return the attribution."""
return ATTRIBUTION
async def async_update(self) -> None:
"""Get the latest data from the AmpioMap API."""
await self._ampio.async_update()

View File

@@ -2,6 +2,5 @@
from datetime import timedelta
from typing import Final
ATTRIBUTION: Final = "Data provided by Ampio"
CONF_STATION_ID: Final = "station_id"
SCAN_INTERVAL: Final = timedelta(minutes=10)

View File

@@ -5,7 +5,7 @@ import voluptuous as vol
from homeassistant.components import websocket_api
from homeassistant.const import EVENT_HOMEASSISTANT_STARTED
from homeassistant.core import Event, HomeAssistant, callback
from homeassistant.core import Event, HassJob, HomeAssistant, callback
from homeassistant.helpers.event import async_call_later, async_track_time_interval
from homeassistant.helpers.typing import ConfigType
@@ -24,10 +24,24 @@ async def async_setup(hass: HomeAssistant, _: ConfigType) -> bool:
def start_schedule(_event: Event) -> None:
"""Start the send schedule after the started event."""
# Wait 15 min after started
async_call_later(hass, 900, analytics.send_analytics)
async_call_later(
hass,
900,
HassJob(
analytics.send_analytics,
name="analytics schedule",
cancel_on_shutdown=True,
),
)
# Send every day
async_track_time_interval(hass, analytics.send_analytics, INTERVAL)
async_track_time_interval(
hass,
analytics.send_analytics,
INTERVAL,
name="analytics daily",
cancel_on_shutdown=True,
)
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STARTED, start_schedule)

View File

@@ -1,4 +1,4 @@
"""Support for functionality to interact with Android TV/Fire TV devices."""
"""Support for functionality to interact with Android/Fire TV devices."""
from __future__ import annotations
from collections.abc import Mapping
@@ -135,11 +135,11 @@ async def async_connect_androidtv(
if not aftv.available:
# Determine the name that will be used for the device in the log
if config[CONF_DEVICE_CLASS] == DEVICE_ANDROIDTV:
device_name = "Android TV device"
device_name = "Android device"
elif config[CONF_DEVICE_CLASS] == DEVICE_FIRETV:
device_name = "Fire TV device"
else:
device_name = "Android TV / Fire TV device"
device_name = "Android / Fire TV device"
error_message = f"Could not connect to {device_name} at {address} {adb_log}"
return None, error_message
@@ -148,7 +148,7 @@ async def async_connect_androidtv(
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up Android TV platform."""
"""Set up Android Debug Bridge platform."""
state_det_rules = entry.options.get(CONF_STATE_DETECTION_RULES)
if CONF_ADB_SERVER_IP not in entry.data:
@@ -167,7 +167,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
raise ConfigEntryNotReady(error_message)
async def async_close_connection(event):
"""Close Android TV connection on HA Stop."""
"""Close Android Debug Bridge connection on HA Stop."""
await aftv.adb_close()
entry.async_on_unload(

View File

@@ -1,4 +1,4 @@
"""Config flow to configure the Android TV integration."""
"""Config flow to configure the Android Debug Bridge integration."""
from __future__ import annotations
import logging
@@ -114,13 +114,14 @@ class AndroidTVFlowHandler(ConfigFlow, domain=DOMAIN):
async def _async_check_connection(
self, user_input: dict[str, Any]
) -> tuple[str | None, str | None]:
"""Attempt to connect the Android TV."""
"""Attempt to connect the Android device."""
try:
aftv, error_message = await async_connect_androidtv(self.hass, user_input)
except Exception: # pylint: disable=broad-except
_LOGGER.exception(
"Unknown error connecting with Android TV at %s", user_input[CONF_HOST]
"Unknown error connecting with Android device at %s",
user_input[CONF_HOST],
)
return RESULT_UNKNOWN, None
@@ -130,7 +131,7 @@ class AndroidTVFlowHandler(ConfigFlow, domain=DOMAIN):
dev_prop = aftv.device_properties
_LOGGER.info(
"Android TV at %s: %s = %r, %s = %r",
"Android device at %s: %s = %r, %s = %r",
user_input[CONF_HOST],
PROP_ETHMAC,
dev_prop.get(PROP_ETHMAC),
@@ -184,7 +185,7 @@ class AndroidTVFlowHandler(ConfigFlow, domain=DOMAIN):
class OptionsFlowHandler(OptionsFlowWithConfigEntry):
"""Handle an option flow for Android TV."""
"""Handle an option flow for Android Debug Bridge."""
def __init__(self, config_entry: ConfigEntry) -> None:
"""Initialize options flow."""

View File

@@ -1,4 +1,4 @@
"""Android TV component constants."""
"""Android Debug Bridge component constants."""
DOMAIN = "androidtv"
ANDROID_DEV = DOMAIN

View File

@@ -1,6 +1,6 @@
{
"domain": "androidtv",
"name": "Android TV",
"name": "Android Debug Bridge",
"codeowners": ["@JeffLIrion", "@ollo69"],
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/androidtv",

View File

@@ -1,4 +1,4 @@
"""Support for functionality to interact with Android TV / Fire TV devices."""
"""Support for functionality to interact with Android / Fire TV devices."""
from __future__ import annotations
from collections.abc import Awaitable, Callable, Coroutine
@@ -87,7 +87,7 @@ async def async_setup_entry(
entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Android TV entity."""
"""Set up the Android Debug Bridge entity."""
aftv = hass.data[DOMAIN][entry.entry_id][ANDROID_DEV]
device_class = aftv.DEVICE_CLASS
device_type = (
@@ -201,7 +201,7 @@ def adb_decorator(
class ADBDevice(MediaPlayerEntity):
"""Representation of an Android TV or Fire TV device."""
"""Representation of an Android or Fire TV device."""
_attr_device_class = MediaPlayerDeviceClass.TV
@@ -214,7 +214,7 @@ class ADBDevice(MediaPlayerEntity):
entry_id,
entry_data,
):
"""Initialize the Android TV / Fire TV device."""
"""Initialize the Android / Fire TV device."""
self.aftv = aftv
self._attr_name = name
self._attr_unique_id = unique_id
@@ -384,7 +384,7 @@ class ADBDevice(MediaPlayerEntity):
@adb_decorator()
async def adb_command(self, command):
"""Send an ADB command to an Android TV / Fire TV device."""
"""Send an ADB command to an Android / Fire TV device."""
if key := KEYS.get(command):
await self.aftv.adb_shell(f"input keyevent {key}")
return
@@ -422,13 +422,13 @@ class ADBDevice(MediaPlayerEntity):
persistent_notification.async_create(
self.hass,
msg,
title="Android TV",
title="Android Debug Bridge",
)
_LOGGER.info("%s", msg)
@adb_decorator()
async def service_download(self, device_path, local_path):
"""Download a file from your Android TV / Fire TV device to your Home Assistant instance."""
"""Download a file from your Android / Fire TV device to your Home Assistant instance."""
if not self.hass.config.is_allowed_path(local_path):
_LOGGER.warning("'%s' is not secure to load data from!", local_path)
return
@@ -437,7 +437,7 @@ class ADBDevice(MediaPlayerEntity):
@adb_decorator()
async def service_upload(self, device_path, local_path):
"""Upload a file from your Home Assistant instance to an Android TV / Fire TV device."""
"""Upload a file from your Home Assistant instance to an Android / Fire TV device."""
if not self.hass.config.is_allowed_path(local_path):
_LOGGER.warning("'%s' is not secure to load data from!", local_path)
return
@@ -446,7 +446,7 @@ class ADBDevice(MediaPlayerEntity):
class AndroidTVDevice(ADBDevice):
"""Representation of an Android TV device."""
"""Representation of an Android device."""
_attr_supported_features = (
MediaPlayerEntityFeature.PAUSE

View File

@@ -1,8 +1,8 @@
# Describes the format for available Android TV and Fire TV services
# Describes the format for available Android and Fire TV services
adb_command:
name: ADB command
description: Send an ADB command to an Android TV / Fire TV device.
description: Send an ADB command to an Android / Fire TV device.
target:
entity:
integration: androidtv
@@ -17,7 +17,7 @@ adb_command:
text:
download:
name: Download
description: Download a file from your Android TV / Fire TV device to your Home Assistant instance.
description: Download a file from your Android / Fire TV device to your Home Assistant instance.
target:
entity:
integration: androidtv
@@ -25,7 +25,7 @@ download:
fields:
device_path:
name: Device path
description: The filepath on the Android TV / Fire TV device.
description: The filepath on the Android / Fire TV device.
required: true
example: "/storage/emulated/0/Download/example.txt"
selector:
@@ -39,7 +39,7 @@ download:
text:
upload:
name: Upload
description: Upload a file from your Home Assistant instance to an Android TV / Fire TV device.
description: Upload a file from your Home Assistant instance to an Android / Fire TV device.
target:
entity:
integration: androidtv
@@ -47,7 +47,7 @@ upload:
fields:
device_path:
name: Device path
description: The filepath on the Android TV / Fire TV device.
description: The filepath on the Android / Fire TV device.
required: true
example: "/storage/emulated/0/Download/example.txt"
selector:

View File

@@ -38,7 +38,7 @@
}
},
"apps": {
"title": "Configure Android TV Apps",
"title": "Configure Android Apps",
"description": "Configure application id {app_id}",
"data": {
"app_name": "Application Name",
@@ -47,7 +47,7 @@
}
},
"rules": {
"title": "Configure Android TV state detection rules",
"title": "Configure Android state detection rules",
"description": "Configure detection rule for application id {rule_id}",
"data": {
"rule_id": "Application ID",

View File

@@ -0,0 +1,67 @@
"""The Android TV Remote integration."""
from __future__ import annotations
from androidtvremote2 import (
AndroidTVRemote,
CannotConnect,
ConnectionClosed,
InvalidAuth,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, EVENT_HOMEASSISTANT_STOP, Platform
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
from .const import DOMAIN
from .helpers import create_api
PLATFORMS: list[Platform] = [Platform.REMOTE]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up Android TV Remote from a config entry."""
api = create_api(hass, entry.data[CONF_HOST])
try:
await api.async_connect()
except InvalidAuth as exc:
# The Android TV is hard reset or the certificate and key files were deleted.
raise ConfigEntryAuthFailed from exc
except (CannotConnect, ConnectionClosed) as exc:
# The Android TV is network unreachable. Raise exception and let Home Assistant retry
# later. If device gets a new IP address the zeroconf flow will update the config.
raise ConfigEntryNotReady from exc
def reauth_needed() -> None:
"""Start a reauth flow if Android TV is hard reset while reconnecting."""
entry.async_start_reauth(hass)
# Start a task (canceled in disconnect) to keep reconnecting if device becomes
# network unreachable. If device gets a new IP address the zeroconf flow will
# update the config entry data and reload the config entry.
api.keep_reconnecting(reauth_needed)
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = api
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
@callback
def on_hass_stop(event) -> None:
"""Stop push updates when hass stops."""
api.disconnect()
entry.async_on_unload(
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, on_hass_stop)
)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
api: AndroidTVRemote = hass.data[DOMAIN].pop(entry.entry_id)
api.disconnect()
return unload_ok

View File

@@ -0,0 +1,187 @@
"""Config flow for Android TV Remote integration."""
from __future__ import annotations
from collections.abc import Mapping
from typing import Any
from androidtvremote2 import (
AndroidTVRemote,
CannotConnect,
ConnectionClosed,
InvalidAuth,
)
import voluptuous as vol
from homeassistant import config_entries
from homeassistant.components import zeroconf
from homeassistant.const import CONF_HOST, CONF_MAC, CONF_NAME
from homeassistant.data_entry_flow import FlowResult
from homeassistant.helpers.device_registry import format_mac
from .const import DOMAIN
from .helpers import create_api
STEP_USER_DATA_SCHEMA = vol.Schema(
{
vol.Required("host"): str,
}
)
STEP_PAIR_DATA_SCHEMA = vol.Schema(
{
vol.Required("pin"): str,
}
)
class AndroidTVRemoteConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
"""Handle a config flow for Android TV Remote."""
VERSION = 1
def __init__(self) -> None:
"""Initialize a new AndroidTVRemoteConfigFlow."""
self.api: AndroidTVRemote | None = None
self.reauth_entry: config_entries.ConfigEntry | None = None
self.host: str | None = None
self.name: str | None = None
self.mac: str | None = None
async def async_step_user(
self, user_input: dict[str, Any] | None = None
) -> FlowResult:
"""Handle the initial step."""
errors: dict[str, str] = {}
if user_input is not None:
self.host = user_input["host"]
assert self.host
api = create_api(self.hass, self.host)
try:
self.name, self.mac = await api.async_get_name_and_mac()
assert self.mac
await self.async_set_unique_id(format_mac(self.mac))
self._abort_if_unique_id_configured(updates={CONF_HOST: self.host})
return await self._async_start_pair()
except (CannotConnect, ConnectionClosed):
# Likely invalid IP address or device is network unreachable. Stay
# in the user step allowing the user to enter a different host.
errors["base"] = "cannot_connect"
return self.async_show_form(
step_id="user",
data_schema=STEP_USER_DATA_SCHEMA,
errors=errors,
)
async def _async_start_pair(self) -> FlowResult:
"""Start pairing with the Android TV. Navigate to the pair flow to enter the PIN shown on screen."""
assert self.host
self.api = create_api(self.hass, self.host)
await self.api.async_generate_cert_if_missing()
await self.api.async_start_pairing()
return await self.async_step_pair()
async def async_step_pair(
self, user_input: dict[str, Any] | None = None
) -> FlowResult:
"""Handle the pair step."""
errors: dict[str, str] = {}
if user_input is not None:
try:
pin = user_input["pin"]
assert self.api
await self.api.async_finish_pairing(pin)
if self.reauth_entry:
await self.hass.config_entries.async_reload(
self.reauth_entry.entry_id
)
return self.async_abort(reason="reauth_successful")
assert self.name
return self.async_create_entry(
title=self.name,
data={
CONF_HOST: self.host,
CONF_NAME: self.name,
CONF_MAC: self.mac,
},
)
except InvalidAuth:
# Invalid PIN. Stay in the pair step allowing the user to enter
# a different PIN.
errors["base"] = "invalid_auth"
except ConnectionClosed:
# Either user canceled pairing on the Android TV itself (most common)
# or device doesn't respond to the specified host (device was unplugged,
# network was unplugged, or device got a new IP address).
# Attempt to pair again.
try:
return await self._async_start_pair()
except (CannotConnect, ConnectionClosed):
# Device doesn't respond to the specified host. Abort.
# If we are in the user flow we could go back to the user step to allow
# them to enter a new IP address but we cannot do that for the zeroconf
# flow. Simpler to abort for both flows.
return self.async_abort(reason="cannot_connect")
return self.async_show_form(
step_id="pair",
data_schema=STEP_PAIR_DATA_SCHEMA,
description_placeholders={CONF_NAME: self.name},
errors=errors,
)
async def async_step_zeroconf(
self, discovery_info: zeroconf.ZeroconfServiceInfo
) -> FlowResult:
"""Handle zeroconf discovery."""
self.host = discovery_info.host
self.name = discovery_info.name.removesuffix("._androidtvremote2._tcp.local.")
self.mac = discovery_info.properties.get("bt")
assert self.mac
await self.async_set_unique_id(format_mac(self.mac))
self._abort_if_unique_id_configured(
updates={CONF_HOST: self.host, CONF_NAME: self.name}
)
self.context.update({"title_placeholders": {CONF_NAME: self.name}})
return await self.async_step_zeroconf_confirm()
async def async_step_zeroconf_confirm(
self, user_input: dict[str, Any] | None = None
) -> FlowResult:
"""Handle a flow initiated by zeroconf."""
if user_input is not None:
try:
return await self._async_start_pair()
except (CannotConnect, ConnectionClosed):
# Device became network unreachable after discovery.
# Abort and let discovery find it again later.
return self.async_abort(reason="cannot_connect")
return self.async_show_form(
step_id="zeroconf_confirm",
description_placeholders={CONF_NAME: self.name},
)
async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult:
"""Handle configuration by re-auth."""
self.host = entry_data[CONF_HOST]
self.name = entry_data[CONF_NAME]
self.mac = entry_data[CONF_MAC]
self.reauth_entry = self.hass.config_entries.async_get_entry(
self.context["entry_id"]
)
return await self.async_step_reauth_confirm()
async def async_step_reauth_confirm(
self, user_input: dict[str, Any] | None = None
) -> FlowResult:
"""Dialog that informs the user that reauth is required."""
errors: dict[str, str] = {}
if user_input is not None:
try:
return await self._async_start_pair()
except (CannotConnect, ConnectionClosed):
# Device is network unreachable. Abort.
errors["base"] = "cannot_connect"
return self.async_show_form(
step_id="reauth_confirm",
description_placeholders={CONF_NAME: self.name},
errors=errors,
)

View File

@@ -0,0 +1,6 @@
"""Constants for the Android TV Remote integration."""
from __future__ import annotations
from typing import Final
DOMAIN: Final = "androidtv_remote"

View File

@@ -0,0 +1,29 @@
"""Diagnostics support for Android TV Remote."""
from __future__ import annotations
from typing import Any
from androidtvremote2 import AndroidTVRemote
from homeassistant.components.diagnostics import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, CONF_MAC
from homeassistant.core import HomeAssistant
from .const import DOMAIN
TO_REDACT = {CONF_HOST, CONF_MAC}
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: ConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
api: AndroidTVRemote = hass.data[DOMAIN].pop(entry.entry_id)
return async_redact_data(
{
"api_device_info": api.device_info,
"config_entry_data": entry.data,
},
TO_REDACT,
)

View File

@@ -0,0 +1,18 @@
"""Helper functions for Android TV Remote integration."""
from __future__ import annotations
from androidtvremote2 import AndroidTVRemote
from homeassistant.core import HomeAssistant
from homeassistant.helpers.storage import STORAGE_DIR
def create_api(hass: HomeAssistant, host: str) -> AndroidTVRemote:
"""Create an AndroidTVRemote instance."""
return AndroidTVRemote(
client_name="Home Assistant",
certfile=hass.config.path(STORAGE_DIR, "androidtv_remote_cert.pem"),
keyfile=hass.config.path(STORAGE_DIR, "androidtv_remote_key.pem"),
host=host,
loop=hass.loop,
)

View File

@@ -0,0 +1,13 @@
{
"domain": "androidtv_remote",
"name": "Android TV Remote",
"codeowners": ["@tronikos"],
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/androidtv_remote",
"integration_type": "device",
"iot_class": "local_push",
"loggers": ["androidtvremote2"],
"quality_scale": "platinum",
"requirements": ["androidtvremote2==0.0.7"],
"zeroconf": ["_androidtvremote2._tcp.local."]
}

View File

@@ -0,0 +1,154 @@
"""Remote control support for Android TV Remote."""
from __future__ import annotations
import asyncio
from collections.abc import Iterable
import logging
from typing import Any
from androidtvremote2 import AndroidTVRemote, ConnectionClosed
from homeassistant.components.remote import (
ATTR_ACTIVITY,
ATTR_DELAY_SECS,
ATTR_HOLD_SECS,
ATTR_NUM_REPEATS,
DEFAULT_DELAY_SECS,
DEFAULT_HOLD_SECS,
DEFAULT_NUM_REPEATS,
RemoteEntity,
RemoteEntityFeature,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST, CONF_MAC, CONF_NAME
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
PARALLEL_UPDATES = 0
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up the Android TV remote entity based on a config entry."""
api: AndroidTVRemote = hass.data[DOMAIN][config_entry.entry_id]
async_add_entities([AndroidTVRemoteEntity(api, config_entry)])
class AndroidTVRemoteEntity(RemoteEntity):
"""Representation of an Android TV Remote."""
_attr_has_entity_name = True
_attr_should_poll = False
def __init__(self, api: AndroidTVRemote, config_entry: ConfigEntry) -> None:
"""Initialize device."""
self._api = api
self._host = config_entry.data[CONF_HOST]
self._name = config_entry.data[CONF_NAME]
self._attr_unique_id = config_entry.unique_id
self._attr_supported_features = RemoteEntityFeature.ACTIVITY
self._attr_is_on = api.is_on
self._attr_current_activity = api.current_app
device_info = api.device_info
assert config_entry.unique_id
assert device_info
self._attr_device_info = DeviceInfo(
connections={(CONNECTION_NETWORK_MAC, config_entry.data[CONF_MAC])},
identifiers={(DOMAIN, config_entry.unique_id)},
name=self._name,
manufacturer=device_info["manufacturer"],
model=device_info["model"],
)
@callback
def is_on_updated(is_on: bool) -> None:
self._attr_is_on = is_on
self.async_write_ha_state()
@callback
def current_app_updated(current_app: str) -> None:
self._attr_current_activity = current_app
self.async_write_ha_state()
@callback
def is_available_updated(is_available: bool) -> None:
if is_available:
_LOGGER.info(
"Reconnected to %s at %s",
self._name,
self._host,
)
else:
_LOGGER.warning(
"Disconnected from %s at %s",
self._name,
self._host,
)
self._attr_available = is_available
self.async_write_ha_state()
api.add_is_on_updated_callback(is_on_updated)
api.add_current_app_updated_callback(current_app_updated)
api.add_is_available_updated_callback(is_available_updated)
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn the Android TV on."""
if not self.is_on:
self._send_key_command("POWER")
activity = kwargs.get(ATTR_ACTIVITY, "")
if activity:
self._send_launch_app_command(activity)
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn the Android TV off."""
if self.is_on:
self._send_key_command("POWER")
async def async_send_command(self, command: Iterable[str], **kwargs: Any) -> None:
"""Send commands to one device."""
num_repeats = kwargs.get(ATTR_NUM_REPEATS, DEFAULT_NUM_REPEATS)
delay_secs = kwargs.get(ATTR_DELAY_SECS, DEFAULT_DELAY_SECS)
hold_secs = kwargs.get(ATTR_HOLD_SECS, DEFAULT_HOLD_SECS)
for _ in range(num_repeats):
for single_command in command:
if hold_secs:
self._send_key_command(single_command, "START_LONG")
await asyncio.sleep(hold_secs)
self._send_key_command(single_command, "END_LONG")
else:
self._send_key_command(single_command, "SHORT")
await asyncio.sleep(delay_secs)
def _send_key_command(self, key_code: str, direction: str = "SHORT") -> None:
"""Send a key press to Android TV.
This does not block; it buffers the data and arranges for it to be sent out asynchronously.
"""
try:
self._api.send_key_command(key_code, direction)
except ConnectionClosed as exc:
raise HomeAssistantError(
"Connection to Android TV device is closed"
) from exc
def _send_launch_app_command(self, app_link: str) -> None:
"""Launch an app on Android TV.
This does not block; it buffers the data and arranges for it to be sent out asynchronously.
"""
try:
self._api.send_launch_app_command(app_link)
except ConnectionClosed as exc:
raise HomeAssistantError(
"Connection to Android TV device is closed"
) from exc

View File

@@ -0,0 +1,38 @@
{
"config": {
"flow_title": "{name}",
"step": {
"user": {
"description": "Enter the IP address of the Android TV you want to add to Home Assistant. It will turn on and a pairing code will be displayed on it that you will need to enter in the next screen.",
"data": {
"host": "[%key:common::config_flow::data::host%]"
}
},
"zeroconf_confirm": {
"title": "Discovered Android TV",
"description": "Do you want to add the Android TV ({name}) to Home Assistant? It will turn on and a pairing code will be displayed on it that you will need to enter in the next screen."
},
"pair": {
"description": "Enter the pairing code displayed on the Android TV ({name}).",
"data": {
"pin": "[%key:common::config_flow::data::pin%]"
}
},
"reauth_confirm": {
"title": "[%key:common::config_flow::title::reauth%]",
"description": "You need to pair again with the Android TV ({name})."
}
},
"error": {
"already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]",
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
"invalid_auth": "[%key:common::config_flow::error::invalid_auth%]",
"unknown": "[%key:common::config_flow::error::unknown%]"
},
"abort": {
"already_configured": "[%key:common::config_flow::abort::already_configured_device%]",
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
"reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]"
}
}
}

View File

@@ -0,0 +1,86 @@
"""The Anova integration."""
from __future__ import annotations
import logging
from anova_wifi import (
AnovaApi,
AnovaPrecisionCooker,
AnovaPrecisionCookerSensor,
InvalidLogin,
NoDevicesFound,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import aiohttp_client
from .const import DOMAIN
from .coordinator import AnovaCoordinator
from .models import AnovaData
from .util import serialize_device_list
PLATFORMS = [Platform.SENSOR]
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up Anova from a config entry."""
api = AnovaApi(
aiohttp_client.async_get_clientsession(hass),
entry.data[CONF_USERNAME],
entry.data[CONF_PASSWORD],
)
try:
await api.authenticate()
except InvalidLogin as err:
_LOGGER.error(
"Login was incorrect - please log back in through the config flow. %s", err
)
return False
assert api.jwt
api.existing_devices = [
AnovaPrecisionCooker(
aiohttp_client.async_get_clientsession(hass),
device[0],
device[1],
api.jwt,
)
for device in entry.data["devices"]
]
try:
new_devices = await api.get_devices()
except NoDevicesFound:
# get_devices raises an exception if no devices are online
new_devices = []
devices = api.existing_devices
if new_devices:
hass.config_entries.async_update_entry(
entry,
data={
**entry.data,
**{"devices": serialize_device_list(devices)},
},
)
coordinators = [AnovaCoordinator(hass, device) for device in devices]
for coordinator in coordinators:
await coordinator.async_config_entry_first_refresh()
firmware_version = coordinator.data["sensors"][
AnovaPrecisionCookerSensor.FIRMWARE_VERSION
]
coordinator.async_setup(str(firmware_version))
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = AnovaData(
api_jwt=api.jwt, precision_cookers=devices, coordinators=coordinators
)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok

View File

@@ -0,0 +1,61 @@
"""Config flow for Anova."""
from __future__ import annotations
from anova_wifi import AnovaApi, InvalidLogin, NoDevicesFound
import voluptuous as vol
from homeassistant import config_entries
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.data_entry_flow import FlowResult
from homeassistant.helpers import aiohttp_client
from .const import DOMAIN
from .util import serialize_device_list
class AnovaConfligFlow(config_entries.ConfigFlow, domain=DOMAIN):
"""Sets up a config flow for Anova."""
VERSION = 1
async def async_step_user(
self, user_input: dict[str, str] | None = None
) -> FlowResult:
"""Handle a flow initiated by the user."""
errors: dict[str, str] = {}
if user_input is not None:
api = AnovaApi(
aiohttp_client.async_get_clientsession(self.hass),
user_input[CONF_USERNAME],
user_input[CONF_PASSWORD],
)
await self.async_set_unique_id(user_input[CONF_USERNAME].lower())
self._abort_if_unique_id_configured()
try:
await api.authenticate()
devices = await api.get_devices()
except InvalidLogin:
errors["base"] = "invalid_auth"
except NoDevicesFound:
errors["base"] = "no_devices_found"
except Exception: # pylint: disable=broad-except
errors["base"] = "unknown"
else:
# We store device list in config flow in order to persist found devices on restart, as the Anova api get_devices does not return any devices that are offline.
device_list = serialize_device_list(devices)
return self.async_create_entry(
title="Anova",
data={
CONF_USERNAME: api.username,
CONF_PASSWORD: api.password,
"devices": device_list,
},
)
return self.async_show_form(
step_id="user",
data_schema=vol.Schema(
{vol.Required(CONF_USERNAME): str, vol.Required(CONF_PASSWORD): str}
),
errors=errors,
)

View File

@@ -0,0 +1,6 @@
"""Constants for the Anova integration."""
DOMAIN = "anova"
ANOVA_CLIENT = "anova_api_client"
ANOVA_FIRMWARE_VERSION = "anova_firmware_version"

View File

@@ -0,0 +1,55 @@
"""Support for Anova Coordinators."""
from datetime import timedelta
import logging
from anova_wifi import AnovaOffline, AnovaPrecisionCooker
import async_timeout
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import DOMAIN
_LOGGER = logging.getLogger(__name__)
class AnovaCoordinator(DataUpdateCoordinator):
"""Anova custom coordinator."""
data: dict[str, dict[str, str | int | float]]
def __init__(
self,
hass: HomeAssistant,
anova_device: AnovaPrecisionCooker,
) -> None:
"""Set up Anova Coordinator."""
super().__init__(
hass,
name="Anova Precision Cooker",
logger=_LOGGER,
update_interval=timedelta(seconds=30),
)
assert self.config_entry is not None
self._device_unique_id = anova_device.device_key
self.anova_device = anova_device
self.device_info: DeviceInfo | None = None
@callback
def async_setup(self, firmware_version: str) -> None:
"""Set the firmware version info."""
self.device_info = DeviceInfo(
identifiers={(DOMAIN, self._device_unique_id)},
name="Anova Precision Cooker",
manufacturer="Anova",
model="Precision Cooker",
sw_version=firmware_version,
)
async def _async_update_data(self) -> dict[str, dict[str, str | int | float]]:
try:
async with async_timeout.timeout(5):
return await self.anova_device.update()
except AnovaOffline as err:
raise UpdateFailed(err) from err

View File

@@ -0,0 +1,30 @@
"""Base entity for the Anova integration."""
from __future__ import annotations
from homeassistant.helpers.entity import Entity, EntityDescription
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .coordinator import AnovaCoordinator
class AnovaEntity(CoordinatorEntity[AnovaCoordinator], Entity):
"""Defines a Anova entity."""
def __init__(self, coordinator: AnovaCoordinator) -> None:
"""Initialize the Anova entity."""
super().__init__(coordinator)
self.device = coordinator.anova_device
self._attr_device_info = coordinator.device_info
self._attr_has_entity_name = True
class AnovaDescriptionEntity(AnovaEntity, Entity):
"""Defines a Anova entity that uses a description."""
def __init__(
self, coordinator: AnovaCoordinator, description: EntityDescription
) -> None:
"""Initialize the entity and declare unique id based on description key."""
super().__init__(coordinator)
self.entity_description = description
self._attr_unique_id = f"{coordinator._device_unique_id}_{description.key}"

View File

@@ -0,0 +1,10 @@
{
"domain": "anova",
"name": "Anova",
"codeowners": ["@Lash-L"],
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/anova",
"iot_class": "cloud_polling",
"loggers": ["anova_wifi"],
"requirements": ["anova-wifi==0.8.0"]
}

View File

@@ -0,0 +1,15 @@
"""Dataclass models for the Anova integration."""
from dataclasses import dataclass
from anova_wifi import AnovaPrecisionCooker
from .coordinator import AnovaCoordinator
@dataclass
class AnovaData:
"""Data for the Anova integration."""
api_jwt: str
precision_cookers: list[AnovaPrecisionCooker]
coordinators: list[AnovaCoordinator]

Some files were not shown because too many files have changed in this diff Show More