diff --git a/.textlintrc.json b/.textlintrc.json index 17a7ccfff05..ac8949f7298 100644 --- a/.textlintrc.json +++ b/.textlintrc.json @@ -233,7 +233,7 @@ "SwitchBot", "Synology", "Tado", - "Tahoma", + "TaHoma", "TCP/IP", "TensorFlow", "Tesla", diff --git a/.vscode/cSpell.json b/.vscode/cSpell.json index 5425d0788b8..20a38be803c 100644 --- a/.vscode/cSpell.json +++ b/.vscode/cSpell.json @@ -57,6 +57,7 @@ "nginx", "Nijhof", "Nmap", + "OctoPrint", "ohmconnect", "Onkyo", "OpenZWave", diff --git a/CODEOWNERS b/CODEOWNERS index f80fe2625b7..2608aa2e5f9 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -14,7 +14,6 @@ source/_integrations/acmeda.markdown @atmurray source/_integrations/adax.markdown @danielhiversen source/_integrations/adguard.markdown @frenck source/_integrations/advantage_air.markdown @Bre77 -source/_integrations/aemet.markdown @noltari source/_integrations/agent_dvr.markdown @ispysoftware source/_integrations/airly.markdown @bieniu source/_integrations/airnow.markdown @asymworks @@ -32,16 +31,16 @@ source/_integrations/ambiclimate.markdown @danielhiversen source/_integrations/ambient_station.markdown @bachya source/_integrations/amcrest.markdown @flacjacket source/_integrations/analytics.markdown @home-assistant/core @ludeeus -source/_integrations/androidtv.markdown @JeffLIrion +source/_integrations/androidtv.markdown @JeffLIrion @ollo69 source/_integrations/apache_kafka.markdown @bachya source/_integrations/api.markdown @home-assistant/core source/_integrations/apple_tv.markdown @postlund source/_integrations/apprise.markdown @caronc source/_integrations/aprs.markdown @PhilRW source/_integrations/arcam_fmj.markdown @elupus -source/_integrations/arduino.markdown @fabaff source/_integrations/arest.markdown @fabaff source/_integrations/arris_tg2492lg.markdown @vanbalken +source/_integrations/aseko_pool_live.markdown @milanmeu source/_integrations/asuswrt.markdown @kennedyshead @ollo69 source/_integrations/atag.markdown @MatsNL source/_integrations/aten_pe.markdown @mtdcr @@ -49,6 +48,7 @@ source/_integrations/atome.markdown @baqs source/_integrations/august.markdown @bdraco source/_integrations/aurora.markdown @djtimca source/_integrations/aurora_abb_powerone.markdown @davet2001 +source/_integrations/aussie_broadband.markdown @nickw444 @Bre77 source/_integrations/auth.markdown @home-assistant/core source/_integrations/automation.markdown @home-assistant/core source/_integrations/avea.markdown @pattyland @@ -98,7 +98,7 @@ source/_integrations/coolmaster.markdown @OnFreund source/_integrations/coronavirus.markdown @home-assistant/core source/_integrations/counter.markdown @fabaff source/_integrations/cover.markdown @home-assistant/core -source/_integrations/cpuspeed.markdown @fabaff +source/_integrations/cpuspeed.markdown @fabaff @frenck source/_integrations/crownstone.markdown @Crownstone @RicArch97 source/_integrations/cups.markdown @fabaff source/_integrations/daikin.markdown @fredrike @@ -118,7 +118,8 @@ source/_integrations/dht.markdown @thegardenmonkey source/_integrations/digital_ocean.markdown @fabaff source/_integrations/discogs.markdown @thibmaek source/_integrations/dlna_dmr.markdown @StevenLooman @chishm -source/_integrations/doorbird.markdown @oblogic7 @bdraco +source/_integrations/dnsip.markdown @gjohansson-ST +source/_integrations/doorbird.markdown @oblogic7 @bdraco @flacjacket source/_integrations/dsmr.markdown @Robbie1221 @frenck source/_integrations/dsmr_reader.markdown @depl0y source/_integrations/dunehd.markdown @bieniu @@ -134,6 +135,7 @@ source/_integrations/egardia.markdown @jeroenterheerdt source/_integrations/eight_sleep.markdown @mezz64 @raman325 source/_integrations/elgato.markdown @frenck source/_integrations/elkm1.markdown @gwww @bdraco +source/_integrations/elmax.markdown @albertogeniola source/_integrations/elv.markdown @majuss source/_integrations/emby.markdown @mezz64 source/_integrations/emoncms.markdown @borpin @@ -167,14 +169,14 @@ source/_integrations/flo.markdown @dmulcahey source/_integrations/flock.markdown @fabaff source/_integrations/flume.markdown @ChrisMandich @bdraco source/_integrations/flunearyou.markdown @bachya -source/_integrations/flux_led.markdown @icemanch +source/_integrations/flux_led.markdown @icemanch @bdraco source/_integrations/forecast_solar.markdown @klaasnicolaas @frenck source/_integrations/forked_daapd.markdown @uvjustin source/_integrations/fortios.markdown @kimfrellsen source/_integrations/foscam.markdown @skgsergio source/_integrations/freebox.markdown @hacf-fr @Quentame source/_integrations/freedompro.markdown @stefano055415 -source/_integrations/fritz.markdown @mammuth @AaronDavidSchneider @chemelli74 +source/_integrations/fritz.markdown @mammuth @AaronDavidSchneider @chemelli74 @mib1185 source/_integrations/fritzbox.markdown @mib1185 @flabbamann source/_integrations/fronius.markdown @nielstron @farmio source/_integrations/frontend.markdown @home-assistant/frontend @@ -192,6 +194,7 @@ source/_integrations/gitter.markdown @fabaff source/_integrations/glances.markdown @fabaff @engrbm87 source/_integrations/goalzero.markdown @tkdrob source/_integrations/gogogate2.markdown @vangorra @bdraco +source/_integrations/goodwe.markdown @mletenay @starkillerOG source/_integrations/google_assistant.markdown @home-assistant/cloud source/_integrations/google_cloud.markdown @lufton source/_integrations/gpsd.markdown @fabaff @@ -218,6 +221,7 @@ source/_integrations/homeassistant.markdown @home-assistant/core source/_integrations/homekit.markdown @bdraco source/_integrations/homekit_controller.markdown @Jc2k @bdraco source/_integrations/homematic.markdown @pvizeli @danielperna84 +source/_integrations/homewizard.markdown @DCSBL source/_integrations/honeywell.markdown @rdfurman source/_integrations/http.markdown @home-assistant/core source/_integrations/huawei_lte.markdown @scop @fphammerle @@ -237,12 +241,14 @@ source/_integrations/image.markdown @home-assistant/core source/_integrations/incomfort.markdown @zxdavb source/_integrations/influxdb.markdown @fabaff @mdegat01 source/_integrations/input_boolean.markdown @home-assistant/core +source/_integrations/input_button.markdown @home-assistant/core source/_integrations/input_datetime.markdown @home-assistant/core source/_integrations/input_number.markdown @home-assistant/core source/_integrations/input_select.markdown @home-assistant/core source/_integrations/input_text.markdown @home-assistant/core source/_integrations/insteon.markdown @teharris1 source/_integrations/integration.markdown @dgomes +source/_integrations/intellifire.markdown @jeeftor source/_integrations/intesishome.markdown @jnimmo source/_integrations/ios.markdown @robbiet480 source/_integrations/iotawatt.markdown @gtdiehl @jyavenard @@ -264,12 +270,12 @@ source/_integrations/keyboard_remote.markdown @bendavid @lanrat source/_integrations/kmtronic.markdown @dgomes source/_integrations/knx.markdown @Julius2342 @farmio @marvin-w source/_integrations/kodi.markdown @OnFreund @cgtobi -source/_integrations/konnected.markdown @heythisisnate @kit-klein +source/_integrations/konnected.markdown @heythisisnate source/_integrations/kostal_plenticore.markdown @stegm source/_integrations/kraken.markdown @eifinger source/_integrations/kulersky.markdown @emlove -source/_integrations/lametric.markdown @robbiet480 -source/_integrations/launch_library.markdown @ludeeus +source/_integrations/lametric.markdown @robbiet480 @frenck +source/_integrations/launch_library.markdown @ludeeus @DurgNomis-drol source/_integrations/lcn.markdown @alengwenus source/_integrations/lg_netcast.markdown @Drafteed source/_integrations/life360.markdown @pnbruckner @@ -279,9 +285,9 @@ source/_integrations/litterrobot.markdown @natekspencer source/_integrations/local_ip.markdown @issacg source/_integrations/logger.markdown @home-assistant/core source/_integrations/logi_circle.markdown @evanjd -source/_integrations/lookin.markdown @ANMalko +source/_integrations/lookin.markdown @ANMalko @bdraco source/_integrations/luci.markdown @mzdrale -source/_integrations/luftdaten.markdown @fabaff +source/_integrations/luftdaten.markdown @fabaff @frenck source/_integrations/lupusec.markdown @majuss source/_integrations/lutron.markdown @JonGilmore source/_integrations/lutron_caseta.markdown @swails @bdraco @@ -306,7 +312,7 @@ source/_integrations/mill.markdown @danielhiversen source/_integrations/min_max.markdown @fabaff source/_integrations/minecraft_server.markdown @elmurato source/_integrations/minio.markdown @tkislan -source/_integrations/mobile_app.markdown @robbiet480 +source/_integrations/mobile_app.markdown @home-assistant/core source/_integrations/modbus.markdown @adamchengtkc @janiversen @vzahradnik source/_integrations/modem_callerid.markdown @tkdrob source/_integrations/modern_forms.markdown @wonderslug @@ -338,8 +344,8 @@ source/_integrations/nextcloud.markdown @meichthys source/_integrations/nfandroidtv.markdown @tkdrob source/_integrations/nightscout.markdown @marciogranzotto source/_integrations/nilu.markdown @hfurubotten +source/_integrations/nina.markdown @DeerMaximum source/_integrations/nissan_leaf.markdown @filcole -source/_integrations/nmap_tracker.markdown @bdraco source/_integrations/nmbs.markdown @thibmaek source/_integrations/no_ip.markdown @fabaff source/_integrations/noaa_tides.markdown @jdelaney72 @@ -360,9 +366,11 @@ source/_integrations/ohmconnect.markdown @robbiet480 source/_integrations/ombi.markdown @larssont source/_integrations/omnilogic.markdown @oliver84 @djtimca @gentoosu source/_integrations/onboarding.markdown @home-assistant/core +source/_integrations/oncue.markdown @bdraco source/_integrations/ondilo_ico.markdown @JeromeHXP source/_integrations/onewire.markdown @garbled1 @epenet source/_integrations/onvif.markdown @hunterjm +source/_integrations/open_meteo.markdown @frenck source/_integrations/openerz.markdown @misialq source/_integrations/opengarage.markdown @danielhiversen source/_integrations/openhome.markdown @bazwilliams @@ -372,6 +380,7 @@ source/_integrations/openweathermap.markdown @fabaff @freekode @nzapponi source/_integrations/opnsense.markdown @mtreinish source/_integrations/orangepi_gpio.markdown @pascallj source/_integrations/oru.markdown @bvlaicu +source/_integrations/overkiz.markdown @imicknl @vlebourl @tetienne source/_integrations/ovo_energy.markdown @timmo001 source/_integrations/ozw.markdown @cgarwood @marcelveldt @MartinHjelmare source/_integrations/p1_monitor.markdown @klaasnicolaas @@ -395,14 +404,13 @@ source/_integrations/profiler.markdown @bdraco source/_integrations/progettihwsw.markdown @ardaseremet source/_integrations/prometheus.markdown @knyar source/_integrations/prosegur.markdown @dgomes -source/_integrations/proxmoxve.markdown @k4ds3 @jhollowe @Corbeno +source/_integrations/proxmoxve.markdown @jhollowe @Corbeno source/_integrations/ps4.markdown @ktnrg45 source/_integrations/push.markdown @dgomes -source/_integrations/pvoutput.markdown @fabaff +source/_integrations/pvoutput.markdown @fabaff @frenck source/_integrations/pvpc_hourly_pricing.markdown @azogue source/_integrations/qbittorrent.markdown @geoffreylagaisse source/_integrations/qld_bushfire.markdown @exxamalte -source/_integrations/qnap.markdown @colinodell source/_integrations/quantum_gateway.markdown @cisasteelersfan source/_integrations/qvr_pro.markdown @oblogic7 source/_integrations/qwikswitch.markdown @kellerza @@ -418,7 +426,7 @@ source/_integrations/recollect_waste.markdown @bachya source/_integrations/recorder.markdown @home-assistant/core source/_integrations/rejseplanen.markdown @DarkFox source/_integrations/renault.markdown @epenet -source/_integrations/repetier.markdown @MTrab +source/_integrations/repetier.markdown @MTrab @ShadowBr0ther source/_integrations/rflink.markdown @javicalle source/_integrations/rfxtrx.markdown @danielhiversen @elupus @RobBie1221 source/_integrations/ridwell.markdown @bachya @@ -431,6 +439,7 @@ source/_integrations/roomba.markdown @pschmitt @cyr-ius @shenxn source/_integrations/roon.markdown @pavoni source/_integrations/rpi_gpio_pwm.markdown @soldag source/_integrations/rpi_power.markdown @shenxn @swetoast +source/_integrations/rtsp_to_webrtc.markdown @allenporter source/_integrations/ruckus_unleashed.markdown @gabe565 source/_integrations/safe_mode.markdown @home-assistant/core source/_integrations/saj.markdown @fredericvl @@ -438,12 +447,13 @@ source/_integrations/samsungtv.markdown @escoand @chemelli74 source/_integrations/scene.markdown @home-assistant/core source/_integrations/schluter.markdown @prairieapps source/_integrations/scrape.markdown @fabaff -source/_integrations/screenlogic.markdown @dieselrabbit +source/_integrations/screenlogic.markdown @dieselrabbit @bdraco source/_integrations/script.markdown @home-assistant/core source/_integrations/search.markdown @home-assistant/core source/_integrations/select.markdown @home-assistant/core source/_integrations/sense.markdown @kbickar -source/_integrations/sensibo.markdown @andrey-git +source/_integrations/senseme.markdown @mikelawrence @bdraco +source/_integrations/sensibo.markdown @andrey-git @gjohansson-ST source/_integrations/sentry.markdown @dcramer @frenck source/_integrations/serial.markdown @fabaff source/_integrations/seven_segments.markdown @fabaff @@ -469,13 +479,14 @@ source/_integrations/smarthab.markdown @outadoc source/_integrations/smartthings.markdown @andrewsayre source/_integrations/smarttub.markdown @mdz source/_integrations/smarty.markdown @z0mbieprocess +source/_integrations/smhi.markdown @gjohansson-ST source/_integrations/sms.markdown @ocalvo source/_integrations/smtp.markdown @fabaff source/_integrations/solaredge.markdown @frenck source/_integrations/solaredge_local.markdown @drobtravels @scheric source/_integrations/solarlog.markdown @Ernst79 source/_integrations/solax.markdown @squishykid -source/_integrations/soma.markdown @ratsept +source/_integrations/soma.markdown @ratsept @sebfortier2288 source/_integrations/somfy.markdown @tetienne source/_integrations/sonarr.markdown @ctalkington source/_integrations/songpal.markdown @rytilahti @shenxn @@ -489,7 +500,8 @@ source/_integrations/sql.markdown @dgomes source/_integrations/squeezebox.markdown @rajlaud source/_integrations/srp_energy.markdown @briglx source/_integrations/starline.markdown @anonym-tsk -source/_integrations/statistics.markdown @fabaff +source/_integrations/statistics.markdown @fabaff @ThomDietrich +source/_integrations/steamist.markdown @bdraco source/_integrations/stiebel_eltron.markdown @fucm source/_integrations/stookalert.markdown @fwestenberg @frenck source/_integrations/stream.markdown @hunterjm @uvjustin @allenporter @@ -510,9 +522,8 @@ source/_integrations/synology_dsm.markdown @hacf-fr @Quentame @mib1185 source/_integrations/synology_srm.markdown @aerialls source/_integrations/syslog.markdown @fabaff source/_integrations/system_bridge.markdown @timmo001 -source/_integrations/tado.markdown @michaelarnauts @noltari +source/_integrations/tado.markdown @michaelarnauts source/_integrations/tag.markdown @balloob @dmulcahey -source/_integrations/tahoma.markdown @philklei source/_integrations/tailscale.markdown @frenck source/_integrations/tankerkoenig.markdown @guillempages source/_integrations/tapsaff.markdown @bazwilliams @@ -534,26 +545,26 @@ source/_integrations/totalconnect.markdown @austinmroczek source/_integrations/tplink.markdown @rytilahti @thegardenmonkey source/_integrations/traccar.markdown @ludeeus source/_integrations/tractive.markdown @Danielhiversen @zhulik @bieniu -source/_integrations/trafikverket_train.markdown @endor-force -source/_integrations/trafikverket_weatherstation.markdown @endor-force +source/_integrations/trafikverket_train.markdown @endor-force @gjohansson-ST +source/_integrations/trafikverket_weatherstation.markdown @endor-force @gjohansson-ST source/_integrations/transmission.markdown @engrbm87 @JPHutchins source/_integrations/tts.markdown @pvizeli source/_integrations/tuya.markdown @Tuya @zlinoliver @METISU @frenck source/_integrations/twentemilieu.markdown @frenck -source/_integrations/twinkly.markdown @dr1rrb -source/_integrations/ubus.markdown @noltari +source/_integrations/twinkly.markdown @dr1rrb @Robbie1221 source/_integrations/unifi.markdown @Kane610 source/_integrations/unifiled.markdown @florisvdk +source/_integrations/unifiprotect.markdown @briis @AngellusMortis @bdraco source/_integrations/upb.markdown @gwww source/_integrations/upc_connect.markdown @pvizeli @fabaff source/_integrations/upcloud.markdown @scop source/_integrations/updater.markdown @home-assistant/core source/_integrations/upnp.markdown @StevenLooman @ehendrix23 -source/_integrations/uptimerobot.markdown @ludeeus +source/_integrations/uptimerobot.markdown @ludeeus @chemelli74 source/_integrations/usb.markdown @bdraco source/_integrations/usgs_earthquakes_feed.markdown @exxamalte source/_integrations/utility_meter.markdown @dgomes -source/_integrations/vallox.markdown @andre-richter +source/_integrations/vallox.markdown @andre-richter @slovdahl @viiru- source/_integrations/velbus.markdown @Cereal2nd @brefra source/_integrations/velux.markdown @Julius2342 source/_integrations/venstar.markdown @garbled1 @@ -580,6 +591,7 @@ source/_integrations/webostv.markdown @bendavid @thecode source/_integrations/websocket_api.markdown @home-assistant/core source/_integrations/wemo.markdown @esev source/_integrations/whirlpool.markdown @abmantis +source/_integrations/whois.markdown @frenck source/_integrations/wiffi.markdown @mampfes source/_integrations/wilight.markdown @leofig-rj source/_integrations/wirelesstag.markdown @sergeymaysak @@ -597,7 +609,7 @@ source/_integrations/xmpp.markdown @fabaff @flowolf source/_integrations/yale_smart_alarm.markdown @gjohansson-ST source/_integrations/yamaha_musiccast.markdown @vigonotion @micha91 source/_integrations/yandex_transport.markdown @rishatik92 @devbis -source/_integrations/yeelight.markdown @rytilahti @zewelor @shenxn @starkillerOG +source/_integrations/yeelight.markdown @zewelor @shenxn @starkillerOG source/_integrations/yeelightsunflower.markdown @lindsaymarkward source/_integrations/yi.markdown @bachya source/_integrations/youless.markdown @gjong diff --git a/_config.yml b/_config.yml index dc5db2220bb..a8d9a475956 100644 --- a/_config.yml +++ b/_config.yml @@ -105,10 +105,10 @@ social: account: home_assistant # Home Assistant release details -current_major_version: 2021 -current_minor_version: 12 -current_patch_version: 10 -date_released: 2022-01-17 +current_major_version: 2022 +current_minor_version: 02 +current_patch_version: 0 +date_released: 2022-02-02 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 9c00a0b2756..3ca23e2808d 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -208,6 +208,28 @@ The same thing can also be expressed as a filter: {% endraw %} +{% raw %} + +```text +{% for energy in expand('group.energy_sensors') if is_number(energy.state) %} + {{ energy.state }} + {%- if not loop.last %}, {% endif -%} +{% endfor %} +``` + +{% endraw %} + +The same thing can also be expressed as a test: + +{% raw %} + +```text +{{ expand('group.energy_sensors') + | selectattr("state", 'is_number') | join(', ') }} +``` + +{% endraw %} + ### Devices - `device_entities(device_id)` returns a list of entities that are associated with a given device ID. Can also be used as a filter. @@ -297,6 +319,62 @@ The same thing can also be expressed as a filter: {% endraw %} +### Immediate if (iif) + +A common case is to conditionally return a value based on another value. +For example, return a "Yes" or "No" when the light is on or off. + +This can be written as: + +{% raw %} + +```text +{% if is_state('light.kitchen', 'on') %} + Yes +{% else %} + No +{% endif %} +``` + +{% endraw %} + +Or using a shorter syntax: + +{% raw %} + +```text +{{ 'Yes' if is_state('light.kitchen', 'on') else 'No' }} +``` + +{% endraw %} + +Additionally, to the above, you can use the `iif` function/filter, which is +an immediate if. + +Syntax: `iif(condition, if_true, if_false, if_none)` + +`iif` returns the value of `if_true` if the condition is truthy, the value of `if_false` if it's `falsy` and the value of `if_none` if it's `None`. +An empty string, an empty mapping or an an empty list, are all falsy, refer to [the Python documentation](https://docs.python.org/3/library/stdtypes.html#truth-value-testing) for an in depth explanation. + +`if_true` is optional, if it's omitted `True` is returned if the condition is truthy. +`if_false` is optional, if it's omitted `False` is returned if the condition is falsy. +`if_none` is optional, if it's omitted the value of `if_false` is returned if the condition is `None`. + +Examples using `iif`: + +{% raw %} + +```text +{{ iif(is_state('light.kitchen', 'on'), 'Yes', 'No') }} + +{{ is_state('light.kitchen', 'on') | iif('Yes', 'No') }} + +{{ (state('light.kitchen') == 'on') | iif('Yes', 'No') }} +``` + +{% endraw %} + + ### Time `now()` and `utcnow()` are not supported in [limited templates](#limited-templates). @@ -558,6 +636,9 @@ The numeric functions and filters will not fail if the input is not a valid numb - `atan(value, default)` will return the arcus tangent of the input. If `value` can't be converted to a `float`, returns the `default` value, or if omitted `value`. Can be used as a filter. - `atan2(y, x, default)` will return the four quadrant arcus tangent of y / x. If `y` or `x` can't be converted to a `float`, returns the `default` value, or if omitted `value`. Can be used as a filter. - `sqrt(value, default)` will return the square root of the input. If `value` can't be converted to a `float`, returns the `default` value, or if omitted `value`. Can be used as a filter. +- `max([x, y, ...])` will obtain the largest item in a sequence. Uses the same parameters as the built-in [max](https://jinja.palletsprojects.com/en/latest/templates/#jinja-filters.max) filter. +- `min([x, y, ...])` will obtain the smallest item in a sequence. Uses the same parameters as the built-in [min](https://jinja.palletsprojects.com/en/latest/templates/#jinja-filters.min) filter. +- `average([x, y, ...])` will return the average value of the sequence. Can be used as a filter. - `e` mathematical constant, approximately 2.71828. - `pi` mathematical constant, approximately 3.14159. - `tau` mathematical constant, approximately 6.28318. @@ -565,9 +646,6 @@ The numeric functions and filters will not fail if the input is not a valid numb - `round(precision, "floor", default)` will always round down to `precision` decimals - `round(precision, "ceil", default)` will always round up to `precision` decimals - `round(1, "half", default)` will always round to the nearest .5 value. `precision` should be 1 for this mode -- Filter `[x, y, ...] | max` will obtain the largest item in a sequence. -- Filter `[x, y, ...] | min` will obtain the smallest item in a sequence. -- Filter `[x, y, ...] | average` will return the average value of the sequence. - Filter `value_one|bitwise_and(value_two)` perform a bitwise and(&) operation with two values. - Filter `value_one|bitwise_or(value_two)` perform a bitwise or(\|) operation with two values. - Filter `ord` will return for a string of length one an integer representing the Unicode code point of the character when the argument is a Unicode object, or the value of the byte when the argument is an 8-bit string. @@ -600,6 +678,7 @@ Some examples: ### String filters - Filter `urlencode` will convert an object to a percent-encoded ASCII text string (e.g., for HTTP requests using `application/x-www-form-urlencoded`). +- Filter `slugify(separator="_")` will convert a given string into a "slug". ### Regular expressions @@ -714,6 +793,51 @@ To evaluate a response, go to **{% my developer_template title="Developer Tools {% endraw %} +### Using templates with the MQTT integration + +The [MQTT integration](/integrations/mqtt/) relies heavily on templates. Templates are used to transform incoming payloads (value templates) to status updates or incoming service calls (command templates) to payloads that configure the MQTT device. + +#### Using value templates with MQTT + +For incoming data a value template translates incoming JSON or raw data to a valid payload. +Incoming payloads are rendered with possible JSON values, so when rendering the `value_json` can be used access the attributes in a JSON based payload. + +
+ +Example value template: + +With given payload: + +```json +{ "state": "ON", "temperature": 21.902 } +``` + +Template {% raw %}```{{ value_json.temperature | round(1) }}```{% endraw %} renders to `21.9`. + +Additional the MQTT entity attributes `entity_id` and `name` can be used as variables in the template. + +
+ +#### Using command templates with MQTT + +For service calls command templates are defined to format the outgoing MQTT payload to the device. When a service call is executed `value` can be used to generate the correct payload to the device. + +
+ +Example command template: + +With given value `21.9` template {% raw %}```{"temperature": {{ value }} }```{% endraw %} renders to: + +```json +{ + "temperature": 21.9 +} +``` + +Additional the MQTT entity attributes `entity_id` and `name` can be used as variables in the template. + +
+ ## Some more things to keep in mind ### `entity_id` that begins with a number diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index 7e9efacc8f8..5075306feff 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -424,7 +424,7 @@ condition: {% endraw %} -But also in the `repeat` action's `while` or `until` option, or in a `choose` action's `conditions` option: +It's also supported in the `repeat` action's `while` or `until` option, or in a `choose` action's `conditions` option: {% raw %} @@ -447,15 +447,15 @@ But also in the `repeat` action's `while` or `until` option, or in a `choose` ac {% endraw %} -
+It's also supported in script or automation `condition` actions: -While conditions can be used in script sequences or automation actions, the -shorthand for template conditions cannot be used directly in those constructs. +{% raw %} -However, if an used action supports conditions itself, like `choose` and - `repeat`, the shorthand template conditions will be accepted in those cases. +```yaml +- condition: "{{ is_state('device_tracker.iphone', 'away') }}" +``` -
+{% endraw %} [template]: /topics/templating/ [automation-templating]: /getting-started/automation-templating/ diff --git a/source/_integrations/adax.markdown b/source/_integrations/adax.markdown index 6e8a9ed2b2c..2cd99eb8c52 100644 --- a/source/_integrations/adax.markdown +++ b/source/_integrations/adax.markdown @@ -4,7 +4,7 @@ description: Instructions on how to integrate Adax heater into Home Assistant. ha_category: - Climate ha_release: 2021.8 -ha_iot_class: Cloud Polling +ha_iot_class: Local Polling ha_codeowners: - '@danielhiversen' ha_domain: adax @@ -15,7 +15,11 @@ ha_platforms: Integrates Adax heater into Home Assistant. -You'll need the Account ID (which can be found in the Adax Wifi app, pressing 'Account'). You will also need a credential, which you can create in the Adax app: +You can configure the heaters to use a local or cloud interface. + +The local integrations only works with newer Adax heaters with both Bluetooth and wifi. Home Assistant uses Bluetooth to configure the heaters. For the local integration, you have to reset the heater by pressing + and OK until the display shows 'Reset'. Then press and hold the OK button on the heater until the blue LED starts blinking before pressing Submit. Configuring the heater might take some minutes. Using the local integration will disable cloud communication and the Adax app will not work. + +For the cloud integration, you'll need the Account ID (which can be found in the Adax Wifi app, pressing 'Account'). You will also need a credential, which you can create in the Adax app: 1. Navigate to Account Tab, 2. Select “Remote user client API” diff --git a/source/_integrations/advantage_air.markdown b/source/_integrations/advantage_air.markdown index 10965c54883..32e7072a557 100644 --- a/source/_integrations/advantage_air.markdown +++ b/source/_integrations/advantage_air.markdown @@ -11,6 +11,7 @@ ha_domain: advantage_air ha_quality_scale: platinum ha_platforms: - binary_sensor + - diagnostics - climate - cover - sensor diff --git a/source/_integrations/aemet.markdown b/source/_integrations/aemet.markdown index fe5bce9d3aa..a4382b17073 100644 --- a/source/_integrations/aemet.markdown +++ b/source/_integrations/aemet.markdown @@ -7,8 +7,6 @@ ha_category: - Sensor ha_iot_class: Cloud Polling ha_config_flow: true -ha_codeowners: - - '@noltari' ha_domain: aemet ha_platforms: - sensor diff --git a/source/_integrations/airvisual.markdown b/source/_integrations/airvisual.markdown index d205b439b6d..55ea9f0e3b0 100644 --- a/source/_integrations/airvisual.markdown +++ b/source/_integrations/airvisual.markdown @@ -10,6 +10,7 @@ ha_codeowners: ha_domain: airvisual ha_config_flow: true ha_platforms: + - diagnostics - sensor --- diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown index f8e40c0512c..5b5c540f6d3 100644 --- a/source/_integrations/alarm_control_panel.mqtt.markdown +++ b/source/_integrations/alarm_control_panel.mqtt.markdown @@ -148,6 +148,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/ambient_station.markdown b/source/_integrations/ambient_station.markdown index ea555926294..46919a66408 100644 --- a/source/_integrations/ambient_station.markdown +++ b/source/_integrations/ambient_station.markdown @@ -11,6 +11,7 @@ ha_codeowners: ha_domain: ambient_station ha_platforms: - binary_sensor + - diagnostics - sensor --- diff --git a/source/_integrations/androidtv.markdown b/source/_integrations/androidtv.markdown index f37d3ac9145..d6fb75d75d0 100644 --- a/source/_integrations/androidtv.markdown +++ b/source/_integrations/androidtv.markdown @@ -4,9 +4,11 @@ description: Instructions on how to integrate Android TV and Fire TV devices int ha_category: - Media Player ha_release: 0.7.6 +ha_config_flow: true ha_iot_class: Local Polling ha_codeowners: - '@JeffLIrion' + - '@ollo69' ha_domain: androidtv ha_platforms: - media_player @@ -34,152 +36,45 @@ For Fire TV devices, the instructions are as follows: - From the main (Launcher) screen, select Settings. - Select My Fire TV > About > Network. -## Configuration +{% include integrations/config_flow.md %} -```yaml -# Example configuration.yaml entry -media_player: - # Use the Python ADB implementation - - platform: androidtv - name: Android TV 1 - host: 192.168.0.111 -``` - -{% configuration %} -host: - description: The IP address for your Android TV / Fire TV device. - required: true - type: string -name: - description: The friendly name of the device. - required: false - default: Android TV - type: string -port: - description: The port for your Android TV / Fire TV device. - required: false - default: 5555 - type: integer -adbkey: - description: The path to your `adbkey` file; if not provided, Home Assistant will generate a key for you (if necessary). - required: false - type: string -adb_server_ip: - description: The IP address of the ADB server. If this is provided, the integration will utilize an [ADB server](#2-adb-server) to communicate with the device. - required: false - type: string -adb_server_port: - description: The port for the ADB server. - required: false - default: 5037 - type: integer -get_sources: - description: Whether or not to retrieve the running apps as the list of sources. - required: false - default: true - type: boolean -apps: - description: A dictionary where the keys are app IDs and the values are app names that will be displayed in the UI; see example below. If a name is not provided, the app will never be shown in the sources list. ([These app names](https://github.com/JeffLIrion/python-androidtv/blob/748d6b71cad611c624ef7526d9928431167531a3/androidtv/constants.py#L290-L308) are configured in the backend package and do not need to be included in your configuration.) - required: false - default: {} - type: map -exclude_unnamed_apps: - description: If this is true, then only the apps you specify in the `apps` configuration parameter and [those specified in the backend library](https://github.com/JeffLIrion/python-androidtv/blob/5c39196ade3f88ab453b205fd15b32472d3e0482/androidtv/constants.py#L267-L283) will be shown in the sources list. - required: false - default: false - type: boolean -device_class: - description: "The type of device: `auto` (detect whether it is an Android TV or Fire TV device), `androidtv`, or `firetv`." - required: false - default: auto - type: string -state_detection_rules: - description: A dictionary whose keys are app IDs and whose values are lists of state detection rules; see the section [Custom State Detection](#custom-state-detection) for more info. - required: false - default: {} - type: map -turn_on_command: - description: An ADB shell command that will override the default `turn_on` command. - required: false - type: string -turn_off_command: - description: An ADB shell command that will override the default `turn_off` command. - required: false - type: string -screencap: - description: Determines if album art should be pulled from what is shown onscreen. - required: false - default: true - type: boolean -{% endconfiguration %} - -### Full Configuration - -```yaml -# Example configuration.yaml entry -media_player: - # Use the Python ADB implementation with a user-provided key to setup an - # Android TV device. Provide some app names and don't display other apps - # in the sources menu. Override the default turn on/off commands, and - # provide custom state detection rules. - - platform: androidtv - name: Android TV - device_class: androidtv - host: 192.168.0.222 - adbkey: "/config/android/adbkey" - exclude_unnamed_apps: true - apps: - com.amazon.tv.launcher: "Fire TV" - some.background.app: # this will never show up in the sources list - another.background.app: "" # this will also never show up in the sources list - turn_on_command: "input keyevent 3" - turn_off_command: "input keyevent 223" - state_detection_rules: - 'com.amazon.tv.launcher': - - 'standby' - 'com.netflix.ninja': - - 'media_session_state' - 'com.ellation.vrv': - - 'audio_state' - 'com.plexapp.android': - - 'paused': - 'media_session_state': 3 # this indentation is important! - 'wake_lock_size': 1 # this indentation is important! - - 'playing': - 'media_session_state': 3 # this indentation is important! - - 'standby' - 'com.amazon.avod': - - 'playing': - 'wake_lock_size': 4 # this indentation is important! - - 'playing': - 'wake_lock_size': 3 # this indentation is important! - - 'paused': - 'wake_lock_size': 2 # this indentation is important! - - 'paused': - 'wake_lock_size': 1 # this indentation is important! - - 'standby' - - # Use an ADB server to setup a Fire TV device and don't get the running apps. - - platform: androidtv - name: Fire TV - device_class: firetv - host: 192.168.0.222 - adb_server_ip: 127.0.0.1 - adb_server_port: 5037 - get_sources: false -``` +{% include integrations/option_flow.md %} +{% configuration_basic %} +Configure Applications List: + description: Here you can define applications that are not automatically detected by the backend library, where the keys are app IDs and the values are app names that will be displayed in the UI. If a name is not provided and the option `Exclude apps with unknown name` is enabled, the app will never be shown in the sources list. +Retrieve the running apps as the list of sources: + description: "Whether or not to retrieve the running apps as the list of sources. If this option is checked, the running apps will be retrieved and used as the sources. If not, there will be only one source: the current app." +Exclude apps with unknown name: + description: "Exclude app with unknown name from the source list. If this option is checked, then only apps configured in `Configured Application List` option will be listed among the sources." +Use screen capture for album art: + description: "Determines if album art should be pulled from what is shown on screen." +ADB shell turn off command: + description: "ADB shell command to override default turn off command. Leave empty to use default." +ADB shell turn on command: + description: "ADB shell command to override default turn on command. Leave empty to use default." +Configure State Detection Rules: + description: Here you can configure a list of rules where the rule key is the app IDs and whose values are lists of state detection rules. As example a valid value for a detection rule is `["standby", {"playing":{"media_session_state":4}}, {"paused":{"media_session_state":3, "wake_lock_size":4}}]`. Note that rule values must be always inside square bracket (`[...]`). See the section [Custom State Detection](#custom-state-detection) for more info. +{% endconfiguration_basic %} ## ADB Setup This integration works by sending ADB commands to your Android TV / Fire TV device. There are two ways to accomplish this.
+ When connecting to your device for the first time, a dialog will appear on your Android TV / Fire TV asking you to approve the connection. Check the box that says "always allow connections from this device" and hit OK. +
### 1. Python ADB Implementation -The default approach is to connect to your device using the `adb-shell` Python package. As of Home Assistant 0.101, if a key is needed for authentication and it is not provided by the `adbkey` configuration option, then Home Assistant will generate a key for you. +The default approach is to connect to your device using the `adb-shell` Python package. As of Home Assistant 0.101, if a key is needed for authentication and it is not provided by the `ADB Key` setup option, then Home Assistant will generate a key for you. + +
+ +To be able to provide `ADB Key` on integration setup, you need to enable [advanced mode](/blog/2019/07/17/release-96/#advanced-mode). + +
Prior to Home Assistant 0.101, this approach did not work well for newer devices. Efforts have been made to resolve these issues, but if you experience problems then you should use the ADB server option. @@ -187,6 +82,12 @@ Prior to Home Assistant 0.101, this approach did not work well for newer devices The second option is to use an ADB server to connect to your Android TV and Fire TV devices. +
+ +To configure ADB server on integration setup, you need to enable [advanced mode](/blog/2019/07/17/release-96/#advanced-mode). + +
+ Using this approach, Home Assistant will send the ADB commands to the server, which will then send them to the Android TV / Fire TV device and report back to Home Assistant. To use this option, add the `adb_server_ip` option to your configuration. If you are running the server on the same machine as Home Assistant, you can use `127.0.0.1` for this value. ## ADB Troubleshooting @@ -264,7 +165,7 @@ Available key commands include: - `BACK` - `MENU` -The full list of key commands can be found [here](https://github.com/JeffLIrion/python-androidtv/blob/748d6b71cad611c624ef7526d9928431167531a3/androidtv/constants.py#L189-L233). +The full list of key commands can be found in the backend [androidtv](https://github.com/JeffLIrion/python-androidtv) package. You can also use the command `GET_PROPERTIES` to retrieve the properties used by Home Assistant to update the device's state. These will be stored in the media player's `'adb_response'` attribute and logged at the INFO level. This information can be used to help improve state detection in the backend [androidtv](https://github.com/JeffLIrion/python-androidtv) package, and also to define your own [custom state detection](#custom-state-detection) rules. diff --git a/source/_integrations/apns.markdown b/source/_integrations/apns.markdown index ba847c78c41..37347dd1c22 100644 --- a/source/_integrations/apns.markdown +++ b/source/_integrations/apns.markdown @@ -10,6 +10,13 @@ ha_platforms: - notify --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. +We recommend using our mobile companion applications instead. + +
+ The `apns` platform uses the Apple Push Notification service (APNS) to deliver notifications from Home Assistant. ## Setup diff --git a/source/_integrations/arduino.markdown b/source/_integrations/arduino.markdown deleted file mode 100644 index 64a41bf8688..00000000000 --- a/source/_integrations/arduino.markdown +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: Arduino -description: Instructions on how to setup an Arduino boards within Home Assistant. -ha_category: - - DIY - - Sensor - - Switch -ha_release: pre 0.7 -ha_iot_class: Local Polling -ha_codeowners: - - '@fabaff' -ha_domain: arduino -ha_platforms: - - sensor - - switch ---- - -
- -This integration is deprecated. Please move to the [Firmata integration](/integrations/firmata). - -
- -The [Arduino](https://www.arduino.cc/) device family are microcontroller boards that are often based on the ATmega328 chip. They come with digital input/output pins (some can be used as PWM outputs), analog inputs, and a USB connection. -The equipment depends on the [type](https://www.arduino.cc/en/Main/Products) of the board. The most common ones are the Arduino Uno and the Arduino Leonardo with 14 digital input/output pins and 6 analog input pins. - -There are a lot of extensions (so-called [shields](https://www.arduino.cc/en/Main/ArduinoShields)) available. Those shields can be plugged-in into the existing connectors and stacked on top of each other. This makes it possible to expand the capabilities of the Arduino boards. - -The `arduino` integration is designed to let you use a directly attached board to your Home Assistant host over USB. - -There is currently support for the following device types within Home Assistant: - -- [Sensor](#sensor) -- [Switch](#switch) - -## Configuration - -You need to have the [Firmata firmware](https://github.com/firmata/) on your board. Please upload the `StandardFirmata` sketch to your board; please refer to the [Arduino documentation](https://www.arduino.cc/en/Main/Howto) for further information. - -To integrate an Arduino boards with Home Assistant, add the following section to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -arduino: - port: /dev/ttyACM0 -``` - -{% configuration %} -port: - description: The port where your board is connected to your Home Assistant host. If you are using an original Arduino, the port will be named `ttyACM*` otherwise `ttyUSB*`. - required: true - type: string -{% endconfiguration %} - -The exact number can be determined with the command shown below. - -```bash -ls /dev/ttyACM* -``` - -If that's not working, check your `dmesg` or `journalctl -f` output. Keep in mind that Arduino clones are often using a different name for the port (e.g., `/dev/ttyUSB*`). - -
-A word of caution: The Arduino boards are not storing states. This means that with every initialization the pins are set to off/low. -
- -Add the user who is used to run Home Assistant to the groups to allow access to the serial port. - -```bash -sudo usermod -a -G dialout,lock $USER -``` - -## Sensor - -The `arduino` sensor platform allows you to get numerical values from an analog input pin of an [Arduino](https://www.arduino.cc/) board. Usually the value is between 0 and 1024. - -To enable an Arduino sensor with Home Assistant, add the following section to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - platform: arduino - pins: - 1: - name: Door switch - 0: - name: Brightness -``` - -{% configuration %} -pins: - description: List of pins to use. - required: true - type: map - keys: - pin_number: - description: The pin number that corresponds with the pin numbering schema of your board. - required: true - type: map - keys: - name: - description: Name that will be used in the frontend for the pin. - type: string -{% endconfiguration %} - -The 6 analog pins of an Arduino UNO are numbered from A0 to A5. - -## Switch - -The `arduino` switch platform allows you to control the digital pins of your [Arduino](https://www.arduino.cc/) board. Support for switching pins is limited to high/on and low/off of the digital pins. PWM (pin 3, 5, 6, 9, 10, and 11 on an Arduino Uno) is not supported yet. - -To enable the Arduino pins with Home Assistant, add the following section to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -switch: - platform: arduino - pins: - 11: - name: Fan Office - 12: - name: Light Desk - initial: true - negate: true -``` - -{% configuration %} -pins: - description: List of pins to use. - required: true - type: map - keys: - pin_number: - description: The pin number that corresponds with the pin numbering schema of your board. - required: true - type: map - keys: - name: - description: Name that will be used in the frontend for the pin. - type: string - required: false - initial: - description: The initial value for this port. - type: boolean - required: false - default: false - negate: - description: If this pin should be inverted. - type: boolean - required: false - default: false -{% endconfiguration %} - -The digital pins are numbered from 0 to 13 on a Arduino UNO. The available pins are 2 till 13. For testing purposes you can use pin 13 because with that pin you can control the internal LED. diff --git a/source/_integrations/aseko_pool_live.markdown b/source/_integrations/aseko_pool_live.markdown new file mode 100644 index 00000000000..c806b67281e --- /dev/null +++ b/source/_integrations/aseko_pool_live.markdown @@ -0,0 +1,22 @@ +--- +title: Aseko Pool Live +description: Instructions on how to integrate Aseko ASIN AQUA dosing systems within Home Assistant. +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_release: 2022.2 +ha_category: + - Sensor +ha_codeowners: + - '@milanmeu' +ha_domain: aseko_pool_live +ha_platforms: + - sensor +--- + +The Aseko Pool Live integration allows you to monitor your Aseko ASIN Aqua dosing systems. + +The integration is fully compatible with ASIN AQUA Net and ASIN AQUA Home. + +If you have an ASIN AQUA Oxygen, Home, Salt or Profi dosing system and not all probes are listed in Home Assistant, [open an issue on GitHub](https://github.com/home-assistant/core/issues/new?template=bug_report.yml&title=Add%20support%20for%20ASIN%20AQUA%20[your%20device%20model]) and include the first 8 digits of your serial number so that your device model can be made fully compatible with Home Assistant. + +{% include integrations/config_flow.md %} diff --git a/source/_integrations/aussie_broadband.markdown b/source/_integrations/aussie_broadband.markdown new file mode 100644 index 00000000000..616da313790 --- /dev/null +++ b/source/_integrations/aussie_broadband.markdown @@ -0,0 +1,45 @@ +--- +title: Aussie Broadband +description: Instructions on how to integrate Aussie Broadband within Home Assistant. +ha_category: + - Network + - Sensor +ha_release: 2022.2 +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_codeowners: + - '@nickw444' + - '@Bre77' +ha_domain: aussie_broadband +ha_platforms: + - sensor +--- + +The Aussie Broadband integration displays various service metrics using the [Aussie Broadband API](https://myaussie-api.aussiebroadband.com.au). + +## Prerequisites + +You must have a [My Aussie Broadband](https://my.aussiebroadband.com.au) account, and at least 1 active service. + +{% include integrations/config_flow.md %} + +## Entities + +### Sensor + +The integration will create sensor entities for a variety of metrics that relate to your service: + +#### NBN/Internet Services +- Total Usage +- Downloaded Data +- Uploaded Data +- Billing Cycle Length +- Billing Cycle Remaining + +#### Mobile Phone +- Data Usage +- National Calls +- Mobile Calls +- SMS Sent +- Billing Cycle Length +- Billing Cycle Remaining diff --git a/source/_integrations/axis.markdown b/source/_integrations/axis.markdown index ae894175cc0..e9cc5f8fb4d 100644 --- a/source/_integrations/axis.markdown +++ b/source/_integrations/axis.markdown @@ -20,6 +20,7 @@ ha_dhcp: true ha_platforms: - binary_sensor - camera + - diagnostics - light - switch --- diff --git a/source/_integrations/azure_event_hub.markdown b/source/_integrations/azure_event_hub.markdown index 5d35e1715b2..067467fdd3e 100644 --- a/source/_integrations/azure_event_hub.markdown +++ b/source/_integrations/azure_event_hub.markdown @@ -8,6 +8,7 @@ ha_iot_class: Cloud Push ha_codeowners: - '@eavanvalkenburg' ha_domain: azure_event_hub +ha_config_flow: true --- The `Azure Event Hub` integration allows you to hook into the Home Assistant event bus and send events to [Azure Event Hub](https://azure.microsoft.com/en-us/services/event-hubs/) or to an [Azure IoT Hub](https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-messages-read-builtin). @@ -24,60 +25,59 @@ Once you have the name of your namespace, instance, Shared Access Policy and the The alternative approach is to use a connection string and instance name, this can be retrieved in the same way as the Shared Access Policy and this can also be gotten for a device in an IoT Hub (Event Hub-compatible connection string). In the case of IoT Hub, you need to put the Device ID as the instance name. -The final thing to consider is how often you want the integration to send messages in a batch to your hub, this is set with the `send_interval`, with a default of 5 seconds. The other thing to look at is what the maximum delay you want to use, since this component runs in an asynchronous way there is no guarantee that the sending happens exactly on time, so depending on your semantics you might want messages discarded. The actual check of the time happens with `max_delay` plus `send_interval`, so that even with a long `send_interval` the semantics are the same. +The final thing to consider is how often you want the integration to send messages in a batch to your hub, this is set with the `send_interval`, with a default of 5 seconds. Since this component runs in an asynchronous way there is no guarantee that the sending happens exactly on time, and because your Home Assistant might be very busy with lots of events happening it might discard several events that are older then 20 seconds plus the `send_interval`. -## Configuration +{% include integrations/config_flow.md %} -Add the following lines to your `configuration.yaml` file: +You can setup [filters](#filter-configuration) through the `configuration.yaml`. + +
+Not filtering domains or entities will send every event to Azure Event Hub, thus taking up a lot of space and bandwidth. +
+ +
+Event Hubs have a retention time of at most 7 days, if you do not capture or use the events they are deleted automatically from the Event Hub, the default retention is 1 day. +
+ +### Filter Configuration + +By default, no entity will be excluded. To limit which entities are being exposed to `Azure Event Hub`, you can use the `filter` parameter. ```yaml -# Example configuration.yaml entry +# Example filter to include specified domains and exclude specified entities azure_event_hub: - event_hub_namespace: NAMESPACE_NAME - event_hub_instance_name: EVENT_HUB_INSTANCE_NAME - event_hub_sas_policy: SAS_POLICY_NAME - event_hub_sas_key: SAS_KEY filter: include_domains: - - homeassistant - - light - - media_player + - alarm_control_panel + - light + include_entity_globs: + - binary_sensor.*_occupancy + exclude_entities: + - light.kitchen_light ``` +Filters are applied as follows: + +1. No includes or excludes - pass all entities +2. Includes, no excludes - only include specified entities +3. Excludes, no includes - only exclude specified entities +4. Both includes and excludes: + - Include domain and/or glob patterns specified + - If domain is included, and entity not excluded or match exclude glob pattern, pass + - If entity matches include glob pattern, and entity does not match any exclude criteria (domain, glob pattern or listed), pass + - If domain is not included, glob pattern does not match, and entity not included, fail + - Exclude domain and/or glob patterns specified and include does not list domains or glob patterns + - If domain is excluded and entity not included, fail + - If entity matches exclude glob pattern and entity not included, fail + - If entity does not match any exclude criteria (domain, glob pattern or listed), pass + - Neither include or exclude specifies domains or glob patterns + - If entity is included, pass (as #2 above) + - If entity include and exclude, the entity exclude is ignored + {% configuration %} -event_hub_namespace: - description: The name of your Event Hub namespace. - required: exclusive - type: string -event_hub_instance_name: - description: The name of your Event Hub instance. - required: true - type: string -event_hub_sas_policy: - description: The name of your Shared Access Policy. - required: exclusive - type: string -event_hub_sas_key: - description: The key for the Shared Access Policy. - required: exclusive - type: string -event_hub_connection_string: - description: The connection string to your event hub. - required: exclusive - type: string -send_interval: - description: The interval in seconds should events be sent to the Event Hub. - required: false - type: integer - default: 5 -max_delay: - description: The time in seconds after which a message is to be discarded. - required: false - type: integer - default: 30 filter: - description: Filter domains and entities for Event Hub. ([Configure Filter](#configure-filter)) - required: true + description: Filter domains and entities for Event Hub. + required: false type: map default: Includes all entities from all domains keys: @@ -107,66 +107,6 @@ filter: type: list {% endconfiguration %} -
-Not filtering domains or entities will send every event to Azure Event Hub, thus taking up a lot of space. -
- -
-Event Hubs have a retention time of at most 7 days, if you do not capture or use the events they are deleted automatically from the Event Hub, the default retention is 1 day. -
- -### Configure Filter - -By default, no entity will be excluded. To limit which entities are being exposed to `Azure Event Hub`, you can use the `filter` parameter. - -```yaml -# Example filter to include specified domains and exclude specified entities -azure_event_hub: - event_hub_namespace: NAMESPACE_NAME - event_hub_instance_name: EVENT_HUB_INSTANCE_NAME - event_hub_sas_policy: SAS_POLICY_NAME - event_hub_sas_key: SAS_KEY - filter: - include_domains: - - alarm_control_panel - - light - include_entity_globs: - - binary_sensor.*_occupancy - exclude_entities: - - light.kitchen_light -``` - -Filters are applied as follows: - -1. No includes or excludes - pass all entities -2. Includes, no excludes - only include specified entities -3. Excludes, no includes - only exclude specified entities -4. Both includes and excludes: - - Include domain and/or glob patterns specified - - If domain is included, and entity not excluded or match exclude glob pattern, pass - - If entity matches include glob pattern, and entity does not match any exclude criteria (domain, glob pattern or listed), pass - - If domain is not included, glob pattern does not match, and entity not included, fail - - Exclude domain and/or glob patterns specified and include does not list domains or glob patterns - - If domain is excluded and entity not included, fail - - If entity matches exclude glob pattern and entity not included, fail - - If entity does not match any exclude criteria (domain, glob pattern or listed), pass - - Neither include or exclude specifies domains or glob patterns - - If entity is included, pass (as #2 above) - - If entity include and exclude, the entity exclude is ignored - -### Advanced configuration - -This is what the configuration will look like when using a connection string directly, instead of the four parameters. It also shows how to set the send_interval and max_delay to something other than the default. This means once every minute the integration will connect to your hub and send messages, but the messages have to be less than 65 seconds old at the time of sending for them to be counted (send_interval + max_delay). - -```yaml -# Connection string config with non-defaults for send_interval and max_delay -azure_event_hub: - event_hub_connection_string: CONNECTION_STRING - event_hub_instance_name: EVENT_HUB_INSTANCE_NAME - send_interval: 60 - max_delay: 5 -``` - ## Using the data in Azure There are a number of ways to stream the data that comes into the Event Hub into storages in Azure, the easiest way is to use the built-in Capture function and this allows you to capture the data in Azure Blob Storage or Azure Data Lake store, [details here](https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-capture-overview). diff --git a/source/_integrations/bbb_gpio.markdown b/source/_integrations/bbb_gpio.markdown index ba1bb16140c..1e4eeb328fb 100644 --- a/source/_integrations/bbb_gpio.markdown +++ b/source/_integrations/bbb_gpio.markdown @@ -13,6 +13,14 @@ ha_platforms: - switch --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `bbb_gpio` integration is the base for all [BeagleBone Black](https://beagleboard.org/black) related GPIO platforms in Home Assistant. There is no setup needed for the integration itself. diff --git a/source/_integrations/bh1750.markdown b/source/_integrations/bh1750.markdown index 7060bab6caa..9ab91bef01b 100644 --- a/source/_integrations/bh1750.markdown +++ b/source/_integrations/bh1750.markdown @@ -10,6 +10,14 @@ ha_platforms: - sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `bh1750` sensor platform allows you to read the ambient light level in Lux from a [BH1750FVI sensor](https://www.mouser.com/ds/2/348/bh1750fvi-e-186247.pdf) connected via [I2c](https://en.wikipedia.org/wiki/I²C) bus (SDA, SCL pins). It allows you to use all the resolution modes of the sensor described in its datasheet. Tested devices: diff --git a/source/_integrations/binary_sensor.markdown b/source/_integrations/binary_sensor.markdown index 47fc263c988..fb769c6d3cf 100644 --- a/source/_integrations/binary_sensor.markdown +++ b/source/_integrations/binary_sensor.markdown @@ -46,6 +46,7 @@ The full list of supported binary sensor device classes is below - **None**: Generic on/off. This is the default and doesn't need to be set. - **battery**: `on` means low, `off` means normal - **battery_charging**: `on` means charging, `off` means not charging +- **carbon_monoxide**: `on` means carbon monoxide detected, `off` no carbon monoxide (clear) - **cold**: `on` means cold, `off` means normal - **connectivity**: `on` means connected, `off` means disconnected - **door**: `on` means open, `off` means closed diff --git a/source/_integrations/binary_sensor.mqtt.markdown b/source/_integrations/binary_sensor.mqtt.markdown index cc93b6e9bf7..ef9b3d92de8 100644 --- a/source/_integrations/binary_sensor.mqtt.markdown +++ b/source/_integrations/binary_sensor.mqtt.markdown @@ -118,7 +118,7 @@ enabled_by_default: type: boolean default: true encoding: - description: The encoding of the payload received at `state_topic` and availability topics `availability_topic` and `topic`. Set to `""` to disable decoding. + description: The encoding of the payloads received. Set to `""` to disable decoding of incoming payload. required: false type: string default: "utf-8" diff --git a/source/_integrations/blinkt.markdown b/source/_integrations/blinkt.markdown index af9709d8838..81fa8287106 100644 --- a/source/_integrations/blinkt.markdown +++ b/source/_integrations/blinkt.markdown @@ -10,6 +10,14 @@ ha_platforms: - light --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `blinkt` light platform lets you control the [Blinkt!](https://shop.pimoroni.com/products/blinkt) board, featuring eight super-bright RGB LEDs. ## Configuration diff --git a/source/_integrations/bme280.markdown b/source/_integrations/bme280.markdown index 06c31687839..8cb43deab83 100644 --- a/source/_integrations/bme280.markdown +++ b/source/_integrations/bme280.markdown @@ -10,6 +10,14 @@ ha_platforms: - sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The Bosch BME280 integration allows you to read temperature, humidity and pressure values of a [Bosch BME280 Environmental sensor](https://cdn-shop.adafruit.com/datasheets/BST-BME280_DS001-10.pdf) connected via [I2c](https://en.wikipedia.org/wiki/I²C) bus (SDA, SCL pins) or connected via SPI. It allows you to use all the operation modes of the sensor described in its datasheet. ## Configuration diff --git a/source/_integrations/bme680.markdown b/source/_integrations/bme680.markdown index 476b35a4d08..3c05ba672d4 100644 --- a/source/_integrations/bme680.markdown +++ b/source/_integrations/bme680.markdown @@ -10,6 +10,14 @@ ha_platforms: - sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `bme680` sensor platform allows you to read temperature, humidity, pressure and gas resistance values of a [Bosch BME680 Environmental sensor](https://cdn-shop.adafruit.com/product-files/3660/BME680.pdf) connected via an [I2C](https://en.wikipedia.org/wiki/I²C) bus (SDA, SCL pins). It allows you to use all the operation modes of the sensor described in its datasheet. In addition, it includes a basic air quality calculation that uses gas resistance and humidity measurements to calculate a percentage based air quality measurement. Tested devices: diff --git a/source/_integrations/bmp280.markdown b/source/_integrations/bmp280.markdown index 5ae64297615..6ea6b37d784 100644 --- a/source/_integrations/bmp280.markdown +++ b/source/_integrations/bmp280.markdown @@ -15,6 +15,14 @@ ha_platforms: - sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `bmp280` sensor platform allows you to read temperature and pressure values of a [Bosch BMP280 Environmental sensor](https://www.bosch-sensortec.com/products/environmental-sensors/pressure-sensors/bmp280/) connected via [I2C](https://en.wikipedia.org/wiki/I²C) bus (SDA, SCL pins). This integration has been tested on a Raspberry Pi 4B, but it should work on any device which is supported by [CircuitPython](https://circuitpython.org/). diff --git a/source/_integrations/bmw_connected_drive.markdown b/source/_integrations/bmw_connected_drive.markdown index eeab1531106..9fa17ef2ab1 100644 --- a/source/_integrations/bmw_connected_drive.markdown +++ b/source/_integrations/bmw_connected_drive.markdown @@ -4,6 +4,7 @@ description: Instructions on how to setup your BMW Connected Drive account with ha_category: - Car - Binary Sensor + - Button - Presence Detection - Lock - Sensor @@ -17,6 +18,7 @@ ha_codeowners: ha_domain: bmw_connected_drive ha_platforms: - binary_sensor + - button - device_tracker - lock - notify @@ -37,10 +39,10 @@ This integration provides the following platforms: - Binary Sensors: Doors, windows, condition based services, check control messages, parking lights, door lock state, charging status (electric cars) and connections status (electric cars). - Device tracker: The location of your car. -- Lock: Control the lock of your car. +- [Lock](/integrations/bmw_connected_drive/#lock): Control the lock of your car. - Sensors: Mileage, remaining range, remaining fuel, charging time remaining (electric cars), charging status (electric cars), remaining range electric (electric cars). -- Notifications: Send Points of Interest (POI) to your car. -- Services: Turn on air condition, sound the horn, flash the lights, update the vehicle location and update the state. More details can be found [here](/integrations/bmw_connected_drive/#services). +- [Notifications](/integrations/bmw_connected_drive/#notifications): Send Points of Interest (POI) to your car. +- [Buttons](/integrations/bmw_connected_drive/#buttons): Turn on air condition, sound the horn, flash the lights, update the vehicle location and update the state. ## Configuration @@ -98,11 +100,7 @@ bmw_connected_drive: The `bmw_connected_drive` integration offers a notification service. Using this service you can send Points of Interest (POI) to your vehicle. In your vehicle you can select this POI and the navigation will automatically start using the POI as a destination. The name of the service is `notify.bmw_connected_drive_`. -### Examples - -A few examples on how to use the notification service. - -#### Send a Point of Interest to your vehicle +### Send a Point of Interest to your vehicle ```yaml ... @@ -120,39 +118,37 @@ action: country: Country # Optional ``` -## Services +## Lock -The `bmw_connected_drive` integration offers several services. In case you need to provide the vehicle identification number (VIN) as a parameter, you can see the VIN as attribute of all entities, e.g. (binary) sensors or the device tracker. The VIN is a 17 digit alphanumeric string, e.g., `WBANXXXXXX1234567`. +The vehicle can be locked and unlocked via the lock integration that is created automatically for each vehicle. Before invoking, make sure it's safe to lock/unlock the vehicle in the current situation. -Using these services will impact the state of your vehicle. So use these services with care! +## Buttons -### Locking and unlocking +The `bmw_connected_drive` integration offers several buttons to trigger actions in your car. The buttons are automatically created and can be pressed/executed from the UI or using the `button.press` service. Please see the [button documentation](/integrations/button/) for more information. -The vehicle can be locked and unlocked via the lock integration that is created automatically for each vehicle. Before invoking these services, make sure it's safe to lock/unlock the vehicle in the current situation. +Using these buttons will impact the state of your vehicle. So use these services with care! ### Air condition -The air condition of the vehicle can be activated with the service `bmw_connected_drive.activate_air_conditioning`. +The air condition of the vehicle can be activated with the `button._activate_air_conditioning` button. What exactly is started here depends on the type of vehicle. It might range from just ventilation over auxiliary heating to real air conditioning. If your vehicle is equipped with auxiliary heating, only trigger this service if the vehicle is parked in a location where it is safe to use it (e.g., not in an underground parking or closed garage). -Some newer cars also support stopping an active air conditioning with the service `bmw_connected_drive.deactivate_air_conditioning`. +Some newer cars also support stopping an active air conditioning with the `button._deactivate_air_conditioning` button. This will only work if you have the option to stop the AC in the *MyBMW* app. If your car doesn't support this service, nothing will happen. -The vehicle is identified via the parameter `vin`. - ### Sound the horn -The service `bmw_connected_drive.sound_horn` sounds the horn of the vehicle. This option is not available in some countries (among which the UK). Use this feature responsibly, as it might annoy your neighbors. The vehicle is identified via the parameter `vin`. +The `button._sound_horn` button sounds the horn of the vehicle. This option is not available in some countries (among which the UK). Use this feature responsibly, as it might annoy your neighbors. ### Flash the lights -The service `bmw_connected_drive.light_flash` flashes the lights of the vehicle. The vehicle is identified via the parameter `vin`. +The `button._light_flash` button flashes the lights of the vehicle. ### Vehicle finder -The service `bmw_connected_drive.find_vehicle` requests the vehicle to update the GPS location. This can be used for older vehicles which don't automatically send the updated GPS location. The vehicle is identified via the parameter `vin`. +The `button._find_vehicle` button requests the vehicle to update the GPS location. This can be used for older vehicles which don't automatically send the updated GPS location.
@@ -167,11 +163,9 @@ The service `bmw_connected_drive.find_vehicle` requests the vehicle to update th
-### Update the state +### Update the state / refresh from API -The service `bmw_connected_drive.update_state` fetches the last state of the vehicles of all your accounts from the BMW server. This does *not* trigger an update from the vehicle; it gets the data from the BMW servers. So this service does *not* interact with your vehicles. - -This service does not require any attributes. +The `button._refresh_from_api` button fetches the last state of the vehicles of all your accounts from the BMW server. This does *not* trigger an update from the vehicle; it gets the data from the BMW servers. So this service does *not* interact with your vehicles. ## Disclaimer diff --git a/source/_integrations/bond.markdown b/source/_integrations/bond.markdown index f57d85d4fa1..d43a81ae2ed 100644 --- a/source/_integrations/bond.markdown +++ b/source/_integrations/bond.markdown @@ -2,6 +2,7 @@ title: Bond description: Instructions on setting up Bond Bridge within Home Assistant. ha_category: + - Button - Hub - Cover - Fan @@ -18,6 +19,7 @@ ha_config_flow: true ha_quality_scale: platinum ha_zeroconf: true ha_platforms: + - button - cover - fan - light @@ -58,31 +60,6 @@ upgrade your firmware from Bond app before adding this integration. Firmware version 2.10.8 or newer is required for push updates. The integration will fallback to polling for 2.10.x versions lower than .8 -### Service `bond.start_increasing_brightness` - -Start increasing the light brightness. - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `entity_id` | no | String or list of strings of `entity_id`s. - -### Service `bond.start_decreasing_brightness` - -Start decreasing the light brightness. - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `entity_id` | no | String or list of strings of `entity_id`s. - -### Service `bond.stop` - -Stop any in-progress action and empty the queue. Calling this service will -stop any increase or decrease in brightness that is in progress. - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `entity_id` | no | String or list of strings of `entity_id`s. - ### Service `bond.set_fan_speed_tracked_state` Sets the tracked fan speed for a bond fan. diff --git a/source/_integrations/brother.markdown b/source/_integrations/brother.markdown index db3a927dc9d..8e5598be928 100644 --- a/source/_integrations/brother.markdown +++ b/source/_integrations/brother.markdown @@ -12,6 +12,7 @@ ha_domain: brother ha_quality_scale: platinum ha_zeroconf: true ha_platforms: + - diagnostics - sensor --- diff --git a/source/_integrations/button.mqtt.markdown b/source/_integrations/button.mqtt.markdown index 19c78d42d3c..b9229a44911 100644 --- a/source/_integrations/button.mqtt.markdown +++ b/source/_integrations/button.mqtt.markdown @@ -56,6 +56,10 @@ availability_topic: description: The MQTT topic subscribed to receive availability (online/offline) updates. Must not be used together with `availability`. required: false type: string +command_template: + description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to generate the payload to send to `command_topic`. + required: false + type: template command_topic: description: The MQTT topic to publish commands to trigger the button. required: false @@ -111,6 +115,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the published messages. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown index 3b91b5d74d1..e33f0027eab 100644 --- a/source/_integrations/climate.mqtt.markdown +++ b/source/_integrations/climate.mqtt.markdown @@ -145,6 +145,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/co2signal.markdown b/source/_integrations/co2signal.markdown index 26efc46fb96..0c05344a9c5 100644 --- a/source/_integrations/co2signal.markdown +++ b/source/_integrations/co2signal.markdown @@ -7,6 +7,7 @@ ha_release: 0.87 ha_iot_class: Cloud Polling ha_domain: co2signal ha_platforms: + - diagnostics - sensor ha_config_flow: true --- diff --git a/source/_integrations/coinbase.markdown b/source/_integrations/coinbase.markdown index d9ca6393b24..7faf3bb95f9 100644 --- a/source/_integrations/coinbase.markdown +++ b/source/_integrations/coinbase.markdown @@ -8,6 +8,7 @@ ha_release: 0.61 ha_iot_class: Cloud Polling ha_domain: coinbase ha_platforms: + - diagnostics - sensor ha_codeowners: - '@tombrien' diff --git a/source/_integrations/command_line.markdown b/source/_integrations/command_line.markdown index fb2485ba441..d8a5ebf4a8e 100644 --- a/source/_integrations/command_line.markdown +++ b/source/_integrations/command_line.markdown @@ -72,6 +72,10 @@ command_timeout: required: false type: integer default: 15 +unique_id: + description: An ID that uniquely identifies this binary sensor. Set this to a unique value to allow customization through the UI. + required: false + type: string {% endconfiguration %} ## Execution diff --git a/source/_integrations/cover.command_line.markdown b/source/_integrations/cover.command_line.markdown index c6e2f5c9229..d5210523a2b 100644 --- a/source/_integrations/cover.command_line.markdown +++ b/source/_integrations/cover.command_line.markdown @@ -67,6 +67,10 @@ covers: required: false type: integer default: 15 + unique_id: + description: An ID that uniquely identifies this cover. Set this to a unique value to allow customization through the UI. + required: false + type: string {% endconfiguration %} ## Examples diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown index a3af3c3cb1d..44aea9c2595 100644 --- a/source/_integrations/cover.mqtt.markdown +++ b/source/_integrations/cover.mqtt.markdown @@ -127,6 +127,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/cpuspeed.markdown b/source/_integrations/cpuspeed.markdown index 35a70bd8563..1605cf04f8c 100644 --- a/source/_integrations/cpuspeed.markdown +++ b/source/_integrations/cpuspeed.markdown @@ -8,12 +8,15 @@ ha_release: pre 0.7 ha_iot_class: Local Push ha_codeowners: - '@fabaff' + - '@frenck' ha_domain: cpuspeed +ha_config_flow: true ha_platforms: + - diagnostics - sensor --- -The `cpuspeed` sensor platform to allow you to monitor the current CPU speed. +The CPU Speed integration allows you to monitor the current CPU speed.
@@ -21,20 +24,4 @@ The `cpuspeed` sensor platform to allow you to monitor the current CPU speed.
-## Configuration - -To add this platform to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: cpuspeed -``` - -{% configuration %} -name: - description: Name to use in the frontend. - required: false - type: string - default: CPU speed -{% endconfiguration %} +{% include integrations/config_flow.md %} diff --git a/source/_integrations/daikin.markdown b/source/_integrations/daikin.markdown index d558fcfd9e7..7ccc144ec41 100644 --- a/source/_integrations/daikin.markdown +++ b/source/_integrations/daikin.markdown @@ -99,23 +99,25 @@ The `daikin` sensor platform integrates Daikin air conditioning systems into Hom - Inside temperature - Outside temperature - Inside humidity -- Total instant power consumption +- Estimated power consumption - Hourly energy consumption in cool mode - Hourly energy consumption in heat mode -- Outside compressor frequency +- Outside unit's compressor frequency +- Today's total energy consumption (resets at 00:00)
- Some models only report outside temperature when they are turned on. -- Some models does not have humidity sensor. -- Some models does not report the power/energy consumption. -- Some models does not report the compressor frequency. +- Some models do not have humidity sensor. +- Some models do not report the power/energy consumption. +- Some models do not report the compressor frequency.
-- The 'total' power sensor is updated every time 100 Wh are consumed by all the AC summed together. +- The 'Today's total energy consumption' and 'Estimated power consumption' sensor is updated every time 100 Wh are consumed by all different operating modes summed together. +- The 'Estimated power consumption' sensor is derived from the energy consumption and not provided by the AC directly. - The 'cool/heat' energy sensors are updated hourly with the previous hour energy consumption of a given mode and a given AC. - The 'cool' mode also includes the 'fan' and 'dehumidifier' modes' power consumption. diff --git a/source/_integrations/deconz.markdown b/source/_integrations/deconz.markdown index 705380da8e2..6d71ea9255a 100644 --- a/source/_integrations/deconz.markdown +++ b/source/_integrations/deconz.markdown @@ -24,6 +24,7 @@ ha_ssdp: true ha_platforms: - alarm_control_panel - binary_sensor + - diagnostics - climate - cover - fan diff --git a/source/_integrations/devolo_home_control.markdown b/source/_integrations/devolo_home_control.markdown index 7f6cb103b96..a7873698306 100755 --- a/source/_integrations/devolo_home_control.markdown +++ b/source/_integrations/devolo_home_control.markdown @@ -7,6 +7,7 @@ ha_category: - Cover - Light - Sensor + - Siren - Switch ha_release: '0.110' ha_iot_class: Local Push @@ -22,6 +23,7 @@ ha_platforms: - cover - light - sensor + - siren - switch ha_zeroconf: true --- @@ -91,3 +93,9 @@ The integration provides support for the following features: - Temperature and brightness of devolo Sensors, that support it - Consumptions of devolo and Qubino devices, that support it - Voltage of devolo Metering Plug v2 + +## Siren + +The integration provides support for the following Z-Wave devices: + +- devolo Siren diff --git a/source/_integrations/dht.markdown b/source/_integrations/dht.markdown index aad155414ee..fe91f6c7ad4 100644 --- a/source/_integrations/dht.markdown +++ b/source/_integrations/dht.markdown @@ -13,6 +13,14 @@ ha_codeowners: - '@thegardenmonkey' --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `dht` sensor platform allows you to get the current temperature and humidity from a DHT11, DHT22 or AM2302 device. ## Setup diff --git a/source/_integrations/dnsip.markdown b/source/_integrations/dnsip.markdown index 1fe8b6047e0..32b0ad9c823 100644 --- a/source/_integrations/dnsip.markdown +++ b/source/_integrations/dnsip.markdown @@ -4,72 +4,25 @@ description: Instructions on how to integrate a DNS IP sensor into Home Assistan ha_category: - Network ha_iot_class: Cloud Polling +ha_config_flow: true ha_release: '0.40' ha_domain: dnsip ha_platforms: - sensor +ha_codeowners: + - '@gjohansson-ST' --- -The `dnsip` sensor will expose an IP address, fetched via DNS resolution, as its value. There are two operational modes: +The DNS IP integration will expose an IP address, fetched via DNS resolution, as its value. It provides both IPv4 and IPv6 lookup as separate sensors depending on accessibility to resolvers. -1. When you enable the sensor with minimal configuration, it will query the [OpenDNS](https://www.opendns.com/) nameservers with the hostname `myip.opendns.com`, which will resolve to your external/public IP address. +1. When you enable the integration with the default value, it will query the [OpenDNS](https://www.opendns.com/) nameservers with the hostname `myip.opendns.com`, which will resolve to your external/public IP address. 2. If you specify a `hostname`, a regular DNS lookup will be performed, providing you the IP the hostname resolves to. -You may also override the nameserver that is being used by setting the `resolver` parameter to any nameserver you like. +{% include integrations/config_flow.md %} -## Configuration +{% include integrations/option_flow.md %} -To enable this sensor, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: dnsip -``` - -{% configuration %} -hostname: - description: The hostname for which to perform the DNS query. - required: false - default: "`myip.opendns.com` (special hostname that resolves to your public IP)" - type: string -name: - description: Name of the sensor. - required: false - default: "`myip` or hostname without dots if specified" - type: string -resolver: - description: The DNS server to target the query at. - required: false - default: "`208.67.222.222` (OpenDNS)" - type: string -ipv6: - description: Set this to `true` or `false` if IPv6 should be used. When resolving the public IP, this will be the IP of the machine where Home Assistant is running on. - required: false - default: false - type: boolean -resolver_ipv6: - description: The IPv6 DNS server to target the query at. - required: false - default: "`2620:0:ccc::2` (OpenDNS)" - type: string -scan_interval: - description: Defines number of seconds for polling interval. - required: false - default: "`120`" - type: integer -{% endconfiguration %} - -## Extended example - -```yaml -# Example configuration.yaml entry -sensor: - # Own public IPv4 address - - platform: dnsip - # Resolve IP address of home-assistant.io via Google DNS - - platform: dnsip - hostname: home-assistant.io - name: hass - resolver: 8.8.8.8 -``` +{% configuration_basic %} +Resolver: + description: "You may override the default nameservers that are being used by setting any nameserver you like." +{% endconfiguration_basic %} diff --git a/source/_integrations/doorbird.markdown b/source/_integrations/doorbird.markdown index 66ac0ee3644..68016716c27 100644 --- a/source/_integrations/doorbird.markdown +++ b/source/_integrations/doorbird.markdown @@ -2,20 +2,21 @@ title: DoorBird description: Instructions on how to integrate your DoorBird video doorbell with Home Assistant. ha_category: - - Doorbell + - Button - Camera - - Switch + - Doorbell ha_release: 0.54 ha_iot_class: Local Push ha_config_flow: true ha_codeowners: - '@oblogic7' - '@bdraco' + - '@flacjacket' ha_domain: doorbird ha_zeroconf: true ha_platforms: - camera - - switch + - button --- The `doorbird` implementation allows you to integrate your [DoorBird](https://www.doorbird.com/) device in Home Assistant. @@ -23,7 +24,7 @@ The `doorbird` implementation allows you to integrate your [DoorBird](https://ww There is currently support for the following device types within Home Assistant: - [Camera](#camera) - View live and historical event based images. -- [Switch](#switch) - Enable control of relays and camera night vision. +- [Button](#button) - Enable control of relays and camera night vision. ## Setup @@ -112,6 +113,6 @@ Note: Remember to complete the schedule assignment steps above for each event ty The `doorbird` implementation allows you to view the live video, the last doorbell ring image, and the last motion sensor image from your [DoorBird](https://www.doorbird.com/) device in Home Assistant. -## Switch +## Button -The `doorbird` switch platform allows you to power connected relays and trigger the IR array in your [DoorBird](https://www.doorbird.com/) video doorbell device. +The `doorbird` button platform allows you to power connected relays and trigger the IR array in your [DoorBird](https://www.doorbird.com/) video doorbell device. diff --git a/source/_integrations/dsmr.markdown b/source/_integrations/dsmr.markdown index 410611dd61a..3572534ba1d 100644 --- a/source/_integrations/dsmr.markdown +++ b/source/_integrations/dsmr.markdown @@ -17,7 +17,7 @@ ha_platforms: A sensor platform for Belgian, Dutch, Luxembourg and Swedish Smart Meters which comply to DSMR (Dutch Smart Meter Requirements), also known as 'Slimme meter' or 'P1 poort'. Swedish meters with a 'HAN port' are not supported by this integration. -- Currently support DSMR V2.2, V3, V4, V5, Belgian V5 variant, Luxembourg V5 variant (Smarty) and the Swedish V5 variant through the [dsmr_parser](https://github.com/ndokter/dsmr_parser) module by Nigel Dokter. +- Currently support DSMR V2.2, V3, V4, V5, Belgian V5 variant, Luxembourg V5 variant (Smarty), Swedish V5 variant and the EasyMeter Q3D (Germany) through the [dsmr_parser](https://github.com/ndokter/dsmr_parser) module by Nigel Dokter. - For official information about DSMR refer to: [DSMR Document](https://www.netbeheernederland.nl/dossiers/slimme-meter-15) - For official information about the P1 port refer to: [P1 Companion Standard](https://www.netbeheernederland.nl/_upload/Files/Slimme_meter_15_a727fce1f1.pdf) - For unofficial hardware connection examples refer to: [Domoticx](http://domoticx.com/p1-poort-slimme-meter-hardware/) @@ -33,6 +33,7 @@ A sensor platform for Belgian, Dutch, Luxembourg and Swedish Smart Meters which - For Dutch meters, choose DSMR version `2.2`, `4`, or `5` - For Luxembourg meters, choose DSMR version `5L` - For Swedish meters, choose DSMR version `5S` +- For EasyMeter Q3D, choose DSMR version `Q3D` ### Options @@ -59,6 +60,7 @@ This integration is known to work for: - Sagemcom XS210 ESMR5 - Sagemcom T211 - Ziv E0058 ESMR5 +- EasyMeter Q3D ### Connecting to the meter @@ -80,6 +82,7 @@ $ docker run --device /dev/ttyUSB0:/dev/ttyUSB0 -d --name="home-assistant" -v /h #### Serial to network proxies: - [ser2net](http://ser2net.sourceforge.net) +- [WIZnet WIZ110SR](https://www.wiznet.io/product-item/wiz110sr/) DIY solutions (ESP8266 based): diff --git a/source/_integrations/dsmr_reader.markdown b/source/_integrations/dsmr_reader.markdown index 98fc77d3a6c..1e270df1045 100644 --- a/source/_integrations/dsmr_reader.markdown +++ b/source/_integrations/dsmr_reader.markdown @@ -4,7 +4,7 @@ description: Instructions on how to integrate DSMR Reader. ha_category: - Energy - Sensor -ha_iot_class: Cloud Polling +ha_iot_class: Local Push ha_release: 0.103 ha_codeowners: - '@depl0y' diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown index c13fda908ed..892f2de5e7f 100644 --- a/source/_integrations/ecobee.markdown +++ b/source/_integrations/ecobee.markdown @@ -22,6 +22,8 @@ ha_platforms: - notify - sensor - weather +ha_zeroconf: true +ha_homekit: true --- The `ecobee` integration lets you control and view sensor data from [ecobee](https://ecobee.com) thermostats. diff --git a/source/_integrations/ee_brightbox.markdown b/source/_integrations/ee_brightbox.markdown deleted file mode 100644 index 62bda8d0f8f..00000000000 --- a/source/_integrations/ee_brightbox.markdown +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: EE Bright Box -description: Instructions on how to integrate EE Bright Box router into Home Assistant. -ha_category: - - Presence Detection -ha_release: 0.87 -ha_iot_class: Local Polling -ha_domain: ee_brightbox -ha_platforms: - - device_tracker ---- - -This platform offers presence detection by looking at connected devices to a [EE Bright Box 2](https://ee.co.uk/help/phones-and-device/home-broadband/bright-box-2-wireless-router/bright-box-2-wireless-router) router. - -## Configuration - -To use a EE Bright Box router in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: ee_brightbox - password: router-admin-password -``` - -{% configuration %} -host: - description: The IP address of your router - default: 192.168.1.1 - required: false - type: string -username: - description: Found at the back of the router in 'Router login details' section - default: admin - required: false - type: string -password: - description: Found at the back of the router in 'Router login details' section - required: true - type: string -version: - description: Currently only version 2 of the router is supported - default: 2 - required: false - type: string -{% endconfiguration %} - -See the [device tracker integration page](/integrations/device_tracker/) for instructions on how to configure the people to be tracked. diff --git a/source/_integrations/elgato.markdown b/source/_integrations/elgato.markdown index bc38964c2f7..10d56b2d269 100644 --- a/source/_integrations/elgato.markdown +++ b/source/_integrations/elgato.markdown @@ -13,6 +13,7 @@ ha_domain: elgato ha_zeroconf: true ha_platforms: - button + - diagnostics - light --- diff --git a/source/_integrations/elmax.markdown b/source/_integrations/elmax.markdown new file mode 100644 index 00000000000..0763f0e890d --- /dev/null +++ b/source/_integrations/elmax.markdown @@ -0,0 +1,23 @@ +--- +title: Elmax +description: Instructions on how to integrate Elmax panels within Home Assistant. +ha_category: + - Switch +ha_release: 2022.2 +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_codeowners: + - '@albertogeniola' +ha_domain: elmax +ha_platforms: + - switch +--- + +The Elmax integration enables Home Assistant integration with +[ELMAX](https://www.elmaxsrl.it/) control panels. Elmax panels are +domotic systems focused on intrusion detection and home surveillance. + +The current integration is capable of controlling domotic switches +and actuators connected to the Elmax panels. + +{% include integrations/config_flow.md %} diff --git a/source/_integrations/envirophat.markdown b/source/_integrations/envirophat.markdown index 2adb0c6d05d..05434ea79cf 100644 --- a/source/_integrations/envirophat.markdown +++ b/source/_integrations/envirophat.markdown @@ -10,6 +10,14 @@ ha_platforms: - sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `envirophat` sensor platform allows you to display information collected by an [Enviro pHAT](https://shop.pimoroni.com/products/enviro-phat) add-on board for the Raspberry Pi. The board features a wide range of sensors, such as: - BMP280 temperature/pressure sensor diff --git a/source/_integrations/envisalink.markdown b/source/_integrations/envisalink.markdown index 6cc1430f60c..72c0afde291 100644 --- a/source/_integrations/envisalink.markdown +++ b/source/_integrations/envisalink.markdown @@ -5,6 +5,7 @@ ha_category: - Alarm - Binary Sensor - Sensor + - Switch ha_release: 0.23 ha_iot_class: Local Push ha_domain: envisalink @@ -12,6 +13,7 @@ ha_platforms: - alarm_control_panel - binary_sensor - sensor + - switch --- The `envisalink` integration will allow Home Assistant users who own either a DSC or Honeywell alarm panel to leverage their alarm system and its sensors to provide Home Assistant with rich information about their homes. Connectivity between Home Assistant and the alarm panel is accomplished through a device produced by Eyez On, known as the Envisalink. The Envisalink evl3 and evl4 boards provide a TCP/IP interface to the alarm panel, where it emulates an alarm keypad. This board also exposes a raw TCP/IP based API, upon which this integration is built. Currently, the Envisalink version 4 is the latest model. This integration supports both the evl3 and the evl4. @@ -23,6 +25,7 @@ There is currently support for the following device types within Home Assistant: - Binary Sensor: Reports on zone status (Check the [type/class](/integrations/binary_sensor/#device-class) list for a possible visualization of your zone.) - Sensor: Emulates an alphanumeric keypad attached to the alarm panel - Alarm Control Panel: Reports on partition status, and can be used to arm/disarm the system +- Switch: Bypass individual zones. Bypass switches are only available on DSC alarm panels due to limitations in the Honeywell interface. This is a fully event-based component. Any event sent by the Envisalink device will be immediately reflected within Home Assistant. diff --git a/source/_integrations/esphome.markdown b/source/_integrations/esphome.markdown index ac7ac0b9b26..c223d58cd8c 100644 --- a/source/_integrations/esphome.markdown +++ b/source/_integrations/esphome.markdown @@ -16,6 +16,7 @@ ha_platforms: - binary_sensor - camera - button + - diagnostics - climate - cover - fan diff --git a/source/_integrations/evil_genius_labs.markdown b/source/_integrations/evil_genius_labs.markdown index 00d09059204..a9216f0fc91 100644 --- a/source/_integrations/evil_genius_labs.markdown +++ b/source/_integrations/evil_genius_labs.markdown @@ -10,6 +10,7 @@ ha_codeowners: - '@balloob' ha_domain: evil_genius_labs ha_platforms: + - diagnostics - light --- diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown index f3ddca991f9..3a1ae169fb1 100644 --- a/source/_integrations/fan.mqtt.markdown +++ b/source/_integrations/fan.mqtt.markdown @@ -118,6 +118,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/flunearyou.markdown b/source/_integrations/flunearyou.markdown index a94bbe5fa14..a83df3230cd 100644 --- a/source/_integrations/flunearyou.markdown +++ b/source/_integrations/flunearyou.markdown @@ -10,6 +10,7 @@ ha_codeowners: ha_domain: flunearyou ha_config_flow: true ha_platforms: + - diagnostics - sensor --- diff --git a/source/_integrations/flux_led.markdown b/source/_integrations/flux_led.markdown index 282454df45b..8baaf95af4f 100644 --- a/source/_integrations/flux_led.markdown +++ b/source/_integrations/flux_led.markdown @@ -1,24 +1,34 @@ --- -title: Flux LED/MagicHome -description: Instructions on how to setup Flux led/MagicHome/MagicLight within Home Assistant. +title: Magic Home +description: Instructions on how to setup Magic Home within Home Assistant. ha_category: + - Button - Light + - Number + - Select + - Sensor - Switch ha_iot_class: Local Push ha_release: 0.25 ha_domain: flux_led ha_platforms: + - button - light - number + - sensor + - select - switch ha_codeowners: - '@icemanch' + - '@bdraco' ha_quality_scale: platinum ha_config_flow: true ha_dhcp: true --- -The Magic Home (aka Flux LED) integration supports several brands of smart sockets, LED bulbs, and LED controllers that use the same protocol over WiFi. If you can control your device with the MagicHome app, and it is listed as supported below, this integration can control the device. +The Magic Home integration supports several brands of switches, bulbs, and controllers that use the same protocol. Chances are high that your bulb or controller (eg. WiFi LED CONTROLLER) will work with this integration if you can control the device with the Magic Home app. + +This integration will provide local control over your LED lights/strips and can be configured to auto-scan your network for controllers or for you to manually configure individual lights by their IP address. Example of bulbs: @@ -43,18 +53,83 @@ Examples of addressable controllers: - [Addressable v3](https://www.amazon.com/gp/product/B09BMBSCRF/) Examples of addressable controllers with strip: - - [Addressable v1](https://www.amazon.com/gp/product/B07RLF7C86/) - [Addressable v2](https://www.amazon.com/gp/product/B07B7CQ2ZB/) Examples of sockets: - - [MagicLight Smart Plugs](https://www.magiclightbulbs.com/smart-plugs) or [Amazon](https://www.amazon.com/gp/product/B07XNBVVXV/) +These devices have been sold under at least the following brands: + +- Aislan +- [Allkeys](http://allkeystech.com/) +- Apobob +- [Arilux](https://www.ariluxworldwide.com/) +- Aubric +- BERENNIS +- BHGY +- [Brizled](https://www.brizled.com/) +- Bunpeon +- [Chichin](https://chichinlighting.com/) +- Comoyda +- dalattin +- [DALS RGBW / Armacost Lighting / MyLED](https://www.armacostlighting.com/) +- DARKPROOF +- [Daybetter](https://www.daybetter.com/) +- deerdance +- DIAMOND +- [Diode Dynamics](https://www.diodedynamics.com/) +- [Flux LED](https://www.fluxsmartlighting.com/) +- [FVTLED](https://fvtled.com/) +- [GEV LIG](https://www.gev.de/) +- GEYUEYA Home +- GIDEALED +- [GIDERWEL](https://giderwel.com/) +- GMK +- Goldwin +- Hakkatronics +- [HaoDeng](http://www.zengge.com/appkzd) +- [Heissner](https://www.heissner.de/) +- HDDFL +- [illume RGBW](https://dals.com/illume/) +- [Illumination FX](https://www.illumination-fx.com/) +- INDARUN +- iNextStation +- [Koopower](https://www.koopower.com/) +- [Lallumer](https://www.lapuretes.cn/) +- LEDENET +- [LiteWRX](https://litewrx.com/) +- Lytworx +- Magic Ambient +- [Magic Home](http://www.zengge.com/appkzd) +- [Magic Hue](http://www.magichue.com/) +- [Magic Light](https://www.magiclightbulbs.com/) +- Miheal +- Mowelai +- Nexlux +- OBSESS +- [Offdarks](http://offdarks.net) +- PH LED +- PHOPOLLO +- [Pin Stadium Pinball Lights](https://pinstadium.com/) +- POV Lamp +- [PROTEAM Europe Pool Lights](https://proteam-me.com/) +- [Rimikon](https://www.rimikon.com/) +- SMFX +- [Sumaote](https://fvtled.com/) +- [Superhome](https://superhome.com.cy/) +- [SuperlightingLED](https://www.superlightingled.com/) +- Svipear +- Tommox +- Vanance +- Yetaida +- YHW +- [Zengge](http://www.zengge.com/sy) +- Zombber + {% include integrations/config_flow.md %} -After the devices have been added they can be configured with different effects listed below. These settings can be accessed by navigating to the integration settings in Configuration -> Integrations and selecting the "Flux Led/Magic Home" configuration for the bulb or controller. Devices listed as unsupported below are likely to work, however, they have not been tested by the integration's developers. - +After the devices have been added they can be configured with different effects listed below. These settings can be accessed by navigating to the integration settings in Configuration -> Integrations and selecting the "Magic Home" configuration for the bulb or controller. **Custom Effect**\ A list of RGB colors can be entered to create an effect. The effect speed can be adjusted using the slider underneath. @@ -131,7 +206,7 @@ If a strip controller device will not stay on wifi or goes offline during adjust ### Effects -The Flux LED light offers a number of effects which are not included in other lighting packages. These can be selected from the front-end, or sent in the effect field of the `light.turn_on` command. +The Magic Home light offers a number of effects which are not included in other lighting packages. These can be selected from the front-end, or sent in the effect field of the `light.turn_on` command. | Effect Name | Description | |--------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------| @@ -167,3 +242,60 @@ colors: speed_pct: 80 transition: "jump" ``` + +### Set Zones - Service `flux_led.set_zones` + +The Addressable v3 (0xA3) models allow setting a color effect per zone. The length of each zone is the number of pixels per segment divided by the number of colors. If the device is turned off, setting the zones will not turn it on. A separate call to `light.turn_on` is needed to turn on the device. + +| Service data attribute | Description | +| ---------------------- | ----------- | +| `entity_id` | The entity_id of the LED light to set the effect on. | +| `colors` | List of colors for each zone (RGB). (Max 2048 Colors) | +| `speed_pct` | The speed of the effect in % (0-100. Default 50) | +| `effect` | The effect you would like. Valid options are `static`, `running_water`, `strobe`, `jump`, or `breathing`. (Default `static`) | + +```yaml +#Example Service Call +service: flux_led.set_zones +target: + entity_id: + - light.addressable_v3_8e2f7f + - light.addressable_v3_8ebdeb +data: + colors: + - [255, 0, 0] + - [0, 255, 0] + - [0, 0, 255] + - [255, 255, 255] + speed_pct: 80 +``` + +### Set Music Mode - Service `flux_led.set_music_mode` + +The RGB with MIC (0x08), Addressable v2 (0xA2), and Addressable v3 (0xA3) models have a built-in microphone that have multiple music mode settings. + +| Service data attribute | Description | +| ---------------------- | ----------- | +| `entity_id` | The entity_id of the LED light to set the effect on. | +| `sensitivity` | Microphone sensitivity (0-100) | +| `brightness` | Light brightness (0-100) | +| `light_screen` | Light screen mode for 2 dimensional pixels (Addressable models only) | +| `effect` | Effect (1-16 on Addressable models, 0-3 on RGB with MIC models)| +| `foreground_color` | The foreground RGB color | +| `background_color` | The background RGB color (Addressable models only) | + +```yaml +#Example Service Call +service: flux_led.set_music_mode +target: + entity_id: + - light.addressable_v3_8e2f7f + - light.addressable_v3_8ebdeb +data: + sensitivity: 100 + brightness: 100 + effect: 2 + light_screen: false + background_color: [0, 255, 0] + foreground_color: [255, 0, 0] +``` diff --git a/source/_integrations/fortios.markdown b/source/_integrations/fortios.markdown index 5e1ce233ce6..cc94800cbd3 100644 --- a/source/_integrations/fortios.markdown +++ b/source/_integrations/fortios.markdown @@ -3,26 +3,30 @@ title: FortiOS description: Instructions on how to use Fortinet FortiOS to track devices in Home Assistant. ha_category: - Presence Detection -ha_release: 0.97 ha_iot_class: Local Polling -ha_codeowners: - - '@kimfrellsen' +ha_release: 0.97 ha_domain: fortios ha_platforms: - device_tracker +ha_codeowners: + - '@kimfrellsen' --- -This integration enables Home Assistant to do device tracking of devices with a MAC address connected to a FortiGate from [Fortinet](https://www.fortinet.com). +The FortiOS presence detection enables Home Assistant to track devices with a MAC address connected to a FortiGate from [Fortinet](https://www.fortinet.com). -The integration relies on the [fortiosapi](https://pypi.org/project/fortiosapi/). -The integration has been tested both on FortiGate appliance and FortiGate VM running SW FortiOS v. 6.0.x and 6.2.0. +The integration relies on the [fortiosapi](https://pypi.org/project/fortiosapi/). It has been verified on FortiGate appliances and FortiGate VM running FortiOS v. 6.4.x (up to 6.4.8) and 7.0.x (up to 7.0.4). +The minimum version supported is FortiOS 6.4.3. All devices with a MAC address identified by FortiGate would be tracked, this covers both Ethernet and Wi-Fi devices, including devices detected by LLDP. The integration is based on the Home Assistant `device_tracker` platform. +### Example Configuration: + +This example uses the FortiOS integration as a device tracker, with an API token and does not verify the SSL certificate. + ```yaml -# Example configuration.yaml entry +# Example configuration.yaml device_tracker: - platform: fortios host: YOUR_HOST @@ -31,16 +35,16 @@ device_tracker: {% configuration %} host: - description: Hostname or IP address of the FortiGate. - required: true - type: string + description: Hostname or IP address of the FortiGate. Optionally port name can be added like this "10.10.10.10:443". Remember quotes if port number is added. + required: true + type: string token: - description: "See: [Generate an API token for FortiOS](https://registry.terraform.io/providers/fortinetdev/fortios/latest/docs/guides/fgt_token) for how to create an API token. Remember this integration only needs read access to a FortiGate, so configure the API user to only to have limited and read-only access." - required: true - type: string + description: "See: [Generate an API token for FortiOS](https://docs.fortinet.com/document/forticonverter/6.2.0/online-help/866905/connect-fortigate-device-via-api-token) for how to create an API token. This integration only needs read access to a FortiGate, so configure the API user to only to have limited and read-only access." + required: true + type: string verify_ssl: - description: If the SSL certificate should be verified. In most home cases users do not have a verified certificate. - required: false - type: boolean - default: false + description: If the SSL certificate should be verified. In most home cases users do not have a verified certificate. + required: false + type: boolean + default: false {% endconfiguration %} diff --git a/source/_integrations/fritz.markdown b/source/_integrations/fritz.markdown index 14b0dbac47f..19817a9a5ec 100644 --- a/source/_integrations/fritz.markdown +++ b/source/_integrations/fritz.markdown @@ -12,9 +12,12 @@ ha_codeowners: - '@mammuth' - '@AaronDavidSchneider' - '@chemelli74' + - '@mib1185' ha_iot_class: Local Polling ha_platforms: - binary_sensor + - button + - diagnostics - device_tracker - sensor - switch @@ -27,6 +30,7 @@ There is support for the following platform types within Home Assistant: - **Device tracker** - presence detection by looking at connected devices. - **Binary sensor** - connectivity status. +- **Button** - reboot, reconnect, firmware_update. - **Sensor** - external IP address, uptime and network monitors. - **Switch** - call deflection, port forward, parental control and Wi-Fi networks. @@ -44,29 +48,10 @@ The configuration in the UI asks for a username. Starting from FRITZ!OS 7.24 the Currently supported services are Platform specific: -- `fritz.reconnect` -- `fritz.reboot` - `fritz.cleanup` ### Platform Services -#### Service `fritz.reboot` - -Reboot the router. - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------- | -| `device_id` | no | Only act on a specific router | - -#### Service `fritz.reconnect` - -Disconnect and reconnect the router to the Internet. -If you have a dynamic IP address, most likely it will change. - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------- | -| `device_id` | no | Only act on a specific router | - #### Service `fritz.cleanup` Remove all stale devices from Home Assistant. @@ -112,11 +97,11 @@ The following script can be used to easily add a reconnect button to your UI. If ```yaml fritz_box_reconnect: - alias: "Reconnect FRITZ!Box" + alias: "Reboot FRITZ!Box" sequence: - - service: fritz.reconnect + - service: button.press target: - entity_id: binary_sensor.fritzbox_7530_connection + entity_id: button.fritzbox_7530_reboot ``` @@ -124,14 +109,14 @@ fritz_box_reconnect: ```yaml automation: -- alias: "System - Reconnect FRITZ!Box" +- alias: "Reconnect FRITZ!Box" trigger: - platform: time at: "05:00:00" action: - - service: fritz.reconnect + - service: button.press target: - entity_id: binary_sensor.fritzbox_7530_connection + entity_id: button.fritzbox_7530_reconnect ``` diff --git a/source/_integrations/fritzbox.markdown b/source/_integrations/fritzbox.markdown index 5be5c300b7e..310a1c6e07c 100644 --- a/source/_integrations/fritzbox.markdown +++ b/source/_integrations/fritzbox.markdown @@ -14,6 +14,7 @@ ha_config_flow: true ha_ssdp: true ha_platforms: - binary_sensor + - diagnostics - climate - light - sensor diff --git a/source/_integrations/generic.markdown b/source/_integrations/generic.markdown index 4cb5701a424..34c7714f230 100644 --- a/source/_integrations/generic.markdown +++ b/source/_integrations/generic.markdown @@ -28,11 +28,11 @@ camera: {% configuration %} still_image_url: - description: "The URL your camera serves the image on, e.g., `http://192.168.1.21:2112/`. Can be a [template](/topics/templating/)." - required: true + description: "The URL your camera serves the image on, e.g., `http://192.168.1.21:2112/`. Can be a [template](/topics/templating/). At least one of still_image_url or stream_source must be provided." + required: false type: string stream_source: - description: "The URL your camera serves the live stream on, e.g., `rtsp://192.168.1.21:554/`. Can be a [template](/topics/templating/)." + description: "The URL your camera serves the live stream on, e.g., `rtsp://user:pass@192.168.1.21:554/`. Can be a [template](/topics/templating/). Usernames and passwords must be embedded in the URL. At least one of still_image_url or stream_source must be provided." required: false type: string name: @@ -40,11 +40,11 @@ name: required: false type: string username: - description: The username for accessing your camera. + description: The username for accessing your camera. Note that this username applies only to still_image_url and not to stream_source. required: false type: string password: - description: The password for accessing your camera. + description: The password for accessing your camera. Note that this password applies only to still_image_url and not to stream_source. required: false type: string authentication: @@ -121,6 +121,7 @@ camera: name: Host instance camera feed still_image_url: https://127.0.0.5:8123/api/camera_proxy/camera.live_view ``` + ### Image from HTTP only camera To access a camera which is only available via HTTP, you must turn off SSL verification. @@ -142,7 +143,18 @@ camera: - platform: generic name: Streaming Enabled still_image_url: http://194.218.96.92/jpg/image.jpg - stream_source: rtsp://194.218.96.92:554 + username: user + password: pass + stream_source: rtsp://user:pass@194.218.96.92:554 +``` + +If a camera only has a live stream URL and no snapshot URL, the [stream](/integrations/stream/) component can also generate still images from the live stream URL. + +```yaml +camera: + - platform: generic + name: Streaming + stream_source: rtsp://user:pass@194.218.96.92:554 ``` ### Secured access to the camera diff --git a/source/_integrations/generic_thermostat.markdown b/source/_integrations/generic_thermostat.markdown index ecc7086facf..6f767ba2f98 100644 --- a/source/_integrations/generic_thermostat.markdown +++ b/source/_integrations/generic_thermostat.markdown @@ -81,7 +81,23 @@ initial_hvac_mode: required: false type: string away_temp: - description: "Set the temperature used by `preset_mode: away`. If this is not specified, the preset mode feature will not be available." + description: "Set the temperature used by `preset_mode: away`." + required: false + type: float +comfort_temp: + description: "Set the temperature used by `preset_mode: comfort`." + required: false + type: float +home_temp: + description: "Set the temperature used by `preset_mode: home`." + required: false + type: float +sleep_temp: + description: "Set the temperature used by `preset_mode: sleep`." + required: false + type: float +activity_temp: + description: "Set the temperature used by `preset_mode: activity`." required: false type: float precision: diff --git a/source/_integrations/github.markdown b/source/_integrations/github.markdown index 18f7ac9a102..0babed50e2d 100644 --- a/source/_integrations/github.markdown +++ b/source/_integrations/github.markdown @@ -1,57 +1,40 @@ --- title: GitHub -description: How to integrate the GitHub sensor into Home Assistant. +description: Instructions on how to integrate the GitHub integration into Home Assistant. ha_category: - Sensor +ha_config_flow: true ha_release: 0.88 ha_iot_class: Cloud Polling ha_domain: github ha_platforms: + - diagnostics - sensor ha_codeowners: - '@timmo001' - '@ludeeus' --- -The GitHub sensor allows you to monitor your favorite [GitHub](https://github.com/) repositories. Monitored information includes the amount of stargazers, forks, open issues and pull requests, the latest commit message, and more. +The GitHub integration allows you to monitor your favorite [GitHub][github] repositories. -## Setup +{% include integrations/config_flow.md %} -To set up this sensor you will need a GitHub [personal access token](https://github.com/settings/tokens). You will need to check the `repo` scope for the sensor to function. +When you set up this integration, you will first be guided to allow the integration to use the [GitHub API][github_api] on your behalf. If you do not yet have a [GitHub][github] account you will be prompted to create one during the configuration of the integration. -## Configuration +When you have authorized the integration, you select repositories you want to monitor, the list contains repositories you have [starred][github_starred] on GitHub with your account. -To enable this platform, add the following to your `configuration.yaml` file: +Most of the entities provided by this integration are disabled by default, you can enable these by going to the {% my entities title="entities panel" %}. -```yaml -# Example configuration.yaml entry -sensor: - - platform: github - access_token: !secret github_access_token - repositories: - - path: 'home-assistant/core' -``` +## Remove authorization -{% configuration %} -access_token: - description: Your GitHub Access Token - required: true - type: string -url: - description: If you are using a GitHub Enterprise server, add its URL here. For example, `https://mygithubserver.com` - required: false - type: string -repositories: - description: A list of repository paths and optionally a name - required: true - type: list - keys: - path: - description: Path to the repository. For Home Assistant this will be `home-assistant/core` - required: true - type: string - name: - description: Name of the sensor. Gives the sensor a custom name in Home Assistant. Defaults to the repository name from GitHub if not specified. - required: false - type: string -{% endconfiguration %} +After you have removed the integration from {% my integrations title="Configuration -> Devices & Services" %}, you need to manually revoke OAuth app authorization. + +1. Go to your [Authorized OAuth Apps][github_apps] +2. Find the "Home Assistant GitHub Integration" application +3. Click the 3 dots (`...`) to the right of the name +4. Select "Revoke" + +[github]: https://github.com/ +[github_api]: https://docs.github.com/en/rest +[github_starred]: https://github.com/stars +[github_apps]: https://github.com/settings/applications diff --git a/source/_integrations/goodwe.markdown b/source/_integrations/goodwe.markdown new file mode 100644 index 00000000000..39da7c38fab --- /dev/null +++ b/source/_integrations/goodwe.markdown @@ -0,0 +1,58 @@ +--- +title: GoodWe Inverter +description: Instructions on how to connect your GoodWe Inverter to Home Assistant. +ha_category: + - Sensor + - Energy +ha_iot_class: Local Polling +ha_config_flow: true +ha_release: 2022.2 +ha_codeowners: + - '@mletenay' + - '@starkillerOG' +ha_domain: goodwe +ha_platforms: + - number + - sensor + - select +--- + +The GoodWe integration will poll a [GoodWe](http://www.goodwe.com/) solar inverter over the local network and present its runtime values as sensors in Home Assistant. + +It works with GoodWe ET, EH, BT, BH, ES, EM, DT, MS, D-NS, XS and BP families of inverters. Different inverter families/models expose different sets of sensors, the newer models have usually broader support. + +
+If you can't communicate with the inverter despite your model is listed above, it is possible you have an old ARM firmware version. You should ask manufacturer support to upgrade your ARM firmware (not just inverter firmware) to be able to communicate with the inverter via UDP. + +It may work on other inverter families as well, as long as they listen on UDP port 8899 and respond to one of the supported communication protocols. In general, if you can communicate with the inverter via an official mobile application (PvMaster, SolarGo), it is very likely the integration will work too. +
+ +{% include integrations/config_flow.md %} + +## Energy dashboard + +The plugin provides several values suitable for the energy dashboard. +The best supported are the inverters of ET/EH families, where the sensors `Meter Total Energy (export)`, `Meter Total Energy (import)`, `Total PV Generation`, `Total Battery Charge` and `Total Battery Discharge` are the most suitable for the dashboard measurements and statistics. + +For the other inverter families, if such sensors are not directly available by the inverter, they can be calculated from existing sensors. [Template Sensor](/integrations/template/) can be used to separate buy and sell power values and [Riemann Sum](/integrations/integration/) can be used to convert these instant power (W) values into cumulative energy values (Wh), which then can be used within the energy dashboard. + +## Inverter polling frequency + +The integration will poll the inverter for new values every 10 seconds. If you wish to receive fresh inverter data less (or more) frequently, you can disable the automatic refresh in the integration's system options (Enable polling for updates) and create your own automation with your desired polling frequency. + +```yaml +- alias: "Goodwe inverter data polling" + trigger: + - platform: time_pattern + hours: "*" + minutes: "*" + seconds: "/30" + action: + - service: homeassistant.update_entity + target: + entity_id: sensor.ppv +``` + +
+It has been observed in some rare situations that frequent polling conflicts with updates to the Goodwe SEMS cloud portal and do not receive any updates anymore. Reducing polling frequency to 30 seconds or 1 minute seems to help in such cases. +
diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown index f1b89077976..33586aafb43 100644 --- a/source/_integrations/google_assistant.markdown +++ b/source/_integrations/google_assistant.markdown @@ -107,6 +107,21 @@ If you want to support active reporting of state to Google's server (configurati 3. Click Enable HomeGraph API. 3. Try "OK Google, sync my devices" - the Google Home app should import your exposed Home Assistant devices and prompt you to assign them to rooms. +### Enable Local Fulfillment + +1. Open the project you created in the [Actions on Google console](https://console.actions.google.com/). +2. Click `Develop` on the top of the page, then click `Actions` located in the hamburger menu on the top left. +3. Upload [this Javascript file](/assets/integrations/google_assistant/app.js) for both Node and Chrome by clicking the `Upload Javascript files` button. +4. Add device scan configuration: + 1. Click `+ New scan config` + 2. Select `MDNS` + 3. set mDNS service name to `_home-assistant._tcp.local` +5. `Save` your changes. +6. Either wait for 30 minutes, or restart your connected Google device. +7. Restart Home Assistant Core. + +You can debug the setup by following [these instructions](https://developers.google.com/assistant/smarthome/develop/local#debugging_from_chrome) + ### YAML Configuration Now add your setup to your `configuration.yaml` file, such as: diff --git a/source/_integrations/group.markdown b/source/_integrations/group.markdown index 45f8f97e1ff..70a49289dd6 100644 --- a/source/_integrations/group.markdown +++ b/source/_integrations/group.markdown @@ -93,13 +93,13 @@ The system can calculate group state with entities from the following domains: When entities all have a single on and off state, the group state will be calculated as follows: -| Domain | on | off | -|-------------------|--------|----------| -| device_tracker | home | not_home | -| cover | open | closed | -| lock | locked | unlocked | -| person | home | not_home | -| media_player | ok | problem | +| Domain | on | off | +|-------------------|----------|----------| +| device_tracker | home | not_home | +| cover | open | closed | +| lock | unlocked | locked | +| person | home | not_home | +| media_player | ok | problem | When a group contains entities from domains that have multiple `on` states or only use `on` and `off`, the group state will be `on` or `off`. diff --git a/source/_integrations/guardian.markdown b/source/_integrations/guardian.markdown index 16caa94415d..b03e063816f 100644 --- a/source/_integrations/guardian.markdown +++ b/source/_integrations/guardian.markdown @@ -14,6 +14,7 @@ ha_domain: guardian ha_zeroconf: true ha_platforms: - binary_sensor + - diagnostics - sensor - switch ha_dhcp: true diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index 272c85d51d1..b0a80a081a2 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -338,7 +338,7 @@ To add a single entity in accessory mode: ## Configure Filter -By default, no entity will be excluded. To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. Keep in mind only [supported components](#supported-components) can be added. +By default, all entities except categorized entities (config, diagnostic, and system entities) are included. To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. Keep in mind only [supported components](#supported-components) can be added. ```yaml # Example filter to include specified domains and exclude specified entities @@ -371,6 +371,8 @@ Filters are applied as follows: - If entity is included, pass (as #2 above) - If entity include and exclude, the entity exclude is ignored +Categorized entities are not included (config, diagnostic, and system entities) unless they are explicitly matched by `include_entity_globs` or `include_entities` or selected in the UI in include mode. + ## Docker Network Isolation The `advertise_ip` option can be used to run this integration even inside an ephemeral Docker container with network isolation enabled, e.g., not using the host network. diff --git a/source/_integrations/homekit_controller.markdown b/source/_integrations/homekit_controller.markdown index f8d19a64ce2..0190b3193a9 100644 --- a/source/_integrations/homekit_controller.markdown +++ b/source/_integrations/homekit_controller.markdown @@ -27,6 +27,7 @@ ha_platforms: - binary_sensor - camera - button + - diagnostics - climate - cover - fan diff --git a/source/_integrations/homewizard.markdown b/source/_integrations/homewizard.markdown new file mode 100644 index 00000000000..59606e93107 --- /dev/null +++ b/source/_integrations/homewizard.markdown @@ -0,0 +1,63 @@ +--- +title: HomeWizard Energy +description: Instructions on how to integrate HomeWizard Energy into Home Assistant. +ha_release: 2022.2 +ha_category: + - Energy +ha_iot_class: Local Polling +ha_config_flow: true +ha_domain: homewizard +ha_codeowners: + - '@DCSBL' +ha_platforms: + - diagnostics + - sensor + - switch +ha_zeroconf: true +--- + +Integration for the [HomeWizard Energy](https://www.homewizard.nl/energy) platform. It can collect data locally from the HomeWizard Energy products and create them as sensors in Home Assistant. + +**Supported devices** + +- [Wifi P1 Meter](https://www.homewizard.nl/p1-meter): Depending on the connected DSMR meter: sensors for power import/export, energy consumption (single or three phases) and gas. (Model: `HWE-P1`) +- [Wifi Energy Socket](https://www.homewizard.nl/energy-socket): Sensors for power import/export and energy consumption and switches for controlling the outlet (model: `HWE-SKT`) +- [Wifi kWh Meter](https://www.homewizard.nl/kwh-meter): Sensors for power import/export and energy consumption. (Models: `SDM230-wifi`, `SDM630-wifi`) + +## Enable the API + +You have to enable the local API to allow Home Assistant to communicate with your device. Do this in the HomeWizard Energy app: + + 1. Go to Settings. (Gear icon in the upper-right) + 2. Go to 'Meters'. + 3. Select your device. + 4. Scroll down and turn on 'Local API'. + +{% include integrations/config_flow.md %} + +## Sensors + +The HomeWizard Energy API only exposes properties that are used within the HomeWizard Energy app. The available properties are listed below. + +| Name | Unit | Availability | Description | +| --- | --- | --- | --- | +| Wifi SSID | | HWE-P1, SDM230-wifi, SDM630-wifi, HWE-SKT | The SSID of the connected network. | +| Wifi Strength | % | HWE-P1, SDM230-wifi, SDM630-wifi, HWE-SKT | Percentage of the wifi connection. | +| Total Energy Import_t1 | kWh | HWE-P1, SDM230-wifi, SDM630-wifi, HWE-SKT | Energy import reading. | +| Total Energy Import_t2 | kWh | HWE-P1 | Energy import reading for other tariff. | +| Total Energy Export_t1 | kWh | HWE-P1, SDM230-wifi, SDM630-wifi, HWE-SKT | Energy export reading. | +| Total Energy Export_t2 | kWh | HWE-P1 | Energy export reading for other tariff. | +| Active Power | w | HWE-P1, SDM230-wifi, SDM630-wifi, HWE-SKT | Active power usage. | +| Active Power_l1 | w | HWE-P1, SDM230-wifi, SDM630-wifi, HWE-SKT | Active power usage Line 1, for `SDM230-wifi` and`HWE-SKT` this value is the same as `Active Power`. | +| Active Power_l2 | w | HWE-P1, SDM630-wifi | Active power usage Line 2. | +| Active Power_l3 | w | HWE-P1, SDM630-wifi | Active power usage Line 3. | +| Total Gas | m3 | HWE-P1 | Current gas import reading, only available when your smart meter is connected to a gas meter. | +| DSMR Version | | HWE-P1 | The detected DSMR version. | +| Smart Meter Model | | HWE-P1 | The detected smart meter model. | + +## Switches + +The Wifi Energy Socket (`HWE-SKT`) outlet state can be controlled the switch platform. There are two switches: + +- **Switch**: Controls the outlet state of the Energy Socket. This switch is locked out when `Switch Lock` is turned on. +- **Switch Lock**: Forces the outlet state in the `on` position and disables the physical button. This option is useful when the socket is used for a device that must not be turned off, such as a refrigerator. diff --git a/source/_integrations/htu21d.markdown b/source/_integrations/htu21d.markdown index a687bb0e487..187f837bb5b 100644 --- a/source/_integrations/htu21d.markdown +++ b/source/_integrations/htu21d.markdown @@ -10,6 +10,14 @@ ha_platforms: - sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `htu21d` sensor platform allows you to read the temperature and humidity from a [HTU21D sensor](https://cdn-shop.adafruit.com/datasheets/1899_HTU21D.pdf) connected via [I2c](https://en.wikipedia.org/wiki/I²C) bus (SDA, SCL pins). Tested devices: diff --git a/source/_integrations/hue.markdown b/source/_integrations/hue.markdown index 95c56b490d5..bc62d95aac9 100644 --- a/source/_integrations/hue.markdown +++ b/source/_integrations/hue.markdown @@ -36,20 +36,41 @@ There is currently support for the following device types within Home Assistant: ## Lights for Hue zones and rooms -The Hue concept is based on Rooms and zones. Although the underlying Hue lights are exposed directly to Home Assistant it might also be useful to interact with the `grouped lights` of the Hue ecosystem, for example to turn all lights in a Hue group on/off at the same time. +The Hue concept is based on Rooms and Zones. Although the underlying Hue lights are exposed directly to Home Assistant it might also be useful to interact with the `grouped lights` of the Hue ecosystem, for example to turn all lights in a Hue group on/off at the same time. Home Assistant creates lights for each Hue zone/room automatically but disables them by default. If you'd like to use those `grouped lights`, you can enable them from Configuration --> Integrations --> Hue --> entities. ## Scenes -In the Hue concept you can create (dynamic) scenes for the lights within rooms and zones. These Hue scenes are automatically imported in Home Assistant and available as scene entities. Creating or editing Hue scenes in Home Assistant is not supported. +In the Hue concept you can create (dynamic) scenes for the lights within rooms and zones. You can create, edit and delete Hue scenes from the (official) Hue app on iOS and Android. Each Zone/Room can have it's own scenes assigned and there is a large library of precreated scenes for specific moods. These Hue scenes are automatically imported in Home Assistant and they're available as `scene entities`. Creating or editing Hue scenes in Home Assistant is not supported. +It is advised to use Hue scenes for controlling multiple lights at once for a smooth experience. If you individually control multiple lights and/or use Home Assistant scenes, each light command will be sent to each light one by one which doesn't give a very good user experience, while using a Hue scene sends commands to all lights at once in an optimized way, resulting in a smooth experience. + +### Service `hue.activate_scene` + +To have more control over Hue scenes we've implemented a secondary, more advanced service to activate a Hue scene and set some properties at the same time, such as the Dynamic mode and/or brightness. + +| Service Data Attribute | Required | Description | +| ---------------------- | -------- | --------------------------------------------------------------------------------------------- | +| `entity_id` | yes | Entity ID of the Hue Scene entity you want to activate. | +| `transition` | no | Transition duration (in seconds) it takes to bring devices to the state defined in the scene. | +| `dynamic` | no | Enable (true) or Disable (false) dynamic mode for the scene. | +| `speed` | no | Set the speed (of the dynamic palette) for this scene. | +| `brightness` | no | Set the brightnes for this scene. | + +You can use this service for example if you'd like to start/stop Dynamic Mode. ## Hue remotes and switches Hue remotes such as the Dimmer Switch are stateless devices, meaning that they do not have a on/off state like regular entities in Home Assistant. Instead, such devices emit the event `hue_event` when a button is pressed. You can test what events come in using the event {% my developer_events title="developer tools in Home Assistant" %} and subscribe to the `hue_event`. Once you know what the event data looks like, you can use this to create automations. +
+ +At the time of writing, there's a limitation on the Hue API that each device can only send one event per second. This means that button events are rate-limited to 1 per second. This is brought to the attention of Signify and it will hopefully be fixed soon. + +
+ ## Support for legacy (V1) Hue bridges Philips/Signify released a new version of their Hue bridge (square shape) and their legacy/V1 bridge (round shape) is now end of life and no longer supported by them. Home Assistant will continue to support the V1 Hue bridge as long as it is technically possible, although with a few limitations: diff --git a/source/_integrations/humidifier.mqtt.markdown b/source/_integrations/humidifier.mqtt.markdown index ea6b7a86be8..59d780546cb 100644 --- a/source/_integrations/humidifier.mqtt.markdown +++ b/source/_integrations/humidifier.mqtt.markdown @@ -124,6 +124,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/ihc.markdown b/source/_integrations/ihc.markdown index 86b1592059b..2dac180b286 100644 --- a/source/_integrations/ihc.markdown +++ b/source/_integrations/ihc.markdown @@ -218,8 +218,11 @@ When auto setup is enabled the following products will be found in the IHC proje - Wireless lamp outlet dimmer - Wireless dimmer - Wireless combi dimmer 4 buttons +- Wireless combi dimmer 4 buttons touch +- Wireless combi dimmer 2 buttons touch - Wireless lamp outlet relay - Wireless combi relay 4 buttons +- Wireless combi relay 2 buttons - Wireless mobile dimmer - Dataline lamp outlet diff --git a/source/_integrations/input_button.markdown b/source/_integrations/input_button.markdown new file mode 100644 index 00000000000..1a747b6da56 --- /dev/null +++ b/source/_integrations/input_button.markdown @@ -0,0 +1,88 @@ +--- +title: Input Button +description: Instructions on how to use the Input Button helper with Home Assistant. +ha_category: + - Automation +ha_release: 2022.2 +ha_quality_scale: internal +ha_codeowners: + - '@home-assistant/core' +ha_domain: input_button +--- + +The Input Button helper integration allows you to define buttons that +can be pressed via the user interface, and can be used to trigger things, +like an automation. + +## Configuration + +The preferred way to configure button helpers is via the user interface. +To add one, go to **{% my helpers title="Configuration -> Helpers" %}** +and click the add button; next choose the "**Button**" option. + +To be able to add **Helpers** via the user interface you should have +`default_config:` in your `configuration.yaml`, it should already be there by +default unless you removed it. If you removed `default_config:` from your +configuration, you must add `input_button:` to your `configuration.yaml` first, +then you can use the UI. + +Input buttons can also be configured via `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +input_button: + ring_bell: + name: Ring bell + icon: mdi:bell +``` + +{% configuration %} +input_button: + description: Alias for the input. Multiple entries are allowed. + required: true + type: map + keys: + name: + description: Friendly name of the input. + required: false + type: string + icon: + description: Icon to display in front of the input element in the frontend. + required: false + type: icon +{% endconfiguration %} + +## Automation Examples + +The `input_button` entity is stateless, as in, it cannot have a state like the +`on` or `off` state that, for example, a normal switch entity has. + +Every input button entity does keep track of the timestamp of when the last time +the input button entity has been pressed in the Home Assistant UI or pressed via +a service call. + +Because the state of a input button entity in Home Assistant is a timestamp, it +means we can use it in our automations. For example: + +```yaml +trigger: + - platform: state + entity_id: button.my_button +action: + - service: notify.frenck + data: + message: "My button has been pressed!" +``` + +## Services + +The input button entities exposes a single service: +{% my developer_call_service service="input_button.press" %} + +This service can be called to trigger a button press for that entity. + +```yaml +- service: input_button.press + target: + entity_id: input_button.my_button +``` diff --git a/source/_integrations/intellifire.markdown b/source/_integrations/intellifire.markdown new file mode 100644 index 00000000000..e47afd2f78a --- /dev/null +++ b/source/_integrations/intellifire.markdown @@ -0,0 +1,40 @@ +--- +title: IntelliFire +description: Instructions on the IntelliFire Fireplace integration for Home Assistant. +ha_category: + - Binary Sensor +ha_iot_class: Local Polling +ha_release: 2022.2 +ha_codeowners: + - '@jeeftor' +ha_domain: intellifire +ha_config_flow: true +ha_platforms: + - binary_sensor + - sensor +--- + +IntelliFire Wi-Fi fireplace modules provide app-based and Alexa control to various fireplaces. The modules do expose an unencrypted HTTP endpoint on the network that provides status information. This integration will read that URL and create a set of sensors displaying the current fireplace state. + +{% include integrations/config_flow.md %} + + +### Sensor Types + + +The following sensors are available as either a **Binary Sensor** when dealing with on/off. + +### Binary Sensors + +- **Power Sensor**: Whether the fire is on. +- **Pilot Light Sensor**: Whether the pilot light is turned on. +- **Timer Sensor**: Whether the sleep timer is turned on. +- **Thermostat Sensor**: Whether the thermostat is turned on. + +### Sensors + +- **Flame Height**: Numerical indicator of flame height, where `0` is the lowest setting. +- **Temperature**: Current ambient temperature as read by the fireplace remote. +- **Target Temperature**: If the thermostat is engaged this is the target temperature the fireplace will try to reach, as measured by the remote. +- **Fan Speed**: Numerical indicator of fan speed. +- **Timer End Time**: If the sleep timer is enabled, this is time it will finish. diff --git a/source/_integrations/iqvia.markdown b/source/_integrations/iqvia.markdown index e7771363f15..a86426737ad 100644 --- a/source/_integrations/iqvia.markdown +++ b/source/_integrations/iqvia.markdown @@ -10,6 +10,7 @@ ha_codeowners: - '@bachya' ha_domain: iqvia ha_platforms: + - diagnostics - sensor --- diff --git a/source/_integrations/izone.markdown b/source/_integrations/izone.markdown index 3e7c998cd4e..e9b504e83b3 100644 --- a/source/_integrations/izone.markdown +++ b/source/_integrations/izone.markdown @@ -4,7 +4,7 @@ description: Instructions on how to integrate iZone climate control devices with ha_category: - Climate ha_release: '0.100' -ha_iot_class: Local Push +ha_iot_class: Local Polling ha_config_flow: true ha_codeowners: - '@Swamp-Ig' diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown index 9fe80eb8f5d..db01d874bd6 100644 --- a/source/_integrations/knx.markdown +++ b/source/_integrations/knx.markdown @@ -27,6 +27,7 @@ ha_quality_scale: silver ha_platforms: - binary_sensor - button + - diagnostics - climate - cover - fan @@ -178,6 +179,10 @@ payload: type: description: If set, the payload will not be sent as raw bytes, but encoded as given DPT. KNX sensor types are valid values - see table in [KNX Sensor](#sensor). type: [string, integer, float] +response: + description: If set to `true`, the telegram will be sent as a `GroupValueResponse` instead of a `GroupValueWrite`. + type: boolean + default: false {% endconfiguration %} ### Read diff --git a/source/_integrations/konnected.markdown b/source/_integrations/konnected.markdown index 8f8dc4df672..7525d481223 100644 --- a/source/_integrations/konnected.markdown +++ b/source/_integrations/konnected.markdown @@ -6,11 +6,10 @@ ha_category: - Binary Sensor - Switch - Sensor -ha_iot_class: Local Polling +ha_iot_class: Local Push ha_release: '0.70' ha_codeowners: - '@heythisisnate' - - '@kit-klein' ha_config_flow: true ha_domain: konnected ha_ssdp: true diff --git a/source/_integrations/lametric.markdown b/source/_integrations/lametric.markdown index 04a322e8f3b..1f0419cb3f6 100644 --- a/source/_integrations/lametric.markdown +++ b/source/_integrations/lametric.markdown @@ -8,6 +8,7 @@ ha_iot_class: Cloud Push ha_release: 0.49 ha_codeowners: - '@robbiet480' + - '@frenck' ha_domain: lametric ha_platforms: - notify diff --git a/source/_integrations/launch_library.markdown b/source/_integrations/launch_library.markdown index 0b8e8346f3a..c1324e9bc5c 100644 --- a/source/_integrations/launch_library.markdown +++ b/source/_integrations/launch_library.markdown @@ -7,29 +7,17 @@ ha_iot_class: Cloud Polling ha_release: 0.83 ha_codeowners: - '@ludeeus' + - '@DurgNomis-drol' ha_domain: launch_library ha_platforms: + - diagnostics - sensor +ha_config_flow: true --- -The `launch_library` sensor will provide you with information about the next planned space launch. +The `launch_library` sensor will provide you with information about the next planned space launch and SpaceX Starship event. -## Configuration - -Add the data to your `configuration.yaml` file as shown in the example: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: launch_library -``` - -{% configuration %} -name: - description: Name of the sensor. - required: false - type: string -{% endconfiguration %} +{% include integrations/config_flow.md %} The data this platform presents comes from [launchlibrary.net][launchlibrary]. diff --git a/source/_integrations/lcn.markdown b/source/_integrations/lcn.markdown index 90bc71607dc..2d60157e210 100644 --- a/source/_integrations/lcn.markdown +++ b/source/_integrations/lcn.markdown @@ -42,8 +42,8 @@ There is currently support for the following device types within Home Assistant:
- Please note: Besides the implemented platforms, the `lcn` integration offers a variety of [service calls](#services). - These service calls cover functionalities of the LCN system, which cannot be represented by the platform implementations. + The implemented platforms do not cover the whole functionality of the LCN system. + Therefore the `lcn` integration offers a variety of [events](#events), [device triggers](#device-triggers) and [service calls](#services). They are ideal to be used in automation scripts or for the `template` platforms.
@@ -483,8 +483,10 @@ The `lcn` sensor platform allows the monitoring of the following [LCN](https://w The sensor can be used in automation scripts or in conjunction with `template` platforms.
+ Ensure that the LCN module is configured properly to provide the requested value. Otherwise, the module might show unexpected behavior or return error messages. +
### Switch @@ -494,12 +496,207 @@ The `lcn` switch platform allows the control of the following [LCN](https://www. - Output ports - Relays +## Additional Features + +### Transponder and fingerprint sensor + +To use LCN transponders or fingerprint sensors ensure that the corresponding module's I-port property +is enabled in the LCN-PRO software and properly configured. +LCN transponders and fingerprints are identified by a six value hexadecimal code (e.g. *123abc*). +If a code is received a corresponding event ([transponder event](#event-lcn_transponder), [fingerprint event](#event-lcn_fingerprint)) +is fired and can be used to trigger an automation. +Alternatively, you can use the corresponding [device triggers](#device-triggers). + +Example: + +This example shows how the `event_data` can be extracted and used in a condition using Home Assistant's templating engine. +Trigger on a transponder event and ensure that the received code is in the given list: + +{% raw %} + +```yaml +automation: + trigger: + - platform: event + event_type: lcn_transponder + condition: "{{ trigger.event.data.code in ['aabbcc', 'ddeeff', '112233'] }}" + action: + ... +``` + +{% endraw %} + +Further examples can be found in the [event section](#events). + +### Remote control + +To use LCN remote controls (e.g., LCN-RT or LCN-RT16) ensure that the corresponding module's I-port property +is enabled in the LCN-PRO software and its behavior is properly configured as "IR access control". +With this configuration each remote control is identified by a six value hexadecimal code (e.g. *123abc*). +If a command from a remote control is received a corresponding event ([transponder event](#event-lcn_transponder)) +is fired and can be used to trigger an automation. Along with the transmitted code, the pressed key and the key action +are transmitted. +Alternatively, you can use the corresponding [device triggers](#device-triggers). + +Examples can be found in the [event section](#events). + +### LCN commands addressed to PCHK host (Home Assistant) + +A LCN module can not only be programmed to send commands to other modules/groups but also to the PCHK host configured +in the LCN integration. These commands are directly passed to Home Assistant and can be evaluated. Only the *send keys* +(former) command is supported. + +Within LCN-PRO program the *send keys* command (only "A-C former command" is supported) to a key. For the target address +manually enter the PCHK host id (default: 4). Select the keys and key actions as desired. + +When a *send keys* command is received, the LCN integration will fire a [send keys event](#event-lcn_send_keys) for each +key configured. These events can be used to trigger an automation. +Alternatively, you can use the corresponding [device triggers](#device-triggers). + +Examples can be found in the [event section](#events). + +
+ + Only commands sent from physical buttons of a module are evaluated. The "Test command" button in the LCN-PRO software + is not evaluated and therefore cannot be used for testing purposes. + +
+ +## Events + +There are several functionalities of the LCN system which are not exposed as regular entities by the integration, but as events. +Examples are button presses from remote controls (transmitters), transponder findings, fingerprint sensors and so called *send keys* events. + +
+ + If you find it difficult to deal with events in scripted automations, you can also use [device triggers](#device-triggers) + which offer automation design via the UI. + +
+ +All events have some common attributes in their `event_data` which identify the sending LCN hardware module (e.g., the module the transponder is connected to): + +| Event payload | Description | Values | +| ------------- | ----------- | ------ | +| `device_id` | Internal device id of LCN module | string | +| `segment_id` | Module's segment id | 5..128 | +| `module_id` | Module id | 5..254 | + +In addition, every event has its own special attributes which are described below. +All special attributes are optional and can be used as supplementary filters. + +### Event: `lcn_transmitter` + +The `lcn_transmitter` event is fired if a LCN remote control command is received. + +| Special payload | Description | Values | +| --------------- | ----------- | ------ | +| `code` | Transmitter code | string (6 hex values) | +| `level` | Key level | 0..4 | +| `key` | Key | 0..4 | +| `action` | Key action | `hit`, `make`, `break` | + +Example: + +The trigger will fire if any key on the remote control with code *123abc* is `hit` as long as the +receiver hardware is connected to module 7 in segment 0. + +```yaml +automation: + trigger: + - platform: event + event_type: lcn_transmitter + event_data: + segment_id: 0 + module_id: 7 + code: 123abc + action: hit +``` + +### Event: `lcn_transponder` + +The `lcn_transponder` event is fired if a LCN transponder command is received. + +| Special payload | Description | Values | +| --------------- | ----------- | ------ | +| `code` | Transponder code | string (6 hex values) | + +Example: + +The trigger will fire if the transponder with code *123abc* was detected at +any hardware module. + +```yaml +automation: + trigger: + - platform: event + event_type: lcn_transponder + event_data: + code: 123abc +``` + +### Event: `lcn_fingerprint` + +The `lcn_fingerprint` event is fired if a LCN fingerprint command is received. + +| Special payload | Description | Values | +| --------------- | ----------- | ------ | +| `code` | Fingerprint code | string (6 hex values) | + +Example: + +The trigger will fire if the fingerprint with code *123abc* was detected at +any hardware module. + +```yaml +automation: + trigger: + - platform: event + event_type: lcn_fingerprint + event_data: + code: 123abc +``` + +### Event: `lcn_send_keys` + +The `lcn_send_keys` event is fired if the PCHK host receives a *send keys* command. + +| Special payload | Description | Values | +| --------------- | ----------- | ------ | +| `key` | LCN Key | a1..c8 | +| `action` | Key action | `hit`, `make`, `break` | + +Example: + +The trigger will fire if the PCHK host receives a command that issues a `hit` of +key `a1`. + +```yaml +automation: + trigger: + - platform: event + event_type: lcn_send_keys + event_data: + key: a1 + action: hit +``` + +## Device triggers + +To simplify using events in automations the LCN integration exposes them as device triggers. +Those device triggers can be selected from the automation editor within Home Assistant. + +After creating a new automation select *Device* as trigger type and search for the module which is +supposed to cause the event in the device list. You may select the trigger type and configure its +attributes. If an attribute is optional it is considered as a supplementary filter for the trigger. +For an explanation of the attributes refer to the corresponding [events](#events). + ## Services In order to directly interact with the LCN system, and invoke commands which are not covered by the implemented platforms, the following service calls can be used. Refer to the [Services Calls](/docs/scripts/service-calls) page for examples on how to use them. -### Service `output_abs` +### Service: `output_abs` Set absolute brightness of output port in percent. @@ -521,7 +718,7 @@ data: transition: 0 ``` -### Service `output_rel` +### Service: `output_rel` Set relative brightness of output port in percent. @@ -542,7 +739,7 @@ data: brightness: 30 ``` -### Service `output_toggle` +### Service: `output_toggle` Toggle output port. @@ -562,7 +759,7 @@ data: transition: 0 ``` -### Service `relays` +### Service: `relays` Set the relays status. The relays states are defined as a string with eight characters. Each character represents the state change of a relay (1=on, 0=off, t=toggle, -=nochange). @@ -583,7 +780,7 @@ data: state: t---001- ``` -### Service `led` +### Service: `led` Set the LED status. @@ -602,7 +799,7 @@ data: state: blink ``` -### Service `var_abs` +### Service: `var_abs` Set the absolute value of a variable or setpoint. If `value` is not defined, it is assumed to be 0. @@ -631,7 +828,7 @@ data: Otherwise the module might show unexpected behaviors or return error messages.
-### Service `var_rel` +### Service: `var_rel` Set the relative value of a variable or setpoint. If `value` is not defined, it is assumed to be 0. @@ -660,7 +857,7 @@ data: Otherwise the module might show unexpected behavior or return error messages. -### Service `var_reset` +### Service: `var_reset` Reset value of variable or setpoint. @@ -683,7 +880,7 @@ data: Otherwise the module might show unexpected behavior or return error messages. -### Service `lock_regulator` +### Service: `lock_regulator` Locks a regulator setpoint. If `state` is not defined, it is assumed to be `False`. @@ -704,7 +901,7 @@ data: state: true ``` -### Service `send_keys` +### Service: `send_keys` Send keys (which executes bound commands). The keys attribute is a string with one or more key identifiers. Example: `a1a5d8` @@ -741,7 +938,7 @@ data: time_unit: s ``` -### Service `lock_keys` +### Service: `lock_keys` Locks keys. If the table is not defined, it is assumed to be table `a`. @@ -778,7 +975,7 @@ data: time_unit: s ``` -### Service `dyn_text` +### Service: `dyn_text` Send dynamic text to LCN-GTxD displays. The displays support four rows for text messages. @@ -801,7 +998,7 @@ data: text: "text in row 1" ``` -### Service `pck` +### Service: `pck` Send arbitrary PCK command. Only the command part of the PCK command has to be specified in the `pck` string. diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index cb9d7bf8774..2689d1e840a 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -19,7 +19,7 @@ The `mqtt` light platform lets you control your MQTT enabled lights through one | Color temperature | ✔ | ✔ | ✔ | | Effects | ✔ | ✔ | ✔ | | Flashing | ✘ | ✔ | ✔ | -| HS Color | ✔ | ✔ | ✘ | +| HS Color | ✔ | ✔ | ✔ | | RGB Color | ✔ | ✔ | ✔ | | RGBW Color | ✔ | ✔ | ✘ | | RGBWW Color | ✔ | ✔ | ✘ | @@ -177,6 +177,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false @@ -559,6 +564,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false @@ -799,7 +809,7 @@ light: The `mqtt` light platform with template schema lets you control a MQTT-enabled light that receive commands on a command topic and optionally sends status update on a state topic. It is format-agnostic so you can use any data format you want (i.e., string, JSON), just configure it with templating. -This schema supports on/off, brightness, RGB colors, XY colors, color temperature, transitions, short/long flashing and effects. +This schema supports on/off, brightness, RGB colors, XY colors, HS Color, color temperature, transitions, short/long flashing and effects. ## Template schema - Configuration @@ -918,6 +928,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false @@ -1019,7 +1034,7 @@ In this section you find some real-life examples of how to use this light. ### Simple string payload -For a simple string payload with the format `state,brightness,r-g-b` (e.g., `on,255,255-255-255`), add the following to your `configuration.yaml` file: +For a simple string payload with the format `state,brightness,r-g-b,h-s` (e.g., `on,255,255-255-255,360-100`), add the following to your `configuration.yaml` file: {% raw %} @@ -1030,7 +1045,7 @@ light: schema: template command_topic: "home/rgb1/set" state_topic: "home/rgb1/status" - command_on_template: "on,{{ brightness|d }},{{ red|d }}-{{ green|d }}-{{ blue|d }}" + command_on_template: "on,{{ brightness|d }},{{ red|d }}-{{ green|d }}-{{ blue|d }},{{ hue|d }}-{{ sat|d }}" command_off_template: "off" state_template: "{{ value.split(',')[0] }}" # must return `on` or `off` brightness_template: "{{ value.split(',')[1] }}" @@ -1065,6 +1080,9 @@ light: {%- if red is defined and green is defined and blue is defined -%} , "color": [{{ red }}, {{ green }}, {{ blue }}] {%- endif -%} + {%- if hue is defined and sat is defined -%} + , "huesat": [{{ hue }}, {{ sat }}] + {%- endif -%} {%- if effect is defined -%} , "effect": "{{ effect }}" {%- endif -%} diff --git a/source/_integrations/lock.mqtt.markdown b/source/_integrations/lock.mqtt.markdown index 7a56dfc4f20..8e8e1ab6639 100644 --- a/source/_integrations/lock.mqtt.markdown +++ b/source/_integrations/lock.mqtt.markdown @@ -116,6 +116,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/lookin.markdown b/source/_integrations/lookin.markdown index 3f1383c1bba..997bba8be34 100644 --- a/source/_integrations/lookin.markdown +++ b/source/_integrations/lookin.markdown @@ -1,17 +1,22 @@ --- title: LOOKin -description: Instructions on how to integrate LookIN devices into Home Assistant. +description: Instructions on how to integrate LOOKin devices into Home Assistant. ha_category: - Climate + - Light + - Media Player - Sensor ha_release: 2021.11 ha_iot_class: Local Push ha_codeowners: - '@ANMalko' + - '@bdraco' ha_domain: lookin ha_config_flow: true ha_platforms: - climate + - light + - media_player - sensor ha_zeroconf: true --- diff --git a/source/_integrations/luftdaten.markdown b/source/_integrations/luftdaten.markdown index 9bb5bba4f01..41ebce7ef01 100644 --- a/source/_integrations/luftdaten.markdown +++ b/source/_integrations/luftdaten.markdown @@ -1,6 +1,6 @@ --- -title: Luftdaten -description: Instructions on how to setup Luftdaten sensors in Home Assistant. +title: Sensor.Community +description: Instructions on how to add Sensor.Community sensors to Home Assistant. ha_category: - Health - Sensor @@ -10,95 +10,18 @@ ha_config_flow: true ha_quality_scale: gold ha_codeowners: - '@fabaff' + - '@frenck' ha_domain: luftdaten ha_platforms: + - diagnostics - sensor --- -The `luftdaten` integration will query the open data API of [luftdaten.info](https://luftdaten.info/) to monitor air quality and other weather data from a specific (self build) sensor station. +The Sensor.Communtiy integration will query the open data API of [Sensor.Community](https://sensor.community) to monitor air quality and other weather data from a specific (self build) sensor station. -## Setup +## Prerequisites -- To get the ID of a particle sensor you need to select it on the [Feinstaub map](https://deutschland.maps.luftdaten.info/) and find it in the sidebar (Column "Sensor ID"). -- To get the ID of a temperature/humidity sensor you need to find it on the map hosted on [Madavi](https://www.madavi.de/sensor/feinstaub-map-dht/). +To get the ID of a particle, pressure, noise, temperature, or humidity sensor by selecting it on the [Sensor.Community map](https://maps.sensor.community/). +After selecting the sensor, it will show the needed ID in the sidebar with a `#` in front of it. {% include integrations/config_flow.md %} - -## Manual Configuration - -To enable this sensor, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -luftdaten: -``` - -{% configuration %} -sensor_id: - description: The ID of the sensor. - required: true - type: string -show_on_map: - description: Option to show the position of the sensor on the map. - required: false - default: false - type: boolean -scan_interval: - description: the frequency (in seconds) between data updates. - required: false - type: integer - default: 600 -sensors: - description: The sensor-related configuration options. - required: false - type: map - keys: - monitored_conditions: - description: A list of conditions you want to monitor. - required: true - type: list - keys: - P1: - description: Show the particle sensors (particles 10 microns and below). - P2: - description: Show the particle sensors (particles 2.5 microns and below). - temperature: - description: Display the temperature from the sensor. - humidity: - description: Display the humidity from the sensor. - pressure: - description: Display the pressure from the sensor. -{% endconfiguration %} - -
- -If you set `show_on_map` to `true` then the location attributes are named `latitude` and `longitude`. The default name of the location attributes is `lat` and `long` to avoid showing them on the map. - -
- -Not all sensors provide all conditions. Also, it's possible that the sensor values are not available all the time. To check what a sensor is publishing use `curl`: - -```bash -curl https://data.sensor.community/airrohr/v1/sensor/[sensorid]/ -``` - -## Full example - -This example would use the sensor with the ID 155, show it on the `map` and would monitor `temperature` and `humidity`. - -```yaml -# Example configuration.yaml entry -luftdaten: - sensor_id: 155 - show_on_map: true - sensors: - monitored_conditions: - - temperature - - humidity -``` - -## Sensor - -The `luftdaten` sensor platform will query the open data API of [luftdaten.info](https://luftdaten.info/) to monitor air quality and other weather data from a specific (self build) sensor station. - -You must have the `luftdaten` integration (from above) configured to use this platform. After configuring that component, sensors will automatically appear. diff --git a/source/_integrations/lutron_caseta.markdown b/source/_integrations/lutron_caseta.markdown index 57845c6a5d2..195d1dbb84f 100644 --- a/source/_integrations/lutron_caseta.markdown +++ b/source/_integrations/lutron_caseta.markdown @@ -40,9 +40,6 @@ The currently supported Caseta and RA2 Select devices are: - Lutron shades as [covers](#cover) - Lutron smart [fan](#fan) speed control - Lutron Occupancy/Vacancy [sensors](#sensor) - -Additionally RA2 Select Main Repeater (`RR-SEL-REP2-BL`) or Lutron Caséta Smart Bridge PRO (`L-BDGPRO2-WH`) models support: - - Pico Remotes as [device triggers](/integrations/device_automation/) - Shade Remotes as [device triggers](/integrations/device_automation/) @@ -164,7 +161,7 @@ For more information on working with binary sensors in Home Assistant, see the [ ## Pico and Shade Remotes -Pico and Shade remotes require a RA2 Select Main Repeater (`RR-SEL-REP2-BL`) or Lutron Caséta Smart Bridge PRO (`L-BDGPRO2-WH`) with Telnet Support enabled in the Lutron app under `Settings` >> `Advanced` >> `Integration` +Pico and Shade remotes are supported on the Smart Bridge (L-BDG2-WH), Smart Bridge PRO (L-BDGPRO2-WH), and RA2 Select (RR-SEL-REP2-BL) models. Device Triggers are implemented for `press` and `release` of each button on the remotes via watching for `lutron_caseta_button_event` events in the format: diff --git a/source/_integrations/mazda.markdown b/source/_integrations/mazda.markdown index 358d72aa841..b5406689402 100644 --- a/source/_integrations/mazda.markdown +++ b/source/_integrations/mazda.markdown @@ -14,6 +14,7 @@ ha_codeowners: - '@bdr99' ha_domain: mazda ha_platforms: + - diagnostics - device_tracker - lock - sensor @@ -25,8 +26,9 @@ This integration requires an active Mazda Connected Services subscription and a - Mazda3: 2019+ - CX-30: 2020+ -- CX-9: 2021+ - CX-5: 2021+ +- CX-9: 2021+ +- MX-30: 2020+ {% include integrations/config_flow.md %} @@ -39,10 +41,12 @@ This integration requires an active Mazda Connected Services subscription and a ### Sensor The following sensor entities are available: -- Fuel remaining -- Fuel distance remaining +- Fuel remaining (only for gas vehicles) +- Fuel distance remaining (only for gas vehicles) - Odometer - Tire pressure (not available for CX-5 and CX-9 models) +- Charge level (only for electric vehicles) +- Remaining range (only for electric vehicles) ### Device tracker diff --git a/source/_integrations/mcp23017.markdown b/source/_integrations/mcp23017.markdown index f8ccfd7f30a..c4617f89b10 100644 --- a/source/_integrations/mcp23017.markdown +++ b/source/_integrations/mcp23017.markdown @@ -15,6 +15,14 @@ ha_platforms: - switch --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `mcp23017` integration is the base for all related mcp23017 platforms in Home Assistant. There is no setup needed for the integration itself, for the platforms please check their corresponding sections. For more details about the MCP23017 I2C I/O port expander you can find its datasheet here: [MCP23017](https://www.microchip.com/wwwproducts/en/MCP23017). diff --git a/source/_integrations/mhz19.markdown b/source/_integrations/mhz19.markdown index a35e552153c..2a6b92e0aaf 100644 --- a/source/_integrations/mhz19.markdown +++ b/source/_integrations/mhz19.markdown @@ -10,6 +10,14 @@ ha_platforms: - sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The MH-Z19 is a small non-dispersive infrared sensor that can measure CO2 level. High CO2 levels can lead to drowsiness, poor concentration, loss of attention or increased heart rate. The CO2 level outside is around 400ppm, but inside levels can reach between 1000 and 5000 ppm. High CO2 levels indicate that you should increase ventilation. **Note:** the new version MH-Z19B requires the VIN to be connected to a 5V pin, rather than 3.3V. diff --git a/source/_integrations/mobile_app.markdown b/source/_integrations/mobile_app.markdown index 27439673049..b064648d54f 100644 --- a/source/_integrations/mobile_app.markdown +++ b/source/_integrations/mobile_app.markdown @@ -7,7 +7,7 @@ ha_release: 0.89 ha_config_flow: true ha_quality_scale: internal ha_codeowners: - - '@robbiet480' + - '@home-assistant/core' ha_domain: mobile_app ha_iot_class: Local Push ha_platforms: diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown index 5f8681c0af4..64369d6e597 100644 --- a/source/_integrations/modbus.markdown +++ b/source/_integrations/modbus.markdown @@ -265,6 +265,10 @@ slave: required: false type: integer default: 0 +unique_id: + description: An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception. + required: false + type: string {% endconfiguration %} ### Configuring data_type and struct @@ -314,6 +318,10 @@ swap: required: false default: none type: string +unique_id: + description: An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception. + required: false + type: string {% endconfiguration %} ## Configuring platform binary sensor @@ -358,6 +366,10 @@ binary_sensors: required: false default: coil type: string + unique_id: + description: An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception. + required: false + type: string {% endconfiguration %} ## Configuring platform climate @@ -435,6 +447,10 @@ climates: required: false type: string default: C + unique_id: + description: An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception. + required: false + type: string {% endconfiguration %} ### Service `modbus.set-temperature` @@ -467,7 +483,6 @@ modbus: device_class: door input_type: coil address: 117 - device_class: door state_open: 1 state_opening: 2 state_closed: 0 @@ -475,7 +490,7 @@ modbus: status_register: 119 status_register_type: holding - name: "Door2" - address: 117 + address: 118 ``` {% configuration %} @@ -526,6 +541,10 @@ covers: description: Modbus register type (holding, input), default holding. required: false type: string + unique_id: + description: An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception. + required: false + type: string {% endconfiguration %} ### Example: Modbus cover controlled by a coil @@ -713,6 +732,10 @@ fans: required: false default: same as command_off type: integer + unique_id: + description: An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception. + required: false + type: string {% endconfiguration %} ## Configuring platform light @@ -802,6 +825,10 @@ lights: required: false default: same as command_off type: integer + unique_id: + description: An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception. + required: false + type: string {% endconfiguration %} ## Configuring platform sensor @@ -882,6 +909,10 @@ sensors: description: The [state_class](https://developers.home-assistant.io/docs/core/entity/sensor#available-state-classes) of the sensor. required: false type: string + unique_id: + description: An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception. + required: false + type: string {% endconfiguration %}
@@ -1001,6 +1032,10 @@ switches: required: false default: same as command_off type: integer + unique_id: + description: An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception. + required: false + type: string {% endconfiguration %} ## Opening an issue diff --git a/source/_integrations/nam.markdown b/source/_integrations/nam.markdown index 846269c4cf3..09dda88e64a 100644 --- a/source/_integrations/nam.markdown +++ b/source/_integrations/nam.markdown @@ -11,6 +11,7 @@ ha_codeowners: ha_domain: nam ha_platforms: - button + - diagnostics - sensor ha_quality_scale: platinum ha_zeroconf: true diff --git a/source/_integrations/nanoleaf.markdown b/source/_integrations/nanoleaf.markdown index 9621ee05500..d8cf2379ce7 100644 --- a/source/_integrations/nanoleaf.markdown +++ b/source/_integrations/nanoleaf.markdown @@ -13,6 +13,7 @@ ha_release: 0.67 ha_domain: nanoleaf ha_platforms: - button + - diagnostics - light ha_zeroconf: true ha_ssdp: true diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown index 406ae7973ae..c9bddf02fc1 100644 --- a/source/_integrations/nest.markdown +++ b/source/_integrations/nest.markdown @@ -19,6 +19,7 @@ ha_dhcp: true ha_platforms: - binary_sensor - camera + - diagnostics - climate - sensor --- @@ -320,7 +321,7 @@ All cameras have motion and person triggers, however only some support capturing | Nest Cam (indoor, wired)
Nest Cam (outdoor, battery) | WebRTC | Motion
Person | N/A | | Nest Cam Indoor
Nest Cam IQ Indoor
Nest Cam IQ Outdoor
Nest Cam Outdoor | RTSP
Recording | Motion
Person
Sound | Snapshot (jpg) | | Nest Cam with floodlight | WebRTC | Motion
Person | N/A | -| Nest Doorbell (battery) | WebRTC | Motion
Person
Chime | Clip Preview (mp4) | +| Nest Doorbell (battery) | WebRTC | Motion
Person
Chime | Clip Preview (mp4, gif) | | Nest Doorbell (wired) | RTSP
Recording | Motion
Person
Sound
Chime | Snapshot (jpg) | | Nest Hub Max | RTSP
Recording | Motion
Person
Sound
* [SDM API known issue](https://github.com/home-assistant/core/issues/58482) | Snapshot (jpg) | @@ -329,13 +330,35 @@ Given a camera named `Front Yard` then the camera is created with a name such as ## Automation and Device Triggers -The Nest integration makes [device triggers](/docs/automation/trigger/#device-triggers) available to enable automation -in Home Assistant. You should review the [Automating Home Assistant](/getting-started/automation/) getting started guide on automations or the [Automation](/docs/automation/) documentation for full details. +The Nest integration provides [device triggers](/docs/automation/trigger/#device-triggers) to enable automation in Home Assistant. You should review the [Automating Home Assistant](/getting-started/automation/) getting started guide on automations or the [Automation](/docs/automation/) documentation for full details. {% my automations badge %} ![Screenshot Device Triggers](/images/integrations/nest/device_triggers.png) +{% details "Example Device Trigger / Event payload %} + +This is an example of what the `nest_event` payload looks like for a Device Trigger that you can use to power automations. + +```json +{ + "event_type": "nest_event", + "data": { + "device_id": "EXAMPLE_DEVICE_ID", + "type": "doorbell_chime", + "timestamp": "2022-01-26T04:56:54.031000+00:00", + "nest_event_id": "EXAMPLE_EVENT_ID", + }, +} +``` + +* `device_id`: The Home Assistant device identifier for the camera +* `nest_event_id`: is an opaque identifier that can be used with the Media Source Attachments described below for supported cameras. + +{% enddetails %} + +Continue reading below to *Media Source Attachments* to see how to use media with notification actions. +
This feature is enabled by the following permissions: @@ -345,37 +368,85 @@ This feature is enabled by the following permissions: - *Other permissions in the Nest or Google Home apps*.
- -## Example - -This automation will trigger when a `nest_event` event type with a type of `camera_motion` is received from the specified `device_id`. - -```yaml -alias: "motion alert" -trigger: - - platform: event - event_type: nest_event - event_data: - device_id: YOUR_DEVICE_ID - type: camera_motion -action: - - service: notify.mobile_app_pixel_2 - data: - title: motion detected - message: front door motion detected - data: - image: /api/camera_proxy/camera.front_door -``` - -The action in this section uses the [Android Companion App](https://companion.home-assistant.io/docs/notifications/notifications-basic/) and the camera proxy to send a notification with a snapshot from the camera. - - ## Media Source The Nest [Media Source](/integrations/media_source) platform allows you to browse clips for recent camera events. Home Assistant is not intended to be a Network Video Recorder (NVR) platform, however, basic support for capturing recent events is supported. The table above describes which devices support event image snapshots or 10-frame mp4 video clips for recent events. +### Media Attachments + +The Media Source APIs can be used in [Companion App Attachments](https://companion.home-assistant.io/docs/notifications/notification-attachments) for Notifications as actions for Device Triggers above like *Doorbell Pressed*. You will need to be familiar with both the Media Sources supported for your camera, as well as the media capabilities of the companion apps. + +* `/api/nest/event_media/DEVICE_ID/EVENT_ID`: Media for the event, which supports image snapshots (jpg) or clip previews (mp4) depending on the camera type. + +* `/api/nest/event_media/DEVICE_ID/EVENT_ID/thumbnail`: A thumbnail preview of the media, which supports image snapshots (jpg) or clip previews (gif) depending on the camera type. + +You can use the event payload fields `device_id` and `event_id` in an [automation](/getting-started/automation/) to send a notification from an [actions](/getting-started/automation-action/) as shown in the examples below. + +{% details "Example Action: Clip Preview (mp4) attachment for iOS %} + +Example for cameras that support Clip Previews used with iOS which can render video in notifications. + +{% raw %} + +```yaml +service: notify.mobile_app_iphone +data: + message: Doorbell Pressed + title: Someone pressed the doorbell + data: + image: >- + /api/nest/event_media/{{ trigger.event.data.device_id }}/{{ trigger.event.data.nest_event_id }}/thumbnail + video: >- + /api/nest/event_media/{{ trigger.event.data.device_id }}/{{ trigger.event.data.nest_event_id }} +mode: single +``` + +{% endraw %} + +{% enddetails %} + +{% details "Example Action: Clip Preview thumbnail (gif) for Android or iOS %} + +Example for cameras that support Clip Previews, but transcoded to an animated gif (Android does not render video notifications). + +{% raw %} + +```yaml +service: notify.mobile_app_android +data: + message: Doorbell Pressed + title: Someone pressed the doorbell + data: + image: >- + /api/nest/event_media/{{ trigger.event.data.device_id }}/{{ trigger.event.data.nest_event_id }}/thumbnail +``` + +{% endraw %} + +{% enddetails %} + +{% details "Example Action: Snapshot (jpg) attachment for Android or iOS %} + +Example for cameras that support Snaphot (jpg) on either Android or iOS. + +{% raw %} + +```yaml +service: notify.mobile_app +data: + message: Doorbell Pressed + title: Someone pressed the doorbell + data: + image: >- + /api/nest/event_media/{{ trigger.event.data.device_id }}/{{ trigger.event.data.nest_event_id }}/thumbnail +``` + +{% endraw %} + +{% enddetails %} +
This feature is enabled by the following permissions: @@ -451,12 +522,12 @@ logger: - It is recommended to let Home Assistant create the Pub/Sub subscription for you. However, if you would like more control you can enter a `susbcriber_id` in the configuration. See [Subscribe to Events](https://developers.google.com/nest/device-access/subscribe-to-events) for more instructions on how to manually create a subscription and use the full subscription name in the Home Assistant configuration e.g. `projects/gcp-project-name/subscriptions/subscription-id` -# Legacy Works With Nest API - -This section contains instructions for the Legacy [Works with Nest](https://developers.nest.com/) API. +# Works With Nest API (Deprecated)
-New users are not currently able to set up a Works With Nest Developer account. The documentation is preserved here for existing users of the API. + +The [Works with Nest](https://developers.nest.com/) API is deprecated and will be removed in Home Assistant Core 2022.5. +
{% details "Legacy Works with Nest Configuration Steps" %} diff --git a/source/_integrations/netatmo.markdown b/source/_integrations/netatmo.markdown index 3dc3bd01a37..db0319a68c1 100644 --- a/source/_integrations/netatmo.markdown +++ b/source/_integrations/netatmo.markdown @@ -18,6 +18,7 @@ ha_domain: netatmo ha_homekit: true ha_platforms: - camera + - diagnostics - climate - light - sensor diff --git a/source/_integrations/nexia.markdown b/source/_integrations/nexia.markdown index c8a035f1531..e1d1f6bfd49 100644 --- a/source/_integrations/nexia.markdown +++ b/source/_integrations/nexia.markdown @@ -6,6 +6,7 @@ ha_category: - Sensor - Climate - Scene + - Switch ha_release: 0.108 ha_iot_class: Cloud Polling ha_config_flow: true @@ -18,6 +19,7 @@ ha_platforms: - climate - scene - sensor + - switch --- The `nexia` integration allows you to integrate your [Nexia](https://mynexia.com/) (Trane) thermostats or [American Standard](https://asairhome.com/) thermostats into Home Assistant. @@ -28,6 +30,7 @@ There is currently support for the following device types within Home Assistant: - [Climate](#climate) - [Sensor](#sensor) - [Scene](#scene) +- [Switch](#switch) {% include integrations/config_flow.md %} @@ -39,7 +42,7 @@ The following binary sensors are added for each thermostat: ### Sensor -The following binary sensors are added for each thermostat: +The following sensors are added for each thermostat: - Air Cleaner Mode - Current Compressor Speed @@ -48,7 +51,7 @@ The following binary sensors are added for each thermostat: - Relative Humidity - System Status -The following binary sensors are added for each thermostat zone: +The following sensors are added for each thermostat zone: - Zone Temperature - Zone Setpoint Status @@ -56,7 +59,7 @@ The following binary sensors are added for each thermostat zone: ### Climate -The `nexia` climate platform lets you control a thermostat. +The climate platform lets you control a thermostat. The following Trane thermostats are supported: `XL1050`, `XL850`, `XL824` @@ -68,7 +71,11 @@ Other thermostats may work, but they have not been tested. ### Scene -The `nexia` scene platform lets you activate a nexia automation. +The scene platform lets you activate a nexia automation. + +### Switch + +The switch platform lets you enable or disable hold mode for each thermostat. ### Service `nexia.set_aircleaner_mode` diff --git a/source/_integrations/nina.markdown b/source/_integrations/nina.markdown new file mode 100644 index 00000000000..2f945838acd --- /dev/null +++ b/source/_integrations/nina.markdown @@ -0,0 +1,20 @@ +--- +title: NINA +description: Instructions on how to set up NINA warnings in Home Assistant. +ha_category: + - Binary Sensor +ha_release: 2022.2 +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_codeowners: + - '@DeerMaximum' +ha_domain: nina +ha_platforms: + - binary_sensor +--- + +The [NINA](https://www.bbk.bund.de/DE/Warnung-Vorsorge/Warn-App-NINA/warn-app-nina_node.html) integration displays warnings from the [Bundesamt für Bevölkerungsschutz und Katastrophenhilfe](https://www.bbk.bund.de/) in Germany. + +For each county/city it creates warning slots that change to Unsafe when warnings are present. The text of the warning and the metadata are stored in the attributes of the slots. + +{% include integrations/config_flow.md %} diff --git a/source/_integrations/nissan_leaf.markdown b/source/_integrations/nissan_leaf.markdown index 5c6ca870d00..7a1bc07556d 100644 --- a/source/_integrations/nissan_leaf.markdown +++ b/source/_integrations/nissan_leaf.markdown @@ -10,6 +10,7 @@ ha_codeowners: ha_domain: nissan_leaf ha_platforms: - binary_sensor + - button - sensor - switch --- @@ -18,7 +19,8 @@ The `nissan_leaf` integration offers integration with the [NissanConnect EV](htt * sensors for the battery status, range and charging status * a switch to start and stop the climate control -* services to request updates from the car and to request the car starts charging. +* a button to request the car starts charging. +* service to request updates from the car. ## Configuration @@ -31,6 +33,7 @@ nissan_leaf: password: "YOUR_PASSWORD" region: "YOUR_REGION" ``` + {% configuration %} username: description: The username associated with your NissanConnect EV account. Enclose in quotes. @@ -82,12 +85,12 @@ nissan_leaf: ## Starting a Charge -You can use the `nissan_leaf.start_charge` service to send a request to the Nissan servers to start a charge. The car must be plugged in! The service requires you to provide the vehicle identification number (VIN) as a parameter. You can see the VIN on the attributes of all the entities created by this component. +You can use the `button.press` service to send a request to the Nissan servers to start a charge. The car must be plugged in! ```yaml -- service: nissan_leaf.start_charge - data: - vin: "1HGBH41JXMN109186" # replace +- service: button.press + target: + entity_id: button.start_NICKNAME_charging # replace ``` ## Updating on-demand using Automation @@ -114,7 +117,7 @@ You can also use the `nissan_leaf.update` service to request an on-demand update ## Hints * The update interval has a minimum of two minutes. -* Requesting updates uses a small amount of power from the 12 V battery. The 12 V battery charges from the main traction battery when the car is not plugged in. If the car is left plugged in for a long time, or if the main traction battery is very low then the 12 V battery may gradually discharge. A low update interval may cause the 12 V battery to become flat. When the 12 V battery is flat the car will not start. _Do not set the update interval too low. Use at your own risk._ +* Requesting updates uses a small amount of energy from the 12 V battery. The 12 V battery charges from the main traction battery when the car is not plugged in. If the car is left plugged in for a long time, or if the main traction battery is very low then the 12 V battery may gradually discharge. A low update interval may cause the 12 V battery to become flat. When the 12 V battery is flat the car will not start. _Do not set the update interval too low. Use at your own risk._ * This integration communicates with the Nissan Servers which then communicate with the car. The communication between the car and the Nissan Servers is very slow, and takes up to five minutes to get information from the car, therefore the default polling interval is set to one hour to not overwhelm the connection. * Responses from the Nissan servers are received separately for the battery/range, climate control and location. The `updated_on` attribute will show the last time the data was retrieved from the server. There are separate attributes for when the `next_update` is scheduled, and to indicate if `update_in_progress`. The `nissan_leaf.update` service will reset the `next_update` attribute. * The Nissan APIs do not allow charging to be stopped remotely. @@ -129,6 +132,8 @@ logger: default: critical logs: homeassistant.components.nissan_leaf: debug + homeassistant.components.binary_sensor.nissan_leaf: debug + homeassistant.components.button.nissan_leaf: debug homeassistant.components.sensor.nissan_leaf: debug homeassistant.components.switch.nissan_leaf: debug ``` diff --git a/source/_integrations/nmap_tracker.markdown b/source/_integrations/nmap_tracker.markdown index a63762437a2..37993b3422c 100644 --- a/source/_integrations/nmap_tracker.markdown +++ b/source/_integrations/nmap_tracker.markdown @@ -9,8 +9,6 @@ ha_domain: nmap_tracker ha_platforms: - device_tracker ha_config_flow: true -ha_codeowners: - - '@bdraco' --- As an alternative to the router-based device tracking, it is possible to directly scan the network for devices by using Nmap. The IP addresses to scan can be specified in any format that Nmap understands, including the network-prefix notation (`192.168.1.1/24`) and the range notation (`192.168.1.1-255`). diff --git a/source/_integrations/notion.markdown b/source/_integrations/notion.markdown index ac37c7610c1..bfc4c53b5e3 100644 --- a/source/_integrations/notion.markdown +++ b/source/_integrations/notion.markdown @@ -13,6 +13,7 @@ ha_codeowners: ha_domain: notion ha_platforms: - binary_sensor + - diagnostics - sensor --- diff --git a/source/_integrations/number.mqtt.markdown b/source/_integrations/number.mqtt.markdown index 776cdf4b43d..26ba4e7db6c 100644 --- a/source/_integrations/number.mqtt.markdown +++ b/source/_integrations/number.mqtt.markdown @@ -104,6 +104,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/octoprint.markdown b/source/_integrations/octoprint.markdown index c82067b6053..7974b449abf 100644 --- a/source/_integrations/octoprint.markdown +++ b/source/_integrations/octoprint.markdown @@ -21,6 +21,37 @@ ha_platforms: {% include integrations/config_flow.md %} +{% configuration_basic %} +username: + description: Username for the server. + required: true + type: string +host: + description: Address of the server, e.g., 192.168.1.32. + required: true + type: string +port: + description: Port of the server. + required: false + type: string + default: 80 +path: + description: URL path of the server + required: false + type: string + default: / +ssl: + description: Whether to use SSL or not when communicating. + required: false + type: boolean + default: false +verify ssl: + description: Should the SSL certificate be validated. + required: false + type: boolean + default: false +{% endconfiguration_basic %} + ### API Key For the integration to work, please check that the plugin Discovery is enabled. The Octoprint integration will attempt to register itself via the [application keys plugin](https://docs.octoprint.org/en/master/bundledplugins/appkeys.html). After submitting the configuration UI in Home Assistant, open the Octoprint UI and click allow on the prompt. diff --git a/source/_integrations/oncue.markdown b/source/_integrations/oncue.markdown new file mode 100644 index 00000000000..cebe209b133 --- /dev/null +++ b/source/_integrations/oncue.markdown @@ -0,0 +1,29 @@ +--- +title: Oncue by Kohler +description: Documentation about the oncue sensors. +ha_category: + - Binary Sensor + - Sensor +ha_iot_class: Cloud Polling +ha_release: 2022.2 +ha_config_flow: true +ha_codeowners: + - '@bdraco' +ha_dhcp: true +ha_domain: oncue +ha_platforms: + - binary_sensor + - sensor +--- + +The Oncue by Kohler integration will allow you to monitor the state of your [Oncue enabled Kohler generator](https://api.kohler.com/oncueplus/#/auth). + +## Tested Devices + +- [24RCL](https://kohlerpower.com/en/residential/generators/product/24rcl) +- [38RCLB](https://kohlerpower.com/en/residential/generators/product/38rclb) +- [48RCLB](https://kohlerpower.com/en/residential/generators/product/48rclb) +- [60RCLA](https://kohlerpower.com/en/residential/generators/product/60rcla) +- [KG80R](https://kohlerpower.com/en/residential/generators/product/kg80r) + +{% include integrations/config_flow.md %} diff --git a/source/_integrations/onewire.markdown b/source/_integrations/onewire.markdown index 2b739b05ae4..4bb949e95e1 100644 --- a/source/_integrations/onewire.markdown +++ b/source/_integrations/onewire.markdown @@ -12,10 +12,19 @@ ha_codeowners: ha_domain: onewire ha_platforms: - binary_sensor + - diagnostics - sensor - switch --- +
+ +Using this integration via the SysBus is deprecated and will be removed in Home Assistant Core 2022.6. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `onewire` platform supports sensors which that using the One wire (1-wire) bus for communication. Every 1-wire device has a (globally) unique ID that identifies the device on the bus. The first two digits identify a device family and the last 14 digits are a globally unique number given to it during manufacturing. @@ -33,6 +42,7 @@ Each 1-wire component data sheet describes the different properties the componen | 12 | [DS2406](https://datasheets.maximintegrated.com/en/ds/DS2406.pdf) | 2 sensed (sensed.A/B) [4](#note_4) | | 29 | [DS2408](https://datasheets.maximintegrated.com/en/ds/DS2408.pdf) | 8 sensed (sensed.0-7) [4](#note_4) | | 3A | [DS2413](https://datasheets.maximintegrated.com/en/ds/DS2413.pdf) | 2 sensed (sensed.A/B) [4](#note_4) | +| EF | [HobbyBoard](https://hobbyboards.com/) | Hub Branch State [3](#note_3) [4](#note_4) | #### Sensors: @@ -44,6 +54,7 @@ Each 1-wire component data sheet describes the different properties the componen | 22 | [DS1822](https://datasheets.maximintegrated.com/en/ds/DS1822.pdf) | | | 26 | [DS2438](https://datasheets.maximintegrated.com/en/ds/DS2438.pdf) | Temperature, Voltage, Current (pressure when using B1-R1-A, illuminance when using S2-R1-A, humidity when using compatible Honeywell or Humirel sensor) [2](#note_2) | | 28 | [DS18B20](https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf) | Temperature | +| 30 | [DS2760](https://pdfserv.maximintegrated.com/en/ds/DS2760.pdf) | Temperature, Voltage, Thermocouple Type K [2](#note_2) | | 3B | [DS1825](https://datasheets.maximintegrated.com/en/ds/DS1825.pdf) | Temperature | | 42 | [DS28EA00](https://datasheets.maximintegrated.com/en/ds/DS28EA00.pdf) | Temperature | | 7E | [EDS00xx](https://www.embeddeddatasystems.com/assets/images/supportFiles/manuals/EN-UserMan%20%20OW-ENV%20Sensor%20v13.pdf) | Temperature/Humidity/Barometric pressure/Light [6](#note_6)| @@ -57,6 +68,7 @@ Each 1-wire component data sheet describes the different properties the componen | 12 | [DS2406](https://datasheets.maximintegrated.com/en/ds/DS2406.pdf) | 2 latches (latch.A/B) and 2 PIOs (PIO.A/B) [4](#note_4) | | 29 | [DS2408](https://datasheets.maximintegrated.com/en/ds/DS2408.pdf) | 8 latches (latch.0-7) and 8 PIOs (PIO.0/7) [4](#note_4) | | 3A | [DS2413](https://datasheets.maximintegrated.com/en/ds/DS2413.pdf) | 2 PIOs (PIO.A/B) [4](#note_4) | +| EF | [HobbyBoard](https://hobbyboards.com/) | Hub Branch Enable, Moisture Sensor Type [3](#note_3) [4](#note_4) | #### Bridges: @@ -69,8 +81,8 @@ Notes: - The TAI-8570 Pressure Sensor is based on a 1-wire composite device by AAG Electronica. It contains, above 1-wire components, also a barometer, hygrometer and illuminance sensors. This onewire platform can read and present values from that device, but the sensors will default to disabled [4](#note_4). -- For hobbyists, it is quite common to use DS2438 Smart Battery Monitor as a multipurpose measurement node that can place temperature, humidity and luminosity on the 1-wire bus by just adding some standard components to the DS2438. For different component types, there are ready-made algorithms implemented in owfs. Those are exposed by the owfs software and can be read by this platform. The B1-R1-A/pressure is exposed as a barometric pressure sensor. S2-R1-A/illuminance is presented as an illuminance sensor. For a more detailed description of these properties, refer to the [owfs documentation](https://owfs.org/index_php_page_ds2438.html). - For this component, the more basic quantities (temperature, VAD, VDD and IAD) are exported as separate sensors. Please note that some of the sensors will default to disabled [4](#note_4). +- For hobbyists, it is quite common to use DS2438 or DS2760 families of Smart Battery Monitor as a multipurpose measurement node that can place temperature, humidity, current, thermocouple temperature, and luminosity on the 1-wire bus by just adding some standard components to the DS2438 or DS2760. For different component types, there are ready-made algorithms implemented in owfs. Those are exposed by the owfs software and can be read by this platform. The B1-R1-A/pressure is exposed as a barometric pressure sensor. S2-R1-A/illuminance is presented as an illuminance sensor. For a more detailed description of these properties, refer to the owfs documentation [DS2438](https://owfs.org/index_php_page_ds2438.html), [DS2760](https://owfs.org/index_php_page_ds2760.html). + For these components, the more basic quantities (temperature, VAD, VDD and IAD) are exported as separate sensors. Please note that some of the sensors will default to disabled [4](#note_4). - Hobbyboards is a company that has been selling DIY boards of different kinds. The company has been away from the market for some time, so no reference to the boards can be made. This platform has an implementation for some of those. @@ -78,54 +90,10 @@ Notes: - Bridge devices have no sensors. The `aux` and `main` branches are searched for additional 1-wire devices during discovery. -- Multisensors manufactured by Embedded Data Systems. Currently only EDS0066 (temperature/barometric pressure) and EDS0068 (temperature/humidity/barometric pressure/light) are supported. - +- Multisensors manufactured by Embedded Data Systems. Currently only EDS0066 (temperature/barometric pressure) and EDS0068 (temperature/humidity/barometric pressure/light) are supported. ## Interfacing with the 1-wire bus -The 1-Wire bus can be connected directly to the IO pins of Raspberry Pi or by using a dedicated interface adapter, for example -[DS9490R](https://datasheets.maximintegrated.com/en/ds/DS9490-DS9490R.pdf) or adapters based on [DS2482-100](https://datasheets.maximintegrated.com/en/ds/DS2482-100.pdf) that can be directly attached to the IO pins on the Raspberry Pi. - -It is also possible for this platform to interface with a remote 1-wire host over a network connection using owfs and owserver. - -### Raspberry Pi set up - -In order to setup 1-Wire support on Raspberry Pi, you'll need to edit `/boot/config.txt`. This file can not be edited through ssh. You have to put your SD card to a PC, and edit the file directly. -To edit `/boot/config.txt` on the Home Assistant Operating System, use [this documentation](https://developers.home-assistant.io/docs/operating-system/debugging.html) to enable SSH and edit `/mnt/boot/config.txt` via `vi`. - -If you use an external pull-up resistor and the default GPIO 4 for the data line, add the following line: - -```txt -dtoverlay=w1-gpio -``` - -If you don't want to use an external resistor, you can use a built-in one using the following line: - -```txt -dtoverlay=w1-gpio-pullup -``` - -It is also possible to use a different GPIO pin like this to change it to pin 15: - -```txt -dtoverlay=w1-gpio-pullup,gpiopin=15 -``` - -Furthermore, it is also possible to have multiple GPIOs as one-wire data channel by adding multiple lines like this: - -```txt -dtoverlay=w1-gpio-pullup,gpiopin=15 -dtoverlay=w1-gpio-pullup,gpiopin=16 -``` - -You can read about further parameters in this documentation: [Raspberry Pi Tutorial Series: 1-Wire DS18B20 Sensor](https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_1-Wire_DS18B20_Sensor#Enable_1-Wire). - -When using the GPIO pins on Raspberry Pi directly as a 1-wire bus, the description above uses two kernel modules. `1w_gpio`, that implements the 1-wire protocol, and `1w_therm`, that understands the DS18B20 (family 28) components inner structure and reports temperature. -There is no support for other device types (families) and hence this onewire platform only supports temperature measurements from family 28 devices. - -### Raspberry Pi checking connected devices via ssh - -If you set up ssh, you can check the connected one-wire devices in the following folder: /sys/bus/w1/devices -The device IDs begin with `28-`. +The 1-Wire bus can be connected with a remote 1-wire host over a network connection using owfs and owserver. ## Interface adapter setup diff --git a/source/_integrations/onvif.markdown b/source/_integrations/onvif.markdown index 63b52c46d2d..edb03ee088e 100644 --- a/source/_integrations/onvif.markdown +++ b/source/_integrations/onvif.markdown @@ -12,6 +12,7 @@ ha_config_flow: true ha_platforms: - binary_sensor - camera + - button - sensor --- diff --git a/source/_integrations/open_meteo.markdown b/source/_integrations/open_meteo.markdown new file mode 100644 index 00000000000..9c26e2f7aeb --- /dev/null +++ b/source/_integrations/open_meteo.markdown @@ -0,0 +1,27 @@ +--- +title: Open-Meteo +description: Instructions on how to integrate Open-Meteo within Home Assistant. +ha_category: + - Weather +ha_release: 2022.2 +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_codeowners: + - '@frenck' +ha_domain: open_meteo +ha_platforms: + - diagnostics + - weather +--- + +The Open-Meteo integration integrates the free weather forecast from +[Open-Meteo](https://open-meteo.com) with Home Assistant. + +Open-Meteo offers free weather forecast APIs for open-source developers and +non-commercial use. No account or API key is required to use this service. + +Open-Meteo collaborates with National Weather Services providing Open Data +with 11 to 2 km resolution. Their high-performance APIs select the best +weather model for your location. + +{% include integrations/config_flow.md %} diff --git a/source/_integrations/openuv.markdown b/source/_integrations/openuv.markdown index 50765a0e7bb..13132915ec6 100644 --- a/source/_integrations/openuv.markdown +++ b/source/_integrations/openuv.markdown @@ -13,6 +13,7 @@ ha_codeowners: ha_domain: openuv ha_platforms: - binary_sensor + - diagnostics - sensor --- diff --git a/source/_integrations/orangepi_gpio.markdown b/source/_integrations/orangepi_gpio.markdown index 1f1fa3cf57e..8190196c90a 100644 --- a/source/_integrations/orangepi_gpio.markdown +++ b/source/_integrations/orangepi_gpio.markdown @@ -13,6 +13,14 @@ ha_platforms: - binary_sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `orangepi_gpio` integration is the base for all related GPIO platforms in Home Assistant. There is no setup needed for the integration itself, for the platforms please check their corresponding pages. This integration provides the following platforms: diff --git a/source/_integrations/overkiz.markdown b/source/_integrations/overkiz.markdown new file mode 100644 index 00000000000..58cfef023c5 --- /dev/null +++ b/source/_integrations/overkiz.markdown @@ -0,0 +1,84 @@ +--- +title: Overkiz (by Somfy) +description: Instructions on how to integrate hubs whom use the Overkiz platform with Home Assistant. +ha_category: + - Binary Sensor + - Button + - Cover + - Hub + - Light + - Lock + - Number + - Scene + - Select + - Sensor + - Switch +ha_release: 2022.2 +ha_config_flow: true +ha_iot_class: Cloud Polling +ha_codeowners: + - '@imicknl' + - '@vlebourl' + - '@tetienne' +ha_domain: overkiz +ha_dhcp: true +ha_zeroconf: true +ha_platforms: + - binary_sensor + - button + - diagnostics + - cover + - light + - lock + - number + - scene + - sensor + - select + - switch +--- + +The Overkiz (by Somfy) integration platform is used by many different vendors, like Somfy, Hitachi, and Atlantic. This integration will allow users to integrate their devices into Home Assistant using the Overkiz API. + +## Supported hubs + +- Atlantic Cozytouch +- Hitachi Hi Kumo +- Nexity Eugénie +- Rexel Energeasy Connect +- Somfy Connexoon IO +- Somfy Connexoon RTS +- Somfy TaHoma +- Somfy TaHoma Switch [(instructions)](#tahoma-switch) +- Thermor Cozytouch + +If you own a Somfy hub, you could also use the [Somfy integration](/integrations/somfy/) which uses the official API. + +### TaHoma Switch + +Multiple users reported that the TaHoma Switch will work with this integration **after** you create a scene in the TaHoma app and wait for a few hours. + +## Supported devices + +Over 6000 devices from 60 brands are compatible with the Overkiz platform. This integration will retrieve your devices and map them to the relevant Home Assistant platforms. + +{% include integrations/config_flow.md %} + +## Known limitations + +### Z-Wave, Hue and Sonos not supported + +Even though most Overkiz hubs support adding Z-Wave, Hue, and Sonos devices, this isn't supported in the Overkiz integration. All these platforms have native integrations in Home Assistant which are more stable and feature-rich. + +### Overkiz API limits + +**Server busy, please try again later. (Too many executions)** + +During peak hours, it could happen that the Overkiz platform is unable to execute your command. The integration will try to retry this command, however, this is not guaranteed to succeed. + +### Internet connectivity required + +This integration communicates via the cloud-based Overkiz API, since Overkiz doesn't expose a local API on their hubs. If you are only using Somfy IO compatible devices, you could purchase a Velux KLF200 hub and use [the Velux integration](/integrations/velux/) which has a local API. + +#### Local API via HomeKit Controller + +If your hub (e.g. Somfy TaHoma) supports HomeKit natively, your setup code will be added as a sensor in Home Assistant. Look up your hub in Home Assistant and retrieve the value from the 'HomeKit Setup Code' sensor. You can now configure the [HomeKit Controller](/integrations/homekit_controller/) integration in Home Assistant and benefit from local support. diff --git a/source/_integrations/p1_monitor.markdown b/source/_integrations/p1_monitor.markdown index 33c94593b0b..4a7dde24c09 100644 --- a/source/_integrations/p1_monitor.markdown +++ b/source/_integrations/p1_monitor.markdown @@ -10,6 +10,7 @@ ha_codeowners: - '@klaasnicolaas' ha_domain: p1_monitor ha_platforms: + - diagnostics - sensor ha_quality_scale: platinum --- diff --git a/source/_integrations/pcal9535a.markdown b/source/_integrations/pcal9535a.markdown index 8c628556f42..619c9f47dda 100644 --- a/source/_integrations/pcal9535a.markdown +++ b/source/_integrations/pcal9535a.markdown @@ -15,6 +15,14 @@ ha_platforms: - switch --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `pcal9535a` integration is the base for all related pcal9535a platforms in Home Assistant. There is no setup needed for the integration itself, for the platforms, please check their corresponding sections. One of the use cases is [Seeed studio Raspberry Pi Relay Board](http://wiki.seeedstudio.com/Raspberry_Pi_Relay_Board_v1.0/). diff --git a/source/_integrations/philips_js.markdown b/source/_integrations/philips_js.markdown index cabd61f997a..b2eff1c0961 100644 --- a/source/_integrations/philips_js.markdown +++ b/source/_integrations/philips_js.markdown @@ -15,6 +15,7 @@ ha_platforms: - light - media_player - remote + - switch --- The `philips_js` platform allows you to control Philips TVs which expose the [jointSPACE](http://jointspace.sourceforge.net/) JSON-API. diff --git a/source/_integrations/pi4ioe5v9xxxx.markdown b/source/_integrations/pi4ioe5v9xxxx.markdown index 526ab65d634..0cb33629887 100644 --- a/source/_integrations/pi4ioe5v9xxxx.markdown +++ b/source/_integrations/pi4ioe5v9xxxx.markdown @@ -16,6 +16,14 @@ ha_platforms: - switch --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `pi4ioe5v9xxxx` integration provides support for the quasi-bidirectional devices PI4IOE5V9570, PI4IOE5V9674, PI4IOE5V9673, PI4IOE5V96224 and PI4IOE5V96248 from [diodes.com](https://www.diodes.com). For more details about the pi4ioe5v9xxxx I2C I/O port expander you can find the datasheets here: diff --git a/source/_integrations/picnic.markdown b/source/_integrations/picnic.markdown index d92f9a9f90a..e5f55017d29 100644 --- a/source/_integrations/picnic.markdown +++ b/source/_integrations/picnic.markdown @@ -34,5 +34,6 @@ This integration provides the following sensors. Some sensors are disabled by de | Last order status | Status of the last order, either `CURRENT`, `CANCELLED` or `COMPLETED`. Will only transition to `COMPLETED` after the invoice email has been sent. | | Last order ETA start | Start of the ETA window of the last order, will get more precise if the driver is underway. | | Last order ETA end | End of the ETA window of the last order. | +| Last order max order time | Maximum time it is/was still possible to add products to the last order. | Last order delivery time | The delivery time of the last order, `unavailable` if not yet delivered. | | Last order total price | The total price of the last order. | diff --git a/source/_integrations/piglow.markdown b/source/_integrations/piglow.markdown index aea4e938134..79c53b84a23 100644 --- a/source/_integrations/piglow.markdown +++ b/source/_integrations/piglow.markdown @@ -10,6 +10,14 @@ ha_platforms: - light --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `piglow` platform lets you control the [Piglow](https://shop.pimoroni.com/products/piglow) lights on your Raspberry Pi from within Home Assistant. ## Configuration diff --git a/source/_integrations/plex.markdown b/source/_integrations/plex.markdown index c3e1f15c164..c0d9c3c4121 100644 --- a/source/_integrations/plex.markdown +++ b/source/_integrations/plex.markdown @@ -19,7 +19,7 @@ ha_zeroconf: true The Plex integration allows you to connect Home Assistant to a [Plex Media Server](https://plex.tv). Once configured, actively streaming [Plex Clients](https://www.plex.tv/apps-devices/) show up as [Media Players](/integrations/media_player/) and report playback status and library sizes via [Sensors](/integrations/sensor/) in Home Assistant. Media Players will allow you to control media playback and see the current playing item. -Support for playing music directly on linked [Sonos](/integrations/sonos/) speakers is available for users with an active [Plex Pass](https://www.plex.tv/plex-pass/) subscription. More information [here](#sonos-playback). +Support for playing music directly on linked [Sonos](/integrations/sonos/) speakers is available [here](#sonos-playback). There is currently support for the following device types within Home Assistant: @@ -273,10 +273,9 @@ The search will attempt to guess the type of media based on the search parameter To play Plex music directly to Sonos speakers, the following requirements must be met: -1. Have an active [Plex Pass](https://www.plex.tv/plex-pass/) subscription. -2. Remote access enabled for your Plex server. -3. Sonos speakers linked to your Plex account [(Instructions)](https://support.plex.tv/articles/control-sonos-playback-with-a-plex-app/). -4. [Sonos](/integrations/sonos/) integration configured. +1. Remote access enabled for your Plex server. +2. Sonos speakers linked to your Plex account [(Instructions)](https://support.plex.tv/articles/control-sonos-playback-with-a-plex-app/). +3. [Sonos](/integrations/sonos/) integration configured. Call the `media_player.play_media` service with the `entity_id` of a Sonos integration device and `media_content_type` prepended with `plex://`. Both [music](#music) and [playlist](#playlist) `media_content_type` values are supported. diff --git a/source/_integrations/proxmoxve.markdown b/source/_integrations/proxmoxve.markdown index 976f328efda..7bb8b278018 100644 --- a/source/_integrations/proxmoxve.markdown +++ b/source/_integrations/proxmoxve.markdown @@ -6,7 +6,6 @@ ha_category: ha_release: 0.103 ha_iot_class: Local Polling ha_codeowners: - - '@k4ds3' - '@jhollowe' - '@Corbeno' ha_domain: proxmoxve diff --git a/source/_integrations/pvoutput.markdown b/source/_integrations/pvoutput.markdown index 62c1c00f6f4..937868a78d4 100644 --- a/source/_integrations/pvoutput.markdown +++ b/source/_integrations/pvoutput.markdown @@ -7,62 +7,15 @@ ha_release: 0.33 ha_iot_class: Cloud Polling ha_codeowners: - '@fabaff' + - '@frenck' +ha_config_flow: true ha_domain: pvoutput ha_platforms: + - diagnostics - sensor +ha_quality_scale: platinum --- -The `pvoutput` sensor platform consumes information from [PVOutput](https://pvoutput.org/) which were uploaded by your solar photovoltaic (PV) system. +The PVOutput integration consumes information from [PVOutput](https://pvoutput.org/) which was uploaded by your solar photovoltaic (PV) system. -To add PVOutput details to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: pvoutput - system_id: YOUR_SYSTEM_ID - api_key: YOUR_API_KEY -``` - -{% configuration %} -api_key: - description: Your API key. A read-only key is fine. - required: true - type: string -system_id: - description: The ID of your station. - required: true - type: string -name: - description: Name of the sensor. - required: false - default: PVOutput - type: string -{% endconfiguration %} - -To format the PVoutput sensor it's recommended to use the [template component](/topics/templating/). For example: - -{% raw %} - -```yaml -sensor: - - platform: pvoutput - system_id: YOUR_SYSTEM_ID - api_key: YOUR_API_KEY -template: - - sensor: - - name: Power Consumption - state: "{{ state_attr('sensor.pvoutput', 'power_consumption') | float(default=0) }}" - unit_of_measurement: "W" - - name: Energy Consumption - state: "{{ '%0.1f' | format(state_attr('sensor.pvoutput', 'energy_consumption') | float(default=0) / 1000) }}" - unit_of_measurement: "kWh" - - name: Power Generation - state: "{{ state_attr('sensor.pvoutput', 'power_generation') | float(default=0) }}" - unit_of_measurement: "W" - - name: Energy Generation - state: "{{ '%0.2f' | format(state_attr('sensor.pvoutput', 'energy_generation') | float(default=0) / 1000) }}" - unit_of_measurement: "kWh" -``` - -{% endraw %} +{% include integrations/config_flow.md %} diff --git a/source/_integrations/qnap.markdown b/source/_integrations/qnap.markdown index bc0662975c1..66d158da674 100644 --- a/source/_integrations/qnap.markdown +++ b/source/_integrations/qnap.markdown @@ -5,8 +5,6 @@ ha_category: - System Monitor ha_release: 0.38 ha_iot_class: Local Polling -ha_codeowners: - - '@colinodell' ha_domain: qnap ha_platforms: - sensor diff --git a/source/_integrations/rainforest_eagle.markdown b/source/_integrations/rainforest_eagle.markdown index 09765677da7..7496eea30b6 100644 --- a/source/_integrations/rainforest_eagle.markdown +++ b/source/_integrations/rainforest_eagle.markdown @@ -11,6 +11,7 @@ ha_codeowners: - '@jcalbert' ha_domain: rainforest_eagle ha_platforms: + - diagnostics - sensor ha_config_flow: true ha_dhcp: true diff --git a/source/_integrations/rainmachine.markdown b/source/_integrations/rainmachine.markdown index 305e053963e..6fe9444df2e 100644 --- a/source/_integrations/rainmachine.markdown +++ b/source/_integrations/rainmachine.markdown @@ -14,6 +14,7 @@ ha_codeowners: ha_domain: rainmachine ha_platforms: - binary_sensor + - diagnostics - sensor - switch ha_zeroconf: true @@ -39,8 +40,10 @@ Services accept either device IDs or entity IDs, depending on the nature of the - Services that require a device ID as a target: - `rainmachine.pause_watering` - `rainmachine.push_weather_data` + - `rainmachine.restrict_watering` - `rainmachine.stop_all` - `rainmachine.unpause_watering` + - `rainmachine.unrestrict_watering` - Services that require an entity ID as a target (note that the correct entity ID type must be provided, such as a program for a program-related service) - `rainmachine.start_program` - `rainmachine.start_zone` @@ -49,7 +52,7 @@ Services accept either device IDs or entity IDs, depending on the nature of the ### `rainmachine.pause_watering` -Pause all watering activities for a number of seconds. +Pause all watering activities for a number of seconds. After the pause is complete, the previous watering activities will resume. Note that controllers can only be paused for a maximum of 12 hours. | Service Data Attribute | Optional | Description | | ---------------------- | -------- | ------------------------------ | @@ -81,6 +84,14 @@ See details of RainMachine API here: | `pressure` | no | Barametric Pressure (kPa) | | `dewpoint` | no | Dew Point (°C) | +### `rainmachine.restrict_watering` + +Restrict any and all watering activities from staring for a time period. + +| Service Data Attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------ | +| `duration` | no | The time period to restrict (e.g., "01:00:00") | + ### `rainmachine.start_program` Start a RainnMachine program. @@ -107,7 +118,11 @@ Stop a RainMachine zone. ### `rainmachine.unpause_watering` -Unpause all watering activities. +Unpause all paused watering activities. + +### `rainmachine.unrestrict_watering` + +Remove all watering restrictions enforced by `rainmachine.restrict_watering`. ## Switch diff --git a/source/_integrations/raspihats.markdown b/source/_integrations/raspihats.markdown index a91de6b99f7..da010ded807 100644 --- a/source/_integrations/raspihats.markdown +++ b/source/_integrations/raspihats.markdown @@ -13,6 +13,14 @@ ha_platforms: - switch --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `raspihats` integration is the base for all related Raspihats platforms in Home Assistant. There is no setup needed for the integration itself. ## Binary Sensor diff --git a/source/_integrations/rdw.markdown b/source/_integrations/rdw.markdown index ccb9bfd48b4..38c568c993b 100644 --- a/source/_integrations/rdw.markdown +++ b/source/_integrations/rdw.markdown @@ -14,6 +14,7 @@ ha_codeowners: ha_domain: rdw ha_platforms: - binary_sensor + - diagnostics - sensor --- diff --git a/source/_integrations/recollect_waste.markdown b/source/_integrations/recollect_waste.markdown index 643d4a23af7..2ef84e6134c 100644 --- a/source/_integrations/recollect_waste.markdown +++ b/source/_integrations/recollect_waste.markdown @@ -10,6 +10,7 @@ ha_codeowners: - '@bachya' ha_config_flow: true ha_platforms: + - diagnostics - sensor --- diff --git a/source/_integrations/renault.markdown b/source/_integrations/renault.markdown index 1e210b88b85..470b5ac2299 100644 --- a/source/_integrations/renault.markdown +++ b/source/_integrations/renault.markdown @@ -16,6 +16,7 @@ ha_domain: renault ha_platforms: - binary_sensor - button + - diagnostics - device_tracker - sensor - select diff --git a/source/_integrations/repetier.markdown b/source/_integrations/repetier.markdown index 38a37e93d7a..889e909a38a 100644 --- a/source/_integrations/repetier.markdown +++ b/source/_integrations/repetier.markdown @@ -8,6 +8,7 @@ ha_release: 0.94 ha_iot_class: Local Polling ha_codeowners: - '@MTrab' + - '@ShadowBr0ther' ha_domain: repetier ha_platforms: - sensor diff --git a/source/_integrations/ridwell.markdown b/source/_integrations/ridwell.markdown index 70110c66854..2c0c4614541 100644 --- a/source/_integrations/ridwell.markdown +++ b/source/_integrations/ridwell.markdown @@ -10,7 +10,9 @@ ha_codeowners: - '@bachya' ha_config_flow: true ha_platforms: + - diagnostics - sensor + - switch --- The Ridwell integration allows users to track waste recycling pickups scheduled with [Ridwell](https://www.ridwell.com). diff --git a/source/_integrations/roku.markdown b/source/_integrations/roku.markdown index 789a297c2aa..f91547a104d 100644 --- a/source/_integrations/roku.markdown +++ b/source/_integrations/roku.markdown @@ -3,8 +3,10 @@ title: Roku description: Instructions how to integrate Roku devices into Home Assistant. ha_category: - Hub + - Binary Sensor - Media Player - Remote + - Sensor ha_iot_class: Local Polling ha_release: 0.86 ha_domain: roku @@ -15,8 +17,11 @@ ha_codeowners: ha_ssdp: true ha_homekit: true ha_platforms: + - binary_sensor + - diagnostics - media_player - remote + - sensor --- The Roku integration allows you to control a [Roku](https://www.roku.com/) device. @@ -79,33 +84,29 @@ data: ## Media Player -When the Home Assistant Roku integration is enabled and a Roku device has been configured, in the Home Assistant UI the Roku media player will show a listing of the installed channels, or apps, under “source”. Select one and it will attempt to launch the channel on your Roku device. This action can also be automated. Channels can be launched by `name` using a configuration similar to the one below: +When the Home Assistant Roku integration is enabled and a Roku device has been configured, in the Home Assistant UI the Roku media player will show a listing of the installed channels, or apps, under “source”. Select one and it will attempt to launch the channel on your Roku device. + +## Source Automation + +The `media_player.select_source` service may be used to launch specific applications/streaming channels on your Roku device. + +| Service data attribute | Optional | Description | Example | +| ---------------------- | -------- | ----------- | ------- | +| `entity_id` | no | Target a specific media player. | +| `source` | no | An application name or application ID. | Prime Video + +### Examples + ```yaml action: -- target: - entity_id: media_player. +- service: media_player.select_source + target: + entity_id: media_player.roku data: source: "Prime Video" - service: media_player.select_source ``` -Alternatively, the `appID` for the channel can be used for `source:` Although this information is gathered by the Roku integration, at the moment it is not exposed to the end-user. This item might be added in a future release. For now, you can easily get the information yourself. All you need to do is a GET API call on the same network as your device. - -The API calls are like this: - -```txt -GET http://ROKU_IP:8060/query/apps -POST http://ROKU_IP:8060/launch/APP_ID - -YouTube example: -POST http://YOUR_ROKU_IP:8060/launch/837?contentID=YOUR_YOUTUBE_VIDEOS_CONTENT_ID&MediaType=live -``` - -One method of performing the GET request is to open `http://ROKU_IP:8060/query/apps` in your web browser of choice. The Roku will return an XML-formatted list of available channels, including their full name and appID. - -More details can be found on the [Roku dev pages](https://developer.roku.com/docs/developer-program/debugging/external-control-api.md) - -To use this information in Home Assistant, the format is as follows. Note that `source:` is the appID you discovered in the API call: +Alternatively, the application id can be used for `source`. See [Obtaining Application IDs](#obtaining-application-ids). ```yaml action: @@ -116,7 +117,23 @@ action: source: 20197 ``` -It is also possible to tune directly to specific channels if you have a Roku TV and use an OTA antenna. This service only supports `media_channel_type` of 'channel'. `media_content_id` corresponds to the TV channel, which you should see when navigating to these on your TV UI. +### Obtaining Application IDs + +The currently active application ID can be found in the `Active App ID` diagnostic sensor. + +Alternatively, you can make a manual HTTP request (GET) to `http://ROKU_IP:8060/query/apps`, in either your browser or terminal, to retrieve a complete list of installed applications in XML format. + +## TV Channel Tuning + +The `media_player.play_media` service may be used to tune to specific channels on your Roku TV device with OTA antenna. + +| Service data attribute | Optional | Description | Example | +| ---------------------- | -------- | ----------- | ------- | +| `entity_id` | no | Target a specific media player. | +| `media_content_id` | no | A channel number. | 5.1 +| `media_content_type` | no | A media type. | `channel` + +### Example ```yaml action: @@ -128,6 +145,85 @@ action: media_content_type: channel ``` +## Play on Roku + +The `media_player.play_media` service may be used to send media URLs (primarily videos) for direct playback on your device. This feature makes use of the built-in PlayOnRoku application. + +| Service data attribute | Optional | Description | Example | +| ---------------------- | -------- | ----------- | ------- | +| `entity_id` | no | Target a specific media player. | +| `media_content_id` | no | A media URL. | http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 +| `media_content_type` | no | A media type. | `url` +| `extra.format` | no | A media format. Should be one of `mp4` (supports mov and m4v), `wma`, `mp3`, `hls`, `ism` (smooth streaming), `dash` (MPEG-DASH), `mkv`, `mka`, `mks` | `mp4` +| `extra.name` | yes | A name for the media. | Big Buck Bunny + +### Example + +```yaml +action: + - service: media_player.play_media + target: + entity_id: media_player.roku + data: + media_content_id: http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 + media_content_type: url + extra: + format: mp4 + name: Big Buck Bunny +``` + +## Camera Stream Integration + +The `camera.play_stream` service may be used to send camera streams (HLS) directly to your device. This feature requires the `stream` integration and makes use of the built-in PlayOnRoku application. + +### Example +```yaml +action: + service: camera.play_stream + target: + entity_id: camera.camera + data: + media_player: media_player.roku +``` + +## Content Deeplinking + +The `media_player.play_media` service may be used to deep link to content within an application. + +| Service data attribute | Optional | Description | Example | +| ---------------------- | -------- | ----------- | ------- | +| `entity_id` | no | Target a specific media player. | +| `media_content_id` | no | A media identifier. | 291097 +| `media_content_type` | no | A media type. | `app` +| `extra.content_id` | no | A unique content identifier passed to app. | 8e06a8b7-d667-4e31-939d-f40a6dd78a88 +| `extra.media_type` | no | A media type passed to app. Should be one of `movie`, `episode`, `season`, `series`, `shortFormVideo`, `special`, `live` | movie + +### Example + +```yaml +action: + - service: media_player.play_media + target: + entity_id: media_player.roku + data: + media_content_id: 291097 + media_content_type: app + extra: + content_id: 8e06a8b7-d667-4e31-939d-f40a6dd78a88 + media_type: movie +``` + +### Obtaining Content IDs + +Content IDs are unique to each streaming service and vary in format but are often part of the video webpage URL. Here are some examples: + +| Service | App ID | URL Format | Content ID | Media Type +| ------- | ------ | ---------- | ---------- | ---------- | +| Disney Plus | 291097 | disneyplus.com/video/8e06a8b7-d667-4e31-939d-f40a6dd78a88 | 8e06a8b7-d667-4e31-939d-f40a6dd78a88 | movie +| Hulu | 2285 | hulu.com/series/american-dad-977c8e25-cde0-41b7-80ce-e746f2d2093f | american-dad-977c8e25-cde0-41b7-80ce-e746f2d2093f | series +| Spotify | 22297 | open.spotify.com/playlist/5xddIVAtLrZKtt4YGLM1SQ | spotify:playlist:5xddIVAtLrZKtt4YGLM1SQ | playlist +| YouTube | 837 | youtu.be/6ZMXE5PXPqU | 6ZMXE5PXPqU | live + ## Services ### Service `roku.search` diff --git a/source/_integrations/rpi_gpio.markdown b/source/_integrations/rpi_gpio.markdown index 9de4ccdbf24..4fe398843cc 100644 --- a/source/_integrations/rpi_gpio.markdown +++ b/source/_integrations/rpi_gpio.markdown @@ -15,6 +15,14 @@ ha_platforms: - switch --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.6. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `rpi_gpio` integration is the base for all related GPIO platforms in Home Assistant. There is no setup needed for the integration itself, for the platforms please check their corresponding pages. ## Binary Sensor diff --git a/source/_integrations/rpi_gpio_pwm.markdown b/source/_integrations/rpi_gpio_pwm.markdown index c37c29e3f25..dfa863fc2f4 100644 --- a/source/_integrations/rpi_gpio_pwm.markdown +++ b/source/_integrations/rpi_gpio_pwm.markdown @@ -12,6 +12,14 @@ ha_platforms: - light --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `rpi_gpio_pwm` platform allows to control multiple lights using pulse-width modulation, for example LED strips. It supports one-color, RGB and RGBW LEDs driven by GPIOs of a Raspberry Pi (same host or remote) or a PCA9685 controller. For controlling the GPIOs, the platform connects to the [pigpio-daemon](http://abyz.me.uk/rpi/pigpio/pigpiod.html), which must be running. On Raspbian Jessie 2016-05-10 or newer the `pigpio` library is already included. On other operating systems it needs to be installed first (see [installation instructions](https://github.com/soldag/python-pwmled#installation)). diff --git a/source/_integrations/rpi_pfio.markdown b/source/_integrations/rpi_pfio.markdown index 5ad00d8e064..7c9e85a46cf 100644 --- a/source/_integrations/rpi_pfio.markdown +++ b/source/_integrations/rpi_pfio.markdown @@ -13,6 +13,14 @@ ha_platforms: - switch --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `rpi_pfio` integration is the base for all related [PiFace Digital I/O (PFIO)](http://www.piface.org.uk/) platforms in Home Assistant. There is no setup needed for the integration itself; for the platforms, please check their corresponding pages. There is currently support for the following device types within Home Assistant: diff --git a/source/_integrations/rpi_rf.markdown b/source/_integrations/rpi_rf.markdown index 9c1f419ce0d..b4628a4a988 100644 --- a/source/_integrations/rpi_rf.markdown +++ b/source/_integrations/rpi_rf.markdown @@ -10,6 +10,14 @@ ha_platforms: - switch --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `rpi_rf` switch platform allows you to control devices over 433/315MHz LPD/SRD signals with generic low-cost GPIO RF modules on a [Raspberry Pi](https://www.raspberrypi.org/). Interoperable with codes sniffed via [the rpi-rf module](https://pypi.python.org/pypi/rpi-rf) or [rc-switch](https://github.com/sui77/rc-switch). diff --git a/source/_integrations/rtsp_to_webrtc.markdown b/source/_integrations/rtsp_to_webrtc.markdown new file mode 100644 index 00000000000..fd0411f6c60 --- /dev/null +++ b/source/_integrations/rtsp_to_webrtc.markdown @@ -0,0 +1,43 @@ +--- +title: RTSPtoWebRTC +description: Instructions on how to integrate RTSPtoWebRTC server within Home Assistant. +ha_category: + - Camera +ha_config_flow: true +ha_release: 2022.2 +ha_iot_class: Local Push +ha_codeowners: + - '@allenporter' +ha_domain: rtsp_to_webrtc +ha_platforms: + - diagnostics +--- + +The RTSPtoWebRTC integration registers with [camera integration](/integration/camera) to provide WebRTC live streams for any RTSP camera. The integration initiates a connection to a [RTSPtoWeb](https://github.com/deepch/RTSPtoWeb) or [RTSPtoWebRTC](https://github.com/deepch/RTSPtoWebRTC) proxy server that converts an RTSP stream to a WebRTC stream. + +The integraton configuration requires the URL to your server (e.g. `http://example.com:8083`) and will automatically discover which type of server you have. + +{% include integrations/config_flow.md %} + +## Technical Details + +RTSPtoWebRTC registers with the camera integration to override the camera attribute `frontend_stream_type` of `STREAM_TYPE_WEBRTC` to instruct the frontend to use WebRTC streams. + + + +See [WebRTC](https://webrtc.org/) for more technical details on the open standard for real-time communication. Here is a short summary of how it works: + +- The Home Assistant Frontend is a WebRTC client. This just means there is some javascript for initiating a WebRTC stream which creates an *offer*. +- The `webrtc` integration is responsible for *signaling*, passing the *offer* and an RTSP URL to the *RTSPtoWebRTC* server. +- The *RTSPtoWeb{RTC}* server opens the RTSP URL, and returns back an *answer*. +- The Frontend accepts the answer and then establishes a *peer connection* to the *RTSPtoWebRTC* server. +- Establishing a peer connection may be a direct connection on the local network, or using a variety of techniques to communicate through a NAT (e.g. with a STUN server). +- The Frontend then communicates directly with the *RTSPtoWeb{RTC}* proxy server to view the stream. + +See [Getting started with peer connections](https://webrtc.org/getting-started/peer-connections) for more on the technical details. + +## Troubleshooting + +The integration may not work for your particular setup, and Home Assistant cannot support and troubleshoot user problems that are unrelated to the actual integration in Home Assistant. + +The WebRTC stream negotiation process and streaming can very a lot depending on your network setup and camera setup. See the specific audio and video codecs supported at [RTSPtoWeb Limitations](https://github.com/deepch/RTSPtoWeb#limitations) and [RTSPtoWebRTC Limitations](https://github.com/deepch/RTSPtoWebRTC#limitations). diff --git a/source/_integrations/samsungtv.markdown b/source/_integrations/samsungtv.markdown index 26a36ca4fbd..e9b911bc06b 100644 --- a/source/_integrations/samsungtv.markdown +++ b/source/_integrations/samsungtv.markdown @@ -12,6 +12,7 @@ ha_codeowners: ha_domain: samsungtv ha_ssdp: true ha_platforms: + - diagnostics - media_player ha_zeroconf: true ha_dhcp: true diff --git a/source/_integrations/screenlogic.markdown b/source/_integrations/screenlogic.markdown index 8ef314b9667..6552630305d 100644 --- a/source/_integrations/screenlogic.markdown +++ b/source/_integrations/screenlogic.markdown @@ -13,6 +13,7 @@ ha_config_flow: true ha_dhcp: true ha_codeowners: - '@dieselrabbit' + - '@bdraco' ha_domain: screenlogic ha_platforms: - binary_sensor diff --git a/source/_integrations/select.mqtt.markdown b/source/_integrations/select.mqtt.markdown index 3a0b5808f0f..cdc9e634860 100644 --- a/source/_integrations/select.mqtt.markdown +++ b/source/_integrations/select.mqtt.markdown @@ -116,6 +116,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/sensehat.markdown b/source/_integrations/sensehat.markdown index 6f7a303f250..99a8d580de7 100644 --- a/source/_integrations/sensehat.markdown +++ b/source/_integrations/sensehat.markdown @@ -13,6 +13,14 @@ ha_platforms: - sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ There is currently support for the following device types within Home Assistant: - [Light](#light) diff --git a/source/_integrations/senseme.markdown b/source/_integrations/senseme.markdown new file mode 100644 index 00000000000..692a7cb72c5 --- /dev/null +++ b/source/_integrations/senseme.markdown @@ -0,0 +1,35 @@ +--- +title: SenseME +description: Instructions on how to integrate SenseME devices into Home Assistant. +ha_category: + - Binary Sensor + - Fan + - Light + - Select + - Switch +ha_dhcp: true +ha_release: 2022.2 +ha_iot_class: Local Push +ha_codeowners: + - '@mikelawrence' + - '@bdraco' +ha_domain: senseme +ha_config_flow: true +ha_platforms: + - binary_sensor + - fan + - light + - select + - switch +--- + +Integrates SenseME devices into Home Assistant. + +The SenseME integration supports devices that speak the [SenseME](https://www.bigassfans.com/senseme/) protocol. + +### Supported devices + +- Haiku Fans with SenseME +- Haiku Lights with SenseME (discontinued) + +{% include integrations/config_flow.md %} diff --git a/source/_integrations/sensibo.markdown b/source/_integrations/sensibo.markdown index 386d16243b3..9f4ceef1249 100644 --- a/source/_integrations/sensibo.markdown +++ b/source/_integrations/sensibo.markdown @@ -5,51 +5,28 @@ ha_category: - Climate ha_release: 0.44 ha_iot_class: Cloud Polling +ha_config_flow: true ha_codeowners: - '@andrey-git' + - '@gjohansson-ST' ha_domain: sensibo ha_platforms: - climate +ha_homekit: true --- Integrates [Sensibo](https://sensibo.com) Air Conditioning controller into Home Assistant. -To enable this platform, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -climate: - - platform: sensibo - api_key: YOUR_API_KEY -``` - -{% configuration %} -api_key: - description: Your Sensibo API key (To get your API key visit `https://home.sensibo.com/me/api`). - required: true - type: string -id: - description: A unit ID or a list of IDs. If none specified then all units accessible by the `api_key` will be used. - required: false - type: string -{% endconfiguration %} +## Prerequisites +Please click [here](https://home.sensibo.com/me/api) and register to obtain the API key.
If you create the API key using a dedicated user (and not your main user), then in the Sensibo app log you will be able to distinguish between actions done in the app and actions done by Home Assistant.
-## Full configuration example - -```yaml -climate: - - platform: sensibo - api_key: YOUR_API_KEY - id: - - id1 - - id2 -``` +{% include integrations/config_flow.md %} ## Adding a quick switch example diff --git a/source/_integrations/sensor.command_line.markdown b/source/_integrations/sensor.command_line.markdown index c15e824401b..011c5b4446d 100644 --- a/source/_integrations/sensor.command_line.markdown +++ b/source/_integrations/sensor.command_line.markdown @@ -54,6 +54,10 @@ json_attributes: description: Defines a list of keys to extract values from a JSON dictionary result and then set as sensor attributes. required: false type: [string, list] +unique_id: + description: An ID that uniquely identifies this sensor. Set this to a unique value to allow customization through the UI. + required: false + type: string {% endconfiguration %} ## Execution diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown index 7fe06c8f907..c2ce41b46ad 100644 --- a/source/_integrations/sensor.markdown +++ b/source/_integrations/sensor.markdown @@ -17,6 +17,7 @@ Some of these sensors are built-in to Home Assistant, some are created automatic The type of data a sensor returns impacts how it is displayed in the frontend. This is controlled by the sensor's device class designation. Built-in sensors and many created from an integration will have this designation predefined. Those can be modified in the [customize section](/docs/configuration/customizing-devices/). When manually creating a new sensor the device class may be optionally assigned. A full list of available sensor device classes is below: - **None**: Generic sensor. This is the default and doesn't need to be set. +- **apparent_power**: Apparent power in VA. - **aqi**: Air Quality Index - **battery**: Percentage of battery that is left. - **carbon_dioxide**: Carbon Dioxide in CO2 (Smoke) @@ -39,6 +40,7 @@ The type of data a sensor returns impacts how it is displayed in the frontend. T - **power_factor**: Power factor in %. - **power**: Power in W or kW. - **pressure**: Pressure in hPa or mbar. +- **reactive_power**: Reactive power in var. - **signal_strength**: Signal strength in dB or dBm. - **sulphur_dioxide**: Concentration of sulphur dioxide in µg/m³ - **temperature**: Temperature in °C or °F. diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown index 305bd6bdd42..c529e87481d 100644 --- a/source/_integrations/sensor.mqtt.markdown +++ b/source/_integrations/sensor.mqtt.markdown @@ -110,7 +110,7 @@ enabled_by_default: type: boolean default: true encoding: - description: The encoding of the payload received at `state_topic` and availability topics `availability_topic` and `topic`. Set to `""` to disable decoding. + description: The encoding of the payloads received. Set to `""` to disable decoding of incoming payload. required: false type: string default: "utf-8" diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown index 1f79b32e213..a2ca790db55 100644 --- a/source/_integrations/shelly.markdown +++ b/source/_integrations/shelly.markdown @@ -22,6 +22,7 @@ ha_zeroconf: true ha_platforms: - binary_sensor - button + - diagnostics - climate - cover - light diff --git a/source/_integrations/sht31.markdown b/source/_integrations/sht31.markdown index 79406c0de61..cb9d3deb84f 100644 --- a/source/_integrations/sht31.markdown +++ b/source/_integrations/sht31.markdown @@ -10,6 +10,14 @@ ha_platforms: - sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The `sht31` sensor platform allows you to get the current temperature and humidity from a Sensirion SHT31 device. ## Configuration diff --git a/source/_integrations/signal_messenger.markdown b/source/_integrations/signal_messenger.markdown index e01b8813988..f579326d142 100644 --- a/source/_integrations/signal_messenger.markdown +++ b/source/_integrations/signal_messenger.markdown @@ -90,3 +90,21 @@ action: attachments: - "/tmp/surveillance_camera.jpg" ``` + +### Text message with an attachment from a URL + +To attach files from outside of HomeAssistant, the URLs must be added to the [`allowlist_external_urls`](/docs/configuration/basic/#allowlist_external_urls) list. + +Note there is a 50MB size limit for attachments retrieved via URLs. You can also set `verify_ssl` to `false` to ignore SSL errors (default `true`). + +```yaml +... +action: + service: notify.NOTIFIER_NAME + data: + message: "Person detected on Front Camera!" + data: + verify_ssl: false + urls: + - "http://homeassistant.local/api/frigate/notifications//thumbnail.jpg" +``` diff --git a/source/_integrations/simplisafe.markdown b/source/_integrations/simplisafe.markdown index 234388d2b4b..436ae0e9032 100644 --- a/source/_integrations/simplisafe.markdown +++ b/source/_integrations/simplisafe.markdown @@ -13,6 +13,7 @@ ha_domain: simplisafe ha_platforms: - alarm_control_panel - binary_sensor + - diagnostics - lock - sensor ha_dhcp: true diff --git a/source/_integrations/smhi.markdown b/source/_integrations/smhi.markdown index 28f644fc5c6..78ecf1c5071 100644 --- a/source/_integrations/smhi.markdown +++ b/source/_integrations/smhi.markdown @@ -10,6 +10,8 @@ ha_config_flow: true ha_domain: smhi ha_platforms: - weather +ha_codeowners: + - '@gjohansson-ST' --- The `smhi` integration adds support for the [SMHI.se](https://www.smhi.se/) web service as a source for meteorological data for your location. diff --git a/source/_integrations/solax.markdown b/source/_integrations/solax.markdown index 33ec8d6fa78..8604e1665cc 100644 --- a/source/_integrations/solax.markdown +++ b/source/_integrations/solax.markdown @@ -11,32 +11,14 @@ ha_codeowners: ha_domain: solax ha_platforms: - sensor +ha_config_flow: true --- The `solax` integration connects Home Assistant to Solax solar power inverters. Solax inverters may be connected to a home Wi-Fi network and expose a REST API. This integration retrieves information such as photovoltaic power production, battery levels and power, and how much power is being fed back into the grid. ## Configuration -To use the Solax sensors in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: solax - ip_address: IP_ADDRESS -``` - -{% configuration %} -ip_address: - description: The IP address of your Solax system. - required: true - type: string -port: - required: false - type: integer - default: 80 - description: The port number -{% endconfiguration %} +{% include integrations/config_flow.md %} ### Optional template sensor diff --git a/source/_integrations/soma.markdown b/source/_integrations/soma.markdown index cefb87e17b3..f205a4b7ed9 100644 --- a/source/_integrations/soma.markdown +++ b/source/_integrations/soma.markdown @@ -9,6 +9,7 @@ ha_config_flow: true ha_release: '0.100' ha_codeowners: - '@ratsept' + - '@sebfortier2288' ha_domain: soma ha_platforms: - cover diff --git a/source/_integrations/somfy.markdown b/source/_integrations/somfy.markdown index be05c6c4846..52739144e06 100644 --- a/source/_integrations/somfy.markdown +++ b/source/_integrations/somfy.markdown @@ -17,7 +17,7 @@ ha_platforms: - switch --- -The Somfy integration will allow users to integrate their Somfy devices into Home Assistant using the [official API](https://developer.somfy.com/somfy-open-api/apis), unlike the [Tahoma](/integrations/tahoma/) integration. +The Somfy integration will allow users to integrate their Somfy devices into Home Assistant using the [official API](https://developer.somfy.com/somfy-open-api/apis). ## Installation @@ -71,31 +71,3 @@ optimistic: **optimistic** mode should only be used when the integration is not able to gain information on whether a cover is open or closed (e.g., [RTS](https://www.somfysystems.com/en-us/discover-somfy/technology/radio-technology-somfy) devices). It will attempt to track the status within Home Assistant. This mode should only be used if Home Assistant is the only way you operate the blind. If you also use the physical remote control or the Somfy app, Home Assistant will become out of sync. {% include integrations/config_flow.md %} - -### Potential duplicate with the Tahoma integration - -If you use the [Tahoma](/integrations/tahoma) integration, you will have to exclude the covers added by this one. Otherwise, they will be added twice. - -```yaml -# Example configuration.yaml entry -tahoma: - username: YOUR_USERNAME - password: YOUR_PASSWORD - exclude: - [ - "rts:RollerShutterRTSComponent", - "rts:CurtainRTSComponent", - "rts:BlindRTSComponent", - "rts:VenetianBlindRTSComponent", - "rts:DualCurtainRTSComponent", - "rts:ExteriorVenetianBlindRTSComponent", - "io:ExteriorVenetianBlindIOComponent", - "io:RollerShutterUnoIOComponent", - "io:RollerShutterWithLowSpeedManagementIOComponent", - "io:RollerShutterVeluxIOComponent", - "io:RollerShutterGenericIOComponent", - "io:WindowOpenerVeluxIOComponent", - "io:VerticalExteriorAwningIOComponent", - "io:HorizontalAwningIOComponent", - ] -``` diff --git a/source/_integrations/sonos.markdown b/source/_integrations/sonos.markdown index 21657300d35..d9e4cfafb3a 100644 --- a/source/_integrations/sonos.markdown +++ b/source/_integrations/sonos.markdown @@ -15,6 +15,7 @@ ha_codeowners: ha_ssdp: true ha_platforms: - binary_sensor + - diagnostics - media_player - number - sensor @@ -28,13 +29,21 @@ The `sonos` integration allows you to control your [Sonos](https://www.sonos.com ## Feature controls & sensors -Speaker-level features are exposed as `number` or `switch` entities which report current values and allow direct control. +Speaker-level controls are exposed as `number` or `switch` entities. Additionally, various `sensor` and `binary_sensor` entities are provided. -- **All devices**: Bass, Treble, Crossfade, Status Light, Touch Controls -- **Home theater devices**: Night Sound, Speech Enhancement, Surround Enabled, Audio Input Format (read-only) +### Controllable features + +- **All devices**: Alarms, Bass, Treble, Crossfade, Status Light, Touch Controls +- **Home theater devices**: Audio Delay (aka "Lip Sync"), Night Sound, Speech Enhancement, Surround Enabled - **When paired with a sub**: Subwoofer Enabled -## Battery support +### Sensors + +- **Devices with battery**: Battery level, Power state +- **Home theater devices**: Audio Input Format +- **Voice-enabled devices**: Microphone Enabled + +### Battery support notes Battery sensors are fully supported for the `Sonos Roam` and `Sonos Move` devices on S2 firmware. `Sonos Move` speakers still on S1 firmware are supported but may update infrequently. @@ -46,10 +55,14 @@ The battery sensors rely on working change events or updates will be delayed. S1
-## Alarm support +### Alarm support notes The Sonos integration adds one `switch` for each alarm set in the Sonos app. The alarm switches are detected, deleted and assigned automatically and come with several attributes that help to monitor Sonos alarms. +### Microphone support notes + +The microphone can only be enabled/disabled from physical buttons on the Sonos device and cannot be controlled from Home Assistant. A `binary_sensor` reports its current state. + ## Playing media Sonos accepts a variety of `media_content_id` formats in the `media_player.play_media` service, but most commonly as URIs. For example, both Spotify and Tidal share links can be provided as-is. Playback of [music hosted on a Plex server](/integrations/plex#sonos-playback) is possible. Direct HTTP/HTTPS links to local or remote media files can also be used if the Sonos device can reach the URI directly, but specific media encoding support may vary. diff --git a/source/_integrations/statistics.markdown b/source/_integrations/statistics.markdown index 0d164fffcdf..dd76cab4cb8 100644 --- a/source/_integrations/statistics.markdown +++ b/source/_integrations/statistics.markdown @@ -9,6 +9,7 @@ ha_release: '0.30' ha_quality_scale: internal ha_codeowners: - '@fabaff' + - '@ThomDietrich' ha_domain: statistics ha_platforms: - sensor @@ -141,4 +142,8 @@ quantile_method: required: false default: exclusive type: string +unique_id: + description: An ID that uniquely identifies the statistics sensor. Set this to a unique value to allow customization through the UI. Change the unique ID after switching the `state_characteristic` of a previously configured sensor, to start with a fresh recorder history. + required: false + type: string {% endconfiguration %} diff --git a/source/_integrations/steamist.markdown b/source/_integrations/steamist.markdown new file mode 100644 index 00000000000..2ab073a545c --- /dev/null +++ b/source/_integrations/steamist.markdown @@ -0,0 +1,26 @@ +--- +title: Steamist +description: Documentation about Steamist steam showers. +ha_category: + - Sensor + - Switch +ha_iot_class: Local Polling +ha_release: 2022.2 +ha_config_flow: true +ha_codeowners: + - '@bdraco' +ha_dhcp: true +ha_domain: steamist +ha_platforms: + - sensor + - switch +--- + +The Steamist will allow you to monitor the state of your [Steamist](https://steamist.com/digital-controls/) steam shower and turn on and off the steam generator. + +## Supported Devices + +- 450 Digital Control +- 550 Digital Control + +{% include integrations/config_flow.md %} diff --git a/source/_integrations/stookalert.markdown b/source/_integrations/stookalert.markdown index 8e792ebe977..ffe37429e82 100644 --- a/source/_integrations/stookalert.markdown +++ b/source/_integrations/stookalert.markdown @@ -13,6 +13,7 @@ ha_domain: stookalert ha_config_flow: true ha_platforms: - binary_sensor + - diagnostics --- The Stookalert integration queries the [RIVM Stookalert](https://www.rivm.nl/stookalert) API for unfavorable weather conditions or poor air quality. With a Stookalert, the RIVM calls on people not to burn wood. This can prevent health problems in people in the area. diff --git a/source/_integrations/stream.markdown b/source/_integrations/stream.markdown index 1fe21fb826e..a6eb09e0c4b 100644 --- a/source/_integrations/stream.markdown +++ b/source/_integrations/stream.markdown @@ -17,26 +17,43 @@ The stream integration provides a way to proxy live streams through Home Assista ## Configuration -The `stream` integration is automatically loaded by `default_config` and enabled by the `camera` platforms that support it. If `default_config` is used, no separate `configuration.yaml` entry is necessary. If `default_config` is not used, the `stream` integration can be activated with the entry below: +The `stream` integration is automatically loaded by `default_config` and enabled by the `camera` platforms that support it. If `default_config` is used, no separate `configuration.yaml` entry is necessary. However, there are some extra options you can configure. -```yaml -# Example configuration.yaml entry. There are no additional options. -stream: -``` +{% configuration %} +ll_hls: + description: Allows disabling Low Latency HLS (LL-HLS) + required: false + type: boolean + default: true +segment_duration: + description: The duration of each HLS segment, in seconds (between 2 and 10) + type: float + required: false + default: 6 +part_duration: + description: The duration of each part within a segment, in seconds (between 0.2 and 1.5) + type: float + required: false + default: 1 +{% endconfiguration %} -## LL-HLS +## LL-HLS - Low Latency HLS -There is the option to enable LL-HLS for lower latency. Please note that LL-HLS has strict timing and network requirements that can be hard to meet, so this option may not work on all setups. As HTTP/2 is required by the LL-HLS specification, the use of an HTTP/2 enabled reverse proxy is strongly recommended. -To enable LL-HLS, add the following to your `configuration.yaml`: +LL-HLS reduces the start time and delay for a stream, but it has strict timing and network requirements and opens additional browser connections. To avoid running into browser limits it is strongly recommended to use an HTTP/2 proxy (e.g., NGINX or haproxy) to take advantage of request pipelining. LL-HLS is enabled by default, but when not using HTTP/2, the Home Assistant frontend will revert back to regular HLS if too many streams are open. + +You can further adjust LL-HLS settings in `configuration.yaml` as it may perform better or worse with different values depending on your network setup, cameras, or whether or not they are local or cloud. + +Example configuration: ```yaml # Example LL-HLS configuration.yaml entry. stream: ll_hls: true - part_duration: 0.75 # Range of 0.2 to 1.5 - segment_duration: 6 # Range of 2 to 10 + part_duration: 0.75 + segment_duration: 6 ``` + ## Technical Details The integration currently supports proxying H.264 and H.265 source streams to the HLS protocol and requires at least FFmpeg >= 4. Note that H.265 support is limited to Safari, iOS, and Android. The `stream` integration also provides limited support for audio. PCM codecs (e.g. G.711/G.723/G.726/G.729) are not supported. ADTS AAC audio is also currently not supported. Most other AAC and MP3 encoded audio should work. diff --git a/source/_integrations/switch.command_line.markdown b/source/_integrations/switch.command_line.markdown index b563c421564..7edafef40ec 100644 --- a/source/_integrations/switch.command_line.markdown +++ b/source/_integrations/switch.command_line.markdown @@ -65,6 +65,10 @@ switches: required: false type: integer default: 15 + unique_id: + description: An ID that uniquely identifies this switch. Set this to a unique value to allow customization through the UI. + required: false + type: string {% endconfiguration %} A note on `friendly_name`: diff --git a/source/_integrations/switch.mqtt.markdown b/source/_integrations/switch.mqtt.markdown index 36a380f6c88..3c401acbeac 100644 --- a/source/_integrations/switch.mqtt.markdown +++ b/source/_integrations/switch.mqtt.markdown @@ -119,6 +119,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/switcher_kis.markdown b/source/_integrations/switcher_kis.markdown index 93230033fad..d0a0b607232 100644 --- a/source/_integrations/switcher_kis.markdown +++ b/source/_integrations/switcher_kis.markdown @@ -13,6 +13,7 @@ ha_platforms: - sensor - switch ha_config_flow: true +ha_quality_scale: platinum --- This `Switcher` integration allows you to control your [Switcher Devices](https://www.switcher.co.il/). diff --git a/source/_integrations/synology_dsm.markdown b/source/_integrations/synology_dsm.markdown index ca0dc7a18a5..376c1f9f151 100644 --- a/source/_integrations/synology_dsm.markdown +++ b/source/_integrations/synology_dsm.markdown @@ -16,6 +16,8 @@ ha_ssdp: true ha_platforms: - binary_sensor - camera + - button + - diagnostics - sensor - switch --- @@ -103,20 +105,12 @@ A switch is available to enable/disable the [Surveillance Station](https://www.s For each camera added in [Surveillance Station](https://www.synology.com/en-us/surveillance), a camera will be created in Home Assistant. -## Services +## Buttons -### Service `synology_dsm.reboot` +### Button `reboot` -Reboot the specified NAS by `serial`. If only one DSM is configured, `serial` is optional. +Reboot the NAS. - | Service data attribute | Required | Description | - | ---------------------- | -------- | ----------- | - | `serial` | yes, when multiple NAS are configured | serial of DSM | +### Button `shutdown` -### Service `synology_dsm.shutdown` - -Shutdown the specified NAS by `serial`. If only one DSM is configured, `serial` is optional. - - | Service data attribute | Required | Description | - | ---------------------- | -------- | ----------- | - | `serial` | yes, when multiple NAS are configured | serial of DSM | +Shutdown the NAS. diff --git a/source/_integrations/tado.markdown b/source/_integrations/tado.markdown index 1b09bda080c..f37859d266c 100644 --- a/source/_integrations/tado.markdown +++ b/source/_integrations/tado.markdown @@ -13,7 +13,6 @@ ha_release: 0.41 ha_iot_class: Cloud Polling ha_codeowners: - '@michaelarnauts' - - '@noltari' ha_domain: tado ha_config_flow: true ha_homekit: true diff --git a/source/_integrations/tahoma.markdown b/source/_integrations/tahoma.markdown deleted file mode 100644 index fcfa612d2c5..00000000000 --- a/source/_integrations/tahoma.markdown +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Tahoma -description: Instructions on how to integrate Somfy Tahoma devices with Home Assistant. -ha_category: - - Hub - - Binary Sensor - - Cover - - Lock - - Scene - - Switch - - Sensor -ha_release: 0.59 -ha_iot_class: Cloud Polling -ha_codeowners: - - '@philklei' -ha_domain: tahoma -ha_platforms: - - binary_sensor - - cover - - lock - - scene - - sensor - - switch ---- - -The Tahoma integration is used as an interface to the [tahomalink.com](https://www.tahomalink.com) website. It adds covers, scenes and a sun sensor from the Tahoma platform. - -There is currently support for the following device types within Home Assistant: - -- Binary Sensor -- Sensor -- Cover -- Lock -- Switch -- Scene - -## Configuration - -To use your Tahoma devices in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -tahoma: - username: "YOUR_USERNAME" - password: "YOUR_PASSWORD" - exclude: - - "BridgeHUEComponent" - - "HueLampHUEComponent" - - "PodComponent" -``` - -{% configuration %} -username: - description: Your username for tahomalink.com. - required: true - type: string -password: - description: Your password for tahomalink.com. - required: true - type: string -exclude: - description: List of devices to exclude. - required: false - type: list -{% endconfiguration %} - -This also works with the Somfy Connexoon. Check [here](https://www.somfy.nl/keuzehulp/verschillen-tahoma-en-connexoon) for the differences between the bridges. diff --git a/source/_integrations/tailscale.markdown b/source/_integrations/tailscale.markdown index aa4068171eb..0e3bb6c58f4 100644 --- a/source/_integrations/tailscale.markdown +++ b/source/_integrations/tailscale.markdown @@ -13,6 +13,7 @@ ha_codeowners: ha_domain: tailscale ha_platforms: - binary_sensor + - diagnostics - sensor ha_quality_scale: platinum --- diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown index d7252f448f8..9c6ff692538 100644 --- a/source/_integrations/template.markdown +++ b/source/_integrations/template.markdown @@ -15,6 +15,7 @@ ha_domain: template ha_platforms: - alarm_control_panel - binary_sensor + - button - cover - fan - light @@ -29,7 +30,7 @@ ha_platforms: The `template` integration allows creating entities which derive their values from other data. This is done by specifying [templates](/docs/configuration/templating/) for properties of an entity, like the name or the state. -Sensors, binary (on/off) sensors, numbers and selects are covered on this page. For other types, please see the specific pages: +Sensors, binary (on/off) sensors, buttons, numbers and selects are covered on this page. For other types, please see the specific pages: - [Alarm Control Panel](/integrations/alarm_control_panel.template/) - [Cover](/integrations/cover.template/) @@ -40,7 +41,7 @@ Sensors, binary (on/off) sensors, numbers and selects are covered on this page. - [Vacuum](/integrations/vacuum.template/) - [Weather](/integrations/weather.template/) -Sensor, binary sensor, number and select template entities are defined in your YAML configuration files, directly under the `template:` key and cannot be configured via the UI. You can define multiple configuration blocks as a list. Each block defines sensor/binary sensor/number/select entities and can contain an optional update trigger. +Sensor, binary sensor, button, number and select template entities are defined in your YAML configuration files, directly under the `template:` key and cannot be configured via the UI. You can define multiple configuration blocks as a list. Each block defines sensor/binary sensor/number/select entities and can contain an optional update trigger. _For old sensor/binary sensor configuration format, [see below](#legacy-binary-sensor-configuration-format)._ @@ -219,8 +220,17 @@ select: required: false type: boolean default: false -"[all sensor, binary sensor, number, select entities]": - description: Fields that can be used above for sensors, binary sensors, numbers, and selects. +button: + description: List of buttons + required: true + type: map + keys: + press: + description: Defines actions to run to press the button. + required: true + type: action +"[all sensor, binary sensor, button, number, select entities]": + description: Fields that can be used above for sensors, binary sensors, buttons, numbers, and selects. required: false type: map keys: diff --git a/source/_integrations/tibber.markdown b/source/_integrations/tibber.markdown index a248c77d7ee..b8fb2211662 100644 --- a/source/_integrations/tibber.markdown +++ b/source/_integrations/tibber.markdown @@ -13,12 +13,13 @@ ha_codeowners: ha_domain: tibber ha_config_flow: true ha_platforms: + - diagnostics - notify - sensor --- The `tibber` integration provides a sensor with the current electricity price if you are a [Tibber](https://tibber.com/) customer. -If you have a [Tibber Pulse](https://norge.tibber.com/products/pulse/) or [Watty](https://tibber.com/se/store/produkt/watty-smart-energimatare) it will also show the electricity consumption in real time. +If you have a [Tibber Pulse](https://norge.tibber.com/products/pulse/) or [Watty](https://tibber.com/se/store/produkt/watty-smart-energimatare) it will also show the electricity consumption in real-time. If you do not have a real-time meter, you get a sensor for monthly consumption, monthly cost, and monthly peak hour updated once per day. Once a day a statistics with hourly consumption and cost data is generated that can be used in the [Energy Dashboard](/docs/energy/). (The ids are `tibber:energy_consumption_HOMEID` and `tibber:energy_totalcost_HOMEID` ) There is currently support for the following device types within Home Assistant: diff --git a/source/_integrations/tile.markdown b/source/_integrations/tile.markdown index ad1a9bf56be..b1fd53c4e4a 100644 --- a/source/_integrations/tile.markdown +++ b/source/_integrations/tile.markdown @@ -10,6 +10,7 @@ ha_codeowners: ha_domain: tile ha_config_flow: true ha_platforms: + - diagnostics - device_tracker --- diff --git a/source/_integrations/todoist.markdown b/source/_integrations/todoist.markdown index 2ed6c8cc104..db1ea1bab1a 100644 --- a/source/_integrations/todoist.markdown +++ b/source/_integrations/todoist.markdown @@ -156,6 +156,8 @@ Here are two example JSON payloads resulting in the same task: - **labels** (*Optional*): Any labels you want to add to the task, separated by commas. +- **assignee** (*Optional*): A member's username of a shared project to assign this task to. You find the username formatted as bold text in the collaborator menu of a shared project. + - **priority** (*Optional*): The priority of the task, from 1-4. Again, 1 means least important, and 4 means most important. - **due_date_string** (*Optional*): When the task should be due, in [natural language](https://get.todoist.help/hc/articles/205325931-Dates-and-Times). Mutually exclusive with `due_date` diff --git a/source/_integrations/tof.markdown b/source/_integrations/tof.markdown index 81e7edd91f7..2fcd761612a 100644 --- a/source/_integrations/tof.markdown +++ b/source/_integrations/tof.markdown @@ -11,6 +11,14 @@ ha_platforms: - sensor --- +
+ +This integration is deprecated and will be removed in Home Assistant Core 2022.4. + +For more information see: [Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +
+ The Time of Flight sensor uses an invisible laser to measure distance with millimeter resolution. Tested devices: diff --git a/source/_integrations/totalconnect.markdown b/source/_integrations/totalconnect.markdown index 45dd9ad2334..26237174fe4 100644 --- a/source/_integrations/totalconnect.markdown +++ b/source/_integrations/totalconnect.markdown @@ -50,6 +50,15 @@ automation: service: scene.turn_on target: entity_id: scene.OnArmedAway + - alias: "Alarm: Arm Home Instant at Sunset" + trigger: + platform: sun + event: sunset + offset: '0' + action: + service: totalconnect.arm_home_instant + target: + entity_id: alarm_control_panel.total_connect ``` {% details "Notes for Home Assistant Core Installations" %} @@ -66,7 +75,7 @@ sudo apt install libxml2-dev libxmlsec1-dev The integration provides an Alarm Control Panel for each TotalConnect location. It uses the name of your location from TotalConnect. For example, if your location name in TotalConnect is "Home", then you will get `alarm_control_panel.home` in Home Assistant. -The alarm control panel supports the following services: `alarm_arm_away`, `alarm_arm_home`, `alarm_arm_night` and `alarm_disarm`. +The alarm control panel supports the following services: `alarm_arm_away`, `alarm_arm_home`, `alarm_arm_night`, and `alarm_disarm`. The integration also provides unique services for `totalconnect.arm_home_instant` and `totalconnect.arm_away_instant` which arm the system with zero entry delay, triggering the alarm instantly if someone opens a door. The `triggered` state also provides a state attribute called `triggered_source` giving more detail on what triggered the alarm: diff --git a/source/_integrations/trafikverket_train.markdown b/source/_integrations/trafikverket_train.markdown index 49a326c4ae1..6038e4de159 100644 --- a/source/_integrations/trafikverket_train.markdown +++ b/source/_integrations/trafikverket_train.markdown @@ -8,6 +8,7 @@ ha_release: 0.96 ha_iot_class: Cloud Polling ha_codeowners: - '@endor-force' + - '@gjohansson-ST' ha_domain: trafikverket_train ha_platforms: - sensor diff --git a/source/_integrations/trafikverket_weatherstation.markdown b/source/_integrations/trafikverket_weatherstation.markdown index 6971df71739..87071698208 100644 --- a/source/_integrations/trafikverket_weatherstation.markdown +++ b/source/_integrations/trafikverket_weatherstation.markdown @@ -9,6 +9,7 @@ ha_config_flow: true ha_domain: trafikverket_weatherstation ha_codeowners: - '@endor-force' + - '@gjohansson-ST' ha_platforms: - sensor --- diff --git a/source/_integrations/tuya.markdown b/source/_integrations/tuya.markdown index 8bf651a4ab3..a75ff1fd232 100644 --- a/source/_integrations/tuya.markdown +++ b/source/_integrations/tuya.markdown @@ -26,9 +26,11 @@ ha_codeowners: - '@METISU' - '@frenck' ha_platforms: + - alarm_control_panel - binary_sensor - camera - button + - diagnostics - climate - cover - fan diff --git a/source/_integrations/twentemilieu.markdown b/source/_integrations/twentemilieu.markdown index 6795f6015c4..9efcb757a29 100644 --- a/source/_integrations/twentemilieu.markdown +++ b/source/_integrations/twentemilieu.markdown @@ -11,6 +11,7 @@ ha_codeowners: - '@frenck' ha_domain: twentemilieu ha_platforms: + - diagnostics - sensor ha_quality_scale: platinum --- diff --git a/source/_integrations/twinkly.markdown b/source/_integrations/twinkly.markdown index 6d5cb600a04..7afb530ebdb 100644 --- a/source/_integrations/twinkly.markdown +++ b/source/_integrations/twinkly.markdown @@ -9,8 +9,10 @@ ha_domain: twinkly ha_iot_class: Local Polling ha_codeowners: - '@dr1rrb' + - '@Robbie1221' ha_platforms: - light +ha_dhcp: true --- The Twinkly integration allows you to control [Twinkly](https://twinkly.com/) LED string from Home Assistant. diff --git a/source/_integrations/ubus.markdown b/source/_integrations/ubus.markdown index 4ed1603edf2..65a531ac900 100644 --- a/source/_integrations/ubus.markdown +++ b/source/_integrations/ubus.markdown @@ -8,8 +8,6 @@ ha_iot_class: Local Polling ha_domain: ubus ha_platforms: - device_tracker -ha_codeowners: - - '@noltari' --- This is a presence detection scanner for [OpenWrt](https://openwrt.org/) using [ubus](https://wiki.openwrt.org/doc/techref/ubus). It scans for changes in `hostapd.*`, which will detect and report changes in devices connected to the access point on the router. diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown index 2b03ef67c00..81b23f872d6 100644 --- a/source/_integrations/unifi.markdown +++ b/source/_integrations/unifi.markdown @@ -15,6 +15,7 @@ ha_codeowners: ha_domain: unifi ha_ssdp: true ha_platforms: + - diagnostics - device_tracker - sensor - switch diff --git a/source/_integrations/unifiprotect.markdown b/source/_integrations/unifiprotect.markdown new file mode 100644 index 00000000000..042ac33b0c8 --- /dev/null +++ b/source/_integrations/unifiprotect.markdown @@ -0,0 +1,234 @@ +--- +title: UniFi Protect +description: Instructions on how to configure the Ubiquiti UniFi Protect integration. +ha_category: + - Hub + - Binary Sensor + - Button + - Camera + - Light + - Lock + - Media Player + - Number + - Select + - Sensor + - Switch +ha_dhcp: true +ha_ssdp: true +ha_release: 2022.2 +ha_iot_class: Local Push +ha_config_flow: true +ha_quality_scale: platinum +ha_codeowners: + - '@briis' + - '@AngellusMortis' + - '@bdraco' +ha_domain: unifiprotect +ha_platforms: + - binary_sensor + - camera + - button + - light + - lock + - media_player + - number + - sensor + - select + - switch +--- + +The UniFi Protect integration adds support for retrieving Camera feeds and Sensor data from a [UniFi Protect application](https://ui.com/camera-security) by [Ubiquiti Networks, inc.](https://www.ui.com/) that is running on a UniFi OS Console. + +## Prerequisites + +### Hardware Support + +This Integration supports all UniFi OS Consoles that can run UniFi Protect. Currently, this includes: + +* Any UniFi Protect Network Video Recorder (**UNVR** or **UNVRPRO**) +* Any UniFi "Dream" device (**UDM**, **UDMPRO**, **UDR**, or **UDMSE**) +* UniFi Cloud Key Gen2 Plus (**UCKP**) firmware version v2.0.24+ + +UCKP with Firmware v1.x **do NOT run UniFi OS**, you must upgrade to firmware v2.0.24 or newer. + +### Software Support + +The absolute **minimal** software version is `1.20.0` for UniFi Protect. If you have an older version, you will get errors trying to set up the integration. However, the general advice is the latest 2 minor versions of UniFi Protect and hardware supported by those are supported. Since UniFi Protect has its own release cycle, you should only upgrade UniFi Protect _after_ the next Home Assistant release comes out to ensure the new version is fully supported. + +Example: as of `2022.2.0` of Home Assistant, UniFi Protect `1.21.0-beta.3` is the newest UniFi Protect version. So the recommended versions of UniFi Protect to run for a `2022.2.0` version of Home Assistant are `1.20.0`, `1.20.1`, `1.20.2`, `1.20.3`, `1.21.0-beta.1`, `1.21.0-beta.2`, and `1.21.0-beta.3`. + +### Local User + +You will need a local user created in your UniFi OS Console to log in with. Ubiquiti Cloud Users will **not** work. + +1. Login to your *Local Portal* on your UniFi OS device, and click on *Users* +1. In the upper right corner, click on *Add User* +1. Click *Add Admin*, and fill out the form. Specific Fields to pay attention to: + * Role: Must be *Limited Admin* + * Account Type: *Local Access Only* + * CONTROLLER PERMISSIONS - Under UniFi Protect, select Administrators. **NOTE**: Other roles may work, but only the default Administrators role is fully tested. +1. Click *Add* in the bottom Right. + +![ADMIN_UNIFIOS](/images/integrations/unifiprotect/unifi_os_admin.png) + +### Camera Streams + +The Integration uses the RTSP(S) Streams as the Live Feed source, so this needs to be enabled on each camera to ensure you can stream your camera in Home Assistant. This may already be enabled by default, but it is recommended to just check that this is done. To check and enable the feature: + +1. Open UniFi Protect and click on *Devices* +1. Select *Manage* in the Menu bar at the top +1. Click on the + sign next to RTSP +1. Enable a minimum 1 stream out of the 3 available. The Stream with the Highest resolution is the default enabled one. + +{% include integrations/config_flow.md %} + +## Features + +All known UniFi Protect devices should be supported. Each UniFi Protect device will get a variety of entities added for each of the different entity platforms. + +### UniFi Protect Cameras + +
+ +**Smart Detections**: The following cameras have Smart Detections: + +* All "AI" series cameras. This includes the AI 360 and the AI Bullet. +* All "G4" series cameras _except_ the G4 Instant. This includes the G4 Doorbell, G4 Bullet and G4 Pro. + +G3 Series cameras do _not_ have Smart detections. + +
+ +Each UniFi Protect camera will get a device in Home Assistant with the following: + +* **Camera** - A camera for each camera channel and RTSP(S) combination found for each camera (up to 7). Only the highest resolution RTSPS camera entity will be enabled by default. + * If your camera is a G4 Doorbell Pro, an additional camera entity will be added for the Package Camera. The Package Camera entity will _not_ have streaming capabilities regardless of whether RTSPS is enabled on the channel or not. This is due to the Package Camera having a very low FPS that does not make it compatible with HLS streaming. +* **Media Player** - If your camera has a speaker, you will get a media player entity that allows you to play audio to your camera's speaker. Any audio file URI that is playable by FFmpeg will be able to be played to your speaker, including via the [TTS Say Service](/integrations/tts/#service-say). +* **Privacy Mode** - If your camera allows for Privacy Masks, there will be a configuration switch to toggle a "Privacy Mode" that disables recording, microphone, and a black privacy zone over the whole camera. +* **Sensors** - Sensors include "Is Dark", "Motion Detected", "Detected Object" (if the camera supports smart detections), and "Doorbell Chime" (if the camera has a chime). Several diagnostics sensors are added including sensors on uptime, network connection stats, and storage stats. Doorbells will also have a "Voltage" sensor for troubleshooting electrical issues. + * The Detected Object sensor will have the values of "none", "person", or "vehicle" based on object UniFi Protect detected. +* **Device Configuration** - Cameras will get various configuration controls based on the features available to the camera. Currently provided configuration controls: + * configuration sliders for Chime Type, Zoom Level, Microphone Sensitivity, and WDR Level + * configuration switches Overlay Information, Smart Detections types, Status Light, HDR, High FPS mode, System Sounds. +* **Button** - A disabled by default button is added for each camera device. The button will let you reboot your camera device. + +### UniFi Protect Floodlights + +Each UniFi Protect floodlight will get a device in Home Assistant with the following: + +* **Light** - A light entity will be added for each floodlight device. The light entity will let you control turning on or off your light as well as adjust the brightness of your floodlight. +* **Sensors** - Sensors are provided for data provided from floodlight devices. Sensors include "Is Dark" and "Motion Detected". +* **Device Configuration** - Floodlights will get configuration controls for the PIR Motion Sensitivity, the Auto-shutoff Duration after detected motion, and Status Light switch +* **Button** - A disabled by default button is added for each floodlight device. The button will let you reboot your floodlight device. + +### UniFi Protect Smart Sensors + +UniFi Protect smart sensors are a bit different than normal sensors. They are a multi-sensor that can act as a contact sensor (door/window), a motion detector, a light level detector, a humidity sensor, a temperature level sensor, an alarm sound sensor, and/or a leak detector. Each sensor function can be enabled or disabled dynamically. Disabled sensors will be marked as "unavailable". + +* **Sensors** - A sensor is provided for each major function of the smart sensor device: + * **Contact** - A contact sensor will be available if the mount type is set as "Door", "Window" or "Garage". + * **Motion Detection** - A motion detection sensor will be available if the mount type is not set to "Leak" and motion detection is enabled. + * **Light Level** - A light level sensor will be available if the mount type is not set to "Leak" and the light sensor is enabled. + * **Humidity** - A humidity sensor will be available if the mount type is not set to "Leak" and the humidity sensor is enabled. + * **Temperature** - A temperature sensor will be available if the mount type is not set to "Leak" and the temperature sensor is enabled. + * **Alarm Sound** - An alarm sensor will be available if the mount type is not set to "Leak" and the alarm sound sensor is enabled. The Alarm Sound sensor can have the values "none", "smoke" and "co". More values may be added over time automatically as UniFi Protect adds support for detecting more alarms. +* **Device Configuration** - Smart sensors will get configuration controls for the Status Light, enabling/disabling all of the main sensors, selecting the Paired Camera, and changing the Mount Type of the sensor. +* **Button** - A disabled by default button is added for each smart sensor device. The button will let you reboot your smart sensor device. + +### UniFi Protect Viewers + +Each UniFi Protect viewer will get a device in Home Assistant with the following: + +* **Liveview Select** - A select control will be added for each viewer device that will allow you to select which liveview is being displayed on the viewer. +* **Button** - A disabled by default button is added for each viewer device. The button will let you reboot your viewer device. + +### UniFi Protect DoorLock + +Each UniFi Protect door lock will get a device in Home Assistant with the following: + +* **Lock** - A lock control will be added to lock and unlock your door lock device. +* **Device Configuration** - Door locks will get configuration controls for the Auto-Lock Timeout, selecting the Paired Camera, and Status Light switch +* **Button** - A disabled by default button is added for each door lock device. The button will let you reboot your door lock device. + +### NVR + +Your main UniFi Protect NVR device also gets a number of diagnostics sensors that can be used for tracking the state of your UniFi Protect system: + +* **Disk Health**: Each disk installed in your NVR will have a disk health sensor. These are simple good/bad sensors and the order is not promised to match the order in UniFi OS. Disk model number is provided as a state attribute though to help map sensor to disk. +* **Utilization and Storage Sensors**: Several other sensors are also added for uptime, hardware utilization, and distribution details of the video on disk. + +## Services + +### Service unifiprotect.set_default_doorbell_text + +Sets the default doorbell message. This will be the message that is automatically selected when a message "expires". + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------ | +| `device_id` | No | Any device from the UniFi Protect instance you want to change. In case you have multiple Protect instances. | +| `message` | No | The default message for your Doorbell. Must be less than 30 characters. | + +### Service unifiprotect.add_doorbell_text + +Adds a new custom message for Doorbells. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------ | +| `device_id` | No | Any device from the UniFi Protect instance you want to change. In case you have multiple Protect instances. | +| `message` | No | New custom message to add for Doorbells. Must be less than 30 characters. | + +### Service unifiprotect.remove_doorbell_text + +Removes an existing message for Doorbells. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------ | +| `device_id` | No | Any device from the UniFi Protect instance you want to change. In case you have multiple Protect instances. | +| `message` | No | Existing custom message to remove for Doorbells. | + +### Service unifiprotect.set_doorbell_message + +Use to dynamically set the message on a Doorbell LCD screen. This service should only be used to set dynamic messages (i.e. setting the current outdoor temperature on your Doorbell). Static messages should still be set using the Select entity and can be added/removed using the `add_doorbell_text`/`remove_doorbell_text` services. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------ | +| `entity_id` | No | The Doorbell Text select entity for your Doorbell. | +| `message` | No | The message you would like to display on the LCD screen of your Doorbell. Must be less than 30 characters. | +| `duration` | Yes | Number of minutes to display the message for before returning to the default message. The default is to not expire. | + +## Troubleshooting + +### Enabling Debug Logging + +Both the UniFi Protect integration and the Python library it uses provide debug logging that can help you with troubleshooting connectivity issues. To enable debug logging for both, add the following to your `configuration.yaml` file: + +```yaml +logger: + logs: + pyunifiprotect: debug + homeassistant.components.unifiprotect: debug +``` + +### Delay in Video Feed + +The default settings on the stream integration will give you a 5-15+ second delay. You can reduce this delay to 1-3 seconds, by enabling [LL-HLS in the stream integration](/integrations/stream/#ll-hls). You will also want to put an HTTP/2 reserve proxy in front of Home Assistant so you can have connection pooling. If you do not add a reverse proxy, you may start to get "Waiting for Websocket..." messages while trying to view too many camera streams at once. One way to do this is using the official NGINX Proxy Add-on: + +{% my supervisor_addon addon="core_nginx_proxy" badge %} + +### Cannot Play Audio to Speakers + +Unlike with many other things, playing audio to your speakers requires your Home Assistant to be able to reach your camera directly. Specifically via port `tcp/7004`. You can [enable debug logging](#enabling-debug-logging) and it will output the full FFmpeg command that will be run and the output from FFmpeg to help you troubleshoot why audio is not playing to the device. + +### Liveview Options for Viewer Missing Options or Out of Date + +Main control selects currently cannot have dynamic options since the options are exported out to voice assistants. After you add/remove/change a Liveview in UniFi Protect, you must restart Home Assistant to get the new options for your Viewer. + +### NvrErrors with "404 - Reason: Not Found" or "502 - Reason: Bad Gateway" + +If you get errors while authenticating or fetching data for `NvrError... 404 - Reason: Not Found`, there is a good chance that your UniFi Protect application has crashed. UniFi Protect runs in a supervised way on UniFi OS (similar to Home Assistant OS + Home Assistant Core). Getting a 404 for a URL that should not produce a 404 means UniFi Protect is probably not running. You may want to check the health of your disks or look into debugging UniFi Protect to see why it is crashing. + +Similarly, a `502 Bad Gateway` also means that your UniFi Protect application may not be running. + +```log +pyunifiprotect.NvrError: Fetching Camera List failed: 404 - Reason: Not Found +``` diff --git a/source/_integrations/uptimerobot.markdown b/source/_integrations/uptimerobot.markdown index cca8648de9f..04e2499c6c2 100644 --- a/source/_integrations/uptimerobot.markdown +++ b/source/_integrations/uptimerobot.markdown @@ -7,14 +7,17 @@ ha_release: 0.72 ha_iot_class: Cloud Polling ha_codeowners: - '@ludeeus' + - '@chemelli74' ha_domain: uptimerobot ha_platforms: - binary_sensor + - diagnostics + - sensor ha_quality_scale: platinum ha_config_flow: true --- -The `uptimerobot` integration provides binary sensors to get the status for all of your monitors from your account on [UptimeRobot]( https://uptimerobot.com). +The `uptimerobot` integration provides entities to get the status for all of your monitors from your account on [UptimeRobot]( https://uptimerobot.com). {% include integrations/config_flow.md %} diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown index ba2c27095c6..84f52d242e6 100644 --- a/source/_integrations/vacuum.mqtt.markdown +++ b/source/_integrations/vacuum.mqtt.markdown @@ -106,6 +106,11 @@ enabled_by_default: required: false type: boolean default: true +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false @@ -398,6 +403,11 @@ device: description: 'Identifier of a device that routes messages between this device and Home Assistant. Examples of such devices are hubs, or parent devices of a sub-device. This is used to show device topology in Home Assistant.' required: false type: string +encoding: + description: The encoding of the payloads received and published messages. Set to `""` to disable decoding of incoming payload. + required: false + type: string + default: "utf-8" fan_speed_list: description: List of possible fan speeds for the vacuum. required: false diff --git a/source/_integrations/vallox.markdown b/source/_integrations/vallox.markdown index de93525458d..4f213ae0456 100644 --- a/source/_integrations/vallox.markdown +++ b/source/_integrations/vallox.markdown @@ -4,14 +4,18 @@ description: Instructions on how to integrate Vallox ventilation units into Home ha_category: - Fan - Sensor +ha_config_flow: true ha_release: 0.96 ha_iot_class: Local Polling ha_domain: vallox ha_platforms: + - binary_sensor - fan - sensor ha_codeowners: - '@andre-richter' + - '@slovdahl' + - '@viiru-' --- The `vallox` integration lets you control any Vallox ventilation unit that is supported by the [vallox_websocket_api](https://github.com/yozik04/vallox_websocket_api) (follow the link for a list of supported units). @@ -25,24 +29,7 @@ The **fan** platform of this integration allows you to either turn on/off the co Also, there is a **sensor** platform that exposes a number of relevant metrics like fan speed, various air temperatures and humidity. -## Configuration - -```yaml -vallox: - host: IP_ADDRESS -``` - -{% configuration %} -host: - description: The IP or hostname of the ventilation unit in your home network. - required: true - type: string -name: - description: The name of this device as you want to see it in Home Assistant. - required: false - default: Vallox - type: string -{% endconfiguration %} +{% include integrations/config_flow.md %} ## Profile Switching diff --git a/source/_integrations/verisure.markdown b/source/_integrations/verisure.markdown index d3d9cc312e8..ab0e853b7a7 100644 --- a/source/_integrations/verisure.markdown +++ b/source/_integrations/verisure.markdown @@ -18,6 +18,7 @@ ha_platforms: - alarm_control_panel - binary_sensor - camera + - diagnostics - lock - sensor - switch diff --git a/source/_integrations/version.markdown b/source/_integrations/version.markdown index a0ed0a44e79..5ab7114c58a 100644 --- a/source/_integrations/version.markdown +++ b/source/_integrations/version.markdown @@ -13,43 +13,9 @@ ha_codeowners: ha_domain: version ha_platforms: - sensor +ha_config_flow: true --- -The `version` sensor platform that can display the current Home Assistant versions. +The Version integration can display the current Home Assistant versions. -## Configuration - -To enable this sensor, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: version -``` - -{% configuration %} -name: - description: Name to use in the frontend. - required: false - type: string - default: "`Current Version` in case of `source: local`, `Latest Version` otherwise." -beta: - description: Flag to indicate that it will check for beta versions, only supported for the sources `pypi`, `supervisor` and `container`. - required: false - type: boolean - default: false -image: - description: The image you want to check against, this is only supported for `supervisor` and `container`, see full list under. - required: false - type: string - default: default -source: - description: The source you want to check against, possible values are `local`, `pypi`, `supervisor`, `haio` and `container`. - required: false - type: string - default: local -{% endconfiguration %} - -### Supported images for Home Assistant - -`default`, `qemux86`, `qemux86-64`, `qemuarm`, `qemuarm-64`, `generic-x86-64`, `raspberrypi`, `raspberrypi2`, `raspberrypi3`, `raspberrypi3-64`, `raspberrypi4`, `raspberrypi4-64`, `tinker`, `odroid-c2`, `odroid-n2`, `odroid-xu` +{% include integrations/config_flow.md %} diff --git a/source/_integrations/vesync.markdown b/source/_integrations/vesync.markdown index d3bcf7df292..e14019db1b2 100644 --- a/source/_integrations/vesync.markdown +++ b/source/_integrations/vesync.markdown @@ -16,6 +16,7 @@ ha_domain: vesync ha_platforms: - fan - light + - sensor - switch --- @@ -28,6 +29,7 @@ The following platforms are supported: - **light** - **switch** - **fan** +- **sensor** ## Supported Devices @@ -53,8 +55,10 @@ This integration supports devices controllable by the VeSync App. The following ### Fans +- Core 200S: Smart True HEPA Air Purifier +- Core 300S: Smart True HEPA Air Purifier +- Core 400S: Smart True HEPA Air Purifier - LEVOIT Smart Wifi Air Purifier (LV-PUR131S) -- LEVOIT Core 200S Smart True HEPA Air Purifier (Core200S) ## Prerequisite @@ -70,14 +74,22 @@ the configuration section below. |---------|-------------| | `update_devices` | Poll Vesync server to find and add any new devices | +## Power & Energy Sensors + +Many VeSync outlets support power & energy monitoring. These data are exposed as diagnostic sensor entities alongside the outlet +itself. Note that prior versions of the integration exposed these as state attributes on the outlet switch entity. + +| Sensor | Description | Example | +| --------------------------------------- | ------------------------------------------------------------------ | ------- | +| `sensor._current_power` | The present power consumption of the switch in watts | 7.89 | +| `sensor._energy_use_today` | The kilowatt hours used by the switch during the previous 24 hours | 0.12 | + ## Outlet Exposed Attributes VeSync outlets will expose the following details for only the smart outlets. Energy monitoring not available for in-wall switches. | Attribute | Description | Example | | ----------------------- | ----------------------------------------------------------------------- | --------------- | -| `current_power_w` | The present power consumption of the switch in watts. | 100 | -| `today_energy_kwh` | The kilowatt hours used by the switch during the previous 24 hours. | 0.12 | | `voltage` | Current voltage of the device | 120.32 | | `weekly_energy_total` | Total energy usage for week starting from Monday 12:01AM in kWh | 14.74 | | `monthly_energy_total` | Total energy usage for month starting from 12:01AM on the first in kWh | 52.30 | @@ -89,19 +101,19 @@ VeSync air purifiers will expose the following details depending on the features | Attribute | Description | Example | | ----------------------- | --------------------------------------------------------------------------------- | --------------- | -| `mode` | The current mode the device is in. (LV-PUR131S, Core200S) | manual | -| `speed` | The current speed setting of the device. (LV-PUR131S, Core200S) | high | +| `mode` | The current mode the device is in. (LV-PUR131S, Core200S/300s/400s) | manual | +| `speed` | The current speed setting of the device. (LV-PUR131S, Core200S/300s/400s) | high | | `speed_list` | The available list of speeds supported by the device. (LV-PUR131S) | high | | `active_time` | The number of seconds since the device has been in a non-off mode. (LV-PUR131S) | 1598 | -| `filter_life` | Remaining percentage of the filter. (LV-PUR131S, Core200S) | 142 | +| `filter_life` | Remaining percentage of the filter. (LV-PUR131S, (Core200S/300s/400s) | 142 | | `air_quality` | The current air quality reading. (LV-PUR131S) | excellent | | `screen_status` | The current status of the screen. (LV-PUR131S) | on | -| `night_light` | The current status of the night light (Core200S) | off | -| `child_lock` | The current status of the child lock (Core200S) | off | +| `night_light` | The current status of the night light (Core200S/Core400s) | off | +| `child_lock` | The current status of the child lock (Core200S/300s/400s) | off | ## Extracting Attribute data -In order to get the attributes readings from supported devices, such as energy from outlets or fan attributes, you'll have to create a [template sensor](/integrations/template#state-based-template-sensors/). +In order to get the attributes readings from supported devices, such as voltage from outlets or fan attributes, you'll have to create a [template sensor](/integrations/template#state-based-template-sensors/). In the example below, change all of the `vesync_switch`'s to match your device's entity ID. @@ -112,12 +124,6 @@ Adapted from the [TP-Link integration](https://www.home-assistant.io/integration ```yaml template: - sensor: - - name: "Vesync current comsumption" - state: "{{ state_attr('switch.vesync_switch', 'current_power_w') | float(default=0) }}" - unit_of_measurement: "W" - - name: "Vesync total consumption" - state: "{{ state_attr('switch.vesync_switch', 'today_energy_kwh') | float(default=0) }}" - unit_of_measurement: "kWh" - name: "Vesync voltage" state: "{{ state_attr('switch.vesync_switch', 'voltage') | float(default=0) }}" unit_of_measurement: "V" diff --git a/source/_integrations/vicare.markdown b/source/_integrations/vicare.markdown index 54a6dff4384..529fa8a51dd 100644 --- a/source/_integrations/vicare.markdown +++ b/source/_integrations/vicare.markdown @@ -10,6 +10,7 @@ ha_config_flow: true ha_domain: vicare ha_platforms: - binary_sensor + - button - climate - sensor - water_heater @@ -24,6 +25,7 @@ There is currently support for the following device types within Home Assistant: - [Climate](#climate) (Heating) - [Water Heater](#water-heater) (Domestic Hot Water) - [Sensor](#sensor) (Sensor) +- [Button](#button) (Button) {% include integrations/config_flow.md %} @@ -123,4 +125,8 @@ Sets the target temperature of domestic hot water to the given temperature. ## Sensor -Additional data from ViCare is available as separate sensors. The sensors are automatically created based on the configured `heating_type`. +Additional data from ViCare is available as separate sensors. The sensors are automatically discovered based on the available API data points. + +## Button + +Button entities are available for triggering like a one-time charge of the water heater. diff --git a/source/_integrations/vlc_telnet.markdown b/source/_integrations/vlc_telnet.markdown index af74840b0ad..0afb7bde652 100644 --- a/source/_integrations/vlc_telnet.markdown +++ b/source/_integrations/vlc_telnet.markdown @@ -1,5 +1,5 @@ --- -title: VLC media player Telnet +title: VLC media player via Telnet description: Instructions on how to integrate VLC media player into Home Assistant using the telnet interface. ha_category: - Media Player diff --git a/source/_integrations/watttime.markdown b/source/_integrations/watttime.markdown index 0d5fa0a60d8..71f9cd5a406 100644 --- a/source/_integrations/watttime.markdown +++ b/source/_integrations/watttime.markdown @@ -10,6 +10,7 @@ ha_codeowners: - '@bachya' ha_config_flow: true ha_platforms: + - diagnostics - sensor --- diff --git a/source/_integrations/webostv.markdown b/source/_integrations/webostv.markdown index 9eac0a6b86a..5ff67295a10 100644 --- a/source/_integrations/webostv.markdown +++ b/source/_integrations/webostv.markdown @@ -4,15 +4,18 @@ description: Instructions on how to integrate a LG webOS Smart TV within Home As ha_category: - Media Player - Notifications -ha_iot_class: Local Polling +ha_iot_class: Local Push ha_release: 0.18 ha_codeowners: - '@bendavid' - '@thecode' ha_domain: webostv +ha_config_flow: true +ha_ssdp: true ha_platforms: - media_player - notify +ha_quality_scale: platinum --- The `webostv` platform allows you to control a [LG](https://www.lg.com/) webOS Smart TV. @@ -24,91 +27,13 @@ There is currently support for the following device types within Home Assistant: To begin with enable *LG Connect Apps* feature in *Network* settings of the TV. -Once basic configuration is added to your `configuration.yaml` file. A notification should be visible in the frontend's **Notification** section. Follow the instructions and accept the pairing request on your TV. - -Pairing information will be saved to a configuration file `webostv.conf` in the Home Assistant configuration directory. This process is IP address-sensitive, in case the IP address of your TV would change in future. - -## Configuration - -To add a TV to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -webostv: -``` - -{% configuration %} -host: - description: "The IP of the LG webOS Smart TV, e.g., `192.168.0.10`." - required: true - type: string -name: - description: The name you would like to give to the LG webOS Smart TV. - required: false - type: string -turn_on_action: - description: Defines an [action](/docs/automation/action/) to turn the TV on. - required: false - type: string -customize: - description: List of options to customize. - required: false - type: map - keys: - sources: - description: List of hardware and webOS App inputs. - required: false - type: list -{% endconfiguration %} - -### Full configuration example - -A full configuration example will look like the sample below: - -```yaml -# Example configuration.yaml entry -webostv: - host: 192.168.0.10 - name: Living Room TV - turn_on_action: - service: persistent_notification.create - data: - message: "Turn on action" - customize: - sources: - - livetv - - youtube - - makotv - - netflix - -media_player: - -notify: -``` - -Avoid using `[ ]` in the `name:` of your device. - -### Using multiple TVs - -It is also possible to use multiple TVs with this integration. - -```yaml -# Example configuration.yaml entry with multiple TVs -webostv: - - name: Living Room TV - host: 192.168.1.100 - - name: Bedroom TV - host: 192.168.1.101 -``` - -Please note, the above provides a minimal example, however, all options are -available for each individual TV. +{% include integrations/config_flow.md %} ## Turn on action Home Assistant is able to turn on a LG webOS Smart TV if you specify an action, like HDMI-CEC or WakeOnLan. -Common for webOS 3.0 and higher would be to use WakeOnLan feature. To use this feature your TV should be connected to your network via Ethernet rather than Wireless and you should enable *LG Connect Apps* feature in *Network* settings of the TV [instructions](https://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others) (or *Mobile App* in *General* settings for older models) (*may vary by version). +Common for webOS 3.0 and higher would be to use WakeOnLan feature. To use this feature your TV should be connected to your network via Ethernet rather than Wireless and you should enable the *LG Connect Apps* feature in *Network* settings of the TV (or *Mobile App* in *General* settings for older models) (*may vary by version). On newer models (2017+), WakeOnLan may need to be enabled in the TV settings by going to Settings > General > Mobile TV On > Turn On Via WiFi [instructions](https://support.quanticapps.com/hc/en-us/articles/115005985729-How-to-turn-on-my-LG-Smart-TV-using-the-App-WebOS-). @@ -116,31 +41,29 @@ On newer models (2017+), WakeOnLan may need to be enabled in the TV settings by This usually only works if the TV is connected to the same network. Routing the WakeOnLan packet to a different subnet requires special configuration on your router or may not be possible.
+You can create an automation from the user interface, from the device create a new automation and select the **Device is requested to turn on** automation. +Automations can also be created using an automation action: + ```yaml # Example configuration.yaml entry wake_on_lan: # enables `wake_on_lan` integration -webostv: - host: 192.168.0.10 - #other settings - turn_on_action: - service: wake_on_lan.send_magic_packet - data: - mac: AA-BB-CC-DD-EE-FF - broadcast_address: 11.22.33.44 - -media_player: - -notify: +automation: + trigger: + - platform: webostv.turn_on + entity_id: media_player.lg_webos_smart_tv + action: + - service: wake_on_lan.send_magic_packet + data: + broadcast_address: 192.168.1.255 + mac: AA-BB-CC-DD-EE-FF ``` Any other [actions](/docs/automation/action/) to power on the device can be configured. ## Sources -To obtain complete list of available sources currently configured on the TV, once the webOS TV is configured and linked, while it's powered on head to the **Developer Tools** > **States**, find your `media_player.` and use the sources listed in `source_list:` remembering to split them per line into your `sources:` configuration. If you leave the `sources:` configuration empty, the `media_player` will offer all sources of the TV. If you list a subset of sources in the configuration, only those will be displayed. - -Note: it is normal and expected behavior that for a switched-off TV only the Live TV source is offered in the `media_player`, even if you have configured other sources as well. These will show up as soon as the TV is switched on. +It is possible to select which sources will be available to the media player. When the TV is powered on press the **CONFIGURE** button in the integration card and select the sources to enable. If you don't select any source the media player will offer all of the sources of the TV. ## Change channel through play_media service diff --git a/source/_integrations/whois.markdown b/source/_integrations/whois.markdown index 2dcb68dd6d1..e6d9d53775d 100644 --- a/source/_integrations/whois.markdown +++ b/source/_integrations/whois.markdown @@ -6,31 +6,15 @@ ha_category: ha_release: 0.57 ha_iot_class: Cloud Polling ha_domain: whois +ha_config_flow: true +ha_codeowners: + - '@frenck' ha_platforms: + - diagnostics - sensor --- -The `whois` sensor platform allows you to perform daily WHOIS lookups against your owned domains. This provides you with information such as `expiration_date`, `name_servers` and `registrar` details. +The Whois integration allows you to perform daily WHOIS lookups against your owned domains. This provides you with information such as `expiration_date`, `name_servers` and `registrar` details. -## Configuration -To use this sensor in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: whois - domain: example.net -``` - -{% configuration %} - domain: - description: The domain you want to perform WHOIS lookups against. - required: true - type: string - name: - description: Name to use in the frontend. - required: false - default: Whois - type: string -{% endconfiguration %} +{% include integrations/config_flow.md %} diff --git a/source/_integrations/wled.markdown b/source/_integrations/wled.markdown index f087720bd26..61539811e3c 100644 --- a/source/_integrations/wled.markdown +++ b/source/_integrations/wled.markdown @@ -16,6 +16,7 @@ ha_zeroconf: true ha_platforms: - binary_sensor - button + - diagnostics - light - number - sensor diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown index 947f642cc2f..3c81bcf4a9a 100644 --- a/source/_integrations/xiaomi_miio.markdown +++ b/source/_integrations/xiaomi_miio.markdown @@ -1402,13 +1402,17 @@ Main Brush Left*: description: How long the main brush can be used in seconds Sensor Dirty Left*: description: How long the sensor can be used in seconds +Current Clean Time: + description: The current cleaning time of the vacuum. If the vaccuum is not cleaning, this sensor will have the same value as the "Last Clean Duration" sensor. +Current Clean Area: + description: The current area that has been cleaned. If the vacuum is not cealning, this sensor will have the same value as the "Last Clean Area" sensor. Last Clean Area*: description: The last cleaned area in square meters Last Clean Duration*: description: The last clean duration in seconds -Last Clean End*: +Last Clean End: description: The last clean end time as a timestamp -Last Clean Start*: +Last Clean Start: description: The last clean start time as a timestamp Mop Attached**: description: If the mop is attached diff --git a/source/_integrations/yale_smart_alarm.markdown b/source/_integrations/yale_smart_alarm.markdown index d0a174a0164..64b3b31eb36 100644 --- a/source/_integrations/yale_smart_alarm.markdown +++ b/source/_integrations/yale_smart_alarm.markdown @@ -3,6 +3,8 @@ title: Yale Smart Living description: Instructions on how to integrate Yale Smart Alarms into Home Assistant. ha_category: - Alarm + - Binary Sensor + - Lock ha_release: 0.78 ha_iot_class: Cloud Polling ha_config_flow: true @@ -11,38 +13,32 @@ ha_codeowners: ha_domain: yale_smart_alarm ha_platforms: - alarm_control_panel + - binary_sensor + - lock --- The Yale Smart Living integration provides connectivity with the Yale Smart Alarm systems and Smart Hub through Yale's API. -This platform supports the following services: `alarm_arm_away`, `alarm_arm_home` and `alarm_disarm`. -Currently only one alarm is supported. +There is currently support for the following device types within Home Assistant: + +- Alarm +- Binary Sensor +- Lock {% include integrations/config_flow.md %} -## Automation example +## Alarm Control Panel -```yaml -automation: - - alias: "Alarm: Disarmed Daytime" - trigger: - platform: state - entity_id: alarm_control_panel.yale_smart_alarm - to: "disarmed" - condition: - condition: sun - before: sunset - action: - service: scene.turn_on - target: - entity_id: scene.OnDisarmedDaytime - - alias: "Alarm: Armed Away" - trigger: - platform: state - entity_id: alarm_control_panel.yale_smart_alarm - to: "armed_away" - action: - service: scene.turn_on - target: - entity_id: scene.OnArmedAway -``` +Services provided are `armed_away`, `armed_home`, and `disarmed`. + +No code is required to operate the alarm. + +## Binary Sensors + +Provides support for contact sensors for doors showing if door is open or closed. + +## Lock + +The lock platform requires a code for unlocking but no code for locking. + +The integration can be configured to provide a default code that is used if no code is supplied and the number of digits required. diff --git a/source/_integrations/yamaha_musiccast.markdown b/source/_integrations/yamaha_musiccast.markdown index 87381be46ad..09dbd6b5e8b 100644 --- a/source/_integrations/yamaha_musiccast.markdown +++ b/source/_integrations/yamaha_musiccast.markdown @@ -14,6 +14,7 @@ ha_domain: yamaha_musiccast ha_platforms: - media_player - number + - select --- The Yamaha MusicCast integration allows you to control [Yamaha MusicCast Receivers](https://usa.yamaha.com/products/audio_visual/musiccast/index.html) from Home Assistant. @@ -77,6 +78,25 @@ The following entities will be added, if they are supported by the MusicCast dev - DTS Dialogue Control (configuration, zone level) - Control the volume of dialogues for DTS:X content +### Select Entities +The following entities will be added, if they are supported by the MusicCast device: +- Dimmer (configuration, device level) + - Set the display brightness +- Surround Decoder Type (configuration, zone level) + - If sound program is set to surround decoder, the decoder type can be selected here +- Sleep (configuration, zone level) + - Set a sleep timer for the device +- Equalizer Mode (configuration, zone level) + - Some devices support multiple different equalizer modes +- Tone Control Mode (configuration, zone level) + - Some devices support multiple different tone control modes +- Link Audio Delay (configuration, zone level) + - Some devices let the user select, whether he prefers to have audio and video in sync or the audio of linked speakers in a group +- Link Control (configuration, zone level) + - Some devices support compressed audio for groups +- Link Audio Quality (configuration, zone level) + - Set the audio quality for grouped speakers + ## Troubleshooting In this section known problems and their resolution are documented. diff --git a/source/_integrations/yeelight.markdown b/source/_integrations/yeelight.markdown index af51348ac63..61edb9dfc58 100644 --- a/source/_integrations/yeelight.markdown +++ b/source/_integrations/yeelight.markdown @@ -7,7 +7,6 @@ ha_release: 0.32 ha_iot_class: Local Push ha_config_flow: true ha_codeowners: - - '@rytilahti' - '@zewelor' - '@shenxn' - '@starkillerOG' diff --git a/source/_integrations/zeroconf.markdown b/source/_integrations/zeroconf.markdown index cf744403f49..69ec319cf54 100644 --- a/source/_integrations/zeroconf.markdown +++ b/source/_integrations/zeroconf.markdown @@ -53,4 +53,4 @@ Configure the virtual machine to accept this traffic by adding the `trustGuestRx ``` -This only works with the `virtio` network adapter type and it is disabled by default for security reasons. See [the libvirt documentation](https://libvirt.org/formatdomain.html#elementsNICS) for more details. \ No newline at end of file +This only works with the `virtio` network adapter type and it is disabled by default for security reasons. See [the libvirt documentation](https://libvirt.org/formatdomain.html#elementsNICS) for more details. diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown index 32b40754d88..24e43b93b27 100644 --- a/source/_integrations/zha.markdown +++ b/source/_integrations/zha.markdown @@ -5,10 +5,12 @@ ha_category: - Hub - Alarm - Binary Sensor + - Button - Climate - Fan - Light - Lock + - Select - Sensor - Siren - Switch @@ -25,6 +27,7 @@ ha_domain: zha ha_platforms: - alarm_control_panel - binary_sensor + - button - climate - cover - device_tracker @@ -33,6 +36,7 @@ ha_platforms: - lock - number - sensor + - select - siren - switch ha_zeroconf: true @@ -46,13 +50,16 @@ There is currently support for the following device types within Home Assistant: - Alarm Control Panel - Binary Sensor +- Button - Climate (beta) - Cover - Fan - Light - Lock - Number (i.e. analog output) +- Select - Sensor +- Siren - Switch There is also support for grouping of lights, switches, and fans (i.e. support for commanding device groups as entities). At least two entities must be added to a group before the group entity is created. As well as support for binding/unbinding (i.e. bind a remote to a lightbulb or group). @@ -162,6 +169,7 @@ Some devices can be auto-discovered, which can simplify the ZHA setup process. T | Device | Discovery Method | Identifier | | -------| ---------------- | ---------- | +| [ITead SONOFF Zigbee 3.0 USB Dongle Plus](https://itead.cc/product/sonoff-zigbee-3-0-usb-dongle-plus/) | USB | 10C4:EA60 | | [Bitron Video/SMaBiT BV AV2010/10](https://bv.smabit.eu/index.php/smart-home-produkte/zb-funkstick/) | USB | 10C4:8B34 | | [ConBee II](https://phoscon.de/en/conbee2) | USB | 1CF1:0030 | | [Nortek HUSBZB-1](https://www.nortekcontrol.com/products/2gig/husbzb-1-gocontrol-quickstick-combo/) | USB | 10C4:8A2A | @@ -198,7 +206,7 @@ custom_quirks_path: ZHA component has the ability to automatically download and perform OTA (Over-The-Air) firmware updates of Zigbee devices if the OTA firmware provider source URL for updates is available. OTA firmware updating is set to disabled (`false`) in the configuration by default. -Currently, OTA providers for firmware updates are only available for IKEA and LEDVANCE devices. OTA updates for device of other manufactures could also be supported by ZHA dependencies in the future, if these manufacturers publish their firmware publicly. +Online OTA providers for firmware updates are currently only available for IKEA, LEDVANCE and SALUS devices. Support for OTA updates from other manufacturers could be supported in the future, if they publish their firmware images publicly. To enable OTA firmware updates for the ZHA integration you need to add the following configuration to your `configuration.yaml` and restart Home Assistant: @@ -208,10 +216,11 @@ zha: ota: ikea_provider: true # Auto update Trådfri devices ledvance_provider: true # Auto update LEDVANCE devices + salus_provider: true # Auto update SALUS devices #otau_directory: /path/to/your/ota/folder # Utilize .ota files to update everything else ``` -You can choose if the IKEA or LEDVANCE provider should be set to enabled (`true`) or disabled (`false`) individually. After the OTA firmware upgrades are finished, you can set these to `false` again if you do not want ZHA to automatically download and perform OTA firmware upgrades in the future. +You can choose if the IKEA, LEDVANCE or SALUS provider should be set to enabled (`true`) or disabled (`false`) individually. After the OTA firmware upgrades are finished, you can set these to `false` again if you do not want ZHA to automatically download and perform OTA firmware upgrades in the future. Note that the `otau_directory` setting is optional and can be used for any firmware files you have downloaded yourself, for any device type and manufacturer. For example, Philips Hue firmwares manually downloaded from [here](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/OTA-Image-Types---Firmware-versions) and/or [here](https://github.com/Koenkk/zigbee-OTA/blob/a02a4cb33f7c46b4d2916805bfcad582124ec975/index.json) added to the `otau_directory` can be flashed, although a manual `zha.issue_zigbee_cluster_command` command currently (as of 2021.3.3) must be issued against the IEEE of the Philips Hue device under Developer Tools->Services, e.g.: diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown index 22ec619ade3..c41ecef5816 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -23,6 +23,7 @@ ha_codeowners: ha_domain: zwave_js ha_platforms: - binary_sensor + - diagnostics - climate - cover - fan @@ -767,7 +768,11 @@ If the interview is complete, then the device does not yet have a device file fo When trying to determine why something isn't working as you expect, or when reporting an issue with the integration, it is helpful to know what Z-Wave JS sees as the current state of your Z-Wave network. To get a dump of your current network state, follow the menu: -**Configuration** -> **Integrations** -> **Z-Wave JS** -> **Configure** -> **Download a dump of your network to help diagnose issues** +{% my integrations title="**Configuration** -> **Devices & Services**" %} -> **Z-Wave JS** -> **...** -> **Download diagnostics** + +### Interference issues + +Many users have reported issues with interference when the USB stick was directly connected to the machine (proximity). If you are having issues try to use a short USB 2.0 A male to female extension cord. #### How to access the Z-Wave JS logs diff --git a/source/_lovelace/statistics-graph.markdown b/source/_lovelace/statistics-graph.markdown index 6a13d4205c5..5b6d226eaff 100644 --- a/source/_lovelace/statistics-graph.markdown +++ b/source/_lovelace/statistics-graph.markdown @@ -39,16 +39,20 @@ days_to_show: default: 30 chart_type: required: false - description: If the chart should be rendered as a `bar` or a `line` chart. + description: If the graph should be rendered as a `bar` or a `line` chart. type: string stat_types: required: false - description: The stat types to render. `min`, `max`, `mean`, `sum` + description: The statistics types to render. `min`, `max`, `mean`, `sum` type: list title: required: false description: The card title. type: string +period: + required: false + description: The period of the rendered graph. `5minute`, `hour`, `day` or `month` + type: string {% endconfiguration %} ## Options For Entities diff --git a/source/_posts/2022-02-02-release-20222.markdown b/source/_posts/2022-02-02-release-20222.markdown new file mode 100644 index 00000000000..44d0d93cf7f --- /dev/null +++ b/source/_posts/2022-02-02-release-20222.markdown @@ -0,0 +1,6960 @@ +--- +layout: post +title: "2022.2: Let's start streamlining!" +description: "Starting 2022 with media and device tracker improvements, diagnostics, added states to scenes, and streamlining lots of things!" +date: 2022-02-02 00:00:00 +date_formatted: "Februari 02, 2022" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: +- Release-Notes +- Core +og_image: /images/blog/2022-02/social.png +--- + + + +I'm not sure if this is really fitting; it is February already... but since +this is the first release of the year, I'm going to say it anyway: + +**Happy New Year 🥂** + +And, since we have skipped the January release, this release became a big one. +Over 2,500 contributions make this release the largest one we have ever +shipped! Including 15 brand-new integrations and 13 existing integrations, +which are now available to set up via the user interface. + +Now don't be scared when you look at the breaking changes section. It is a lot, +however, most of those are cleanup of old deprecations, or caused by things +moving to the UI. No better way to start a fresh year, than by cleaning up 🧹 + +By the way, in case you've missed it, [@balloob] published a blog post last +week about the focus for Home Assistant in 2022: [Streamlining Experiences](/blog/2022/01/19/streamlining-experiences/). +I'm stoked about it, and am really looking forward to what this year will do +for Home Assistant! Go 2022! + +What is your new years' resolution for your smart home this year? + +Enjoy the release! + +../Frenck + +- [Updates from Nabu Casa](#updates-from-nabu-casa) +- [Media improvements](#media-improvements) +- [Check for updates](#check-for-updates) +- [Diagnostics for integrations and devices](#diagnostics-for-integrations-and-devices) +- [Finding known issues and where to report new ones](#finding-known-issues-and-where-to-report-new-ones) +- [Improved handling of device tracker entities](#improved-handling-of-device-tracker-entities) +- [Scenes now have a state](#scenes-now-have-a-state) +- [Search in the configuration panel](#search-in-the-configuration-panel) +- [Button helper and template](#button-helper-and-template) +- [Templating enhancements](#templating-enhancements) +- [Other noteworthy changes](#other-noteworthy-changes) +- [New Integrations](#new-integrations) +- [Integrations now available to set up from the UI](#integrations-now-available-to-set-up-from-the-ui) +- [If you need help...](#if-you-need-help) +- [Breaking Changes](#breaking-changes) +- [Farewell to the following](#farewell-to-the-following) +- [All changes](#all-changes) + +## Updates from Nabu Casa + +Before we dive into this release, we have some news and updates from +[Nabu Casa](https://www.nabucasa.com) to share with you. + +### Annual subscriptions now available for the United States + +The ability to subscribe to [Home Assistant Cloud](https://www.nabucasa.com) +anually, was one of the most requested features since Nabu Casa was founded and has been +announced at the [State of the Open Home](/state-of-the-open-home/) in December. + +As of today, annual subscriptions to Home Assistant Cloud are available +for the United States. 🎉 + +[Read more about the announcement on the Nabu Casa website](https://www.nabucasa.com/more-info/subscriptions-feb-22/) + +### Improved infrastructure + +Nabu Casa's new payment system is part of revamped cloud system that they are +rolling out, and this will bring more improvements to the Home Assistant Cloud +services. + +They already improved our remote access infrastructure to make sure it's routing +as close to you as possible. Last week they rolled out improvements +to the infrastructure that significantly improved the speed of the +Google Assistant and Amazon Alexa integrations. + +### Zack Barett and Mike Degatano join Nabu Casa + +We are also happy to announce [Zack Barett](https://github.com/zsarnett) and +[Mike Degatano](https://github.com/mdegat01) will be joining Nabu Casa to work +on Home Assistant. + +Zack will be helping out on different aspects of Home Assistant, including the +[Home Assistant YouTube channel](https://www.youtube.com/channel/UCbX3YkedQunLt7EQAdVxh7w), +and the Home Assistant Frontend. + +Mike is going to be focusing on extending and improving the Home Assistant +Supervisor and the eco system around it (like its internal plugins and add-ons). + +Welcome! Excited to have you on board! 🎉 + +## Media improvements + +The media browser has been renamed to: "Media". Nice, simple, and clean. + +And, it now has a nice media bar in the bottom to control the media you +are playing: + +

+Screenshot showing media with the new media bar + + +The experience of browsing the media has been improved and extended with new +capabilities. The URL in your browser will change when browsing media, so you +can now bookmark these pages. An integration can now browse media of supported +sources provided by other integrations. + +For example, if you have set up the Spotify and Sonos integration, you can now +browse your Spotify to play it on your Sonos devices; and Cast now has support +for playing Plex media straight from the browser. + +Sonos, VLC (via Telnet), and Roku added support for playing local media! Combining +this with the VLC add-on can turn your Home Assistant device into a +media player for your local media. In the video below, Zack will demonstrate how +that works: + +

+ +
+ +## Check for updates + +A common question, directly seen after a Home Assistant Core, Operating System, +or add-on release announcement: "I don't see the update yet? How do I update?" + +Checking for updates is done by your system - every few hours - automatically. +However, you sometimes want to check for updates without waiting for +this to happen. + +This made us realize that doing that was scattered and hidden in several places +depending on which part you wanted to check updates for. Therefore, we +have added a nice and simple "Check for updates" button in the main +configuration screen. + +

+Screenshot showing the new Check for Updates button in the configuration screen +Checking for any update is now just a single click. +

+ +This feature is currently available for the Home Assistant OS, +and Home Assistant Supervisor installation methods. + +## Diagnostics for integrations and devices + +To make debugging and reporting issues with integrations or devices easier, +both in terms of reporting it, and for developers to fix them, we introduce: +**Diagnostics**. + +Diagnostics can be provided by integrations and allow you to download diagnostic +information about an integration or device you have set up. + +

+Screenshot showing the Download Diagnostics button on a Sonos device page +Screenshot of the Download Diagnostics button on the device page +

+ +The downloadable diagnostics file can be viewed as a text file, +and can be shared when reporting an issue in our issue tracker. + +Diagnostics data can be extremely helpful in finding the root causes of +an issue and getting them fixed. As a matter of fact, it helped us pinpointing +and fixing issues during the beta of this release. + +The good news is that **61**! integrations already added support for this new +diagnostics feature, including Z-Wave JS, ESPHome, Sonos, Shelly, WLED, +Unifi, Nest, deCONZ, KNX, Tuya, Roku, Samsung TV, and many more! + +## Finding known issues and where to report new ones + +Are you experiencing an issue with an integration? Want to know if your issue +is already known and reported? Or, maybe you are not sure where our +issue tracker can be found? + +We added a small menu option to each integration, helping with that. + +

+Screenshot showing the known issues menu item an integration card +Clicking the "Known issues" item will open up our issue tracker for this integration. +

+ +This button will bring you to our issue tracker, showing all currently known +and open issues for this integration. + +Is your issue not listed? Well, if this integration provides diagnostics, +download those. Next, go back to issue tracker, using the new known issues link, +and click the "New issue" button in the top right corner to report your issue. +Fill out the form and attach the diagnostics file by dragging and +dropping it into the form. + +## Improved handling of device tracker entities + +If you run an integration that provides device trackers from your router or +something like the UniFi Network integration, you are probably aware those +can create many entities! + +This has been improved now. As of today, by default, only device tracker +entities that match up with an existing - known by Home Assistant - device +will be enabled by default. This keeps Home Assistant nice and tidy. + +If Home Assistant does not know the device, but you still would like to track +a specific one, that is still possible. In that case, you can enable the +particular device tracker entities you’d like to have. + +## Scenes now have a state + +Scenes never had a state, well that is not entirely true, it would always +say: "scening". + +To make the state of a scene more valuable, it will now have the last timestamp +of when the scene was activated. This has a couple of advantages: + +- You can see when a scene was last activated. +- History of when a scene was activated in the logbook, and who did that. +- You can now automate on a scene being activated. + +The last one is pretty useful as a scene can now be used to trigger even more +actions via automations. For example, you could start playing media or send +a TTS announcement when a scene activated. + +

+Screenshot of the logbook of a scene +Now the scene has a state; it also got logbook entries. +

+ +## Search in the configuration panel + +There is now a search in the top right of the configuration dashboard, which +opens the [Quick Bar](/docs/tools/quick-bar/). This also works on mobile devices. + +It allows you to access and search for just about anything within +Home Assistant. From accessing add-ons, configuration panels, +and even entities and devices. + +

+Screenshot showing the new search in the configuration screen + + +Tip: Did you know you can press `c` (for command) and `e` (for entity) on you +keyboard from anywhere in Home Assistant to bring up that same Quick Bar? + +## Button helper and template + +In the [previous release, we introduced](/blog/2021/12/11/release-202112/#the-button-entity) +the button entity. One of the most asked questions about the button has been: +"How can I create my own button entity?" + +This release introduces the button helper, and those can be created via +the UI and using YAML ( as the `input_button`). + +{% my helpers badge %} + +These button helpers can be used to trigger automations and we have ensured they +work with Alexa, Google Assistant, and HomeKit. + +Additionally, there is now a template entity for buttons available as well. +Here is an example: + +```yaml +# Example configuration.yaml +template: + button: + - name: "Send message" + press: + - service: notify.frenck + data: + message: "My button has been pressed!" +``` + +## Templating enhancements + +There are a couple of nice enhancements to this release for the more advanced +use cases that stand out. + +### Shorthand condition notations in actions + +Shorthand condition notations are pretty helpful and are now supported in +conditions actions; For use in automations and scripts. + +For example: + +{% raw %} + +```yaml +sequence: + - condition: "{{ is_state('device_tracker.iphone', 'away') }}" +``` + +{% endraw %} + +### Immediate if (`iif`) + +We now have an [immediate if (`iif`)](/docs/configuration/templating/#immediate-if-iif) +template function and filter that can be used as a short alternative version +to an if/else statement. + +These can help shortening a lot of if/else constructs that for example, return +a "Yes" or "No" (or similar) value in templates. Some examples: +{% raw %} + +```yaml +{{ iif(is_state('light.kitchen', 'on'), 'Yes', 'No') }} +{{ is_state('light.kitchen', 'on') | iif('Yes', 'No') }} +{{ (state('light.kitchen') == 'on') | iif('Yes', 'No') }} +``` + +{% endraw %} + +## Other noteworthy changes + +There is much more juice in this release; here are some of the other +noteworthy changes this release: + +- When an integration has a single device, clicking on the "1 device" link will + now navigate to that device directly and skip the addition page with a table + showing 1 item. This makes navigating those cases quicker, thanks [@balloob]! +- There is now a tiny menu on discovered devices and services, which allows + you to visit the device/service and find the documentation that belongs to + this discovered item. + +

+ Screenshot showing the new menu on a discovered item + + +- Editing trigger IDs in automations has moved into the trigger menu, making + the automation editor a little more compact. + +

+ Screenshot showing the moved trigger ID feature + + +- When viewing backups, it will now display the size of each backup in the + table. Thanks, [@ludeeus]! +- Thanks to [@bramkragten], you can now select the period in the options of + the statistics card. +- The Apple TV integration has been updated to support tvOS 15 and can now + launch apps too! Thanks, [@postlund]! +- Thanks to [@bdraco], a device can now also display its hardware version in + Home Assistant. The HomeKit, Xiaomi Miio, Bond, Roku, and WLED integrations + have already adopted this. +- The Google Assistant integration can now be set up to use local + fulfillment, thanks to [@LoekSangers]! Please note that this only applies to + manual setups. This is already handled automatically when using the Home + Assistant Cloud. +- ZHA devices now have identify buttons, so you know which light you are + dealing with, thanks [@dmulcahey]! (Tip: also nice for visual notifications) +- We now enable Low Latency HLS (LL-HLS) by default to lower stream latency, + thanks [@allenporter]! +- Magic Home (also known as FluxLED) had lots of improvements of love from [@bdraco]! +- [@Danielhiversen] added support for local access to Adax and Mill heaters. Nice! +- Tuya now supports Pet Feeders (thanks [@vauriga]), Circuit Breakers (thanks [@slydiman]), + and Alarms (thanks [@leeyuentuen]). Additionally, support for Fans has been improved. +- The generic thermostat integration now supports presets, thanks [@brianegge]! +- Home Connect added support for refrigerators and cook processors, + thanks [@BraveChicken1] and [@noxhirsch] +- [@Shutgun] added support for sirens to devolo Home Control. +- Tibber added sensors for estimated hourly and monthly consumption, costs, and + more! Thanks, [@Danielhiversen]! +- We now have a `slugify` template filter, thanks to [@ZephireNZ]! +- [@Petro31] make `is_number` available as tests in templates. +- Volumio has now repeat, repeat, repeat, ... support. Thanks, [@m4rkireland]! +- [@marcelveldt] added a service to the Hue integration for setting more + advanced scene options. Thanks! +- Sonos now has a binary sensor that can tell you if the microphone is on or off. + Helpful for a notification in case it shouldn't be on or off. Thanks, [@jjlawren]! +- [@sebfortier2288] add support for tilt devices to Soma. Nice! +- Google Assistant now supports the curtain device classes, thanks [@emontnemery]! +- If you are using Synology DSM connected cameras, you can now select the + quality of the snapshots taken. Thanks, [@mib1185]! +- A whole bunch of entities have been added to configure Yamaha MusicCast, + really nice [@micha91]! +- Environment Canada now has an AQHI sensor. Thanks, [@gwww]! + +And honestly, this list is far from complete! There is so much this release. +Feel free to check and search the "All Changes" section to find more! + +This release adds support for long-term statistics to the following integrations: + +- [August][august docs] (thanks [@bdraco]) +- [Buienradar][buienradar docs] (thanks [@tedvdb]) +- [EDL21][edl21 docs] (thanks [@StephanU]) +- [GitHub][github docs] (thanks [@ludeeus]) +- [Hunter Douglas PowerView][hunterdouglas_powerview docs] (thanks [@bdraco]) +- [Kraken][kraken docs] (thanks [@eifinger]) +- [Nexia/American Standard/Trane][nexia docs] (thanks [@bdraco]) +- [Pentair ScreenLogic][screenlogic docs] (thanks [@bdraco]) +- [Sensor.Community][luftdaten docs] (thanks [@frenck]) +- [SiteSage Emonitor][emonitor docs] (thanks [@bdraco]) +- [Tesla Powerwall][powerwall docs] (thanks [@bdraco]) + +And the following integrations now have entity categories: + +- [Aurora ABB PowerOne Solar PV][aurora_abb_powerone docs] (thanks [@davet2001]) +- [DSMR][dsmr docs] (thanks [@starkillerOG]) +- [GitHub][github docs] (thanks [@ludeeus]) +- [Hyperion][hyperion docs] (thanks [@starkillerOG]) +- [Kostal Plenticore Solar Inverter][kostal_plenticore docs] (thanks [@stegm]) +- [Mazda Connected Services][mazda docs] (thanks [@bdr99]) +- [Motion Blinds][motion_blinds docs] (thanks [@starkillerOG]) +- [NETGEAR][netgear docs] (thanks [@starkillerOG]) + +## New Integrations + +We welcome the following new integrations this release: + +- [`input_button`][input_button docs], added by [@frenck] +- [Aseko Pool Live][aseko_pool_live docs], added by [@milanmeu] +- [Aussie Broadband][aussie_broadband docs], added by [@nickw444] +- [Diagnostics][diagnostics docs], added by [@balloob] +- [Elmax][elmax docs], added by [@albertogeniola] +- [GoodWe][goodwe docs], added by [@mletenay] +- [HomeWizard Energy][homewizard_energy docs], added by [@DCSBL] +- [IntelliFire][intellifire docs], added by [@jeeftor] +- [NINA][nina docs], added by [@DeerMaximum] +- [Oncue by Kohler][oncue docs], added by [@bdraco] +- [Open-Meteo][open_meteo docs], added by [@frenck] +- [Overkiz][overkiz docs], added by [@iMicknl] +- [RTSPtoWebRTC][rtsp_to_webrtc docs], added by [@allenporter] +- [SenseME][senseme docs], added by [@bdraco] +- [Steamist][steamist docs], added by [@bdraco] +- [UniFi Protect][unifiprotect docs], added by [@AngellusMortis] + + +## Integrations now available to set up from the UI + +The following integrations are now available via the Home Assistant UI: + +- [Android TV][androidtv docs], done by [@ollo69] +- [Azure Event Hub][azure_event_hub docs], done by[@eavanvalkenburg] +- [CPU Speed][cpuspeed docs], done by [@frenck] +- [DNS IP][dnsip docs], done by [@gjohansson-ST] +- [GitHub][github docs], done by [@ludeeus] +- [Launch Library][launch_library docs], done by [@DurgNomis-drol] +- [LG webOS Smart TV][webostv docs], done by [@thecode] +- [PVOutput][pvoutput docs], done by [@frenck] +- [Sensibo][sensibo docs], done by [@gjohansson-ST] +- [SolaX Power][solax docs], done by [@tokenize47] +- [Vallox][vallox docs], done by [@slovdahl] +- [Version][version docs], done by [@ludeeus] +- [Whois][whois docs], done by [@frenck] + +## If you need help... + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/core/issues). Make sure to fill in all fields of the issue template. + + + +## Breaking Changes + +Below is a listing of the breaking change for this release, per subject or +integration. Click on one of those to read more about the breaking change +for that specific item. + +{% details "Energy Dashboard" %} + +The configuration of the Energy Dashboard has moved. + +Previously this was found as a menu item in the configuration screen, +but has now been moved into the "Dashboard" menu item. + +This keeps the configuration of all dashboards in a single place. + +([@zsarnett] - [#11386]) + +[@zsarnett]: https://github.com/zsarnett +[#11386]: https://github.com/home-assistant/frontend/pull/11386 + +{% enddetails %} + +{% details "Python 3.8 support dropped" %} + +Python 3.8 support has previously been deprecated and now has been removed. +Home Assistant now requires Python 3.9 to run. + +If you are using Home Assistant OS, Home Assistant Container, or Home Assistant +Supervised installation method, you don't have to do anything. In those cases, +we handle this all for you. Your system has been using Python 3.9 for quite +some time already. + +([@frenck] - [#63883]) + +{% enddetails %} + +{% details "GPIO Integrations" %} + +As of this release, all integrations interfacing with GPIO directly, have been +deprecated. + +There are multiple reasons for this, which includes a general low usage of +these integrations. For most Home Assistant installations, GPIO isn't easily +usable and more often the integrations are unmaintained. + +More information can be found in +[Architectural Decision Record 0019](https://github.com/home-assistant/architecture/blob/master/adr/0019-GPIO.md). + +Additionally, there are many projects around that handle these purposes of GPIO +better than Home Assistant. For example, our sister project ESPHome, or +the MQTT IO project, and many more. + +We do not forbid the use of GPIO, but we are merely deprecating and removing +built-in integrations, providing GPIO functionality from Core. We welcome +custom integrations (existing or new ones) to provide alternatives. However, +for most cases we recommend on using dedicated hardware, like an ESP device, +instead. + +The following integrations have been deprecated and will be removed in +Home Assistant Core **2022.4**: + +- BeagleBone Black GPIO +- BH1750 +- Blinkt! +- Bosch BME280 Environmental Sensor +- Bosch BME680 Environmental Sensor +- Bosch BMP280 Environmental Sensor +- DHT Sensor +- Enviro pHAT +- HTU21D(F) Sensor +- mcp23017 +- MH-Z19 CO2 Sensor +- Orange Pi GPIO +- pcal9535a +- pi4ioe5v9xxxx +- PiFace Digital I/O (PFIO) +- Piglow +- pigpio Daemon PWM LED +- Raspberry Pi RF +- Rasphihats +- Sense HAT +- Sensirion SHT31 +- Time of Flight + +The following integration have been deprecated and will be removed in +Home Assistant Core **2022.6**: + +- 1-Wire (SysBus only!) +- Raspberry Pi GPIO + +Note: 1-Wire is a special case, as it supports both the SysBus and connecting +to a remote owfs server. The use of the SysBus is deprecated, however, +connecting to a remote owfs server is not. + +{% enddetails %} + +{% details "Binary Sensors" %} + +Previously, `binary_sensor` entities could have the state `on`, `off`, and +in case the device was unreachable: `unavailable`. + +However, compared to other entities, it wasn't able to have the `unknown` state, +which has been added this release. + +So, a `binary_sensor` entity can now have the `on`, `off`, `unavailable`, or `unknown` state. + +You might need to adapt your automations or scripts to take this new +`unknown` state into account. + +([@frenck] - [#60193]) ([binary_sensor docs]) + +{% enddetails %} + +{% details "Groups: Locks" %} + +The behavior of grouped locks has been reversed such that "unlocked" is +mapped to `on` and "locked" to off. + +This means that: + +- A group with mixed domains will be considered `on` if any lock included in + the group is unlocked. +- A group of locks will be considered "unlocked" if any lock included in the +- group is unlocked. + +([@emontnemery] - [#62580]) ([lock docs]) ([group docs]) + +{% enddetails %} + +{% details "Fan/Humidifer/Light/Remote/Siren/Switch/Vacuum" %} + +Previously, toggle-based entities (like `fan`, `light`, `switch`, `remote`, `siren`, `vacuum`, `humidifier`) could have the state `on` or `off`, and in case the device was unreachable: `unavailable`. However, compared to other entities, toggle entities weren't able to have an `unknown` state, this now has changed. + +As of now, toggle-based entities can have the `on`, `off`, `unavailable`, or `unknown` state. + +You might need to adapt your automations or scripts to take this new `unknown` state into account. + +([@frenck] - [#64621]) + +{% enddetails %} + +{% details "Advantage Air" %} + +The `advantage_air.set_myzone` service has been deprecated and will be removed +in a future version of Home Assistant. + +Please use the `select.select_option` service on the MyZone select entity to change this value on supported systems instead. + +([@Bre77] - [#58777]) ([advantage_air docs]) + +{% enddetails %} + +{% details "Android TV" %} + +The Android TV integration migrated to configuration via the +UI. Configuring Android TV via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +- Add config_flow to AndroidTV integration ([@ollo69] - [#54444]) ([androidtv docs]) (breaking-change) + +{% enddetails %} + +{% details "API" %} + +The `/api/discovery_info` endpoint was deprecated in 2021.10, and has since only +returned blank values. From this version, the `/api/discovery_info` endpoint has +been removed completely. + +([@ludeeus] - [#64534]) ([api docs]) + +{% enddetails %} + +{% details "Apple iCloud" %} + +The Apple iCloud integration migrated to configuration via the +UI in a previous release already. Configuring Apple iCloud via YAML configuration +has now been deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is already automatically imported; and thus +can be safely removed from your YAML configuration. + +([@epenet] - [#63875]) ([icloud docs]) + +{% enddetails %} + +{% details "Apple Push Notification Service (APNS)" %} + +The Apple Push Notification Service (APNS) integration has been deprecated and +will be removed in Home Assistant 2022.4. Please note, this does not affect +our mobile companion apps; as they do not use this integration for their +notifications. + +([@frenck] - [#64629]) ([apns docs]) + +{% enddetails %} + +{% details "Aurora ABB PowerOne Solar PV" %} + +The previously deprecated YAML configuration of the Aurora ABB PowerOne Solar PV +integration has been removed. + +Aurora ABB PowerOne Solar PV is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@tkdrob] - [#62317]) ([aurora_abb_powerone docs]) + +{% enddetails %} + +{% details "AVM FRITZ!Box Tools" %} + +The previously deprecated YAML configuration of the AVM FRITZ!Box Tools +integration has been removed. + +AVM FRITZ!Box Tools is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +[@epenet] - [#63857]) ([fritz docs]) + +---- + +The `reboot` and `reconnect` services are deprecated and will be removed in future release. Please use the newly provided button entities instead. + +([@chemelli74] - [#61483]) ([fritz docs]) + +{% enddetails %} + +{% details "AVM FRITZ!SmartHome" %} + +The `lock` and `devicelock` attributes are removed from all entities and now exposed as own sensors. + +([@mib1185] - [#60426]) ([fritzbox docs]) + +{% enddetails %} + +{% details "Azure Event Hub" %} + +The Azure Event Hub integration migrated to configuration via the +UI. Configuring Azure Event Hub via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +([@eavanvalkenburg] - [#61155]) ([azure_event_hub docs]) + +{% enddetails %} + +{% details "BMW Connected Drive" %} + +The `charging_time_remaining` (in hours) has been replaced with +`charging_end_time` (timestamp) to not clutter the Home Assistant state machine. + +You might need to adapt your automations or scripts for this change. + +([@rikroe] - [#60942]) ([bmw_connected_drive docs]) + +--- + +All ``bmw_connected_drive.*` services are deprecated. +Please use the new button entities with the `button.press` service instead. + +([@rikroe] - [#63136]) ([bmw_connected_drive docs]) + +{% enddetails %} + +{% details "Bond" %} + +The custom `start_increasing_brightness`, `start_decreasing_brightness` and `stop` services are now deprecated and will be removed in a future release. + +Please use the new button entities, that replace those, instead. + +([@bdraco] - [#64725]) ([bond docs]) + +{% enddetails %} + +{% details "Broadlink" %} + +The previously deprecated YAML configuration of the Broadlink +integration has been removed. + +Broadlink is now configured via the UI, any existing YAML configuration +has been imported in previous releases and can now be safely removed from your +YAML configuration files. + +([@tkdrob] - [#62341]) ([broadlink docs]) + +{% enddetails %} + +{% details "CO2 Signal" %} + +The previously deprecated YAML configuration of the CO2 Signal +integration has been removed. + +CO2 Signal is now configured via the UI, any existing YAML configuration +has been imported in previous releases and can now be safely removed from your +YAML configuration files. + +([@tkdrob] - [#62343]) ([co2signal docs]) + +{% enddetails %} + +{% details "CPU Speed" %} + +The CPU Speed integration migrated to configuration via the +UI. Configuring CPU Speed via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +([@frenck] - [#62929]) ([cpuspeed docs]) + +{% enddetails %} + +{% details "DLNA Digital Media Renderer" %} + +The previously deprecated YAML configuration of the DLNA Digital Media Renderer +integration has been removed. + +DLNA Digital Media Renderer is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@tkdrob] - [#62344]) ([dlna_dmr docs]) + +{% enddetails %} + +{% details "DNS IP" %} + +The DNS IP integration migrated to configuration via the +UI. Configuring DNS IP via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +([@gjohansson-ST] - [#62843]) ([dnsip docs]) + +{% enddetails %} + +{% details "DoorBird" %} + +The relays and IR light switches are removed and replaced with corresponding +buttons entities. Any scripts or automations which reference these switches to +turn them on should change to instead press the button instead. + +([@flacjacket] - [#63995]) ([doorbird docs]) + +{% enddetails %} + +{% details "DSMR" %} + +The `sensor.energy_consumption_total` sensor for DSMR versions 2.2 and 4 has +been removed. Meters with these versions do not provide this data, +so this sensor can be safely removed. You might need to clean up +the orphaned entity in your setup. + +([@rhpijnacker] - [#63436]) ([dsmr docs]) + +{% enddetails %} + +{% details "Efergy" %} + +The previously deprecated YAML configuration of the Efergy +integration has been removed. + +Efergy is now configured via the UI, any existing YAML configuration +has been imported in previous releases and can now be safely removed from your +YAML configuration files. + +([@tkdrob] - [#61520]) ([efergy docs]) + +{% enddetails %} + +{% details "Enphase Envoy" %} + +The previously deprecated YAML configuration of the Enphase Envoy integration +has been removed. + +Enphase Envoy is now configured via the UI, any existing YAML configuration +has been imported in previous releases and can now be safely removed from your +YAML configuration files. + +([@tkdrob] - [#61840]) ([enphase_envoy docs]) + +{% enddetails %} + +{% details "Environment Canada" %} + +The previously deprecated YAML configuration of the Environment Canada +integration has been removed. + +Environment Canada is now configured via the UI, any existing YAML configuration +has been imported in previous releases and can now be safely removed from your +YAML configuration files. + +([@tkdrob] - [#61839]) ([environment_canada docs]) + +--- + +The sensors no longer have `Timestamp` as an extra state attribute, instead, +use the new `timestamp` sensor that can be used in automations that track state changes. + +The alert sensors (`advisories`, `endings`, `statements`, `warnings`, and `watches`) state is now a count of the number of active alerts for the sensor type +and the extra state attributes contain the alert text and alert timestamp. + +The attributes are named `alert_` and `alert_time_` where is 1 for alert 1, 2 for alert 2, etc. + +([@gwww] - [#58615]) ([environment_canada docs]) + +{% enddetails %} + +{% details "Fan" %} + +This is more a breaking change for custom integration developers. + +Now that all core fans are using the new fan entity model, the compatibility shim +has been removed. Custom integrations that have not yet switched to the new +fan model may be affected. For more information see: + + + +Preset modes and percentages will continue to be translated back to legacy speeds +until 2022.3 in order to give users a bit more time to update automations. + +([@bdraco] - [#59781]) ([fan docs]) + +{% enddetails %} + +{% details "Fibaro" %} + +The energy values are exposed now as separate sensor entities and therefore the +state attribute `current_energy_kwh` was removed from all other entities. + +If you use the state attribute `current_energy_kwh` you need to change +that to use the new energy sensors instead. + +([@rappenze] - [#63697]) ([fibaro docs]) + +{% enddetails %} + +{% details "Flume" %} + +The previously deprecated YAML configuration of the Flume integration has been removed. + +Flume is now configured via the UI, any existing YAML configuration has been imported +in previous releases and can now be safely removed from your YAML configuration files. + +([@tkdrob] - [#61517]) ([flume docs]) + +{% enddetails %} + +{% details "FortiOS" %} + +The integration now requires FortiOS 6.4.3 and newer. + +([@kimfrellsen] - [#61970]) ([fortios docs]) + +{% enddetails %} + +{% details "Foscam" %} + +The previously deprecated YAML configuration of the Foscam integration +has been removed. + +Foscam is now configured via the UI, any existing YAML configuration +has been imported in previous releases and can now be safely removed from your +YAML configuration files. + +([@tkdrob] - [#61761]) ([foscam docs]) + +{% enddetails %} + +{% details "Foursquare" %} + +The data associated with `foursquare.checkin` event is now available as a +dictionary item with key "text". + +If you use this event in your automation or scripts, you'd need to adjust to +match this change. + +([@epenet] - [#63982]) ([foursquare docs]) + +{% enddetails %} + +{% details "GitHub" %} + +The YAML configuration for the `github` sensor platform has been removed. + +There was no viable automatic migration of the configuration, so you need to +manually remove the configuration from your configuration file and set it up +again in the integration panel. + +Previously this integration created 1 sensor for each repository, now this +is split out to multiple entities which are mostly disabled by default +(you can enable the entities you want this integration to provide). + +Support for GitHub enterprise has been removed. + +([@ludeeus] - [#64190]) ([github docs]) + +{% enddetails %} + +{% details "Google Maps Travel Time" %} + +The previously deprecated YAML configuration of the Google Maps Travel Time +integration has been removed. + +Google Maps Travel Time is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@tkdrob] - [#62468]) ([google_travel_time docs]) + +{% enddetails %} + +{% details "HomeKit" %} + +HomeKit will now automatically exclude entities with an entity category such as +a configuration or diagnostic entity unless they have been explicitly included. + +To explicitly include an entity: + +- YAML: Add the entity to the filter in either the `include_entities` or `include_entity_globs` fields. +- UI: Select the entity in the UI in include mode. If you are using exclude mode, a second bridge can be created in include mode. + +([@bdraco] - [#64492]) ([homekit docs]) + +{% enddetails %} + +{% details "Honeywell Total Connect Comfort (US)" %} + +The previously deprecated YAML configuration of the Honeywell Total Connect Comfort +integration has been removed. + +Honeywell Total Connect Comfort is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + + +([@tkdrob] - [#62469]) ([honeywell docs]) + +{% enddetails %} + +{% details "iOS" %} + +The Home Assistant iOS/macOS app supports notification actions defined [in the notification itself](https://companion.home-assistant.io/docs/notifications/actionable-notifications/); the old method of defining push categories in the iOS integration is now deprecated and will be removed in 2022.4. + +([@zacwest] - [#61078]) ([ios docs]) + +{% enddetails %} + +{% details "Keenetic NDMS2 Router" %} + +The previously deprecated YAML configuration of the Keenetic NDMS2 Router +integration has been removed. + +Keenetic NDMS2 Router is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@epenet] - [#63860]) ([keenetic_ndms2 docs]) + +{% enddetails %} + +{% details "Launch Library" %} + +The Launch Library integration migrated to configuration via the +UI. Configuring Launch Library via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +([@DurgNomis-drol] - [#62416]) ([launch_library docs]) + +--- + +Attributes on the current sensor is changed. Names of these attributes are +changed to better describe what information they provide. (Ex. `agency` changed +name to `provider` as this is the more correct terminology.) New attributes are +added to give more information about where it takes place. + +The `stream` attribute ios moved to the new sensor, and changed its name to `stream_live` as it represents if the stream is live and not if a stream is +available. + +And finally, the attribute `launch_time` moved into its own sensor. This made +it possible to add some information about the launch window start and end as attributes for the new sensor. This sensor will also contain the `stream_live` attribute. + +([@DurgNomis-drol] - [#64203]) ([launch_library docs]) + +{% enddetails %} + +{% details "LG webOS Smart TV" %} + +The LG webOS Smart TV integration migrated to configuration via the +UI. Configuring LG webOS Smart TV via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +The [turn on action](/integrations/webostv/#turn-on-action) for turning on the +TV via `WakeOnLan` or `HDMI-CEC` was using a service call via YAML, and the turn on action is changed to use a custom automation trigger `webostv.turn_on` or a device trigger automation that can be setup from the UI. + +**Example trigger automation:** + +```yaml +automation: + trigger: + - platform: webostv.turn_on + entity_id: media_player.lg_webos_smart_tv + action: + - service: wake_on_lan.send_magic_packet + data: + mac: AA-BB-CC-DD-EE-FF +``` + +([@thecode] - [#64117]) ([webostv docs]) + +{% enddetails %} + +{% details "Logitech Squeezebox" %} + +The previously deprecated YAML configuration of the Logitech Squeezebox +integration has been removed. + +Logitech Squeezebox is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@tkdrob] - [#62537]) ([squeezebox docs]) + +{% enddetails %} + +{% details "Magic Home" %} + +The previously deprecated YAML configuration of the Magic Home +integration has been removed. + +Magic Home is now configured via the UI, any existing YAML configuration +has been imported in previous releases and can now be safely removed from your +YAML configuration files. + +([@tkdrob] - [#61844]) ([flux_led docs]) + +{% enddetails %} + +{% details "Media Player Classic Home Cinema (MPC-HC)" %} + +The Media Player Classic Home Cinema (MPC-HC) integration has been deprecated +and will be removed in Home Assistant Core 2022.4. + +This integration is removed under [Architectural Decision Record 0004](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md). + +([@frenck] - [#63598]) ([mpchc docs]) + +{% enddetails %} + +{% details "MQTT" %} + +The MQTT lights no longer support, the previously deprecated, `value_template`;`state_value_template` should be used instead. + +([@emontnemery] - [#62682]) ([mqtt docs]) + +---- + +Previouysly MQTT climate would only publish to `hold_command_topic` or ` away_mode_command_topic` if the new mode is not the same as the current state. + +As of this release MQTT always publishes on both command topics (`hold_command_topic` and ` away_mode_command_topic`) (if defined) which makes it more predictable +what update the MQTT device will receive. + +([@jbouwh] - [#63463]) ([mqtt docs]) + +---- + +The `send_if_off` config parameter of the climate platform, which limits +publishing if the current operation mode is `HVAC_MODE_OFF`, is now +deprecated. + +This will break applications that depend on this feature. + +([@jbouwh] - [#63814]) ([mqtt docs]) + +{% enddetails %} + +{% details "Nanoleaf" %} + +The Nanoleaf integration migrated to configuration via the +UI in a previous release already. Configuring Nanoleaf via YAML configuration +has now been deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is already automatically imported; and thus +can be safely removed from your YAML configuration. + +([@milanmeu] - [#63404]) ([nanoleaf docs]) + +{% enddetails %} + +{% details "Nest" %} + +The Legacy "Works With Nest API" is deprecated and support will be removed +in Home Assistant Core 2022.5; See our [documentation for using the Smart Device +Management API](/integrations/nest/) instead. + +([@allenporter] - [#63027]) ([nest docs]) + +{% enddetails %} + +{% details "NETGEAR" %} + +The previously deprecated YAML configuration of the NETGEAR +integration has been removed. + +NETGEAR is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@epenet] - [#63862]) ([netgear docs]) + +{% enddetails %} + +{% details "Nissan Leaf" %} + +The service to start a charge has been deprecated; it is replaced with a button. + +Replace the `nissan_leaf.start_charge` service in any existing automations with `button.press` for the new `button.start_NICKNAME_charging` entity. + +The `nissan_leaf.start_charge` service is now deprecated and will be removed +in a future release. + +([@filcole] - [#62948]) ([nissan_leaf docs]) + +{% enddetails %} + +{% details "Nmap Tracker" %} + +The previously deprecated YAML configuration of the Nmap Tracker +integration has been removed. + +Nmap Tracker is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@epenet] - [#63863]) ([nmap_tracker docs]) + +{% enddetails %} + +{% details "Nuki" %} + +The previously deprecated YAML configuration of the Nuki +integration has been removed. + +Nuki is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@tkdrob] - [#62470]) ([nuki docs]) + +{% enddetails %} + +{% details "OpenGarage" %} + +The previously deprecated YAML configuration of the OpenGarage +integration has been removed. + +OpenGarage is now configured via the UI, any existing YAML configuration +has been imported in previous releases and can now be safely removed from your +YAML configuration files. + +- Remove deprecated yaml config from opengarage ([@tkdrob] - [#61961]) ([opengarage docs]) (breaking-change) + +{% enddetails %} + +{% details "Philips TV" %} + +The previously deprecated YAML configuration of the Philips TV +integration has been removed. + +Philips TV is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@tkdrob] - [#62471]) ([philips_js docs]) + +{% enddetails %} + +{% details "PVOutput" %} + +The PVOutput integration migrated to configuration via the +UI. Configuring PVOutput via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +Additionally, all sensor attributes of the PVOutput sensor, +have been extracted in their own dedicated sensors. + +This applies to the following PVOutput attributes: + +- `energy_generation` +- `power_generation` +- `energy_consumption` +- `power_consumption` +- `efficiency` +- `temperature` +- `voltage` + +If you relied on these in your automation or scripts, you need to adapt those to use the new separate sensors instead. The attributes are currently available, however, deprecated and will be removed in Home Assistant Core 2022.4. + +([@frenck] - [#62667] [#62894]) ([pvoutput docs]) + +{% enddetails %} + +{% details "ReCollect Waste" %} + +ReCollect Waste no longer stories "next pickup" information as attributes of the "current pickup" sensor; instead, both pickups are now their own sensors. + +([@bachya] - [#62558]) ([recollect_waste docs]) + +{% enddetails %} + +{% details "RIVM Stookalert" %} + +The previously deprecated YAML configuration of the Stookalert +integration has been removed. + +Stookalert is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@frenck] - [#61007]) ([stookalert docs]) + +{% enddetails %} + +{% details "Samsung SyncThru Printer" %} + +The previously deprecated YAML configuration of the Samsung SyncThru Printer +integration has been removed. + +Samsung SyncThru Printer is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@tkdrob] - [#62541]) ([syncthru docs]) + +{% enddetails %} + +{% details "Sensibo" %} + +The Sensibo integration migrated to configuration via the +UI. Configuring Sensibo via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +([@gjohansson-ST] - [#60900]) ([sensibo docs]) + +{% enddetails %} + +{% details "Sensor.Community (previously: Luftdaten)" %} + +The Luftdaten integration has been renamed to Sensor.Community; which is +the new name of the Luftdaten project. + +The previously deprecated YAML configuration of this integration +has been removed. + +Sensor.Community is now configured via the UI, any existing YAML configuration +has been imported in previous releases and can now be safely removed from your +YAML configuration files. + +([@frenck] - [#61748] [#62865]) ([luftdaten docs]) + +{% enddetails %} + +{% details "SMA Solar" %} + +The previously deprecated YAML configuration of the SMA Solar +integration has been removed. + +SMA Solar is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@tkdrob] - [#62472]) ([sma docs]) + +{% enddetails %} + +{% details "SolaX Power" %} + +The SolaX Power integration migrated to configuration via the +UI. Configuring SolaX Power via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +([@tokenize47] - [#56620]) ([solax docs]) + +{% enddetails %} + +{% details "SwitchBot" %} + +The SwitchBot integration migrated to configuration via the +UI in a previous release already. Configuring SwitchBot via YAML configuration +has now been deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is already automatically imported; and thus +can be safely removed from your YAML configuration. + +([@tkdrob] - [#62583]) ([switchbot docs]) + +{% enddetails %} + +{% details "Synology DSM" %} + +The `reboot` and `shutdown` services are deprecated and will be removed in a future release. Please use the new button entities instead. + +([@mib1185] - [#57352]) ([synology_dsm docs]) (breaking-change) + +{% enddetails %} + +{% details "Templates: Binary Sensors" %} + +Template trigger binary sensor should start with `unknown` value rather than always starting with `false`/`off`. This matches the template binary sensor behavior +with other sensors. + +([@amosyuen] - [#62769]) ([template docs]) + +{% enddetails %} + +{% details "TP-Link Kasa Smart" %} + +The previously deprecated YAML configuration of the TP-Link Kasa Smart +integration has been removed. + +TP-Link Kasa Smart is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@bdraco] - [#62457]) ([tplink docs]) + +{% enddetails %} + +{% details "Trafikverket Train" %} + +The planned time, estimated time and actual time sensor attributes have +been corrected to be UTC isoformatted strings which is standard in Home Assistant. + +Previously displayed as `2021-12-23T09:07:00` and now correctly set as `2021-12-23T09:07:00+00:00`. + +This may affect templates or automations based on these attributes. + +([@gjohansson-ST] - [#62636]) ([trafikverket_train docs]) + +{% enddetails %} + +{% details "Twinkly" %} + +Key `host` is removed from the (extra) state attribute of the light entity. + +([@RobBie1221] - [#64139]) ([twinkly docs]) + +{% enddetails %} + +{% details "Vallox" %} + +The Vallox integration migrated to configuration via the +UI. Configuring Vallox via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +([@slovdahl] - [#62780]) ([vallox docs]) + +{% enddetails %} + +{% details "Version" %} + +The Version integration migrated to configuration via the +UI. Configuring Version via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +Additionally, the `source` and `channel` attributes have been removed from +the Version sensor for the local source. + +([@ludeeus] - [#54642] [#64827]) ([version docs]) + +{% enddetails %} + +{% details "VeSync" %} + +Previous versions of this integration exposed power and energy usage from +VeSync outlets as state attributes on the `switch` entity itself. This used the deprecated properties: `current_power_w` and `today_energy_kwh`. + +In this version, these two attributes have been removed from the `switch` +entity and split into two new diagnostic sensor entities that are attached to +the same Device. + +Automations and template entities based on the state attribute mechanism should +be updated accordingly. + +([@decompil3d] - [#61837]) ([vesync docs]) + +{% enddetails %} + +{% details "Viessmann ViCare" %} + +The scan interval option has been removed, since the default should be fine +in almost all cases. + +If you really need more fine-grained control you can disable automatic updates +in the system settings for the Viessmann ViCare integration and automate the +polling of the entities with the +[`homeassistant.update_entity`](/docs/scripts/service-calls#homeassistant-services) +service. + +([@oischinger] - [#63343]) ([vicare docs]) + +{% enddetails %} + +{% details "VIZIO SmartCast" %} + +If an integrated `vizio` TV supports apps and the source is currently a non-app +input (e.g. HDMI-1), the `app_id` and `app_name` attributes will no longer be in the media player entity's state. + +When the TV is using an app, the `app_name` will still always be visible and the `app_id` will continue to only be shown if the app is not recognized. + +([@raman325] - [#64025]) ([vizio docs]) + +{% enddetails %} + +{% details "VLC media player Telnet" %} + +The previously deprecated YAML configuration of the VLC media player Telnet +integration has been removed. + +VLC media player Telnet is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@tkdrob] - [#62542]) ([vlc_telnet docs]) + +{% enddetails %} + +{% details "Waze Travel Time" %} + +The previously deprecated YAML configuration of the Waze Travel Time +integration has been removed. + +Waze Travel Time is now configured via the UI, any existing YAML +configuration has been imported in previous releases and can now be safely +removed from your YAML configuration files. + +([@tkdrob] - [#62543]) ([waze_travel_time docs]) + +{% enddetails %} + +{% details "WebSocket API / Media Source" %} + +This concerns custom integration developers only. + +The parameters for `async_sign_path` have changed. Refresh token is now a keyword parameter. If called as part of a HTTP or WebSocket request, the users refresh token will automatically be used. + +([@balloob] - [#64337]) + +{% enddetails %} + +{% details "Whois" %} + +The Whois integration migrated to configuration via the +UI. Configuring Whois via YAML configuration has been +deprecated and will be removed in a future Home Assistant release. + +Your existing YAML configuration is automatically imported on upgrade to this +release; and thus can be safely removed from your YAML configuration after upgrading. + +([@frenck] - [#63069]) ([whois docs]) + +{% enddetails %} + +{% details "Z-Wave JS" %} + +Due to a schema change, `zwave-js-server` version 1.14.0 or greater is required. +Ensure you are using the latest version of `zwave-js-server` (or the add-ons +that provide those). + +([@raman325] - [#64407]) ([zwave_js docs]) + +{% enddetails %} + +{% details "Zero-configuration networking (zeroconf)" %} + +This change is only a concern for custom integration developers. + +Currently zeroconf matching only allows matching the `macaddress`, `model`, and `manufacturer` properties along with the `name` from the ZeroconfServiceInfo. + +Since properties are arbitrarily defined by the zeroconf service, +the list of named properties has grown over time. + +Matching now allows for any arbitrarily defined property. +All property matches must be lowercase, wildcards are supported + +The top level keys `model`, `manufacturer`, and `macaddress` +are now deprecated from the `manifest.json` file and should +be moved into a `properties` dict. + +For example: +```diff +- {"type":"_airplay._tcp.local.","model":"appletv*"} ++ {"type":"_airplay._tcp.local.","properties":{"model":"appletv*"}} +``` + +([@bdraco] - [#62133]) ([zeroconf docs]) + +{% enddetails %} + +## Farewell to the following + +The following integrations are no longer available as of this release: + +- **TaHoma** has been removed. The integration has been broken and now been + superseded by the [Overkiz](/integrations/overkiz) integration. + ([@iMicknl] - [#62607]) +- **Arduino** the now long time deprecated integration has been removed. + ([@frenck] - [#63406]) +- **EE Bright Box** has been broken and disabled for over a year now. + It has now been removed. ([@epenet] - [#63839]) + +## All changes + +{% details "Click to see all changes!" %} + +- 2022! Happy New Year! ([@frenck] - [#60936]) +- Updated code as per comment in #60676 ([@Swamp-Ig] - [#60682]) ([izone docs]) +- Remove legacy fan compatibility shim ([@bdraco] - [#59781]) ([fan docs]) ([demo docs]) ([template docs]) (breaking-change) +- Update integrations to use `async_setup_platforms` ([@cdce8p] - [#60956]) +- Add unique_id to the statistics component ([@ThomDietrich] - [#59205]) ([statistics docs]) +- Address late review of eight_sleep ([@raman325] - [#60951]) ([eight_sleep docs]) +- Improve asuswrt code readability ([@Chen-IL] - [#60975]) ([asuswrt docs]) +- Use platform enum (5) [P-R] ([@cdce8p] - [#60943]) +- Use platform enum (2) [E-G] ([@cdce8p] - [#60933]) +- Use platform enum (6) [S] ([@cdce8p] - [#60944]) +- Use platform enum (7) [T-Z] ([@cdce8p] - [#60948]) +- Use state variable from mpchc ([@infeeeee] - [#59341]) ([mpchc docs]) +- Revert "Use language independent variable to read MPC-HC state" ([@cgarwood] - [#60993]) ([mpchc docs]) +- Fix missing test assertion in ZHA siren test ([@dmulcahey] - [#61009]) ([zha docs]) +- Fix panasonic_viera tests ([@cdce8p] - [#60999]) ([panasonic_viera docs]) +- Remove deprecated base entity classes ([@frenck] - [#61006]) +- Add nina integration ([@DeerMaximum] - [#56647]) ([nina docs]) (new-integration) +- Remove deprecated YAML configuration from DSMR ([@frenck] - [#61008]) ([dsmr docs]) +- Address late review of Balboa ([@garbled1] - [#61004]) ([balboa docs]) +- Add Venstar runtimes and battery sensors ([@garbled1] - [#60414]) ([venstar docs]) +- Don't use ConfigEntry update listener for Fronius ([@farmio] - [#61017]) ([fronius docs]) +- Prevent ZHA coordinator from showing unavailable ([@dmulcahey] - [#61068]) ([zha docs]) +- Adjust yeelight ssdp_listener tests ([@epenet] - [#61065]) ([yeelight docs]) +- Add Aseko Pool Live integration ([@milanmeu] - [#56299]) +- Use platform enum (4) [M-O] ([@cdce8p] - [#60940]) +- Use platform enum (3) [H-L] ([@cdce8p] - [#60937]) +- Update Apple TV integration to support tvOS 15 ([@postlund] - [#58665]) ([apple_tv docs]) +- Add Yamaha MusicCast Select Entities ([@micha91] - [#60645]) ([yamaha_musiccast docs]) +- Add max/min/step to NumberEntityDescription ([@epenet] - [#61100]) ([xiaomi_miio docs]) ([number docs]) ([wallbox docs]) +- Add Open-Meteo integration ([@frenck] - [#60379]) ([open_meteo docs]) (new-integration) +- Use dataclass properties in Zeroconf tests ([@epenet] - [#61109]) ([zeroconf docs]) +- Revert "Add Open-Meteo integration (#60379)" ([@epenet] - [#61130]) ([open_meteo docs]) +- Bump cache version CI ([@balloob] - [#61137]) +- Block pytest_asyncio ([@balloob] - [#61141]) +- Add volume and tv metadata to Apple TV ([@postlund] - [#61107]) ([apple_tv docs]) +- Deprecate ios push config (in favor of inline actions) ([@zacwest] - [#61078]) ([ios docs]) (breaking-change) +- Replace deprecated DEVICE_CLASS constants with new enums in Hue integration ([@marcelveldt] - [#61149]) ([hue docs]) +- Change ondilo_ico update interval to 5 minutes ([@Alex9779] - [#61153]) ([ondilo_ico docs]) +- Add Onewire diagnostic and config switches and binary_sensors ([@garbled1] - [#59309]) ([onewire docs]) +- Fix flaky tests with unsynchronized stream `available` assertions ([@allenporter] - [#61167]) +- Fix incorrect docstring in automation trace code ([@emontnemery] - [#61168]) +- Minor deduplication of condition validation code ([@emontnemery] - [#61170]) ([automation docs]) +- Elmax integration ([@albertogeniola] - [#59321]) ([elmax docs]) (new-integration) +- Update MagicHome/flux_led OUIs for DHCP discovery ([@bdraco] - [#61192]) ([flux_led docs]) +- Add local access for Adax ([@Danielhiversen] - [#60019]) ([adax docs]) +- Use list comprehension in onewire sensor descriptions ([@epenet] - [#61157]) ([onewire docs]) +- Jewish Calendar: Do not convert datetimes to UTC ([@balloob] - [#61222]) ([jewish_calendar docs]) +- Bump actions/upload-artifact from 2.2.4 to 2.3.0 (@dependabot - [#61215]) +- Updating naming for flux_led ([@bdraco] - [#61187]) ([flux_led docs]) +- Address late review of Adax ([@Danielhiversen] - [#61200]) ([adax docs]) +- Fix flaky tests around frame helper ([@epenet] - [#61179]) +- Attempt to fix flaky prometheus test ([@emontnemery] - [#61242]) ([prometheus docs]) +- Statistics refactor testcases in async pytest style ([@ThomDietrich] - [#60935]) ([statistics docs]) +- Refactor recorder queue handling ([@emontnemery] - [#61161]) ([recorder docs]) +- Use SensorDeviceClass and SensorStateClass enums in Aurora ABB ([@davet2001] - [#61245]) ([aurora_abb_powerone docs]) +- Improve Sonos tests, begin adding coverage ([@jjlawren] - [#61198]) ([sonos docs]) +- Use new DeviceClass enums in ads ([@epenet] - [#61249]) ([ads docs]) +- Use new DeviceClass enums in acmeda ([@epenet] - [#61248]) ([acmeda docs]) +- Use new DeviceClass enums in accuweather ([@epenet] - [#61246]) ([accuweather docs]) +- Use new DeviceClass enums in abode ([@epenet] - [#61244]) ([abode docs]) +- Use _attr_* in whois integration ([@milanmeu] - [#61250]) ([whois docs]) +- Refactor Prometheus tests ([@alim4r] - [#60451]) ([prometheus docs]) +- Use new SensorDeviceClass enum in airvisual ([@epenet] - [#61261]) ([airvisual docs]) +- Use new DeviceClass, StateClass and EntityCategory enums in ambient_station ([@epenet] - [#61266]) ([ambient_station docs]) +- Use new BinarySensorDeviceClass enum in amcrest ([@epenet] - [#61268]) ([amcrest docs]) +- Use new SensorStateClass enum in amberelectric ([@epenet] - [#61265]) ([amberelectric docs]) +- Use new DeviceClass and StateClass enums in ambee ([@epenet] - [#61264]) ([ambee docs]) +- Use new CoverDeviceClass enum in aladdin_connect ([@epenet] - [#61262]) ([aladdin_connect docs]) +- Use new EntityCategory enum in airthings ([@epenet] - [#61260]) ([airthings docs]) +- Use new SensorStateClass enum in airnow ([@epenet] - [#61259]) ([airnow docs]) +- Use new DeviceClass and StateClass enums in airly ([@epenet] - [#61258]) ([airly docs]) +- Use new SensorDeviceClass enums in aemet ([@epenet] - [#61256]) ([aemet docs]) +- Use new DeviceClass and EntityCategory enums in advantage_air ([@epenet] - [#61255]) ([advantage_air docs]) +- Use new SensorDeviceClass in aqualogic ([@epenet] - [#61272]) ([aqualogic docs]) +- Remove log flooding prevention logic from discovery info ([@epenet] - [#61243]) ([zeroconf docs]) ([mqtt docs]) ([ssdp docs]) ([dhcp docs]) ([usb docs]) +- Use new EntityCategory enum in Surepetcare ([@Danielhiversen] - [#61282]) ([surepetcare docs]) +- Use new SensorDeviceClass enum in awair ([@epenet] - [#61290]) ([awair docs]) +- Use new SensorDeviceClass in apcupsd ([@epenet] - [#61271]) ([apcupsd docs]) +- Use new SensorDeviceClass in arlo ([@epenet] - [#61274]) ([arlo docs]) +- Use new SensorDeviceClass in arwn ([@epenet] - [#61275]) ([arwn docs]) +- Use new DeviceClass and StateClass enums in aseko_pool_live ([@epenet] - [#61276]) ([aseko_pool_live docs]) +- Use new DeviceClass and StateClass enums in atome ([@epenet] - [#61284]) ([atome docs]) +- Use new SwitchDeviceClass in aten_pe ([@epenet] - [#61281]) ([aten_pe docs]) +- Use new EntityCategory enum in Tibber ([@Danielhiversen] - [#61279]) ([tibber docs]) +- Use new EntityCategory in rfxtrx ([@Danielhiversen] - [#61295]) ([rfxtrx docs]) +- Use new EntityCategory in Mill ([@Danielhiversen] - [#61294]) ([mill docs]) +- Use new BinarySensorDeviceClass enum in axis ([@epenet] - [#61291]) ([axis docs]) +- Use new BinarySensorDeviceClass enum in balboa ([@epenet] - [#61292]) ([balboa docs]) +- Use new EntityCategory in Tractive ([@Danielhiversen] - [#61289]) ([tractive docs]) +- Use new EntityCategory enum in Switchbot ([@Danielhiversen] - [#61280]) ([switchbot docs]) +- Use new EntityCategory in Opengarage ([@Danielhiversen] - [#61285]) ([opengarage docs]) +- Use new DeviceClass and EntityCategory enums in august ([@epenet] - [#61288]) ([august docs]) +- Use new SensorDeviceClass enum in atag ([@epenet] - [#61278]) ([atag docs]) +- Use _attr_* in android_ip_webcam ([@epenet] - [#61270]) ([android_ip_webcam docs]) +- Aurora ABB add entity category ([@davet2001] - [#61231]) ([aurora_abb_powerone docs]) +- Use new DeviceClass enums in alexa ([@epenet] - [#61263]) ([alexa docs]) +- Use new CoverDeviceClass in bond ([@epenet] - [#61322]) ([bond docs]) +- Use new DeviceClass enums in bmw ([@epenet] - [#61321]) ([bmw_connected_drive docs]) +- Use new SensorDeviceClass enum in bmp280 ([@epenet] - [#61320]) ([bmp280 docs]) +- Use new SensorDeviceClass enum in bme280 ([@epenet] - [#61319]) ([bme280 docs]) +- Use SensorDeviceClass enum in beewi_smartclim ([@epenet] - [#61313]) ([beewi_smartclim docs]) +- Ues new SensorDeviceClass in bme680 ([@epenet] - [#61318]) ([bme680 docs]) +- Use DeviceClass and StateClass enums in broadlink ([@epenet] - [#61326]) ([broadlink docs]) +- Add sensors to Mill local heaters ([@Danielhiversen] - [#61247]) ([mill docs]) +- Use DeviceClass and StateClass enums in bbox ([@epenet] - [#61309]) ([bbox docs]) +- Use SensorDeviceClass enum in bh1750 ([@epenet] - [#61314]) ([bh1750 docs]) +- Use new DeviceClass enums in blink ([@epenet] - [#61315]) ([blink docs]) +- Use new DeviceClass enums in bloomsky ([@epenet] - [#61316]) ([bloomsky docs]) +- Use new DeviceClass enums in bosch_shc ([@epenet] - [#61324]) ([bosch_shc docs]) +- Use new MediaPlayerDeviceClass enum in braviatv ([@epenet] - [#61325]) ([braviatv docs]) +- Use new enums in brother ([@epenet] - [#61327]) ([brother docs]) +- Use new CoverDeviceClass enum in brunt ([@epenet] - [#61328]) ([brunt docs]) +- Use new SensorDeviceClass enum in buienradar ([@epenet] - [#61329]) ([buienradar docs]) +- Use new SensorDeviceClass enum in canary ([@epenet] - [#61330]) ([canary docs]) +- Use new SensorDeviceClass in cert_expiry ([@epenet] - [#61331]) ([cert_expiry docs]) +- Use new SensorStateClass enum in co2signal ([@epenet] - [#61333]) ([co2signal docs]) +- Use new DeviceClass and StateClass enums in comfoconnect ([@epenet] - [#61334]) ([comfoconnect docs]) +- Use new BinarySensorDeviceClass enum in concord232 ([@epenet] - [#61335]) ([concord232 docs]) +- Use new DeviceClass and EntityCategory enums in cloud ([@epenet] - [#61332]) ([cloud docs]) +- Use new SensorDeviceClass and SensorStateClass in velbus ([@Cereal2nd] - [#61339]) ([velbus docs]) +- Use new DeviceClass and StateClass enums in daikin ([@epenet] - [#61340]) ([daikin docs]) +- Use new DeviceClass and StateClass enums in darksky ([@epenet] - [#61342]) ([darksky docs]) +- Use _attr_* in delijn ([@epenet] - [#61344]) ([delijn docs]) +- Use new SensorDeviceClass enum in dht ([@epenet] - [#61349]) ([dht docs]) +- Use _attr_* in dte_energy_bridge ([@epenet] - [#61353]) ([dte_energy_bridge docs]) +- Use new SensorStateClass enum in dsmr_reader ([@epenet] - [#61352]) ([dsmr_reader docs]) +- Use new CoverDeviceClass enum in dynalite ([@epenet] - [#61354]) ([dynalite docs]) +- Use new enums in devolo_home_network ([@epenet] - [#61348]) ([devolo_home_network docs]) +- Use new MediaPlayerDeviceClass enum in directv ([@epenet] - [#61351]) ([directv docs]) +- Use new enums in devolo_home_control ([@epenet] - [#61345]) ([devolo_home_control docs]) +- Use _attr_* in abode ([@epenet] - [#61357]) ([abode docs]) +- Use new BinarySensorDeviceClass enum in digital_ocean ([@epenet] - [#61350]) ([digital_ocean docs]) +- Use new enums in deconz ([@epenet] - [#61343]) ([deconz docs]) +- Use new DeviceClass enums in blebox ([@epenet] - [#61361]) ([blebox docs]) +- Use new SensorDeviceClass enum in emonitor ([@epenet] - [#61385]) ([emonitor docs]) +- Improve type checking for rfxtrx ([@elupus] - [#58837]) ([rfxtrx docs]) +- Revert "Skip duplicated data when calculating fossil energy consumption (#60599)" ([@emontnemery] - [#61323]) ([energy docs]) +- Use new enums in energy ([@epenet] - [#61386]) ([energy docs]) +- Use find_coordinates in waze_travel_time ([@eifinger] - [#61400]) ([waze_travel_time docs]) +- Use new SensorDeviceClass in dsmr-reader ([@epenet] - [#61371]) ([dsmr_reader docs]) +- Use new DeviceClass and StateClass enums in ecobee ([@epenet] - [#61372]) ([ecobee docs]) +- Use new DeviceClass enums in econet ([@epenet] - [#61375]) ([econet docs]) +- Use new SensorDeviceClass enum in eddystone_temperature ([@epenet] - [#61376]) ([eddystone_temperature docs]) +- Use new DeviceClass and StateClass enums in efergy ([@epenet] - [#61377]) ([efergy docs]) +- Use new BinarySensorDeviceClass enum in egardia ([@epenet] - [#61378]) ([egardia docs]) +- Use new EntityCategory enum in elgato ([@epenet] - [#61379]) ([elgato docs]) +- Use new SensorStateClass in eliqonline ([@epenet] - [#61380]) ([eliqonline docs]) +- Use new SensorDeviceClass enum in ebusd ([@epenet] - [#61374]) ([ebusd docs]) +- Use new DeviceClass and StateClass enums in emoncms ([@epenet] - [#61381]) ([emoncms docs]) +- Use new DeviceClass and StateClass enums in enocean ([@epenet] - [#61387]) ([enocean docs]) +- Use new DeviceClass and StateClass in enphase_envoy ([@epenet] - [#61388]) ([enphase_envoy docs]) +- Use SensorDeviceClass in envirophat ([@epenet] - [#61389]) ([envirophat docs]) +- Use SensorDeviceClass in environment_canada ([@epenet] - [#61390]) ([environment_canada docs]) +- Mill, use native_value ([@Danielhiversen] - [#61382]) ([mill docs]) +- Use new DeviceClass enums in ezviz ([@epenet] - [#61383]) ([ezviz docs]) +- Use new enums in esphome ([@epenet] - [#61391]) ([esphome docs]) +- Optimise state attributes in delijn ([@epenet] - [#61424]) ([delijn docs]) +- Speed up demo lock tests ([@emontnemery] - [#61425]) ([demo docs]) +- Break long lines in discovery_info ([@epenet] - [#61431]) +- Use new DeviceClass enums in flipr ([@epenet] - [#61439]) ([flipr docs]) +- Use new SensorDeviceClass enum in foobot ([@epenet] - [#61442]) ([foobot docs]) +- Use new DeviceClass enums in fibaro ([@epenet] - [#61437]) ([fibaro docs]) +- Use new DeviceClass constants in flo ([@epenet] - [#61440]) ([flo docs]) +- Use new enums in forecast_solar ([@epenet] - [#61443]) ([forecast_solar docs]) +- Use new SensorDeviceClass enum in freebox ([@epenet] - [#61444]) ([freebox docs]) +- Use new enums in fjaraskupan ([@epenet] - [#61438]) ([fjaraskupan docs]) +- Use BinarySensorDeviceClass in ffmpeg ([@epenet] - [#61436]) ([ffmpeg_noise docs]) ([ffmpeg_motion docs]) +- Use new SensorStateClass enum in flunearyou ([@epenet] - [#61441]) ([flunearyou docs]) +- Use new enums in fritzbox ([@epenet] - [#61447]) ([fritzbox docs]) +- Use new enums in fritz ([@epenet] - [#61446]) ([fritz docs]) +- Add media_player platform to Lookin ([@ANMalko] - [#61337]) ([lookin docs]) (new-platform) +- Remove external library discovery call in Sonos ([@jjlawren] - [#61461]) ([sonos docs]) +- Add events and device triggers to LCN ([@alengwenus] - [#58745]) ([lcn docs]) +- Drop nmap_tracker code owner ([@bdraco] - [#61476]) ([nmap_tracker docs]) +- Pickup codeowner for lookin ([@bdraco] - [#61474]) ([lookin docs]) +- Use Platform enum in ZHA ([@dmulcahey] - [#61016]) ([zha docs]) +- Use async_on_unload from config entry in ZHA ([@dmulcahey] - [#61015]) ([zha docs]) +- Clean up state class and device class usage in ZHA ([@dmulcahey] - [#61049]) ([zha docs]) +- Add instant arming for totalconnect ([@austinmroczek] - [#60156]) ([totalconnect docs]) +- Reduce cpu requirements for apple_tv mdns and discovery ([@bdraco] - [#61346]) ([apple_tv docs]) +- Bump pylitterbot to 2021.12.0 ([@natekspencer] - [#61536]) ([litterrobot docs]) +- Refactor ZHA entity matching process ([@Adminiuga] - [#60063]) ([zha docs]) +- Use new enums in gogogate2 ([@epenet] - [#61515]) ([gogogate2 docs]) +- Use relative import within component for nest media source ([@allenporter] - [#61571]) ([nest docs]) +- Update HVAC action handling in ZHA climate devices ([@dmulcahey] - [#61460]) ([zha docs]) +- Fix totalconnect service schema ([@austinmroczek] - [#61595]) ([totalconnect docs]) +- Fix freedompro tests ([@cdce8p] - [#61012]) ([freedompro docs]) +- Use relative imports [L-R] ([@mib1185] - [#61575]) +- Use new SensorDeviceClass enum in gios ([@epenet] - [#61609]) ([gios docs]) +- Use new BinarySensorDeviceClass in eight_sleep ([@epenet] - [#61610]) ([eight_sleep docs]) +- Use new SensorDeviceClass enum in glances ([@epenet] - [#61613]) ([glances docs]) +- Use new enums in goalzero ([@epenet] - [#61518]) ([goalzero docs]) +- Use relative imports [S-Z] ([@mib1185] - [#61576]) +- Bump blinkpy to 0.18.0 ([@funkybunch] - [#61538]) ([blink docs]) +- Use new enums in freedompro ([@epenet] - [#61445]) ([freedompro docs]) +- Use platform enum (8) [Misc] ([@cdce8p] - [#61013]) +- Bump pillow from 8.2.0 to 8.3.2 ([@nohn] - [#61661]) +- Remove duplicated statistics rows ([@emontnemery] - [#61146]) ([recorder docs]) +- Upgrade hangups to 0.4.16 ([@cdce8p] - [#61678]) ([hangouts docs]) +- Add color mode support to zwave light ([@emontnemery] - [#55264]) ([zwave docs]) +- Use SwitchDeviceClass in gree ([@epenet] - [#61656]) ([gree docs]) +- Use SensorDeviceClass in gtfs ([@epenet] - [#61657]) ([gtfs docs]) +- Use new enums in guardian ([@epenet] - [#61660]) ([guardian docs]) +- Use new enums in homekit-controller ([@epenet] - [#61689]) ([homekit_controller docs]) +- Improve balboa tests ([@MartinHjelmare] - [#61691]) ([balboa docs]) +- Fix typo transponder in LCN ([@LEJOUI] - [#61658]) ([lcn docs]) +- Use new enums in growatt_server ([@epenet] - [#61655]) ([growatt_server docs]) +- Use SensorDeviceClass in greeneye-monitor ([@epenet] - [#61653]) ([greeneye_monitor docs]) +- Use new DeviceClass enum in geniushub ([@epenet] - [#61608]) ([geniushub docs]) +- Update sisyphus-control to version 3.1.2 ([@jkeljo] - [#58198]) ([sisyphus docs]) +- Use relative imports [A-H] ([@mib1185] - [#61574]) +- Use BinarySensorDeviceClass in hikvision ([@epenet] - [#61722]) ([hikvision docs]) +- Use _attr_* in hddtemp ([@epenet] - [#61721]) ([hddtemp docs]) +- Use SensorStateClass in hassio ([@epenet] - [#61720]) ([hassio docs]) +- Fix updating apple_tv addresses ([@bdraco] - [#61724]) ([apple_tv docs]) +- Use async_on_unload for Nut update_listener ([@ollo69] - [#61589]) ([nut docs]) +- Add configuration_url to syncthru devices ([@scop] - [#61508]) ([syncthru docs]) +- Remove deprecated yaml config from flume ([@tkdrob] - [#61517]) ([flume docs]) (breaking-change) +- Add support for app launching in Apple TV ([@postlund] - [#61732]) ([apple_tv docs]) +- Use attr* in garages_amsterdam ([@epenet] - [#61605]) ([garages_amsterdam docs]) +- Use new HumidifierDeviceClass enum in generic_hygrostat ([@epenet] - [#61607]) ([generic_hygrostat docs]) +- Use new DeviceClass enums in google-assistant ([@epenet] - [#61611]) ([google_assistant docs]) +- Upgrade vehicle to 0.3.0 ([@frenck] - [#61738]) ([rdw docs]) +- Upgrade sentry-sdk to 1.5.1 ([@frenck] - [#61735]) ([sentry docs]) +- Use _attr_* in danfoss_air ([@epenet] - [#61341]) ([danfoss_air docs]) +- Use _attr_* in ecoal_boiler ([@epenet] - [#61363]) ([ecoal_boiler docs]) +- Fix typo in wolflink strings.sensor.json ([@lunmay] - [#61716]) ([wolflink docs]) +- Typo fixes for Adax in strings.json ([@lunmay] - [#61492]) ([adax docs]) +- Upgrades Garages Amsterdam to v3.0.0 ([@klaasnicolaas] - [#61734]) ([garages_amsterdam docs]) +- Upgrade black to 21.12b0 ([@frenck] - [#61741]) +- Use SensorDeviceClass enum in Luftdaten ([@frenck] - [#61746]) ([luftdaten docs]) +- Remove deprecated YAML configuration from Luftdaten ([@frenck] - [#61748]) ([luftdaten docs]) (breaking-change) +- Use new SwitchDeviceClass enum in home-plus-control ([@epenet] - [#61760]) ([home_plus_control docs]) +- Use new enums in homematic ([@epenet] - [#61765]) ([homematic docs]) +- Use new enums in huisbaasje ([@epenet] - [#61776]) ([huisbaasje docs]) +- Use new SensorDeviceClass enum in homeassistant-triggers ([@epenet] - [#61764]) ([homeassistant docs]) +- Use new enums in homematicip_cloud ([@epenet] - [#61768]) ([homematicip_cloud docs]) +- Use new SensorDeviceClass enum in hvv_departures ([@epenet] - [#61780]) ([hvv_departures docs]) +- Use new enums in huawei-lte ([@epenet] - [#61771]) ([huawei_lte docs]) +- Use new enums in hydrawise ([@epenet] - [#61781]) ([hydrawise docs]) +- Use new enums in hunterdouglas_powerview ([@epenet] - [#61777]) ([hunterdouglas_powerview docs]) +- Use new enums in hue ([@epenet] - [#61772]) ([hue docs]) +- Use SensorDeviceClass enum in htu21d ([@epenet] - [#61770]) ([htu21d docs]) +- Remove deprecated yaml from foscam ([@tkdrob] - [#61761]) ([foscam docs]) (breaking-change) +- Add twinkly DHCP support ([@pvizeli] - [#61434]) ([twinkly docs]) +- Use new DeviceClass enums in iaqualink ([@epenet] - [#61805]) ([iaqualink docs]) +- Use new enums in integration ([@epenet] - [#61803]) ([integration docs]) +- Use new SensorDeviceClass in ihc ([@epenet] - [#61799]) ([ihc docs]) +- Use SensorDeviceClass in incomfort ([@epenet] - [#61800]) ([incomfort docs]) +- Use new BinarySensorDeviceClass in insteon ([@epenet] - [#61801]) ([insteon docs]) +- Use new enums in iotawatt ([@epenet] - [#61802]) ([iotawatt docs]) +- Use SensorDeviceClass in icloud ([@epenet] - [#61804]) ([icloud docs]) +- Use new DeviceClass enums in hive ([@epenet] - [#61758]) ([hive docs]) +- Use new DeviceClass enum in home_connect ([@epenet] - [#61759]) ([home_connect docs]) +- Last reset is no longer deprecated ([@Danielhiversen] - [#61816]) ([sensor docs]) +- Improve warnings when a zone trigger is referencing a none-existing zone ([@emontnemery] - [#61763]) ([zone docs]) +- Use SensorStateClass in iqvia ([@epenet] - [#61823]) ([iqvia docs]) +- Use SensorDeviceClass in ipp ([@epenet] - [#61822]) ([ipp docs]) +- Use SensorDeviceClass in islamic_prayer_times ([@epenet] - [#61824]) ([islamic_prayer_times docs]) +- Use SensorDeviceClass in jewish-calendar ([@epenet] - [#61827]) ([jewish_calendar docs]) +- Revert pillow 8.3.2 ([@MartinHjelmare] - [#61793]) ([qrcode docs]) ([tensorflow docs]) ([proxy docs]) ([seven_segments docs]) ([doods docs]) ([sighthound docs]) ([image docs]) +- Use new CoverDeviceClass in knx ([@epenet] - [#61868]) ([knx docs]) +- Support publishing MQTT messages with raw bytes payloads ([@jbouwh] - [#61090]) ([mqtt docs]) +- Use new BinarySensorDeviceClass in keenetic_ndms2 ([@epenet] - [#61867]) ([keenetic_ndms2 docs]) +- Use new enums in keba ([@epenet] - [#61869]) ([keba docs]) +- Use new enums in kostal_plenticore ([@epenet] - [#61871]) ([kostal_plenticore docs]) +- Tidy up package constraint messages ([@epenet] - [#61866]) +- Use new DeviceClass enums in konnected ([@epenet] - [#61870]) ([konnected docs]) +- Remove deprecated yaml config from enphase envoy ([@tkdrob] - [#61840]) ([enphase_envoy docs]) (breaking-change) +- Use SensorDeviceClass in lacrosse ([@epenet] - [#61879]) ([lacrosse docs]) +- Use new enums in litterrobot ([@epenet] - [#61884]) ([litterrobot docs]) +- Use new DeviceClass enums in lutron_caseta ([@epenet] - [#61887]) ([lutron_caseta docs]) +- Use new enums in lookin ([@epenet] - [#61885]) ([lookin docs]) +- Use BinarySensorDeviceClass in lutron ([@epenet] - [#61886]) ([lutron docs]) +- Use _attr_attribution in meteoclimatic ([@epenet] - [#61898]) ([meteoclimatic docs]) +- Use new SensorDeviceClass in metoffice ([@epenet] - [#61899]) ([metoffice docs]) +- Use new SensorDeviceClass in meteoclimatic ([@epenet] - [#61897]) ([meteoclimatic docs]) +- Use new enums in meteo-france ([@epenet] - [#61896]) ([meteo_france docs]) +- Use new enums in melcloud ([@epenet] - [#61894]) ([melcloud docs]) +- Use new enums in lyric ([@epenet] - [#61888]) ([lyric docs]) +- Use new enums in miflora ([@epenet] - [#61922]) ([miflora docs]) +- Fix typo in template select ([@emontnemery] - [#61919]) ([template docs]) +- Use SensorDeviceClass in mhz19 ([@epenet] - [#61923]) ([mhz19 docs]) +- Use new BinarySensorDeviceClass in minecraft_server ([@epenet] - [#61924]) ([minecraft_server docs]) +- Use new SensorDeviceClass in mitemp-bt ([@epenet] - [#61925]) ([mitemp_bt docs]) +- Use new enums in modern_forms ([@epenet] - [#61930]) ([modern_forms docs]) +- Use new enums in motioneye ([@epenet] - [#61932]) ([motioneye docs]) +- Use new enums in myq ([@epenet] - [#61933]) ([myq docs]) +- Use new enums in mullvad ([@epenet] - [#61934]) ([mullvad docs]) +- Make config entry disabled_by an enum ([@scop] - [#60445]) ([config docs]) ([zwave_js docs]) +- Don't log DB connection string on error ([@balloob] - [#61927]) ([recorder docs]) +- Use new enums in notion ([@epenet] - [#61950]) ([notion docs]) +- Use new enums in nest ([@epenet] - [#61942]) ([nest docs]) +- A few RFLink tests ([@javicalle] - [#58544]) ([rflink docs]) +- Use RegistryEntryDisabler ([@scop] - [#60436]) +- Clean up dirt from recollect_waste yaml ([@tkdrob] - [#61964]) ([recollect_waste docs]) +- Use Enums in zoneminder ([@tkdrob] - [#61975]) ([zoneminder docs]) +- Use Enums in zamg ([@tkdrob] - [#61976]) ([zamg docs]) +- Use new BinarySensorDeviceClass in isy994 ([@epenet] - [#61825]) ([isy994 docs]) +- Use new enums in nexia ([@epenet] - [#61952]) ([nexia docs]) +- Bump pyatv to 0.9.8 ([@postlund] - [#61959]) ([apple_tv docs]) +- Bump actions/upload-artifact from 2.3.0 to 2.3.1 (@dependabot - [#62004]) +- Use enums in wiffi ([@tkdrob] - [#61984]) ([wiffi docs]) +- Use enums in wirelesstag ([@tkdrob] - [#61985]) ([wirelesstag docs]) +- Use enums in wemo ([@tkdrob] - [#61983]) ([wemo docs]) +- Use enums in xbee ([@tkdrob] - [#61982]) ([xbee docs]) +- Use enums in xiaomi_aqara ([@tkdrob] - [#61981]) ([xiaomi_aqara docs]) +- Use enums in withings ([@tkdrob] - [#61987]) ([withings docs]) +- Use enums in wolflink ([@tkdrob] - [#61988]) ([wolflink docs]) +- Use enums in yandex_transport ([@tkdrob] - [#61978]) ([yandex_transport docs]) +- Use enums in velux ([@tkdrob] - [#61991]) ([velux docs]) +- Use enums in youless ([@tkdrob] - [#61977]) ([youless docs]) +- Use enums in vallox ([@tkdrob] - [#61992]) ([vallox docs]) +- Use enums in webostv ([@tkdrob] - [#62000]) ([webostv docs]) +- Use enums in waterfurnace ([@tkdrob] - [#61999]) ([waterfurnace docs]) +- Use enums in waqi ([@tkdrob] - [#61998]) ([waqi docs]) +- Use enums in vilfo ([@tkdrob] - [#61995]) ([vilfo docs]) +- Prevent apple_tv rediscovery from secondary identifiers ([@bdraco] - [#61973]) ([apple_tv docs]) +- Tweak comment for ENERGY sensor device class ([@emontnemery] - [#62006]) ([sensor docs]) +- Use enums in vicare ([@tkdrob] - [#61994]) ([vicare docs]) +- Use new enums in mysensors ([@epenet] - [#61935]) ([mysensors docs]) +- Bump version to 2022.2.0dev0 ([@frenck] - [#62011]) +- Add Tibber estimated hour consumption sensor ([@Danielhiversen] - [#62003]) ([tibber docs]) +- Add hardware version to the device registry ([@bdraco] - [#61650]) +- Use new enums in netgear ([@epenet] - [#61943]) ([netgear docs]) +- Add hardware version support to homekit controller ([@bdraco] - [#61743]) ([homekit_controller docs]) +- Use enums in toon ([@tkdrob] - [#62021]) ([toon docs]) +- Use enums in tractive ([@tkdrob] - [#62024]) ([tractive docs]) +- Handle color temp to RGBWW conversion ([@bdraco] - [#61473]) ([light docs]) +- Use enums in utility_meter ([@tkdrob] - [#62033]) ([utility_meter docs]) +- Use enums in upnp ([@tkdrob] - [#62031]) ([upnp docs]) +- Use enums in updated ([@tkdrob] - [#62030]) ([updater docs]) +- Use enums in unifi ([@tkdrob] - [#62029]) ([unifi docs]) +- Use entity category enums in tuya ([@tkdrob] - [#62028]) ([tuya docs]) +- Use enums in trafikverket_weatherstation ([@tkdrob] - [#62027]) ([trafikverket_weatherstation docs]) +- Use enums in trafikverket_train ([@tkdrob] - [#62026]) ([trafikverket_train docs]) +- Use enums in tradfri ([@tkdrob] - [#62025]) ([tradfri docs]) +- Use enums in tplink ([@tkdrob] - [#62023]) ([tplink docs]) +- Use enums in totalconnect ([@tkdrob] - [#62022]) ([totalconnect docs]) +- Use enums in tolo ([@tkdrob] - [#62020]) ([tolo docs]) +- Implement DataUpdateCoordinator for Fritz ([@chemelli74] - [#60909]) ([fritz docs]) +- Add buttons and deprecate services for Fritz ([@chemelli74] - [#61483]) ([fritz docs]) (breaking-change) +- Fix mfi tests ([@epenet] - [#61904]) ([mfi docs]) +- Use enums in shelly ([@tkdrob] - [#62035]) ([shelly docs]) +- Use enums in ring ([@tkdrob] - [#62041]) ([ring docs]) +- Use enums in uptime ([@tkdrob] - [#62032]) ([uptime docs]) +- Use enums in skybell ([@tkdrob] - [#62053]) ([skybell docs]) +- use enums in skybeacon ([@tkdrob] - [#62052]) ([skybeacon docs]) +- Use enums in sensehat ([@tkdrob] - [#62051]) ([sensehat docs]) +- Use enums in senses ([@tkdrob] - [#62050]) ([sense docs]) +- Use enums in sht31 ([@tkdrob] - [#62036]) ([sht31 docs]) +- Use enums in simplisafe ([@tkdrob] - [#62037]) ([simplisafe docs]) +- Use enums in repetier ([@tkdrob] - [#62038]) ([repetier docs]) +- Use enums in rfxtrx ([@tkdrob] - [#62039]) ([rfxtrx docs]) +- Use enums in ridwell ([@tkdrob] - [#62040]) ([ridwell docs]) +- Use enums in risco ([@tkdrob] - [#62042]) ([risco docs]) +- Use enum in roku ([@tkdrob] - [#62043]) ([roku docs]) +- Use enums in rova ([@tkdrob] - [#62044]) ([rova docs]) +- Use enums in samsung_tv ([@tkdrob] - [#62047]) ([samsungtv docs]) +- Use enums in qnap ([@tkdrob] - [#62055]) ([qnap docs]) +- Use enums philips_js ([@tkdrob] - [#62063]) ([philips_js docs]) +- Use new enums in mqtt ([@epenet] - [#61936]) ([mqtt docs]) +- Use enums in rdw ([@tkdrob] - [#62059]) ([rdw docs]) +- Use new enums in mobile_app ([@epenet] - [#61929]) ([mobile_app docs]) +- Clean up upcloud ([@tkdrob] - [#61971]) ([upcloud docs]) +- Use new enums in nx584 ([@epenet] - [#61948]) ([nx584 docs]) +- Use DeviceClass Enum in concord232 schema ([@epenet] - [#61968]) ([concord232 docs]) +- Use DeviceClass Enum in ness-alarm schema ([@epenet] - [#61969]) ([ness_alarm docs]) +- Use enums for Panasonic Viera ([@tkdrob] - [#62062]) ([panasonic_viera docs]) +- Use enums in ovo_energy ([@tkdrob] - [#62087]) ([ovo_energy docs]) +- Use enums in oasa_telematics ([@tkdrob] - [#62077]) ([oasa_telematics docs]) +- Use enums in picnic ([@tkdrob] - [#62065]) ([picnic docs]) +- Use enums in ping ([@tkdrob] - [#62066]) ([ping docs]) +- Use enums in pluugwise ([@tkdrob] - [#62067]) ([plugwise docs]) +- Use new enums in nws ([@epenet] - [#61947]) ([nws docs]) +- Use new enums in neato ([@epenet] - [#61939]) ([neato docs]) +- Use SensorDeviceClass in mfi ([@epenet] - [#61900]) ([mfi docs]) +- Use enums in plaato ([@tkdrob] - [#62069]) ([plaato docs]) +- Minor refactor of template fan ([@emontnemery] - [#61856]) ([template docs]) +- Use enums in rpi_power ([@tkdrob] - [#62046]) ([rpi_power docs]) +- Minor refactor of template light ([@emontnemery] - [#61857]) ([template docs]) +- Use enums in ozw ([@tkdrob] - [#62088]) ([ozw docs]) +- Minor refactor of template lock ([@emontnemery] - [#61858]) ([template docs]) +- Minor refactor of template number ([@emontnemery] - [#61863]) ([template docs]) +- Use enums in openuv ([@tkdrob] - [#62085]) ([openuv docs]) +- Use enums in recollect_waste ([@tkdrob] - [#62060]) ([recollect_waste docs]) +- Use enums in rainmachine ([@tkdrob] - [#62058]) ([rainmachine docs]) +- Minor refactor of template weather ([@emontnemery] - [#61861]) ([template docs]) +- Minor refactor of template alarm ([@emontnemery] - [#61862]) ([template docs]) +- Use enums in ondilo_ico ([@tkdrob] - [#62081]) ([ondilo_ico docs]) +- Use enums in poolsense ([@tkdrob] - [#62071]) ([poolsense docs]) +- Use enums in octoprint ([@tkdrob] - [#62079]) ([octoprint docs]) +- Minor refactor of template select ([@emontnemery] - [#62091]) ([template docs]) +- Minor refactor of template switch ([@emontnemery] - [#61859]) ([template docs]) +- Use enums in openverse ([@tkdrob] - [#62082]) ([openevse docs]) +- Use enums in venstar ([@tkdrob] - [#61993]) ([venstar docs]) +- Use enums in screenlogic ([@tkdrob] - [#62049]) ([screenlogic docs]) +- Use enums in Powerwall ([@tkdrob] - [#62072]) ([powerwall docs]) +- Add config flow to Azure Event Hub integration ([@eavanvalkenburg] - [#61155]) ([azure_event_hub docs]) (breaking-change) +- Minor refactor of template vacuum ([@emontnemery] - [#61860]) ([template docs]) +- Use DeviceClass Enums in airly tests ([@davet2001] - [#61989]) ([airly docs]) +- Use DeviceClass Enums in abode tests ([@davet2001] - [#61980]) ([abode docs]) +- Use DeviceClass Enums in advantage_air tests ([@davet2001] - [#61986]) ([advantage_air docs]) +- Use DeviceClass Enums in accuweather tests ([@davet2001] - [#61990]) ([accuweather docs]) +- Add Open-Meteo integration (second attempt) ([@frenck] - [#61742]) ([open_meteo docs]) (new-integration) +- Use DeviceClass Enums in brother tests ([@davet2001] - [#62110]) ([brother docs]) +- Use DeviceClass Enums in ambee tests ([@davet2001] - [#62108]) ([ambee docs]) +- Small cleanup of Luftdaten constants ([@frenck] - [#61757]) ([luftdaten docs]) +- Improve tests for template binary sensor ([@emontnemery] - [#62103]) ([template docs]) +- Use new enums in nzbget ([@epenet] - [#61946]) ([nzbget docs]) +- Use DeviceClass Enums in deconz tests ([@davet2001] - [#62114]) ([deconz docs]) +- Use DeviceClass Enums in canary tests ([@davet2001] - [#62113]) ([canary docs]) +- Handle None values in weather entity forecast ([@rianadon] - [#61467]) ([weather docs]) +- Use DeviceClass Enums in elgato tests ([@davet2001] - [#62121]) ([elgato docs]) +- Tweak core add_job and async_add_job docstrings ([@emontnemery] - [#62112]) +- Use DeviceClass Enums in arlo tests ([@davet2001] - [#62095]) ([arlo docs]) +- Use enums in obihai ([@tkdrob] - [#62078]) ([obihai docs]) +- Use enums in opengarage ([@tkdrob] - [#62083]) ([opengarage docs]) +- Use enums in p1_monitor ([@tkdrob] - [#62061]) ([p1_monitor docs]) +- Use enums in pvoutput ([@tkdrob] - [#62073]) ([pvoutput docs]) +- Use enums in openweathermap ([@tkdrob] - [#62086]) ([openweathermap docs]) +- Use enums in Omnilogic ([@tkdrob] - [#62080]) ([omnilogic docs]) +- Use enums in opentherm_gw ([@tkdrob] - [#62084]) ([opentherm_gw docs]) +- Use enums in Point ([@tkdrob] - [#62070]) ([point docs]) +- Use enums in xiaomi_miio ([@tkdrob] - [#61979]) ([xiaomi_miio docs]) +- Use enums in pi_hole ([@tkdrob] - [#62064]) ([pi_hole docs]) +- Use enums in roomba ([@tkdrob] - [#62045]) ([roomba docs]) +- Use enums in rainforest_eagle ([@tkdrob] - [#62057]) ([rainforest_eagle docs]) +- Use new enums in netatmo ([@epenet] - [#61941]) ([netatmo docs]) +- Use new enums in netgear_lte ([@epenet] - [#61955]) ([netgear_lte docs]) +- Use new enums in nextbus ([@epenet] - [#61954]) ([nextbus docs]) +- Use new enums in nissan_leaf ([@epenet] - [#61951]) ([nissan_leaf docs]) +- Use new enums in neurio_energy ([@epenet] - [#61953]) ([neurio_energy docs]) +- Use new enums in nuki ([@epenet] - [#61949]) ([nuki docs]) +- Use new enums in motion_blinds ([@epenet] - [#61931]) ([motion_blinds docs]) +- Use attr** in lightwave ([@epenet] - [#61881]) ([lightwave docs]) +- Use attr** in linux-battery ([@epenet] - [#61883]) ([linux_battery docs]) +- Use _attr_attribution in flipr ([@epenet] - [#61889]) ([flipr docs]) +- Use _attr_attribution in goalzero ([@epenet] - [#61890]) ([goalzero docs]) +- Use attr** in meteoalarm ([@epenet] - [#61895]) ([meteoalarm docs]) +- Use new enums in nanoleaf ([@epenet] - [#61938]) ([nanoleaf docs]) +- Use new enums in nam ([@epenet] - [#61940]) ([nam docs]) +- Use new SensorDeviceClass in juicenet ([@epenet] - [#61828]) ([juicenet docs]) +- Use enums in satel_integra ([@tkdrob] - [#62048]) ([satel_integra docs]) +- Use DeviceClass Enum in KNX schema ([@farmio] - [#61960]) ([knx docs]) +- Use DeviceClass Enums in axis tests ([@davet2001] - [#62096]) ([axis docs]) +- Use enums in rachio ([@tkdrob] - [#62056]) ([rachio docs]) +- Use enums in pvpc_hourly_pricing ([@tkdrob] - [#62076]) ([pvpc_hourly_pricing docs]) +- Use DeviceClass Enums in devolo_home_control tests ([@davet2001] - [#62116]) ([devolo_home_control docs]) +- Use DeviceClass Enums in directv tests ([@davet2001] - [#62118]) ([directv docs]) +- Use DeviceClass Enums in energy tests ([@davet2001] - [#62122]) ([energy docs]) +- Use DeviceClass Enums in efergy tests ([@davet2001] - [#62119]) ([efergy docs]) +- Use EntityCategory Enums in elkm1 ([@davet2001] - [#62123]) ([elkm1 docs]) +- Use DeviceClass Enums in google_assistant tests ([@davet2001] - [#62142]) ([google_assistant docs]) +- Use DeviceClass Enums in goalzero tests ([@davet2001] - [#62136]) ([goalzero docs]) +- Use DeviceClass Enums in blebox tests ([@davet2001] - [#62109]) ([blebox docs]) +- Use DeviceClass Enums in forecast_solar tests ([@davet2001] - [#62132]) ([forecast_solar docs]) +- Use DeviceClass Enums in gios tests ([@davet2001] - [#62135]) ([gios docs]) +- Use DeviceClass Enums in gogogate2 tests ([@davet2001] - [#62137]) ([gogogate2 docs]) +- Use enums in sensor tests ([@tkdrob] - [#62152]) ([sensor docs]) +- Use enums in helpers tests ([@tkdrob] - [#62141]) +- Use enums for testing_config ([@tkdrob] - [#62140]) +- Use enums in unifi tests ([@tkdrob] - [#62151]) ([unifi docs]) +- Fix threading error in qwikswitch ([@emontnemery] - [#62173]) ([qwikswitch docs]) +- Move Solarlog state to entity description ([@Ernst79] - [#62093]) ([solarlog docs]) +- Use new SensorDeviceClass enum in climacell ([@epenet] - [#61362]) ([climacell docs]) +- Fix threading error in demo vacuum ([@emontnemery] - [#62165]) ([demo docs]) +- Use enums in wallbox ([@tkdrob] - [#61997]) ([wallbox docs]) +- Add Tibber peak hour, monthly consumption and monthly cost sensors ([@Danielhiversen] - [#61853]) ([tibber docs]) +- Fix threading error in litejet ([@emontnemery] - [#62185]) ([litejet docs]) +- Fix threading error in recorder tests ([@emontnemery] - [#62187]) ([recorder docs]) +- Update fortios device_tracker ([@kimfrellsen] - [#61970]) ([fortios docs]) (breaking-change) +- Add battery entity for Maxcube devices ([@petslane] - [#58699]) ([maxcube docs]) +- Upgrades P1 Monitor to v1.0.1 ([@klaasnicolaas] - [#62201]) ([p1_monitor docs]) +- Address late review of nina ([@DeerMaximum] - [#61915]) ([nina docs]) +- Use DeviceClass Enums in greeneye_monitor tests ([@davet2001] - [#62143]) ([greeneye_monitor docs]) +- Fix codeowners for tests in hassfest ([@frenck] - [#62204]) +- Use enums in utility_meter tests ([@tkdrob] - [#62190]) ([utility_meter docs]) +- Fix Wemo create task for awaitable ([@esev] - [#62159]) ([wemo docs]) +- Use enums in roku tests ([@tkdrob] - [#62196]) ([roku docs]) +- Use enums in samsungtv tests ([@tkdrob] - [#62195]) ([samsungtv docs]) +- Fix threading error in stream tests ([@bdraco] - [#62221]) ([stream docs]) +- Use new enums in sonos ([@epenet] - [#62202]) ([sonos docs]) +- Remove myself from yeelight codeowners ([@rytilahti] - [#62239]) ([yeelight docs]) +- Add Netgear entity category and configuration url ([@starkillerOG] - [#62260]) ([netgear docs]) +- Add entity category to DSMR ([@starkillerOG] - [#62262]) ([dsmr docs]) +- Motion blinds add entity category ([@starkillerOG] - [#62266]) ([motion_blinds docs]) +- Hyperion add entity category ([@starkillerOG] - [#62268]) ([hyperion docs]) +- Add ATTR_HW_VERSION to homeassistant.const ([@bdraco] - [#62258]) +- Add software version to screenlogic ([@bdraco] - [#62255]) ([screenlogic docs]) +- Use new enums in smarttub ([@epenet] - [#62216]) ([smarttub docs]) +- Use new enums in smart_meter_texas ([@epenet] - [#62210]) ([smart_meter_texas docs]) +- Use enums in statistics tests ([@tkdrob] - [#62191]) ([statistics docs]) +- Use new enums in smappee ([@epenet] - [#62209]) ([smappee docs]) +- Finish using enums in wled ([@tkdrob] - [#62189]) ([wled docs]) +- Add xiaomi miio gateway hw version ([@starkillerOG] - [#62274]) ([xiaomi_miio docs]) +- Update rokuecp to 0.8.5 ([@ctalkington] - [#62285]) ([roku docs]) +- Move Device Class definition to Home Assistant for MusicCast Select Entities ([@micha91] - [#61218]) ([yamaha_musiccast docs]) +- Bump aioridwell to 2021.12.2 ([@bachya] - [#62284]) ([ridwell docs]) +- Use new DeviceClass enums in homekit ([@epenet] - [#61665]) ([homekit docs]) +- Add wemo config_flow test to get 100% coverage ([@esev] - [#62158]) ([wemo docs]) +- Fix hw_version not updating from an entity device_info ([@bdraco] - [#62254]) +- Add network support to flux_led discovery ([@bdraco] - [#61132]) ([flux_led docs]) +- Use DeviceClass Enums in homekit_controller tests ([@davet2001] - [#62219]) ([homekit_controller docs]) +- Add a switch to opt-in to/opt-out of the next Ridwell pickup ([@bachya] - [#62293]) ([ridwell docs]) +- Add hardware version to bond ([@bdraco] - [#62256]) ([bond docs]) +- Add support for enabling/disabling cloud access in flux_led ([@bdraco] - [#61138]) ([flux_led docs]) +- Speed up stream tests by 40-50% with shared data ([@allenporter] - [#62300]) ([stream docs]) +- Add pico remote support to non-pro lutron caseta bridges ([@bdraco] - [#61032]) ([lutron_caseta docs]) +- Persist nest media events to disk backed storage ([@allenporter] - [#61641]) ([nest docs]) +- Align zeroconf matching with ZeroconfServiceInfo ([@bdraco] - [#62133]) ([zeroconf docs]) ([axis docs]) ([doorbird docs]) ([apple_tv docs]) ([samsungtv docs]) ([nam docs]) (breaking-change) +- Cleanup tests for lcn events and device triggers ([@alengwenus] - [#61719]) ([lcn docs]) +- Don't add Fronius entities with unknown state ([@farmio] - [#62282]) ([fronius docs]) +- Use enums in zwave_js ([@tkdrob] - [#62130]) ([zwave_js docs]) +- Add unique ID to config entry in Luftdaten ([@frenck] - [#62176]) ([luftdaten docs]) +- Use DeviceClass Enums in filter tests ([@davet2001] - [#62138]) ([filter docs]) +- Finish using enums in srp_energy ([@tkdrob] - [#62192]) ([srp_energy docs]) +- Change unload for P1 Monitor ([@klaasnicolaas] - [#62213]) ([p1_monitor docs]) +- Use new enums in smarthab ([@epenet] - [#62208]) ([smarthab docs]) +- Cleanup attr** usage in uptime ([@epenet] - [#62212]) ([uptime docs]) +- Use _attr_** in slide ([@epenet] - [#62206]) ([slide docs]) +- Use new enums in saj ([@epenet] - [#62205]) ([saj docs]) +- Use new enums in sleepiq ([@epenet] - [#62203]) ([sleepiq docs]) +- Use _attr_attribution in poolsense ([@epenet] - [#62180]) ([poolsense docs]) +- Use _attr_** in openweathermap ([@epenet] - [#62179]) ([openweathermap docs]) +- Use _attr_attribution in sense ([@epenet] - [#62181]) ([sense docs]) +- Use enums in zwave ([@tkdrob] - [#62131]) ([zwave docs]) +- Remove deprecated yaml config from environment canada ([@tkdrob] - [#61839]) ([environment_canada docs]) (breaking-change) +- Support additional Apple TV device types ([@postlund] - [#61104]) ([apple_tv docs]) +- Add additional guarding to color_rgb_to_rgbww ([@bdraco] - [#62220]) +- Add reboot button to Magic Home/flux_led ([@bdraco] - [#62323]) ([flux_led docs]) +- Move Magic Home/flux_led coordinator to its own module ([@bdraco] - [#62324]) ([flux_led docs]) +- Remove deprecated yaml config from opengarage ([@tkdrob] - [#61961]) ([opengarage docs]) (breaking-change) +- Add switch to enable/disable music mode in Magic Home/flux_led ([@bdraco] - [#62320]) ([flux_led docs]) +- Remove deprecated yaml config from aurora abb ([@tkdrob] - [#62317]) ([aurora_abb_powerone docs]) (breaking-change) +- Use enums for rest tests ([@tkdrob] - [#62197]) ([rest docs]) +- Make core config source an enum ([@scop] - [#61966]) +- Mark camera unavailable when keepalive stream fails ([@allenporter] - [#62294]) ([camera docs]) ([stream docs]) +- Bumped boschshcpy 0.2.19 to 0.2.27 ([@tschamm] - [#62326]) ([bosch_shc docs]) +- Remove deprecated yaml config from Efergy ([@tkdrob] - [#61520]) ([efergy docs]) (breaking-change) +- Use migration helper in Ridwell ([@bachya] - [#62327]) ([ridwell docs]) +- Add homekit discovery to ecobee ([@bdraco] - [#62334]) ([ecobee docs]) +- Use migration helper in RainMachine ([@bachya] - [#62328]) ([rainmachine docs]) +- Simplify nest test patch using new keyword ([@allenporter] - [#62336]) ([nest docs]) +- Add zeroconf discovery to ecobee for non-homekit models ([@bdraco] - [#62335]) ([ecobee docs]) +- Replace Guardian logged errors with HomeAssistantError in service handlers ([@bachya] - [#62342]) ([guardian docs]) +- Remove deprecated yaml config from flux_led ([@tkdrob] - [#61844]) ([flux_led docs]) (breaking-change) +- Replace RainMachine logged errors with HomeAssistantError in service handlers ([@bachya] - [#62350]) ([rainmachine docs]) +- Replace OpenUV logged errors with `HomeAssistantError` in service handlers ([@bachya] - [#62349]) ([openuv docs]) +- Remove deprecated yaml config from enphase_envoy ([@tkdrob] - [#62348]) ([enphase_envoy docs]) (breaking-change) +- Re-add `binary_sensor` attribute for AlarmDecoder that was inadvertently removed ([@ajschmidt8] - [#62351]) ([alarmdecoder docs]) +- Remove deprecated yaml config from broadlink ([@tkdrob] - [#62341]) ([broadlink docs]) (breaking-change) +- Fix typing for wemo ([@esev] - [#62157]) ([wemo docs]) +- Add a camera specific logger to help diagnose stream errors ([@allenporter] - [#61647]) ([camera docs]) ([stream docs]) +- Support Plex resuming and playback offset ([@jjlawren] - [#61468]) ([plex docs]) +- Improve SSDP callback performance ([@bdraco] - [#62359]) ([ssdp docs]) +- Use the Platform enum in wemo ([@esev] - [#62153]) ([wemo docs]) +- Improve evil genius labs error handling ([@balloob] - [#62365]) ([evil_genius_labs docs]) +- Use enums in smartthings ([@tkdrob] - [#62198]) ([smartthings docs]) +- Invalidate CI cache by bumping caching version ([@frenck] - [#62383]) +- Fix typo in Kostal Plenticore integration entity ([@ThomDietrich] - [#62380]) ([kostal_plenticore docs]) +- Replace SimpliSafe logged errors with `HomeAssistantError` in service handlers ([@bachya] - [#62352]) ([simplisafe docs]) +- Add zones support to flux_led ([@bdraco] - [#61072]) ([flux_led docs]) +- Remove deprecated yaml config from co2signal ([@tkdrob] - [#62343]) ([co2signal docs]) (breaking-change) +- Use new enums in sms ([@epenet] - [#62372]) ([sms docs]) +- Remove deprecated yaml config from dlna_dmr ([@tkdrob] - [#62344]) ([dlna_dmr docs]) (breaking-change) +- Use attr** in linode ([@epenet] - [#61882]) ([linode docs]) +- Use new enums in spc ([@epenet] - [#62384]) ([spc docs]) +- Use new enums in soma ([@epenet] - [#62377]) ([soma docs]) +- Use _attr_attribution in synology_dsm ([@epenet] - [#62382]) ([synology_dsm docs]) +- Use new enums in solax ([@epenet] - [#62376]) ([solax docs]) +- Statistics component typing ([@ThomDietrich] - [#60997]) ([statistics docs]) +- Use new enums in solaredge_local ([@epenet] - [#62374]) ([solaredge_local docs]) +- Cleanup stale setup from CO2Signal ([@frenck] - [#62395]) ([co2signal docs]) +- Add input_button ([@frenck] - [#62008]) ([demo docs]) ([default_config docs]) ([input_button docs]) (new-integration) +- Update CODEOWNERS and correct iot class for Konnected ([@heythisisnate] - [#62391]) +- Use new enums in synology_dsm ([@epenet] - [#62398]) ([synology_dsm docs]) +- Use new enums in switcher_kis ([@epenet] - [#62400]) ([switcher_kis docs]) +- Use new enums in syncthru ([@epenet] - [#62399]) ([syncthru docs]) +- Use new enums in systemmonitor ([@epenet] - [#62401]) ([systemmonitor docs]) +- Use new enums in system_bridge ([@epenet] - [#62402]) ([system_bridge docs]) +- Use new enums in speedtestdotnet ([@epenet] - [#62405]) ([speedtestdotnet docs]) +- Use new enums in supla ([@epenet] - [#62406]) ([supla docs]) +- Use new enums in starline ([@epenet] - [#62407]) ([starline docs]) +- Use new enums in switchbot ([@epenet] - [#62404]) ([switchbot docs]) +- Use new enums in subaru ([@epenet] - [#62403]) ([subaru docs]) +- Use attr** in solax ([@epenet] - [#62397]) ([solax docs]) +- Use new enums in spider ([@epenet] - [#62396]) ([spider docs]) +- Use DeviceClass Enums in devolo_home_network tests ([@davet2001] - [#62117]) ([devolo_home_network docs]) +- Use new enums in solaredge ([@epenet] - [#62373]) ([solaredge docs]) +- Use new enums in somfy ([@epenet] - [#62378]) ([somfy docs]) +- Use attr** in somfy-mylink ([@epenet] - [#62381]) ([somfy_mylink docs]) +- Use attr** in smarty ([@epenet] - [#62371]) ([smarty docs]) +- Make device automation type an enum ([@scop] - [#62354]) ([homekit docs]) ([mobile_app docs]) ([device_automation docs]) +- Update "Code Coverage" task to use numprocesses ([@epenet] - [#61449]) +- Refactor kaiterra to use SensorEntityDescription ([@epenet] - [#61865]) ([kaiterra docs]) +- Use DeviceClass Enums in homekit ([@davet2001] - [#62218]) ([homekit docs]) +- Fix Non-thread-safe operation in wemo tests ([@esev] - [#62418]) ([wemo docs]) +- Add config_flow to AndroidTV integration ([@ollo69] - [#54444]) ([androidtv docs]) (breaking-change) +- Use new enums in watttime ([@epenet] - [#62430]) ([watttime docs]) +- Use new enums in verisure ([@epenet] - [#62433]) ([verisure docs]) +- Use new enums in wled ([@epenet] - [#62431]) ([wled docs]) +- Use new enums in tesla_wall_connector ([@epenet] - [#62434]) ([tesla_wall_connector docs]) +- Use new enums in temper ([@epenet] - [#62428]) ([temper docs]) +- Use new enums in ted5000 ([@epenet] - [#62425]) ([ted5000 docs]) +- Use new enums in tasmota ([@epenet] - [#62427]) ([tasmota docs]) +- Use new enums in tellduslive ([@epenet] - [#62426]) ([tellduslive docs]) +- Add reauth flow to Tile ([@bachya] - [#62415]) ([tile docs]) +- Use new enums in tahoma ([@epenet] - [#62424]) ([tahoma docs]) +- Use new enums in tado ([@epenet] - [#62423]) ([tado docs]) +- Use attr** in tellstick sensor ([@epenet] - [#62422]) ([tellstick docs]) +- Use new enums in zwave_js ([@epenet] - [#62432]) ([zwave_js docs]) +- Use DeviceAutomationType in tests/components/[h-l]* ([@scop] - [#62441]) +- Use DeviceAutomationType in tests/components/[a-f]* ([@scop] - [#62440]) +- Use DeviceAutomationType in tests/components/[m-r]* ([@scop] - [#62443]) +- Use new enums in sma ([@epenet] - [#62439]) ([sma docs]) +- Add support for changing Magic Home socket power restore state ([@bdraco] - [#62301]) ([flux_led docs]) +- Cast types in wemo rather than converting ([@esev] - [#62454]) ([wemo docs]) +- Remove deprecated yaml config from nuki ([@tkdrob] - [#62470]) ([nuki docs]) (breaking-change) +- Cleanup stale setup/import from Nuki ([@frenck] - [#62476]) ([nuki docs]) +- Enable PYTHONASYNCIODEBUG in tests ([@emontnemery] - [#62104]) +- Use on_level when turning an Insteon dimmer on ([@MZachmann] - [#62321]) ([insteon docs]) +- Bump docker/login-action from 1.10.0 to 1.12.0 (@dependabot - [#62462]) +- Remove deprecated yaml config from honeywell ([@tkdrob] - [#62469]) ([honeywell docs]) (breaking-change) +- Remove deprecated yaml config from google travel time ([@tkdrob] - [#62468]) ([google_travel_time docs]) (breaking-change) +- Update Solax library to 0.2.9 ([@ppetru] - [#62464]) ([solax docs]) +- Remove deprecated yaml config from philips_js ([@tkdrob] - [#62471]) ([philips_js docs]) (breaking-change) +- Remove legacy migration and yaml from tplink ([@bdraco] - [#62457]) ([tplink docs]) (breaking-change) +- Add slugify as a template filter ([@ZephireNZ] - [#58724]) +- Use DeviceAutomationType in tests/components/[s-z]* ([@scop] - [#62450]) +- Add USB discover for Sonoff zigbee dongle plus ([@OpenMyDog] - [#62171]) ([zha docs]) +- Clean up ssdp flow in dlna_dmr ([@tkdrob] - [#62466]) ([dlna_dmr docs]) +- Add device registry information to Blink entities ([@decompil3d] - [#62449]) ([blink docs]) +- Add set_music_mode service to flux_led for detailed music mode control ([@bdraco] - [#62429]) ([flux_led docs]) +- Support shorthand templates in condition actions ([@emontnemery] - [#61177]) +- Mark removed config schemas as removed ([@frenck] - [#61014]) +- Remove deprecated YAML configuration from Stookalert ([@frenck] - [#61007]) ([stookalert docs]) (breaking-change) +- Deprecate mcp23017 integration (ADR-0019) ([@frenck] - [#62484]) ([mcp23017 docs]) (breaking-change) +- Deprecate pcal9535a integration (ADR-0019) ([@frenck] - [#62487]) ([pcal9535a docs]) (breaking-change) +- Use SensorDeviceClass enum in sensor device automations ([@emontnemery] - [#62480]) ([sensor docs]) +- Assert current state of script condition validation in tests ([@emontnemery] - [#62486]) +- Don't pollute config dir with deleted duplicated statistics ([@emontnemery] - [#62489]) ([recorder docs]) +- Save original + duplicate pairs when deleting duplicated statistics ([@emontnemery] - [#62498]) ([recorder docs]) +- Deprecate Sensirion SHT31 integration (ADR-0019) ([@frenck] - [#62496]) ([sht31 docs]) (breaking-change) +- Deprecate DHT Sensor integration (ADR-0019) ([@frenck] - [#62495]) ([dht docs]) (breaking-change) +- Deprecate BH1750 integration (ADR-0019) ([@frenck] - [#62493]) ([bh1750 docs]) (breaking-change) +- Wrap shorthand template conditions during schema validation ([@emontnemery] - [#62485]) +- Improve debug log when warning about a dip in total_increasing sensor ([@emontnemery] - [#62501]) ([sensor docs]) +- Deprecate pi4ioe5v9xxxx integration (ADR-0019) ([@frenck] - [#62491]) ([pi4ioe5v9xxxx docs]) (breaking-change) +- Add iif (immediate if) template function/filter ([@frenck] - [#61428]) +- Deprecate BeagleBone Black GPIO integration (ADR-0019) ([@frenck] - [#62492]) ([bbb_gpio docs]) (breaking-change) +- Use EntityCategory enum for MusicCast entity types ([@micha91] - [#62303]) ([yamaha_musiccast docs]) +- Use DeviceClass Enums in iotawatt tests ([@davet2001] - [#62512]) ([iotawatt docs]) +- Use DeviceClass Enums in integration tests ([@davet2001] - [#62511]) ([integration docs]) +- Remaining DeviceAutomationType bits ([@scop] - [#62508]) +- Use SensorStateClass Enums in fritzbox tests ([@davet2001] - [#62134]) ([fritzbox docs]) +- Use new enums in nzbget tests ([@davet2001] - [#62524]) ([nzbget docs]) +- Use new enums in nam tests ([@davet2001] - [#62522]) ([nam docs]) +- Use new enums in mysensors tests ([@davet2001] - [#62521]) ([mysensors docs]) +- Use new enums in mqtt tests ([@davet2001] - [#62520]) ([mqtt docs]) +- Fix backwards vol.Coerce order in flux_led ([@bdraco] - [#62509]) ([flux_led docs]) +- Use new enums in mobile_app tests ([@davet2001] - [#62517]) ([mobile_app docs]) +- Implement DataUpdateCoordinator in luftdaten ([@frenck] - [#62313]) ([luftdaten docs]) +- Use enums in tasmota tests ([@tkdrob] - [#62150]) ([tasmota docs]) +- Remove deprecated yaml config from vlc_telnet ([@tkdrob] - [#62542]) ([vlc_telnet docs]) (breaking-change) +- Use platform enums in withings tests ([@tkdrob] - [#62551]) ([withings docs]) +- Update nest mac addresses based on newer generation hardware ([@allenporter] - [#62525]) ([nest docs]) +- Use platform enums in ring tests ([@tkdrob] - [#62565]) ([ring docs]) +- Put access to ffmpeg hass.data behind a method ([@allenporter] - [#62570]) +- Add correct callback annotation in configurator ([@balloob] - [#62569]) ([configurator docs]) +- Use enums for ozw tests ([@davet2001] - [#62547]) ([ozw docs]) +- Use new enums in knx tests ([@davet2001] - [#62513]) ([knx docs]) +- Change Brunt cover device class ([@eavanvalkenburg] - [#62578]) ([brunt docs]) +- Support setting Aqara Hub Volume via homekit_controller ([@Jc2k] - [#62538]) ([homekit_controller docs]) +- Use new enums in litterrobot tests ([@davet2001] - [#62515]) ([litterrobot docs]) +- Use new enums in mfi tests ([@davet2001] - [#62516]) ([mfi docs]) +- Use new enums in modbus tests ([@davet2001] - [#62518]) ([modbus docs]) +- Use new enums in modern_forms tests ([@davet2001] - [#62519]) ([modern_forms docs]) +- Use platform enums in utility_meter tests ([@tkdrob] - [#62553]) ([utility_meter docs]) +- Remove deprecated yaml config from squeezebox ([@tkdrob] - [#62537]) ([squeezebox docs]) (breaking-change) +- Add state class support to Luftdaten ([@frenck] - [#62585]) ([luftdaten docs]) +- Flip behavior for grouped locks ([@emontnemery] - [#62580]) ([lock docs]) ([group docs]) (breaking-change) +- Add strict typing to Luftdaten ([@frenck] - [#62588]) ([luftdaten docs]) +- Allow binary sensor state to be None ([@frenck] - [#60193]) ([binary_sensor docs]) (breaking-change) +- Round imperial values to two decimals in bmw_connected_drive ([@rikroe] - [#62531]) ([bmw_connected_drive docs]) +- Replace charging_time_remaining with charging_end_time in bmw_connected_drive ([@rikroe] - [#60942]) ([bmw_connected_drive docs]) (breaking-change) +- Improve config flow Luftdaten ([@frenck] - [#62589]) ([luftdaten docs]) +- Use platform enums in rest tests ([@tkdrob] - [#62564]) ([rest docs]) +- Use platform enums in vizio tests ([@tkdrob] - [#62555]) ([vizio docs]) +- Use platform enums in plex tests ([@tkdrob] - [#62561]) ([plex docs]) +- Store deleted duplicated statistics in .storage ([@emontnemery] - [#62574]) ([recorder docs]) +- Use new enums in p1_monitor tests ([@davet2001] - [#62548]) ([p1_monitor docs]) +- Use new enums in picnic tests ([@davet2001] - [#62549]) ([picnic docs]) +- Use new enums for prometheus tests ([@davet2001] - [#62550]) ([prometheus docs]) +- Add get_image method to Stream ([@uvjustin] - [#61918]) ([stream docs]) +- Allow adding new devices to an Aqara hub via homekit_controller ([@Jc2k] - [#62600]) ([homekit_controller docs]) +- Bump pysma to 0.6.10 ([@rklomp] - [#62599]) ([sma docs]) +- Extract PVOutput logic into PyPi package ([@frenck] - [#62625]) ([pvoutput docs]) +- Derive mypy python_version from REQUIRED_PYTHON_VER ([@scop] - [#62616]) +- Add secondary codeowner to statistics integration ([@ThomDietrich] - [#62622]) ([statistics docs]) +- Implement config_Flow for Sensibo ([@gjohansson-ST] - [#60900]) ([sensibo docs]) (breaking-change) +- Improve Insteon responsiveness ([@teharris1] - [#62612]) ([insteon docs]) +- Add deprecation warning to switchbot yaml config ([@tkdrob] - [#62583]) ([switchbot docs]) (breaking-change) +- Speed up connecting to legacy flux_led devices ([@bdraco] - [#62614]) ([flux_led docs]) +- Reduce boilerplate code in entry init of rfxtrx ([@elupus] - [#58844]) ([rfxtrx docs]) +- Use relative imports in sensor ([@epenet] - [#62638]) ([sensor docs]) +- Bump async-upnp-client to 0.23.2 ([@StevenLooman] - [#62634]) ([upnp docs]) ([yeelight docs]) ([dlna_dmr docs]) ([ssdp docs]) +- Add input_button support to HomeKit ([@frenck] - [#62590]) ([homekit docs]) +- Bump PyISY to v3.0.1 ([@shbatm] - [#62646]) ([isy994 docs]) +- Add strict typing to PVOutput ([@frenck] - [#62628]) ([pvoutput docs]) +- Dismiss existing discoveries when a HomeKit device is paired ([@bdraco] - [#62632]) ([homekit_controller docs]) +- Add base integration tests to Luftdaten ([@frenck] - [#62594]) ([luftdaten docs]) +- Increase test coverage for google calendar ([@allenporter] - [#62648]) ([google docs]) +- Add input_button support to Alexa ([@frenck] - [#62592]) ([alexa docs]) +- Add input_button support to Google Assistant ([@frenck] - [#62593]) ([google_assistant docs]) +- Azure Event Hub code improvements ([@eavanvalkenburg] - [#62584]) +- Remove unnecessary checks before calling os.makedirs ([@emontnemery] - [#62576]) +- Add sensor device classes for apparent and reactive power ([@emontnemery] - [#62010]) ([sensor docs]) ([template docs]) +- Provide clearer feedback in Coinbase when authentication fails ([@TomBrien] - [#62627]) ([coinbase docs]) +- Correct extra attributes trafikverket_train ([@gjohansson-ST] - [#62636]) ([trafikverket_train docs]) (breaking-change) +- Remove deprecated yaml config from Syncthru ([@tkdrob] - [#62541]) ([syncthru docs]) (breaking-change) +- Update flux_led dhcp matching for older devices ([@bdraco] - [#62577]) ([flux_led docs]) +- Support Tuya cover with operation mach_operate ([@marcuslonnberg] - [#62650]) ([tuya docs]) +- Use SensorDeviceClass in thermoworks_smoke ([@epenet] - [#62637]) ([thermoworks_smoke docs]) +- Add sensor tests to Luftdaten ([@frenck] - [#62663]) ([luftdaten docs]) +- Remove TaHoma integration ([@iMicknl] - [#62607]) ([tahoma docs]) (breaking-change) +- Add subfolder globbing to partial linters ([@epenet] - [#62683]) +- Reject MQTT cover discovery using unsupported tilt_invert_state ([@emontnemery] - [#62680]) ([mqtt docs]) +- Add Overkiz integration (with base + sensor entity) ([@iMicknl] - [#62640]) ([overkiz docs]) (new-integration) +- Add connectsense to homekit_controller ([@ecoen66] - [#62675]) ([homekit_controller docs]) +- Fix pylint plugin which checks relative imports ([@KapJI] - [#62693]) ([zha docs]) +- Add DeviceInfo to Sensibo ([@gjohansson-ST] - [#62668]) ([sensibo docs]) +- Add config flow to version integration ([@ludeeus] - [#54642]) ([version docs]) (breaking-change) +- Use new enums in rdw tests ([@davet2001] - [#62707]) ([rdw docs]) +- Use new enums in smartthings tests ([@davet2001] - [#62708]) ([smartthings docs]) +- Review AndroidTV option flow strings ([@ollo69] - [#62601]) ([androidtv docs]) +- Use new enums in huisbaasje tests ([@davet2001] - [#62714]) ([huisbaasje docs]) +- Use new enums in zwave tests ([@davet2001] - [#62711]) ([zwave docs]) +- Add identify buttons to ZHA devices ([@dmulcahey] - [#61495]) ([zha docs]) +- Add lock entity to Overkiz integration ([@iMicknl] - [#62713]) ([overkiz docs]) (new-platform) +- Add button entity to Overkiz integration ([@iMicknl] - [#62719]) ([overkiz docs]) +- Generic thermostat presets ([@brianegge] - [#56080]) ([generic_thermostat docs]) +- Add missing __init__.py to overkiz tests ([@bdraco] - [#62727]) ([overkiz docs]) +- Add basic type hints to advantage_air ([@epenet] - [#62737]) ([advantage_air docs]) +- Add basic type hints to abode ([@epenet] - [#62730]) ([abode docs]) +- Add basic type hints to ads ([@epenet] - [#62738]) ([ads docs]) +- CI: Use wheel to install base requirements ([@cdce8p] - [#62743]) +- Fix HomeKit sensor update check ([@br3sc4] - [#62705]) ([homekit docs]) +- Upgrade vehicle to 0.3.1 ([@frenck] - [#62747]) ([rdw docs]) +- Use lock in Camera.create_stream ([@uvjustin] - [#62757]) ([camera docs]) ([stream docs]) +- Add number entity to Overkiz integration ([@iMicknl] - [#62732]) ([overkiz docs]) +- Store wemo device sw_version & upnp connections ([@esev] - [#62758]) ([wemo docs]) +- Add lqi and rssi sensors back to ZHA ([@dmulcahey] - [#62716]) ([zha docs]) +- Add zwave_js support for Fortrezz SSA3 ([@raman325] - [#62765]) ([zwave_js docs]) +- Add device info to Luftdaten ([@frenck] - [#62692]) ([luftdaten docs]) +- Bump google-nest-sdm to 1.0.0 ([@allenporter] - [#62783]) ([nest docs]) +- Add unifiprotect integration ([@AngellusMortis] - [#62697]) ([unifiprotect docs]) (new-integration) +- Huawei LTE simplifications ([@scop] - [#62770]) ([huawei_lte docs]) +- Allow generic camera conf without still_image_url ([@uvjustin] - [#62611]) ([generic docs]) +- Bumped boschshcpy 0.2.27 to 0.2.28 ([@tschamm] - [#62778]) ([bosch_shc docs]) +- Add huawei_lte hardware version ([@scop] - [#62773]) ([huawei_lte docs]) +- Cleanup HomeKit names to avoid unknown error when adding ([@bdraco] - [#62831]) ([homekit docs]) +- Use ConfigEntryDisabler enum ([@mib1185] - [#62816]) ([config docs]) +- Remove unused homekit.start service ([@bdraco] - [#62827]) ([homekit docs]) +- Update to pycarwings 2.13 ([@filcole] - [#62821]) ([nissan_leaf docs]) +- Added XML RSS as Content-Type ([@kristjanbjarni] - [#62822]) ([rest docs]) +- Add light entity to Overkiz integration ([@iMicknl] - [#62835]) ([overkiz docs]) (new-platform) +- Followup PR for UniFi Protect integration ([@AngellusMortis] - [#62806]) ([unifiprotect docs]) +- Bump mypy to 0.930 ([@cgtobi] - [#62642]) +- Add basic type hints to ffmpeg ([@epenet] - [#62744]) ([ffmpeg docs]) +- Refactor entity_category str types ([@davet2001] - [#62790]) ([mqtt docs]) ([neato docs]) ([shelly docs]) ([tasmota docs]) +- Address feedback to Overkiz integration ([@iMicknl] - [#62841]) ([overkiz docs]) +- Code improvements Sensibo ([@gjohansson-ST] - [#62810]) ([sensibo docs]) +- Improve Elmax code quality ([@albertogeniola] - [#61273]) ([elmax docs]) +- Set a suggested_area on nest devices based on the Google Home room name ([@allenporter] - [#62871]) ([nest docs]) +- Init template trigger binary sensor to None instead of False ([@amosyuen] - [#62769]) ([template docs]) (breaking-change) +- Update to iaqualink 0.4.1 ([@flz] - [#53745]) ([iaqualink docs]) +- Add configuration flow to PVOutput ([@frenck] - [#62667]) ([pvoutput docs]) (breaking-change) +- Add unique id to DHCP step in Config Flow for Overkiz ([@iMicknl] - [#62847]) ([overkiz docs]) +- Add myself as codeowner for Luftdaten ([@frenck] - [#62888]) ([luftdaten docs]) +- Fix missing power and energy sensors for light switches in bosch_shc ([@tschamm] - [#62802]) ([bosch_shc docs]) +- Slightly improve Open-Meteo configuration flow ([@frenck] - [#62869]) ([open_meteo docs]) +- Add basic support for EntityDescription in PVOutput ([@frenck] - [#62887]) ([pvoutput docs]) +- Add unique ID to PVOutput entities ([@frenck] - [#62890]) ([pvoutput docs]) +- Add setup type hints to sonos, unifi and wake_on_lan ([@epenet] - [#62876]) ([sonos docs]) +- Add type hint to adguard service calls ([@epenet] - [#62893]) ([adguard docs]) +- Ensure service calls are typed [a-d] ([@epenet] - [#62891]) +- Add basic type hints to xiaomi_miio ([@epenet] - [#62889]) ([xiaomi_miio docs]) +- Add scene entity to Overkiz integration ([@iMicknl] - [#62884]) ([overkiz docs]) (new-platform) +- Extract attribute into sensor for PVOutput ([@frenck] - [#62894]) ([pvoutput docs]) (breaking-change) +- Add basic type hints to nissan_leaf ([@filcole] - [#62904]) ([nissan_leaf docs]) +- Add binary sensor entity to Overkiz integration ([@iMicknl] - [#62913]) ([overkiz docs]) (new-platform) +- Use shorthand attributes in the CPU Speed integration ([@frenck] - [#62896]) ([cpuspeed docs]) +- Ensure service calls are typed [o-r] ([@epenet] - [#62920]) +- Ensure service calls are typed [v-z] ([@epenet] - [#62923]) ([zwave docs]) ([velux docs]) ([wake_on_lan docs]) ([webostv docs]) ([vesync docs]) +- Add strict typing to CPU Speed ([@frenck] - [#62924]) ([cpuspeed docs]) +- Ensure service calls are typed [h-i] ([@epenet] - [#62914]) +- Ensure service calls are typed [e-g] ([@epenet] - [#62912]) +- Ensure service calls are typed [s-u] ([@epenet] - [#62922]) +- Update pvo to 0.2.0 ([@frenck] - [#62926]) ([pvoutput docs]) +- Ensure service calls are typed [k-n] ([@epenet] - [#62917]) +- Deprecate Bosch BME680 Environmental Sensor (ADR-0019) ([@frenck] - [#62936]) ([bme680 docs]) (breaking-change) +- Deprecate Bosch BMP280 Environmental Sensor (ADR-0019) ([@frenck] - [#62937]) ([bmp280 docs]) (breaking-change) +- Add reauthentication handling to PVOutput ([@frenck] - [#62932]) ([pvoutput docs]) +- Fix incorrect state class for Ambient PWS rain rate sensor ([@bachya] - [#62946]) ([ambient_station docs]) +- Add basic type hints to homekit_controller ([@epenet] - [#62880]) ([homekit_controller docs]) +- Add myself as codeowner for Whois ([@frenck] - [#62958]) ([whois docs]) +- Convert Vallox integration to config flow ([@slovdahl] - [#62780]) ([vallox docs]) (breaking-change) +- Use Platform constants all over the place 1/3 ([@slovdahl] - [#62952]) +- Add configuration flow to CPU Speed ([@frenck] - [#62929]) ([cpuspeed docs]) (breaking-change) +- Deprecate HTU21D(F) Sensor (ADR-0019) ([@frenck] - [#62956]) ([htu21d docs]) (breaking-change) +- Deprecate Time of Flight (ADR-0019) ([@frenck] - [#62955]) ([tof docs]) (breaking-change) +- Use Platform constants all over the place 2/3 ([@slovdahl] - [#62953]) +- Use Platform constants all over the place 3/3 ([@slovdahl] - [#62954]) +- Add strict typing to Whois ([@frenck] - [#62959]) ([whois docs]) +- Add CO device class to binary_sensor entity model ([@epenet] - [#61962]) ([binary_sensor docs]) +- Deprecate Bosch BME280 Environmental Sensor (ADR-0019) ([@frenck] - [#62934]) ([bme280 docs]) (breaking-change) +- Rename Luftdaten -> Sensor.Community ([@frenck] - [#62865]) ([luftdaten docs]) (breaking-change) +- Add device info to PVOutput ([@frenck] - [#62951]) ([pvoutput docs]) +- Add basic type hints to command_line ([@epenet] - [#62877]) ([command_line docs]) +- Add unique ID to CPU Speed sensor ([@frenck] - [#62961]) ([cpuspeed docs]) +- Remove myself from proxmoxve component codeowners ([@k4ds3] - [#62963]) ([proxmoxve docs]) +- Fix zwave_js ZWaveTiltCover docstring ([@andre-richter] - [#62972]) ([zwave_js docs]) +- Don't throw when a Zigbee device has an unknown ZCL cluster ([@Adminiuga] - [#62964]) ([zha docs]) +- Add UniFi Protect media_player ([@AngellusMortis] - [#62895]) ([unifiprotect docs]) (new-platform) +- Bump google-nest-sdm to 1.1.0 ([@allenporter] - [#62977]) ([nest docs]) +- Add basic type hints to alexa ([@epenet] - [#62878]) ([alexa docs]) +- Reload nest integration when new devices are added ([@allenporter] - [#62976]) ([nest docs]) +- Add type hints to nissan_leaf integration ([@filcole] - [#62967]) ([nissan_leaf docs]) +- Add basic type hints to cast ([@epenet] - [#62746]) ([cast docs]) +- Ensure service calls are typed in homeassistant ([@epenet] - [#62915]) ([homeassistant docs]) +- Add unique id check in wiffi config flow ([@mampfes] - [#60388]) ([wiffi docs]) +- Clean up Tuya loggers ([@frenck] - [#62999]) ([tuya docs]) +- Update ZHA to use apparent power ([@dmulcahey] - [#62990]) ([zha docs]) +- Add unique id to nissanleaf entities ([@filcole] - [#62824]) ([nissan_leaf docs]) +- Fix Hue motion sensor state if sensor is disabled ([@marcelveldt] - [#63000]) ([hue docs]) +- Add setup type hints to plex ([@epenet] - [#62883]) ([plex docs]) +- Allow sending GroupValueResponse telegrams with knx.send service ([@MirkoLenz] - [#62639]) ([knx docs]) +- Detect unsupported system in CPU Speed integration ([@frenck] - [#63012]) ([cpuspeed docs]) +- Update stream errors with additional error information ([@allenporter] - [#62900]) ([stream docs]) +- Update legacy nest config flow tests to use modern best practices ([@allenporter] - [#63019]) ([nest docs]) +- Feedback from previous PR ([@AngellusMortis] - [#63022]) ([unifiprotect docs]) +- Add UniFi Protect button ([@AngellusMortis] - [#63001]) ([unifiprotect docs]) +- Add myself as codeowner for CPU Speed ([@frenck] - [#63034]) ([cpuspeed docs]) +- Ensure service calls are typed [m-z] ([@epenet] - [#63014]) +- Add full test coverage to CPU Speed ([@frenck] - [#63042]) ([cpuspeed docs]) +- Deprecate the Legacy Works with Nest API ([@allenporter] - [#63027]) ([nest docs]) (breaking-change) +- Adds missing strings ([@AngellusMortis] - [#63046]) ([unifiprotect docs]) +- Fixes UniFi Protect reconnect issues ([@AngellusMortis] - [#63047]) ([unifiprotect docs]) +- Fix local_file partial tests ([@epenet] - [#63023]) ([local_file docs]) +- Introduce const file in Whois ([@frenck] - [#63051]) ([whois docs]) +- Catch bluetooth_tracker OSError ([@atmurray] - [#60437]) ([bluetooth_tracker docs]) +- CI: Cache pip wheels ([@cdce8p] - [#62755]) +- Vallox config flow follow-up fixes ([@slovdahl] - [#63032]) ([vallox docs]) +- Bump fritzconnection and remove workarounds ([@chemelli74] - [#63050]) ([fritz docs]) ([fritzbox_callmonitor docs]) +- CI: Fix pip cache restore key ([@cdce8p] - [#63075]) +- Address feedback to Overkiz integration (round 2) ([@iMicknl] - [#63036]) ([overkiz docs]) +- Refresh device_info for Shelly devices ([@chemelli74] - [#62899]) ([shelly docs]) +- Fix unique id for Fritz buttons ([@chemelli74] - [#63072]) ([fritz docs]) +- Bump library to version 1.0.7 ([@bieniu] - [#63078]) ([shelly docs]) +- Ensure service calls are typed [a-j] ([@epenet] - [#63013]) +- Use StrEnum in Tuya constants ([@frenck] - [#63073]) ([tuya docs]) +- Use original PyAv in stream ([@uvjustin] - [#63079]) ([stream docs]) +- Add hw info for Shelly devices ([@chemelli74] - [#62643]) ([shelly docs]) +- Ensure admin service calls are typed ([@epenet] - [#63093]) +- Improve typing in core service registration ([@epenet] - [#63005]) +- Add configuration flow to Whois ([@frenck] - [#63069]) ([whois docs]) (breaking-change) +- Use mesh topology and add 3 more attr for Fritz ([@chemelli74] - [#63049]) ([fritz docs]) +- Bumps pyunifiprotect to 1.4.8 ([@AngellusMortis] - [#63113]) ([unifiprotect docs]) +- Add init type hints [a] ([@epenet] - [#63098]) +- Bump google-nest-sdm to 1.2.0 ([@allenporter] - [#63121]) ([nest docs]) +- Bump pypck to 0.7.12 ([@alengwenus] - [#63119]) ([lcn docs]) +- Add init type hints [e] ([@epenet] - [#63102]) +- Remove deprecated Connection class from octoprint ConfigFlow ([@milanmeu] - [#63117]) ([octoprint docs]) +- Make Sonos alarm `unique_id` unique with multiple households ([@jjlawren] - [#62645]) ([sonos docs]) +- Add color mode support to switch light ([@frenck] - [#63124]) ([switch docs]) +- Cleanup switch light ([@frenck] - [#63127]) ([switch docs]) +- Update Adax-local to 0.1.3 ([@Danielhiversen] - [#63129]) ([adax docs]) +- Enable strict typing for Overkiz integration ([@iMicknl] - [#63108]) ([overkiz docs]) +- Add velbus USB dicovery ([@Cereal2nd] - [#62596]) ([velbus docs]) +- Mill, add HVAC_MODE_OFF for gen 3 heaters ([@Danielhiversen] - [#63134]) ([mill docs]) +- Bump google-nest-sdm to 1.2.1 ([@allenporter] - [#63151]) ([nest docs]) +- Add UniFi Protect light platform ([@AngellusMortis] - [#63137]) ([unifiprotect docs]) (new-platform) +- Implement an rtsp to webrtc registry in camera ([@allenporter] - [#62962]) ([camera docs]) ([nest docs]) ([amcrest docs]) ([doorbird docs]) ([onvif docs]) ([foscam docs]) +- Clean up patching of setup platforms for UniFi Protect integration ([@AngellusMortis] - [#63156]) ([unifiprotect docs]) +- Adax, unique id and title should be string ([@Danielhiversen] - [#63132]) ([adax docs]) +- Bump mill-local to 0.1.1 and add device info ([@Danielhiversen] - [#63141]) ([mill docs]) +- Add entity categories. ([@stegm] - [#63165]) ([kostal_plenticore docs]) +- Mill use walrus operator ([@Danielhiversen] - [#63166]) ([mill docs]) +- Move constants to const file for generic ([@davet2001] - [#63179]) ([generic docs]) +- Keep entity state management within entity ([@allenporter] - [#63183]) ([camera docs]) (breaking-change) (new-integration) +- Improve wiffi config flow handling ([@mampfes] - [#63167]) ([wiffi docs]) +- Add new buttons for Shelly Gas ([@bieniu] - [#63099]) ([shelly docs]) +- Add `rtsptowebrtc` integration ([@allenporter] - [#59660]) ([webrtc docs]) (new-integration) +- Refactor enum zwave js tests ([@davet2001] - [#62712]) ([zwave_js docs]) +- Add UniFi Protect switch platform ([@AngellusMortis] - [#63177]) ([unifiprotect docs]) (new-platform) +- Add init type hints [f-g] ([@epenet] - [#63186]) +- Add init type hints [n-o] ([@epenet] - [#63190]) +- Upgrade flake8-noqa to 1.2.1 ([@cdce8p] - [#63170]) +- Add init type hints [t-u] ([@epenet] - [#63194]) +- Drop use of HomeAssistantType in elmax ([@epenet] - [#63105]) ([elmax docs]) +- Fix management of Fritz repeaters ([@chemelli74] - [#63110]) ([fritz docs]) +- Use DeviceClass Enum in alarmdecoder schema ([@epenet] - [#61967]) ([alarmdecoder docs]) +- Run `gen_requirements_all` script on changes to `setup.py` ([@cdce8p] - [#63171]) +- Add init type hints [d] ([@epenet] - [#63101]) +- Add init type hints [v-z] ([@epenet] - [#63195]) +- Add init type hints [m] ([@epenet] - [#63189]) +- Add init type hints [s] ([@epenet] - [#63193]) +- Add init type hints [h-j] ([@epenet] - [#63187]) +- Add init type hints [k-l] ([@epenet] - [#63188]) +- Add init type hints [p-q] ([@epenet] - [#63191]) +- Add init type hints [r] ([@epenet] - [#63192]) +- Bump dsmr-parser dependency to 0.31 ([@rhpijnacker] - [#63123]) ([dsmr docs]) +- Add init type hints [b-c] ([@epenet] - [#63100]) +- Fix incorrect parameter name/hint in mqtt climate ([@epenet] - [#63106]) ([mqtt docs]) +- Revert nest reloading due to lock up ([@allenporter] - [#63206]) ([nest docs]) +- Drop deprecated CONF_NAMES from onewire ([@epenet] - [#61094]) ([onewire docs]) +- Add type hint to reload_config in homeassistant scene ([@epenet] - [#63094]) ([homeassistant docs]) +- Ensure service calls are typed in todoist ([@epenet] - [#63020]) ([todoist docs]) +- Make ATTR_ENTITY_ID required in local_file service call ([@epenet] - [#63017]) ([local_file docs]) +- Add basic type hints to broadlink ([@epenet] - [#62879]) ([broadlink docs]) +- Introduce const file in Nissan Leaf ([@filcole] - [#63082]) ([nissan_leaf docs]) +- Use more narrow exception catching in `nest` ([@allenporter] - [#63225]) ([nest docs]) +- Bump google-nest-sdm to 1.3.0 ([@allenporter] - [#63224]) ([nest docs]) +- Add Oncue by Kohler integration ([@bdraco] - [#63203]) ([oncue docs]) (new-integration) +- Ensure service calls are typed in remember-the-milk ([@epenet] - [#63018]) ([remember_the_milk docs]) +- Add UniFi Protect number platform ([@AngellusMortis] - [#63220]) ([unifiprotect docs]) +- Add missing schema to dominos order service ([@epenet] - [#63016]) ([dominos docs]) +- Add entity_category to oncue sensors ([@bdraco] - [#63231]) ([oncue docs]) +- Add support for oncue connectivity binary sensor ([@bdraco] - [#63232]) ([oncue docs]) (new-platform) +- Use shorthand attributes in Tuya camera platform ([@frenck] - [#63228]) ([tuya docs]) +- Simplify nest reauth config flow ([@allenporter] - [#63058]) ([nest docs]) +- Update rokuecp to 0.9.0 ([@ctalkington] - [#63234]) ([roku docs]) +- Add link into statistics unit mismatch warning ([@mdegat01] - [#62217]) ([sensor docs]) +- Refactor static attributes to class attrs for UniFi Protect ([@AngellusMortis] - [#63236]) ([unifiprotect docs]) +- Improve tests for generic camera ([@davet2001] - [#63197]) ([generic docs]) +- Run `hassfest` on changes to `.strict-typing` ([@cdce8p] - [#63237]) +- Fix oncue string for already_configured ([@bdraco] - [#63248]) ([oncue docs]) +- Add hardware version to Roku device info ([@ctalkington] - [#63249]) ([roku docs]) +- Add binary_sensor platform to roku ([@ctalkington] - [#63238]) ([roku docs]) (new-platform) +- Add basic type hints to mqtt ([@epenet] - [#62875]) ([mqtt docs]) +- Add mqtt encoding support for publishing ([@jbouwh] - [#62739]) ([mqtt docs]) +- Add type hints to google_assistant ([@epenet] - [#62748]) ([google_assistant docs]) +- Add button platform to template integration ([@raman325] - [#61908]) ([template docs]) +- Improve test coverage of template button ([@emontnemery] - [#63265]) ([template docs]) +- Add turned on or off device trigger to toggle entity ([@emontnemery] - [#61089]) +- Add alarm_control_panel setup type hints ([@epenet] - [#63264]) +- Add binary_sensor setup type hints [h-n] ([@epenet] - [#63269]) +- Add binary_sensor setup type hints [o-r] ([@epenet] - [#63270]) +- Add unique_id configuration variable to command_line integration ([@rautesamtr] - [#58596]) ([command_line docs]) +- Fix relative import issue in device_automation ([@epenet] - [#63274]) ([device_automation docs]) +- Add air_quality setup type hints ([@epenet] - [#63263]) ([demo docs]) ([norway_air docs]) ([opensensemap docs]) ([kaiterra docs]) ([nilu docs]) ([blebox docs]) +- Add init type hints [misc] ([@epenet] - [#63261]) +- Update to pyoctoprintapi 1.7 ([@rfleming71] - [#63254]) ([octoprint docs]) +- Bump caldav version to 0.8.2 ([@chpego] - [#63280]) ([caldav docs]) +- Add climate setup type hints [m-z] ([@epenet] - [#63279]) +- Add binary_sensor setup type hints [a-f] ([@epenet] - [#63268]) +- Add binary_sensor setup type hints [s-z] ([@epenet] - [#63271]) +- Add calendar setup type hints ([@epenet] - [#63272]) ([google docs]) ([demo docs]) ([caldav docs]) ([todoist docs]) +- Add strict typing to `core.py` (4) - Misc ([@cdce8p] - [#63242]) +- Add camera setup type hints ([@epenet] - [#63277]) +- Add climate setup type hints [a-l] ([@epenet] - [#63278]) +- Address late review comments for version integration ([@ludeeus] - [#63283]) ([version docs]) +- Bump async-upnp-client==0.23.3 ([@StevenLooman] - [#63282]) ([upnp docs]) ([yeelight docs]) ([dlna_dmr docs]) ([ssdp docs]) +- Downgrade OctoPrint printer disconnected errors ([@timmo001] - [#63076]) ([octoprint docs]) +- Add eq3btsmart presets on, off, auto and manual mode ([@bvweerd] - [#54586]) ([eq3btsmart docs]) +- Add light setup type hints [a-i] ([@epenet] - [#63291]) +- Add mqtt entity attributes command templates ([@jbouwh] - [#61937]) ([mqtt docs]) +- Add fan setup type hints ([@epenet] - [#63287]) +- Add light setup type hints [l-r] ([@epenet] - [#63292]) +- Add cover setup type hints ([@epenet] - [#63285]) +- Fix MQTT cover not using tilt_command_template ([@jbouwh] - [#63080]) ([mqtt docs]) +- Fix mqtt reloading and rework tests ([@jbouwh] - [#62950]) ([mqtt docs]) +- Add image_processing setup type hints ([@epenet] - [#63290]) +- Add humidifier setup type hints ([@epenet] - [#63289]) ([ecobee docs]) ([demo docs]) ([generic_hygrostat docs]) +- Add device_tracker setup type hints ([@epenet] - [#63286]) ([mobile_app docs]) ([starline docs]) ([mazda docs]) +- Add light setup type hints [s-z] ([@epenet] - [#63293]) +- Add lock setup type hints ([@epenet] - [#63296]) +- Add media_player setup type hints [a-l] ([@epenet] - [#63297]) +- Mqtt rework on value templates ([@jbouwh] - [#62105]) ([mqtt docs]) +- Add MQTT encoding parameter for all subscribed topics ([@jbouwh] - [#62263]) ([mqtt docs]) +- Add media_player setup type hints [m-x] ([@epenet] - [#63298]) +- Add geo_location setup type hints ([@epenet] - [#63288]) ([demo docs]) ([ign_sismologia docs]) ([qld_bushfire docs]) ([geo_json_events docs]) ([usgs_earthquakes_feed docs]) ([geonetnz_quakes docs]) ([gdacs docs]) +- Add setup type hints to all template platforms ([@epenet] - [#63295]) ([template docs]) +- Add setup type hints to all demo platforms ([@epenet] - [#63294]) ([demo docs]) +- Add setup type hints to select, vacuum and water_heater ([@epenet] - [#63300]) ([hive docs]) ([ecovacs docs]) ([harmony docs]) ([econet docs]) ([incomfort docs]) ([vicare docs]) ([atag docs]) ([sharkiq docs]) +- Add weather setup type hints ([@epenet] - [#63301]) ([ecobee docs]) ([environment_canada docs]) ([ipma docs]) ([darksky docs]) ([aemet docs]) ([met_eireann docs]) +- Add switch setup type hints [a-f] ([@epenet] - [#63302]) +- Add switch setup type hints [s-z] ([@epenet] - [#63305]) +- Skip raw encoding test for cover ([@jbouwh] - [#63322]) ([mqtt docs]) +- Fix typo in CPU Speed translation key ([@frenck] - [#63284]) ([cpuspeed docs]) +- Reject MQTT light discovery using unsupported value_template ([@emontnemery] - [#62682]) ([mqtt docs]) (breaking-change) +- Add setup type hints to number, remote and scene ([@epenet] - [#63299]) +- Cleanup handling of unsupported config keys in MQTT fan ([@emontnemery] - [#62681]) ([mqtt docs]) +- Add sensor setup type hints [w-z] ([@epenet] - [#63308]) +- Add sensor setup type hints [s] ([@epenet] - [#63310]) +- Add sensor setup type hints [r] ([@epenet] - [#63312]) +- Add sensor setup type hints [m-n] ([@epenet] - [#63314]) +- Add sensor setup type hints [o-q] ([@epenet] - [#63313]) +- Add sensor setup type hints [i-l] ([@epenet] - [#63315]) +- Add sensor setup type hints [g-h] ([@epenet] - [#63316]) +- Add sensor setup type hints [c-d] ([@epenet] - [#63318]) +- Add sensor setup type hints [a-b] ([@epenet] - [#63319]) +- Add sensor setup type hints [e-f] ([@epenet] - [#63317]) +- Add sensor setup type hints [t-v] ([@epenet] - [#63309]) +- Add basic type hints to acmeda ([@epenet] - [#62736]) ([acmeda docs]) +- Add switch setup type hints [g-m] ([@epenet] - [#63303]) +- Add switch setup type hints [n-r] ([@epenet] - [#63304]) +- Allow mobile app registrations only supporting websocket push ([@balloob] - [#63208]) ([mobile_app docs]) +- Weather units: climacell (1.3/4) ([@rianadon] - [#61472]) ([climacell docs]) +- Add UniFi Protect select platform ([@AngellusMortis] - [#63337]) ([unifiprotect docs]) +- Use enums in smartthings tests ([@tkdrob] - [#62194]) ([smartthings docs]) +- Address late review of #63238 ([@ctalkington] - [#63358]) ([roku docs]) +- Use built-in Jinja min and max filters in templates ([@avee87] - [#60327]) +- Add SensorDeviceClass to statistics component, improve structures ([@ThomDietrich] - [#62629]) ([statistics docs]) +- Remove invalid return values in setup methods [r-z] ([@epenet] - [#63365]) +- Remove invalid return values in setup methods [a-h] ([@epenet] - [#63362]) +- Remove invalid return values in setup methods [i-p] ([@epenet] - [#63363]) +- Bump rtsp_to_webrtc to 0.4.0 ([@allenporter] - [#63359]) ([rtsp_to_webrtc docs]) +- Only rely on device status when adding Tuya entities ([@frenck] - [#63074]) ([tuya docs]) +- Remove deprecated yaml config from waze_travel_time ([@tkdrob] - [#62543]) ([waze_travel_time docs]) (breaking-change) +- Add select entities to ZHA ([@dmulcahey] - [#62718]) ([zha docs]) +- Allow password-less login to jellyfin ([@esev] - [#61646]) ([jellyfin docs]) +- Add configuration_url for ONVIF ([@esev] - [#61526]) ([onvif docs]) +- Add MAC to WLED device ([@balloob] - [#63349]) ([wled docs]) +- Update influxdb dependency to `5.3.1` ([@mdegat01] - [#62228]) ([influxdb docs]) ([sensor docs]) +- Simplify device registry update ([@scop] - [#62868]) +- Make review link exclude PRs with failing tests ([@davet2001] - [#63373]) +- Fix `ensure_list` typing ([@cdce8p] - [#63311]) +- Remove some unused TypeVars ([@cdce8p] - [#63346]) ([energy docs]) +- Add device to Wallbox integration ([@Eernie] - [#63011]) ([wallbox docs]) +- Add support for Pet Feeder (cwwsq) in Tuya ([@vauriga] - [#61359]) ([tuya docs]) +- Add philips.light.hbulb support ([@syssi] - [#62417]) ([xiaomi_miio docs]) +- Remove deprecated yaml config from sma ([@tkdrob] - [#62472]) ([sma docs]) (breaking-change) +- Use entity class attributes for Mazda integration ([@bdr99] - [#59869]) ([mazda docs]) +- Add support for philips js screen state ([@elupus] - [#62775]) ([philips_js docs]) (new-platform) +- Add hardware revision support to homekit ([@bdraco] - [#63336]) ([homekit docs]) +- Add little slack to CodeCov project/config-flows threshold ([@frenck] - [#63379]) +- Cleanup nest config flow ([@allenporter] - [#63351]) ([nest docs]) +- Convert Risco sensor states to timestamps ([@OnFreund] - [#63139]) ([risco docs]) +- Use BinarySensorDeviceClass enum in binary_sensor device automations ([@epenet] - [#62635]) ([binary_sensor docs]) +- Offer local control option when there are multiple zeroconf homekit matches ([@bdraco] - [#62649]) ([zeroconf docs]) +- Implement retry for Netatmo webhook registration ([@cgtobi] - [#62597]) ([netatmo docs]) +- Set nest climate hvac_action to report idle when hvac mode is not off ([@allenporter] - [#62811]) ([nest docs]) +- Drop device_class in wallbox number ([@epenet] - [#62438]) ([wallbox docs]) +- Add counter entities support to Prometheus component ([@rnurgaliyev] - [#62410]) ([prometheus docs]) +- Keep flux_led device time in sync ([@bdraco] - [#63259]) ([flux_led docs]) +- Update PyVicare to 2.15.0 ([@tschnilo] - [#63342]) ([vicare docs]) +- Add support for Add-on discovery in rtsp_to_webrtc ([@allenporter] - [#63211]) ([rtsp_to_webrtc docs]) +- Complete strict typing to Humidifier entity platform ([@frenck] - [#61021]) ([device_automation docs]) ([humidifier docs]) +- Add strict typing to `core.py` (2) - State ([@cdce8p] - [#63240]) +- Start using `ParamSpec` for decorator functions ([@cdce8p] - [#63148]) ([sonos docs]) ([tplink docs]) ([dlna_dmr docs]) ([vlc_telnet docs]) ([zwave_js docs]) ([evil_genius_labs docs]) +- Add Picnic last_order_max_order_time sensor ([@hmmbob] - [#63169]) ([picnic docs]) +- Add support for Sonos microphone binary_sensor ([@jjlawren] - [#63097]) ([sonos docs]) +- Prometheus to support input_number ([@yozik04] - [#58964]) ([prometheus docs]) +- Add strict typing to `core.py` (6) - Implicit reexport ([@cdce8p] - [#63345]) +- Parse Risco event time as local ([@OnFreund] - [#63395]) ([risco docs]) +- Simplify WLED config flow, use device name for config entry ([@frenck] - [#63377]) ([wled docs]) +- Improve test coverage for PVOutput ([@frenck] - [#63048]) ([pvoutput docs]) +- Add unique_id to tellstick devices ([@michaelarnauts] - [#63391]) ([tellstick docs]) +- Add a lock on nest stream URL creation to avoid multiple in flight at once ([@allenporter] - [#63212]) ([nest docs]) +- Add Goodwe solar inverter integration ([@mletenay] - [#58503]) ([goodwe docs]) (new-integration) +- Add setup type hints to august ([@epenet] - [#63388]) ([august docs]) +- Fix Heat Service, bump pyEight to 0.2.0 ([@mezz64] - [#63405]) ([eight_sleep docs]) +- Set the nest configuration title to a user friendly name ([@allenporter] - [#62886]) ([nest docs]) +- Fix type hint in http register_view ([@epenet] - [#63385]) ([http docs]) +- Add additional service to set advanced Hue scene options ([@marcelveldt] - [#63035]) ([hue docs]) +- Deprecate Nanoleaf YAML ([@milanmeu] - [#63404]) ([nanoleaf docs]) (breaking-change) +- Remove groups.yaml from default config ([@emontnemery] - [#63366]) +- Make device tracker entities work better ([@balloob] - [#63328]) ([device_tracker docs]) +- Update holidays to 0.12 ([@frenck] - [#63389]) ([workday docs]) +- Remove deprecated Arduino integration ([@frenck] - [#63406]) ([arduino docs]) (breaking-change) +- Add external Tibber statistics ([@Danielhiversen] - [#62249]) ([tibber docs]) +- Add sensor tests to PVOutput ([@frenck] - [#63400]) ([pvoutput docs]) +- Add setup type hints [h] ([@epenet] - [#63438]) ([homematic docs]) ([hangouts docs]) ([homeworks docs]) ([hikvision docs]) ([hp_ilo docs]) ([haveibeenpwned docs]) +- Add setup type hints [i-k] ([@epenet] - [#63444]) ([ios docs]) ([keyboard_remote docs]) ([ihc docs]) ([idteck_prox docs]) ([itach docs]) ([integration docs]) +- Remove unused group config view ([@emontnemery] - [#63434]) ([config docs]) +- Add setup type hints to history ([@epenet] - [#63441]) ([history docs]) +- Add MAC to Roku device ([@ctalkington] - [#63422]) ([roku docs]) +- Bump influxdb-client dependency to 1.24.0 ([@mdegat01] - [#63397]) +- Fix internet access switch for Fritz Wi-Fi guest devices ([@chemelli74] - [#63407]) ([fritz docs]) +- Add setup type hints [e] ([@epenet] - [#63430]) ([elkm1 docs]) ([entur_public_transport docs]) ([eddystone_temperature docs]) +- Add setup type hints to magicseaweed ([@epenet] - [#63451]) ([magicseaweed docs]) +- Add setup type hints [l] ([@epenet] - [#63450]) +- Add setup type hints [f] ([@epenet] - [#63431]) ([feedreader docs]) ([file docs]) ([fail2ban docs]) ([fints docs]) ([folder docs]) ([filesize docs]) +- Add setup type hints [g] ([@epenet] - [#63432]) ([group docs]) ([gc100 docs]) ([garadget docs]) ([greenwave docs]) ([goodwe docs]) +- Add setup type hints [a] ([@epenet] - [#63424]) ([api docs]) ([asterisk_mbox docs]) ([anel_pwrctrl docs]) ([alpha_vantage docs]) ([arest docs]) ([airtouch4 docs]) +- Upgrade python_opendata_transport to 0.3.0 ([@agners] - [#63409]) ([swiss_public_transport docs]) +- Use imports from `core` ([@cdce8p] - [#63458]) ([modbus docs]) ([tradfri docs]) ([surepetcare docs]) ([aftership docs]) ([homeassistant docs]) +- Use imports from `helpers.typing` ([@cdce8p] - [#63459]) ([mqtt docs]) ([trafikverket_weatherstation docs]) ([sensibo docs]) ([yale_smart_alarm docs]) ([rainforest_eagle docs]) ([iotawatt docs]) ([airthings docs]) +- Import `image_processing` constants from `const` ([@cdce8p] - [#63461]) +- Use SensorDeviceClass in `sensor` and `helpers` packages ([@cdce8p] - [#63452]) ([sensor docs]) +- Fix exception import locations ([@cdce8p] - [#63454]) ([automation docs]) ([tplink docs]) ([samsungtv docs]) ([yale_smart_alarm docs]) ([azure_event_hub docs]) ([nam docs]) +- Add support for curtain device class to google assistant ([@emontnemery] - [#63380]) ([google_assistant docs]) +- Add setup type hints [b] ([@epenet] - [#63427]) ([blinkt docs]) ([balboa docs]) ([bosch_shc docs]) +- Add setup type hints [c-d] ([@epenet] - [#63428]) ([coinbase docs]) ([daikin docs]) ([darksky docs]) ([cups docs]) ([dexcom docs]) ([compensation docs]) +- Add setup type hints [m] ([@epenet] - [#63456]) ([microsoft_face docs]) ([maxcube docs]) ([mqtt_statestream docs]) ([mochad docs]) ([mvglive docs]) ([mcp23017 docs]) ([mazda docs]) +- Remove debug print ([@chemelli74] - [#63460]) +- Remove colinodell as QNAP codeowner ([@colinodell] - [#63474]) ([qnap docs]) +- Improve nest camera failure handling on removal ([@allenporter] - [#63207]) ([nest docs]) +- Support media_player grouping services for Sonos ([@jjlawren] - [#63256]) ([sonos docs]) +- Add setup type hints [o-q] ([@epenet] - [#63465]) ([pilight docs]) ([qwikswitch docs]) ([qnap docs]) ([onkyo docs]) ([pyload docs]) ([pulseaudio_loopback docs]) ([pi4ioe5v9xxxx docs]) ([powerwall docs]) +- Add setup type hints [r] ([@epenet] - [#63472]) ([rpi_pfio docs]) ([roomba docs]) ([raincloud docs]) ([rpi_gpio docs]) ([rest docs]) ([rmvtransport docs]) ([rpi_rf docs]) +- Add setup type hints [n] ([@epenet] - [#63462]) ([nmbs docs]) ([netdata docs]) ([nx584 docs]) ([nederlandse_spoorwegen docs]) ([netio docs]) ([nexia docs]) +- Use const imports [a-e] ([@cdce8p] - [#63467]) +- Use const imports [g-i] ([@cdce8p] - [#63468]) ([input_select docs]) ([group docs]) ([hive docs]) +- Add setup type hints [t-u] ([@epenet] - [#63480]) ([thethingsnetwork docs]) ([tibber docs]) ([uk_transport docs]) ([tank_utility docs]) ([torque docs]) ([tmb docs]) +- Add setup type hints [x-z] ([@epenet] - [#63485]) ([zabbix docs]) ([zoneminder docs]) ([ziggo_mediabox_xl docs]) ([xbee docs]) +- Use correct relative imports [n-z] ([@cdce8p] - [#63471]) +- Use correct relative imports [a-m] ([@cdce8p] - [#63470]) +- Add setup type hints [s] (part 2) ([@epenet] - [#63479]) +- Add setup type hints [s] (part 1) ([@epenet] - [#63476]) ([shopping_list docs]) ([skybell docs]) ([sisyphus docs]) ([satel_integra docs]) ([scrape docs]) ([season docs]) +- Add setup type hints to homeassistant ([@epenet] - [#63439]) ([homeassistant docs]) +- Add link flags for grpc armv7 wheels ([@allenporter] - [#62779]) +- Add unique id to flic buttons ([@tomhennigan] - [#61496]) ([flic docs]) +- Sort google_assistant consts ([@emontnemery] - [#63487]) ([google_assistant docs]) +- Support passing callbacks to start.async_at_start ([@emontnemery] - [#63473]) +- Use const imports [l-z] ([@cdce8p] - [#63469]) +- Add setup type hints [v-w] ([@epenet] - [#63484]) +- Add timeouts to CI jobs ([@cdce8p] - [#63491]) +- Fix 3rd party imports ([@cdce8p] - [#63455]) ([mqtt docs]) ([goalzero docs]) +- Mark PVOutput as platinum on the integration quality scale ([@frenck] - [#63453]) ([pvoutput docs]) +- UniFi Protect test refactoring ([@AngellusMortis] - [#63486]) ([unifiprotect docs]) +- Deprecate Sense HAT (ADR-0019) ([@frenck] - [#63500]) ([sensehat docs]) (breaking-change) +- Deprecate Raspberry Pi RF (ADR-0019) ([@frenck] - [#63501]) ([rpi_rf docs]) (breaking-change) +- Improve cleanup service for Fritz ([@chemelli74] - [#61484]) ([fritz docs]) +- Use Platform enum [emulated_hue] ([@cdce8p] - [#63498]) ([emulated_hue docs]) +- Add configuration url to kostal plenticore ([@stegm] - [#63502]) ([kostal_plenticore docs]) +- Bump google-cloud-pubsub to 2.9.0 ([@allenporter] - [#63493]) ([google_pubsub docs]) +- Enable local fulfillment google assistant ([@LoekSangers] - [#63218]) ([google_assistant docs]) +- Add 'fire_event' command to websocket api ([@niecore] - [#63378]) ([websocket_api docs]) +- Improve server selection for Plex config flows ([@jjlawren] - [#63408]) ([plex docs]) +- Address late review of vicare config flow ([@oischinger] - [#63343]) ([vicare docs]) (breaking-change) +- Bump dsmr-parser dependency to 0.32 ([@rhpijnacker] - [#63436]) ([dsmr docs]) (breaking-change) +- Revert "Bump google-cloud-pubsub to 2.9.0 (to bump grpcio)" ([@frenck] - [#63517]) ([google_pubsub docs]) +- Revert "Add link flags for grpc armv7 wheels" ([@allenporter] - [#63518]) +- Upgrade pynuki to 1.5.2 ([@pree] - [#62866]) ([nuki docs]) +- Add UniFi Protect binary_sensor platform ([@AngellusMortis] - [#63489]) ([unifiprotect docs]) (new-platform) +- Optimise sleep time for nissan leaf servers ([@filcole] - [#62857]) ([nissan_leaf docs]) +- Add button to start leaf charge ([@filcole] - [#62948]) ([nissan_leaf docs]) (breaking-change) +- Deprecate PiFace Digital I/O (PFIO) (ADR-0019) ([@frenck] - [#63506]) ([rpi_pfio docs]) (breaking-change) +- Deprecate Orange Pi GPIO (ADR-0019) ([@frenck] - [#63507]) ([orangepi_gpio docs]) (breaking-change) +- Deprecate MH-Z19 CO2 Sensor (ADR-0019) ([@frenck] - [#63508]) ([mhz19 docs]) (breaking-change) +- Deprecate Enviro pHAT (ADR-0019) ([@frenck] - [#63509]) ([envirophat docs]) (breaking-change) +- Deprecate Blinkt! (ADR-0019) ([@frenck] - [#63510]) ([blinkt docs]) (breaking-change) +- Deprecate pigpio Daemon PWM LED (ADR-0019) ([@frenck] - [#63504]) ([rpi_gpio_pwm docs]) (breaking-change) +- Deprecate Raspberry Pi GPIO (ADR-0019) ([@frenck] - [#63503]) ([rpi_gpio docs]) (breaking-change) +- Deprecate Piglow (ADR-0019) ([@frenck] - [#63505]) ([piglow docs]) (breaking-change) +- Add strict typing to `core.py` (3) - Service ([@cdce8p] - [#63241]) +- Consistently type/coerce climate humidity to be an int ([@bdraco] - [#61456]) ([climate docs]) (breaking-change) +- Share common EntityTestHelpers in wemo tests ([@esev] - [#62455]) ([wemo docs]) +- Add tests that exercise nest dhcp discovery behavior ([@allenporter] - [#62526]) ([nest docs]) +- Add UniFi Protect sensor platform ([@AngellusMortis] - [#63524]) ([unifiprotect docs]) (new-platform) +- Add support for Steamist steam showers ([@bdraco] - [#63251]) ([steamist docs]) (new-integration) +- Add strict typing to core.py (1) - EventBus ([@cdce8p] - [#63239]) ([netatmo docs]) ([met docs]) +- Allow registering a webhook as local only ([@balloob] - [#63516]) ([google_assistant docs]) ([webhook docs]) +- Updated the support of Tuya Circuit Breaker 'dlq' ([@slydiman] - [#63519]) ([tuya docs]) +- Add button entities to bmw_connected_drive ([@rikroe] - [#63136]) ([bmw_connected_drive docs]) (breaking-change) +- Deprecate 1-Wire SysBus (ADR-0019) ([@frenck] - [#63513]) ([onewire docs]) (breaking-change) +- Fritz cleanup: part1 (naming) ([@chemelli74] - [#63535]) ([fritz docs]) +- Bump greeneye_monitor to v3.0.1 ([@jkeljo] - [#63531]) ([greeneye_monitor docs]) +- Add link flags for grpc armv7 wheels (attempt #2) ([@allenporter] - [#63521]) +- Bump google-cloud-pubsub to 2.9.0 (attempt #2) ([@allenporter] - [#63522]) ([google_pubsub docs]) +- Move ReCollect Waste "next pickup" info to its own sensor ([@bachya] - [#62558]) ([recollect_waste docs]) (breaking-change) +- Code improvements to trafikverket_weatherstation ([@gjohansson-ST] - [#62854]) ([trafikverket_weatherstation docs]) +- Update PyTurboJPEG to 1.6.4 ([@frenck] - [#63553]) ([camera docs]) ([stream docs]) +- Revert "Bump google-cloud-pubsub to 2.9.0 (attempt #2) (#63522)" ([@allenporter] - [#63561]) ([google_pubsub docs]) +- Update Numpy to 1.22.0 ([@frenck] - [#63559]) ([opencv docs]) ([tensorflow docs]) ([trend docs]) ([iqvia docs]) ([compensation docs]) +- Fix flux_led sync time ([@cdce8p] - [#63554]) ([flux_led docs]) +- Update requests to 2.27.1 ([@frenck] - [#63552]) +- UniFi Protect test sensor followup ([@AngellusMortis] - [#63563]) ([unifiprotect docs]) +- Use attr** in thermoworks-smoke ([@epenet] - [#62436]) ([thermoworks_smoke docs]) +- Rewrite vultr unittest to pytest ([@epenet] - [#63367]) ([vultr docs]) +- Isolate consts better to where they are used ([@AngellusMortis] - [#63569]) ([unifiprotect docs]) +- Fix cleanup service to just run on loaded config entries in Fritz!Tools ([@mib1185] - [#63570]) ([fritz docs]) +- Fix typing `TrackTemplateResultListener` [helpers.event] ([@cdce8p] - [#63541]) ([websocket_api docs]) +- Pickup code owner for flux_led ([@bdraco] - [#63573]) ([flux_led docs]) +- Fix missing device name with legacy flux_led discovery ([@bdraco] - [#62785]) ([flux_led docs]) +- Improve callable typing [helpers.event] ([@cdce8p] - [#63543]) ([netatmo docs]) ([wemo docs]) ([flux_led docs]) +- Add device configuration entities to flux_led ([@bdraco] - [#62786]) ([flux_led docs]) +- Simplify groups ([@emontnemery] - [#63477]) ([group docs]) +- Revert "Use Platform enum [emulated_hue] (#63498)" ([@cdce8p] - [#63576]) ([emulated_hue docs]) +- Add missing TypeVar in vlc_telnet decorator ([@cdce8p] - [#63587]) ([vlc_telnet docs]) +- Add Kraken configuration_url ([@eifinger] - [#63565]) ([kraken docs]) +- Bump pybotvac version for the neato integration ([@simontegelid] - [#63586]) ([neato docs]) +- Add support for Levoit Core 300S air purifier to VeSync integration ([@RefineryX] - [#62488]) ([vesync docs]) +- Add SensorStateClass to Kraken sensors ([@eifinger] - [#63590]) ([kraken docs]) +- Add state translations and icons to ClimaCell sensors ([@raman325] - [#63526]) ([climacell docs]) +- Fix upnp device not being reinitialized after device changes location ([@StevenLooman] - [#63133]) ([upnp docs]) +- Weather units: Buienradar (1.2/4) ([@rianadon] - [#61470]) ([buienradar docs]) +- Make idle chromecasts appear as idle instead of off ([@emontnemery] - [#61786]) ([cast docs]) +- Tuya Alarm Initial commit ([@leeyuentuen] - [#60080]) ([tuya docs]) (new-platform) (new-integration) +- Add long term statistics to buienradar ([@tedvdb] - [#58917]) ([buienradar docs]) +- Move lock and devicelock attributes into sensors for all AVM Fritz!Smarthome entities ([@mib1185] - [#60426]) ([fritzbox docs]) (breaking-change) +- Auto-setup a few more IHC devices ([@tausen] - [#58806]) ([ihc docs]) +- Add daily energy usage sensor to daikin ([@tofuSCHNITZEL] - [#61617]) ([daikin docs]) +- Bump yalesmartalarmclient to v0.3.7 ([@gjohansson-ST] - [#63596]) ([yale_smart_alarm docs]) +- Fail CI when package init file is missing in component tests ([@frenck] - [#63589]) +- Add setup type hints [a-e] ([@epenet] - [#63597]) ([alarmdecoder docs]) ([evohome docs]) ([asuswrt docs]) ([digitalloggers docs]) ([control4 docs]) +- Add setup type hints [h-i] ([@epenet] - [#63603]) ([homematicip_cloud docs]) ([harmony docs]) ([icloud docs]) ([heos docs]) ([izone docs]) ([iaqualink docs]) ([huisbaasje docs]) +- Add setup type hints [k-m] ([@epenet] - [#63605]) ([lyric docs]) ([meteo_france docs]) ([metoffice docs]) ([melcloud docs]) ([keenetic_ndms2 docs]) ([minecraft_server docs]) ([kostal_plenticore docs]) ([meteoclimatic docs]) +- Add setup type hints [n-r] ([@epenet] - [#63607]) ([ping docs]) ([nmap_tracker docs]) ([nws docs]) ([nsw_rural_fire_service_feed docs]) ([ruckus_unleashed docs]) ([picnic docs]) +- Add setup type hints [s-t] ([@epenet] - [#63613]) ([tado docs]) ([toon docs]) ([tuya docs]) ([twinkly docs]) ([traccar docs]) ([songpal docs]) ([system_bridge docs]) +- Add setup type hints [v-y] ([@epenet] - [#63614]) ([vultr docs]) ([yeelight docs]) ([wilight docs]) ([xbox docs]) +- Add yale_smart_alarm config options flow ([@gjohansson-ST] - [#54097]) ([yale_smart_alarm docs]) +- Delete nest event image fetching and use same APIs as media player ([@allenporter] - [#62789]) ([nest docs]) +- Skip empty test directories in gen_requirements_all ([@mdz] - [#62970]) +- Add strict typing to `core.py` (5) - Task ([@cdce8p] - [#63243]) ([arcam_fmj docs]) +- Add setup type hints [f-g] ([@epenet] - [#63599]) ([feedreader docs]) ([freebox docs]) ([gpslogger docs]) ([geniushub docs]) ([firmata docs]) ([fireservicerota docs]) ([flick_electric docs]) +- Add missing `last_rest` in Tibber ([@Danielhiversen] - [#61914]) ([tibber docs]) +- Case sensitive SQL queries checks ([@dgomes] - [#62752]) ([sql docs]) +- Teach call service script action about entity registry ids ([@emontnemery] - [#61172]) +- Use find_coordinates in google_travel_time ([@eifinger] - [#61423]) ([google_travel_time docs]) +- Use entities instead of devices for nissan leaf ([@filcole] - [#63542]) ([nissan_leaf docs]) +- Add SensorEntityClass support for Environment Canada integration ([@gwww] - [#58615]) ([environment_canada docs]) (breaking-change) +- Add new TRV Beca and proper Presets with new one Temporary Manual ([@jacekk015] - [#60337]) ([zha docs]) +- Give scenes last activated state ([@frenck] - [#62673]) ([scene docs]) ([homeassistant docs]) +- Allow sending webhooks via WS connection ([@balloob] - [#62725]) ([cloud docs]) ([webhook docs]) +- Update youtube_dl to 2021.12.17 ([@frenck] - [#63592]) ([media_extractor docs]) +- Bump pylgnetcast to 0.3.7 ([@Drafteed] - [#63645]) ([lg_netcast docs]) +- Revert "Update Numpy to 1.22.0 (#63559)" ([@frenck] - [#63648]) ([opencv docs]) ([tensorflow docs]) ([trend docs]) ([iqvia docs]) ([compensation docs]) +- Add temp and minutes remaining sensors to steamist ([@bdraco] - [#63653]) ([steamist docs]) (new-platform) +- Add support for managing 2.4G remotes in flux_led ([@bdraco] - [#63646]) ([flux_led docs]) (new-platform) +- Add SenseME integration ([@bdraco] - [#62909]) ([senseme docs]) (new-integration) +- Improve typing for Overkiz integration and address late feedback ([@iMicknl] - [#63483]) ([overkiz docs]) +- Refactor Launch Library to use config flow ([@DurgNomis-drol] - [#62416]) ([launch_library docs]) (breaking-change) +- Bump pylaunches to 1.2.1 ([@DurgNomis-drol] - [#63667]) ([launch_library docs]) +- Bump pysml to 0.0.6 ([@mtdcr] - [#63664]) ([edl21 docs]) +- Update pyTibber to 0.21.7 ([@Danielhiversen] - [#63663]) ([tibber docs]) +- Use device registry in aten_pe ([@mtdcr] - [#61906]) ([aten_pe docs]) +- Handle zwave_js metadata/value updates when the unit changes ([@raman325] - [#63579]) ([zwave_js docs]) +- Deprecate Media Player Classic Home Cinema (ADR-0004) ([@frenck] - [#63598]) ([mpchc docs]) (breaking-change) +- Bump mypy to 0.931 ([@cdce8p] - [#63673]) +- Add types for HassJob [helpers.event] ([@cdce8p] - [#63675]) +- Bump awesomeversion to 22.1.0 ([@ludeeus] - [#63676]) +- Improve typing of Steamist sensors ([@frenck] - [#63674]) ([steamist docs]) +- Minor bugfixes for UniFi Protect ([@AngellusMortis] - [#63475]) ([unifiprotect docs]) +- Fritz cleanup: part2 (triggers for button/service) ([@chemelli74] - [#63564]) ([fritz docs]) +- Move greeneye_monitor constants into their own file ([@jkeljo] - [#63659]) ([greeneye_monitor docs]) +- Fix the unregistration of Capability based MusicCast Entities ([@micha91] - [#63665]) ([yamaha_musiccast docs]) +- Use Platform enum [mysensors] ([@cdce8p] - [#63687]) ([mysensors docs]) +- Add button and deprecate service for Fritz cleanup ([@chemelli74] - [#63692]) ([fritz docs]) +- Fritz: small optimization ([@chemelli74] - [#63693]) ([fritz docs]) +- Replace custom Tuya device classes with StrEnum ([@frenck] - [#63681]) ([tuya docs]) +- Add UniFi Protect camera motion sensors and ThumbnailProxyView ([@AngellusMortis] - [#63696]) ([unifiprotect docs]) +- Use MediaPlayerDeviceClass for UniFi Protect media_player ([@AngellusMortis] - [#63708]) ([unifiprotect docs]) +- Remove package constraint to websockets ([@thecode] - [#63703]) +- Fix ParamSpec Callable return types ([@cdce8p] - [#63701]) ([tplink docs]) ([dlna_dmr docs]) ([vlc_telnet docs]) ([zwave_js docs]) ([evil_genius_labs docs]) +- Explicitely allow Platform enum in discovery helper ([@epenet] - [#63571]) ([amcrest docs]) +- Explicitely allow Platform enum in config_entries ([@epenet] - [#63581]) +- Add binary_sensor platform to SenseME ([@bdraco] - [#63660]) ([senseme docs]) (new-platform) +- Use Platform enum ([@cdce8p] - [#63577]) +- Eliminate redundant code in greeneye_monitor ([@jkeljo] - [#63661]) ([greeneye_monitor docs]) +- Improve multi-device test coverage for greeneye_monitor ([@jkeljo] - [#63657]) ([greeneye_monitor docs]) +- Tibber cost statistics ([@Danielhiversen] - [#63626]) ([tibber docs]) +- Use SensorEntityDescription in Mazda integration ([@bdr99] - [#63423]) ([mazda docs]) +- Additional SenseME cleanups ([@bdraco] - [#63748]) ([senseme docs]) +- Add discovery support to steamist ([@bdraco] - [#63707]) ([steamist docs]) +- Bump pyskyqhub to 0.1.4 ([@RogerSelwyn] - [#63734]) +- Fix climate channel for Shelly ([@chemelli74] - [#63756]) ([shelly docs]) +- Enable strict typing in browser ([@epenet] - [#63760]) ([browser docs]) +- Add switch platform to SenseME ([@bdraco] - [#63719]) ([senseme docs]) (new-platform) +- Refactor EntityDescriptions for UniFi Protect ([@AngellusMortis] - [#63716]) ([unifiprotect docs]) +- Raise if trying to store mocks in storage ([@balloob] - [#63622]) +- Add DeviceInfo to steamist ([@bdraco] - [#63773]) ([steamist docs]) +- Add setup type hints to emby ([@epenet] - [#63784]) ([emby docs]) +- Add setup type hints to aws ([@epenet] - [#63781]) ([aws docs]) +- Adjust migrate_entry in axis ([@epenet] - [#63779]) ([axis docs]) +- Add setup type hints to avion ([@epenet] - [#63778]) ([avion docs]) +- Cleanups for SenseME switch platform ([@bdraco] - [#63774]) ([senseme docs]) +- Bump py synologydsm api to 1.0.5 ([@chpego] - [#63786]) ([synology_dsm docs]) +- Add setup type hints to gpmdp ([@epenet] - [#63787]) ([gpmdp docs]) +- Update MQTT light schema template ([@orcema] - [#62759]) ([mqtt docs]) +- Use Platform enum in load_platform [a-l] ([@epenet] - [#63750]) +- Add setup type hints to hdmi_cec ([@epenet] - [#63788]) ([hdmi_cec docs]) +- Use Platform enum in load_platform [m-z] ([@epenet] - [#63751]) +- Adjust custom data location in hdmi_cec ([@epenet] - [#63791]) ([hdmi_cec docs]) +- Fix incorrect type hint in discovery helper ([@epenet] - [#63789]) ([life360 docs]) +- Enable strict typing for `core.py` ([@cdce8p] - [#63244]) +- Add is_number as a test for use in select, selectattr, reject, and re… ([@Petro31] - [#63732]) +- Add DSMR config options for EasyMeter/Q3D ([@Aeroid] - [#63669]) ([dsmr docs]) +- Drop use of discovery_info in aquostv ([@epenet] - [#63777]) ([aquostv docs]) +- Address late Shelly review ([@chemelli74] - [#63754]) ([shelly docs]) +- Allow self signed certs on octoprint server ([@rfleming71] - [#59213]) ([octoprint docs]) +- Enable Google Assistant state reporting by default ([@emontnemery] - [#63801]) ([cloud docs]) +- Support 4 channels switch ([@sagioto] - [#63724]) ([tuya docs]) +- Update PyTurboJPEG to 1.6.5 ([@frenck] - [#63803]) ([camera docs]) ([stream docs]) +- Add setup type hints to mikrotik ([@epenet] - [#63797]) ([mikrotik docs]) +- Use local constant in netgear_lte config schema ([@epenet] - [#63753]) ([netgear_lte docs]) +- Update sentry-sdk to 1.5.2 ([@frenck] - [#63821]) ([sentry docs]) +- Add setup type hints to workday ([@epenet] - [#63810]) ([workday docs]) +- Add setup type hints to nx584 ([@epenet] - [#63796]) ([nx584 docs]) +- Add strict typing to abode ([@tkdrob] - [#57673]) ([abode docs]) +- Fix the translation strings for Tuya Select ([@dougiteixeira] - [#63353]) ([tuya docs]) +- Add `audio_delay` number entity to Sonos ([@jjlawren] - [#63566]) ([sonos docs]) +- Add setup type hints to supervisord ([@epenet] - [#63807]) ([supervisord docs]) +- Add type hints to async_setup_scanner ([@epenet] - [#63826]) ([volvooncall docs]) ([icloud docs]) ([ping docs]) ([traccar docs]) ([meraki docs]) ([mqtt_json docs]) +- Fix implicit reexport [dt_util] ([@cdce8p] - [#63829]) ([device_tracker docs]) +- Add setup type hints to season ([@epenet] - [#63798]) ([season docs]) +- Add setup type hints to yamaha ([@epenet] - [#63811]) ([yamaha docs]) +- Bump devolo-plc-api to 0.7.1 ([@Shutgun] - [#63834]) ([devolo_home_network docs]) +- Allow None agent in conversation ([@epenet] - [#63761]) ([conversation docs]) ([almond docs]) +- Resolve implicit imports ([@cdce8p] - [#63832]) +- Expose power & energy usage of VeSync outlets as separate sensors ([@decompil3d] - [#61837]) ([vesync docs]) (breaking-change) (new-platform) +- Remove unneeded boolean conversion from senseme ([@frenck] - [#63783]) ([senseme docs]) +- Remove ee brightbox integration ([@epenet] - [#63839]) (breaking-change) +- Add UniFi Protect global services ([@AngellusMortis] - [#63768]) ([unifiprotect docs]) +- Fix incorrect type hint in async_setup_scanner ([@epenet] - [#63833]) ([volvooncall docs]) ([icloud docs]) ([ping docs]) ([traccar docs]) ([meraki docs]) ([mqtt_json docs]) +- Add xiaomi_miio vacuum current cleaning cycle statistics sensor ([@OGKevin] - [#61098]) ([xiaomi_miio docs]) +- Remove deprecated async_get_scanner from netgear ([@epenet] - [#63862]) ([netgear docs]) (breaking-change) +- Fix invalid get_scanner return value in unify_direct ([@epenet] - [#63855]) ([unifi_direct docs]) +- Add type hint to get_scanner in ubus ([@epenet] - [#63856]) ([ubus docs]) +- Add type hints to get_scanner/async_get_scanner ([@epenet] - [#63836]) +- Add HomeWizard Energy integration ([@DCSBL] - [#55812]) ([homewizard_energy docs]) (new-integration) +- Add a stream_id parameter to the WebRTC provider ([@allenporter] - [#63625]) ([camera docs]) ([rtsp_to_webrtc docs]) +- Upgrade hangups to 0.4.17 ([@cdce8p] - [#63871]) ([hangouts docs]) +- Cleanup netgear platform schema ([@epenet] - [#63873]) ([netgear docs]) +- Deprecate iCloud YAML configuration ([@epenet] - [#63875]) ([icloud docs]) (breaking-change) +- Remove deprecated async_get_scanner from nmap_tracker ([@epenet] - [#63863]) ([nmap_tracker docs]) (breaking-change) +- Remove deprecated async_get_scanner from keenetic_ndms2 ([@epenet] - [#63860]) ([keenetic_ndms2 docs]) (breaking-change) +- Remove deprecated async_get_scanner from fritz ([@epenet] - [#63857]) ([fritz docs]) (breaking-change) +- Fix MusicCast select current_option ([@micha91] - [#63668]) ([yamaha_musiccast docs]) +- Remove last_reset from vesync sensor ([@emontnemery] - [#63877]) ([vesync docs]) +- Remove last_reset from vicare sensor ([@emontnemery] - [#63879]) ([vicare docs]) +- Generate supported python versions based on current and next required ([@scop] - [#62618]) +- Fix implicit reexport [helpers.condition] ([@cdce8p] - [#63830]) ([binary_sensor docs]) ([sensor docs]) ([device_automation docs]) +- Add myself as codeowner for LaMetric ([@frenck] - [#63887]) ([lametric docs]) +- Drop Python 3.8 support ([@frenck] - [#63883]) (breaking-change) +- Update wheels builder to 2022.01.0 ([@frenck] - [#63882]) +- Update pyupgrade to v2.31.0 ([@frenck] - [#63888]) +- Add setup type hints to envisalink ([@epenet] - [#63785]) ([envisalink docs]) +- Update Python version used for pylint ([@cdce8p] - [#63895]) ([lupusec docs]) ([azure_event_hub docs]) ([homewizard docs]) +- Drop last_reset attribute for non 'total' sensors ([@emontnemery] - [#63880]) ([sensor docs]) (breaking-change) +- Drop legacy support for sensor sum statistics ([@emontnemery] - [#63884]) ([sensor docs]) +- Update Pillow to 9.0.0 ([@frenck] - [#63894]) +- Fix waqi config parsing ([@epenet] - [#63897]) ([waqi docs]) +- Avoid locking the database for non-SQLite backends ([@agners] - [#63847]) ([recorder docs]) +- Update pyhomematic to 0.1.77 ([@danielperna84] - [#63848]) ([homematic docs]) +- Improve code quality alarm_control_panel in yale_smart_alarm ([@gjohansson-ST] - [#63672]) ([yale_smart_alarm docs]) +- Import persistent notification (part 4) ([@emontnemery] - [#63901]) +- Fix MQTT climate optimistic preset modes ([@jbouwh] - [#63463]) ([mqtt docs]) (breaking-change) +- Always send hvac_mode deprecate send_if_off ([@jbouwh] - [#63814]) ([mqtt docs]) (breaking-change) +- Import persistent notification part 1 ([@emontnemery] - [#63898]) ([websocket_api docs]) +- Bump google-cloud-pubsub to 2.9.0 (attempt #3) ([@allenporter] - [#63911]) ([google_pubsub docs]) +- Import websocket_api (part 2) ([@emontnemery] - [#63906]) ([history docs]) ([config docs]) ([conversation docs]) ([frontend docs]) ([lovelace docs]) ([html5 docs]) ([device_automation docs]) +- Import websocket_api (part 3) ([@emontnemery] - [#63907]) +- Fix incorrect type hint in config_per_platform helper ([@epenet] - [#63890]) ([device_tracker docs]) ([notify docs]) ([mailbox docs]) +- Add type hints to setup_scanner ([@epenet] - [#63825]) ([demo docs]) ([google_maps docs]) ([life360 docs]) ([aprs docs]) ([fleetgo docs]) +- Move list to dict in versasense discovery ([@epenet] - [#63809]) ([versasense docs]) +- Replace hass.helpers: async_get_clientsession() ([@frenck] - [#63910]) +- Warn on`time.sleep` in event loop ([@farmio] - [#63766]) (breaking-change) +- Cleanup variable names in versasense ([@epenet] - [#63914]) ([versasense docs]) +- Import websocket_api (part 1) ([@emontnemery] - [#63905]) ([camera docs]) ([config docs]) ([cloud docs]) ([auth docs]) +- Import persistent notification (part 3) ([@emontnemery] - [#63900]) +- Fix missing full test suite in CI some cases ([@frenck] - [#63912]) +- Implement lock to yale_smart_alarm ([@gjohansson-ST] - [#63643]) ([yale_smart_alarm docs]) (new-platform) +- Update typing (2) [a-i] ([@cdce8p] - [#63923]) +- Update typing (1) ([@cdce8p] - [#63922]) +- Update typing (4) [u-z] ([@cdce8p] - [#63925]) +- Update typing (3) [k-t] ([@cdce8p] - [#63924]) +- Update typing (5) [tests] ([@cdce8p] - [#63926]) +- Use --py39-plus setting [pyupgrade] ([@cdce8p] - [#63927]) +- Add already_configured coverage to oncue ([@bdraco] - [#63919]) ([oncue docs]) +- Replace hass.helpers: async_call_later() ([@frenck] - [#63929]) ([konnected docs]) ([evohome docs]) ([squeezebox docs]) ([sentry docs]) +- Move `disallow-any-generics` to mypy.ini ([@cdce8p] - [#63917]) +- Simplify UniFi Protect service setup/cleanup ([@AngellusMortis] - [#63908]) ([unifiprotect docs]) +- Removes ThumbnailProxyView ([@AngellusMortis] - [#63940]) ([unifiprotect docs]) (breaking-change) +- Fritz: introduce wrapper.py - part 1 (sensor) ([@chemelli74] - [#63682]) ([fritz docs]) +- Improve nest media player clip/image and event handling for multiple events in a short time range ([@allenporter] - [#63149]) ([nest docs]) +- Update typing - collections.abc (1) ([@cdce8p] - [#63933]) +- Update typing - collections.abc (3) ([@cdce8p] - [#63947]) +- Reduce roku poll rate by 5s ([@ctalkington] - [#63952]) ([roku docs]) +- Update rokuecp to 0.10.0 ([@ctalkington] - [#63951]) ([roku docs]) +- Add setup type hints (part 1) ([@epenet] - [#63955]) +- Update typing - collections.abc (2) ([@cdce8p] - [#63934]) +- Add setup type hints (part 2) ([@epenet] - [#63960]) ([group docs]) ([demo docs]) +- Add setup type hints in bluetooth_le_tracker ([@epenet] - [#63828]) ([bluetooth_le_tracker docs]) +- Add setup type hints (part 3) ([@epenet] - [#63961]) ([netgear_lte docs]) ([opentherm_gw docs]) ([hyperion docs]) ([vesync docs]) +- Remove dead code in Environment Canada integration ([@gwww] - [#63946]) ([environment_canada docs]) +- Add strict typing to LaMetric ([@frenck] - [#63891]) ([lametric docs]) +- Add setup type hints to mailbox ([@epenet] - [#63792]) ([mailbox docs]) +- CI: Print python version ([@cdce8p] - [#63968]) +- Enable `deprecated-typing-alias` check [pylint] ([@cdce8p] - [#63935]) +- Improve typing [helpers.entity_registry] ([@cdce8p] - [#63767]) +- Bump brunt to 1.1.1 ([@eavanvalkenburg] - [#63973]) ([brunt docs]) +- Add setup type hints to mailboxes ([@epenet] - [#63975]) ([asterisk_mbox docs]) ([asterisk_cdr docs]) +- Fix typo in tuya select strings ([@milanmeu] - [#63974]) +- Fix discord component using userid as target ([@kezziny] - [#63972]) ([discord docs]) +- Use EntityDescription in launch_library ([@DurgNomis-drol] - [#63685]) ([launch_library docs]) +- Use Platform enum in load_platform [tests] ([@epenet] - [#63904]) ([numato docs]) +- Move DPI Group logic to UniFi switch platform ([@Kane610] - [#58761]) ([unifi docs]) +- Expose WLED configuration URL of discovered device ([@frenck] - [#63983]) ([wled docs]) +- Revert "Weather units: climacell (1.3/4) (#61472)" ([@frenck] - [#63842]) ([climacell docs]) +- Revert "Weather units: Buienradar (1.2/4) (#61470)" ([@frenck] - [#63843]) ([buienradar docs]) +- Update shodan to 1.26.0 ([@frenck] - [#63827]) ([shodan docs]) +- Bump pyunifiprotect version to 1.6.1 for UniFi Protect ([@AngellusMortis] - [#63989]) ([unifiprotect docs]) +- Add Chime Type select for UniFi Protect ([@AngellusMortis] - [#63993]) ([unifiprotect docs]) +- Enable package camera by default for UniFi Protect ([@AngellusMortis] - [#63985]) ([unifiprotect docs]) +- Fix HomeKit reporting/setting colors when white values are present ([@bdraco] - [#63948]) ([homekit docs]) +- Add support for changing the white strip type to flux_led ([@bdraco] - [#63943]) ([flux_led docs]) +- Add light platform to SenseME ([@bdraco] - [#63772]) ([senseme docs]) (new-platform) +- Fix reconnect rather than reauth when both HA and UniFi controller restarts at the same time ([@Kane610] - [#63994]) ([unifi docs]) +- Remove unused pillow 8.2.0 constraint ([@cdce8p] - [#64011]) +- Address late review of VeSync ([@decompil3d] - [#63945]) ([vesync docs]) +- Upgrade async_timeout to 4.0.2 ([@cdce8p] - [#64008]) +- Upgrade yarl to 1.7.2 ([@cdce8p] - [#64009]) +- Simplify coordinator and import OverkizStateType ([@iMicknl] - [#63969]) ([overkiz docs]) +- Add setup type hints to proximity ([@epenet] - [#63990]) ([proximity docs]) +- Set event data as dict in foursquare.checkin event ([@epenet] - [#63982]) ([foursquare docs]) (breaking-change) +- Fix invalid type hint in discovery async_listen ([@epenet] - [#63987]) ([sabnzbd docs]) +- Ensure flux_led is reloaded when the ICtype is changed ([@bdraco] - [#64016]) ([flux_led docs]) +- Add content deeplinking support to roku ([@ctalkington] - [#64010]) ([roku docs]) +- Bump flux_led to 0.28.2 to fix older A3 not being able to setup ([@bdraco] - [#64017]) ([flux_led docs]) +- Improve UniFi Protect Smart Sensor support ([@AngellusMortis] - [#64019]) ([unifiprotect docs]) +- Add setup type hints to rfxtrx ([@epenet] - [#63963]) ([rfxtrx docs]) +- Fix UniFi remove client service if time stamps are not integers ([@Kane610] - [#63998]) ([unifi docs]) +- Import persistent notification (part 2) ([@emontnemery] - [#63899]) +- Import persistent notification (part 5) ([@emontnemery] - [#63902]) +- Implement binary_sensor in yale_smart_alarm ([@gjohansson-ST] - [#63937]) ([yale_smart_alarm docs]) (new-platform) +- Add type hints to media_player (part 1) ([@epenet] - [#64005]) ([media_player docs]) +- Add type hints to media_player (part 2) ([@epenet] - [#64006]) ([sonos docs]) ([plex docs]) ([kodi docs]) ([philips_js docs]) ([squeezebox docs]) +- Use Platform enum in load_platform ([@epenet] - [#63903]) +- Remove constant DEFAULT_CONFIG from alexa tests ([@emontnemery] - [#64031]) ([alexa docs]) +- Update elgato to 3.0.0 ([@frenck] - [#64033]) ([elgato docs]) +- Add setup type hints to group ([@epenet] - [#64002]) ([group docs]) +- Elgato refactoring; add base entity ([@frenck] - [#64034]) ([elgato docs]) +- Remove unused serial number config entry data from Elgato ([@frenck] - [#64035]) ([elgato docs]) +- Simplify Overkiz coordinator (step 2) and address feedback ([@iMicknl] - [#64028]) ([overkiz docs]) +- Upgrade oauth2client to 4.1.3 ([@cdce8p] - [#64044]) ([google docs]) +- Add typing to async_get_handler in demo ([@epenet] - [#64029]) ([demo docs]) +- Update wled to 0.11.0 ([@frenck] - [#64048]) ([wled docs]) +- Add setup type hints to script ([@epenet] - [#64030]) ([script docs]) +- Adjust mailbox type hints ([@epenet] - [#64051]) ([asterisk_mbox docs]) ([asterisk_cdr docs]) +- Fix yamaha discovery ([@epenet] - [#64056]) ([yamaha docs]) +- Pin libcst==0.3.23 ([@frenck] - [#64036]) +- Update featured integrations screenshot in README ([@Hedda] - [#64046]) +- Allow name-only location updates for mobile_app device_tracker ([@zacwest] - [#62243]) ([mobile_app docs]) +- Remove warnings from compensation ([@Petro31] - [#63691]) ([compensation docs]) +- Add support for setting RGB and RGBW values for Twinkly lights ([@RobBie1221] - [#62337]) ([twinkly docs]) +- Keep track of Alexa authorization status ([@emontnemery] - [#63979]) ([alexa docs]) ([cloud docs]) +- Remove Windows workarounds ([@emontnemery] - [#64068]) +- Remove Windows workarounds from wake_on_lan ([@emontnemery] - [#64070]) ([wake_on_lan docs]) +- Remove Windows workarounds from ping ([@emontnemery] - [#64069]) ([ping docs]) +- Remove attributes from vizio state when they don't make sense ([@raman325] - [#64025]) ([vizio docs]) (breaking-change) +- Adjust device_tracker type hints ([@epenet] - [#64054]) ([tomato docs]) ([arris_tg2492lg docs]) +- Don't close HA aiohttp session in Overkiz Config Flow ([@iMicknl] - [#64052]) ([overkiz docs]) +- Run pre-commit script on constraint changes ([@cdce8p] - [#64073]) +- Add gjohansson-ST as codeowner to trafikverket_train ([@gjohansson-ST] - [#64081]) ([trafikverket_train docs]) +- Upgrade vallox-websocket-api to 2.9.0 ([@cdce8p] - [#64055]) ([vallox docs]) +- Enable strict typing for trafikverket_weatherstation ([@gjohansson-ST] - [#64080]) +- Upgrade pyserial-asyncio to 0.6 ([@cdce8p] - [#64041]) ([zha docs]) ([serial docs]) +- Update to goodwe library v0.2.15 ([@mletenay] - [#64089]) ([goodwe docs]) +- Add select entity to Overkiz integration ([@iMicknl] - [#62916]) ([overkiz docs]) +- Fix pre-commit gen_requirements_all files regex ([@cdce8p] - [#64095]) +- Use Platform enum in scaffold templates ([@ludeeus] - [#64091]) +- Address late review of Minor AndroidTV config flow ([@ollo69] - [#64088]) ([androidtv docs]) +- Bump pytradfri to 8.0.1 and fix fan preset mode "Auto" bug ([@ggravlingen] - [#63920]) ([tradfri docs]) +- Add select platform to senseme ([@bdraco] - [#64086]) ([senseme docs]) +- Explicitly allow Mapping type hint in config entry async_update_entry ([@epenet] - [#63986]) ([ps4 docs]) +- Add light platform to LOOKin ([@ANMalko] - [#64076]) ([lookin docs]) (new-platform) +- Add thumbnails to nest media player ([@allenporter] - [#62532]) ([nest docs]) +- Pin python-engineio and python-socketio ([@cdce8p] - [#64074]) +- Ezviz dependancy to 0.2.0.6 ([@RenierM26] - [#64100]) ([ezviz docs]) +- Bump google-nest-sdm to 1.4.0 ([@allenporter] - [#64098]) ([nest docs]) +- Import frontend ([@epenet] - [#64104]) +- Move list to dict in repetier discovery ([@epenet] - [#64001]) ([repetier docs]) +- Move list to dict in supla discovery ([@epenet] - [#63805]) ([supla docs]) +- Rename cloud's AlexaConfig to CloudAlexaConfig ([@emontnemery] - [#64065]) ([cloud docs]) +- Bump aiogithubapi to 22.1.0 ([@ludeeus] - [#64109]) ([github docs]) +- Import webhook ([@epenet] - [#64102]) +- Add type hints to tts ([@epenet] - [#64050]) ([tts docs]) +- Add DeviceInfo to trafikverket_weatherstation ([@gjohansson-ST] - [#64083]) ([trafikverket_weatherstation docs]) +- Cleanup ADS constants and add type hints ([@epenet] - [#63390]) ([ads docs]) +- Import webhook in netatmo ([@epenet] - [#64105]) ([netatmo docs]) +- Deprecate Raspihats (ADR-0019) ([@epenet] - [#64113]) ([raspihats docs]) (breaking-change) +- Bump aprslib to 0.7.0 ([@thecode] - [#64093]) ([aprs docs]) +- Import onboarding ([@epenet] - [#64115]) ([frontend docs]) ([auth docs]) ([onboarding docs]) +- Import cloud ([@epenet] - [#64116]) +- Add setup type hints to raspihats ([@epenet] - [#63988]) ([raspihats docs]) +- Upgrade enturclient to 0.2.3 ([@cdce8p] - [#64121]) ([entur_public_transport docs]) +- Upgrade boto3 to 1.20.24 + aiobotocore to 2.1.0 ([@cdce8p] - [#64045]) ([route53 docs]) ([amazon_polly docs]) ([aws docs]) +- Modernize Elgato tests ([@frenck] - [#64060]) ([elgato docs]) +- Allow browsing favorites in Sonos media browser ([@balloob] - [#64082]) ([sonos docs]) +- Fix initial HomeWizard integration issues ([@DCSBL] - [#63921]) ([homewizard docs]) +- Implement DeviceInfo in smhi ([@gjohansson-ST] - [#64126]) ([smhi docs]) +- Add test cases for Tradfri cover platform ([@ggravlingen] - [#64072]) ([tradfri docs]) +- add @mib1185 as codeowner ([@mib1185] - [#64134]) ([fritz docs]) +- Cleanups in Twinkly code ([@RobBie1221] - [#64139]) ([twinkly docs]) (breaking-change) +- Bump greeclimate to 1.0.2 ([@cmroche] - [#64138]) ([gree docs]) +- Add missing type annotation for launch library ([@DurgNomis-drol] - [#64131]) ([launch_library docs]) +- Add LG webOS Smart TV config flow support ([@thecode] - [#64117]) ([webostv docs]) (breaking-change) +- Guard for timeout errors during wled discovery ([@balloob] - [#64130]) ([wled docs]) +- Add energy and additional sensors to oncue ([@bdraco] - [#64097]) ([oncue docs]) +- Fix package camera snapshot ([@AngellusMortis] - [#64145]) ([unifiprotect docs]) +- Fix media_player power state ([@ANMalko] - [#64136]) ([lookin docs]) +- Code cleanups for lookin ([@bdraco] - [#64106]) ([lookin docs]) +- Add play media URL support to roku ([@ctalkington] - [#64021]) ([roku docs]) +- Use dataclass properties in webostv discovery ([@thecode] - [#64159]) ([webostv docs]) +- Use hass.async_create_task rather than hass.loop.create_task in deconz ([@Kane610] - [#64158]) ([unifi docs]) +- Add test cases for Tradfri fan platform ([@ggravlingen] - [#64135]) ([tradfri docs]) +- Add test cases for Tradfri switch platform ([@ggravlingen] - [#64156]) ([tradfri docs]) +- Add test cases for Tradfri sensor platform ([@ggravlingen] - [#64165]) ([tradfri docs]) +- Fix changed port on Netgear R7000 ([@starkillerOG] - [#64012]) ([netgear docs]) +- Add HomeConnect Refrigerator ([@BraveChicken1] - [#63850]) ([home_connect docs]) +- Set unique id for config entry in smhi ([@gjohansson-ST] - [#63547]) ([smhi docs]) +- Change doorbird relay/IR switch to button ([@flacjacket] - [#63995]) ([doorbird docs]) (breaking-change) +- Add electric vehicle sensors to Mazda integration ([@bdr99] - [#64099]) ([mazda docs]) +- Add TimeCold and TimeWarm programs to HomeConnect dryer ([@Sdahl1234] - [#63330]) ([home_connect docs]) +- Bump google-nest-sdm to 1.5.0 and add nest mp4 clip transcoding to animated gif ([@allenporter] - [#64155]) ([nest docs]) +- Change carbon monoxide device class to CO for deCONZ integration ([@Kane610] - [#64185]) ([deconz docs]) +- Drop aemet isoformat() from timestamps ([@Noltari] - [#62793]) ([aemet docs]) +- Remove myself from CODEOWNERS ([@Noltari] - [#64188]) ([tado docs]) ([ubus docs]) ([aemet docs]) +- Remove unneeded update_before_add from nexia ([@bdraco] - [#64187]) ([nexia docs]) +- Upgrade miflora to 0.7.2 ([@cdce8p] - [#64179]) ([miflora docs]) +- Fix misuse of cast for Shelly Valve ([@chemelli74] - [#64181]) ([shelly docs]) +- Run pre-commit `hassfest` on changes to script files ([@cdce8p] - [#64195]) +- Update iot_class ([@gerard33] - [#64202]) ([dsmr_reader docs]) +- Update nexia climate platform to use newer standards ([@bdraco] - [#64186]) ([nexia docs]) +- Refactor homekit_controller tests to reduce duplication. ([@Jc2k] - [#64198]) +- Move list to dict in iperf3 discovery ([@epenet] - [#64204]) +- Add switch platform to nexia ([@bdraco] - [#64205]) ([nexia docs]) +- Enable strict typing in webostv ([@thecode] - [#64193]) +- Register MAC connection for Elgato devices ([@frenck] - [#64201]) ([elgato docs]) +- Check discovery_info is available and add setup type hints ([@epenet] - [#63782]) ([ebusd docs]) +- Fix core restart due to change in relative imports ([@thecode] - [#64209]) +- Fix bug when starting a RainMachine zone via service call ([@bachya] - [#64213]) ([rainmachine docs]) +- Fix duplicate code in nexia climate platform ([@bdraco] - [#64220]) ([nexia docs]) +- Cleanup code config flow smhi ([@gjohansson-ST] - [#64197]) ([smhi docs]) +- Fix bug with too-long pause durations for RainMachine ([@bachya] - [#64218]) ([rainmachine docs]) +- Add sensor platform to roku ([@ctalkington] - [#64214]) ([roku docs]) (new-platform) +- Fix humidifier state error in HomeKit ([@qqaatw] - [#61432]) ([homekit docs]) +- Defer to camera implementation for non-WebRTC cameras ([@allenporter] - [#63182]) ([nest docs]) +- Bump Glances to 0.3.4 to fix async_timeout passing loop ([@GuyKh] - [#62090]) ([glances docs]) +- Fix tests and add setup type in feedreader ([@epenet] - [#64280]) ([feedreader docs]) +- Fix raspihats callbacks ([@epenet] - [#64122]) ([raspihats docs]) +- WeMo state changes are seen by all coordinator entities ([@esev] - [#64228]) ([wemo docs]) +- Implement entity_descriptions in SIA ([@eavanvalkenburg] - [#63130]) ([sia docs]) +- Add Shelly Gen2 polling for sesnors missing push updates ([@thecode] - [#64171]) ([shelly docs]) +- spelling: components/fritz ([@jsoref] - [#64259]) ([fritz docs]) +- spelling: components/denonavr ([@jsoref] - [#64244]) ([denonavr docs]) +- spelling: components/bond ([@jsoref] - [#64272]) +- spelling: components/fronius ([@jsoref] - [#64274]) ([fronius docs]) +- CI: Add job for `pip check` ([@cdce8p] - [#64058]) +- Bump pyaftership to 21.11.0 ([@ludeeus] - [#64294]) ([aftership docs]) +- Fix comments, improve readability in Cloud ([@emontnemery] - [#64291]) ([cloud docs]) ([google_assistant docs]) +- Fix comments in Alexa ([@emontnemery] - [#64289]) ([alexa docs]) ([cloud docs]) +- Move list to dict in utility-meter discovery ([@epenet] - [#63808]) ([utility_meter docs]) +- Use assignment expression for unload_ok in scaffold templates ([@ludeeus] - [#64286]) +- Bump async-upnp-client to 0.23.4 ([@chishm] - [#64287]) ([upnp docs]) ([yeelight docs]) ([dlna_dmr docs]) ([ssdp docs]) +- spelling: components/elkm1 ([@jsoref] - [#64252]) ([elkm1 docs]) +- Bump pyunifiprotect version to 3.1.1 for UniFi Protect ([@AngellusMortis] - [#64297]) ([unifiprotect docs]) +- spelling: components/azure_event_hub ([@jsoref] - [#64229]) ([azure_event_hub docs]) +- spelling: components/blueprint ([@jsoref] - [#64271]) ([blueprint docs]) +- spelling: components/eafm ([@jsoref] - [#64257]) ([eafm docs]) +- spelling: components/gdacs ([@jsoref] - [#64275]) ([gdacs docs]) +- spelling: components/brother ([@jsoref] - [#64273]) ([brother docs]) +- spelling: components/forecast_solar ([@jsoref] - [#64261]) ([forecast_solar docs]) +- spelling: components/flick_electric ([@jsoref] - [#64262]) ([flick_electric docs]) +- spelling: components/geonetnz_quakes ([@jsoref] - [#64276]) +- spelling: components/demo ([@jsoref] - [#64245]) ([demo docs]) +- spelling: components/accuweather ([@jsoref] - [#64264]) ([accuweather docs]) +- spelling: components/ecovacs ([@jsoref] - [#64253]) ([ecovacs docs]) +- spelling: components/freedompro ([@jsoref] - [#64260]) ([freedompro docs]) +- spelling: components/gogogate2 ([@jsoref] - [#64278]) ([gogogate2 docs]) +- spelling: components/devolo_home_network ([@jsoref] - [#64243]) ([devolo_home_network docs]) +- spelling: components/balboa ([@jsoref] - [#64270]) ([balboa docs]) +- spelling: components/apns ([@jsoref] - [#64269]) ([apns docs]) +- spelling: components/airvisual ([@jsoref] - [#64265]) ([airvisual docs]) +- spelling: components/androidtv ([@jsoref] - [#64267]) +- spelling: components/ecobee ([@jsoref] - [#64255]) ([ecobee docs]) +- spelling: components/emonitor ([@jsoref] - [#64251]) ([emonitor docs]) +- spelling: components/eufy ([@jsoref] - [#64248]) ([eufy docs]) +- spelling: components/fritzbox ([@jsoref] - [#64258]) ([fritzbox docs]) +- spelling: components/climacell ([@jsoref] - [#64240]) ([climacell docs]) +- spelling: components/ambiclimate ([@jsoref] - [#64227]) ([ambiclimate docs]) +- spelling: components/asuswrt ([@jsoref] - [#64233]) ([asuswrt docs]) +- spelling: components/buienradar ([@jsoref] - [#64235]) ([buienradar docs]) +- spelling: components/bmw_connected_drive ([@jsoref] - [#64236]) ([bmw_connected_drive docs]) +- spelling: components/coolmaster ([@jsoref] - [#64237]) ([coolmaster docs]) +- spelling: components/apple_tv ([@jsoref] - [#64234]) ([apple_tv docs]) +- spelling: components/awair ([@jsoref] - [#64230]) ([awair docs]) +- spelling: components/aurora_abb_powerone ([@jsoref] - [#64231]) +- spelling: components/august ([@jsoref] - [#64232]) ([august docs]) +- spelling: components/conversation ([@jsoref] - [#64238]) ([conversation docs]) +- spelling: components/camera ([@jsoref] - [#64242]) ([camera docs]) +- Change value of device_automation constant ([@emontnemery] - [#64296]) +- Add changed states device trigger to media_player entity ([@emontnemery] - [#64304]) ([media_player docs]) +- spelling: components/analytics ([@jsoref] - [#64268]) ([analytics docs]) +- Suppress Alexa state reports when not authorized ([@emontnemery] - [#64064]) ([alexa docs]) ([cloud docs]) +- Add webostv 100% tests cover for triggers ([@thecode] - [#64301]) ([webostv docs]) +- Fix webostv YAML migration failure if the entity is removed ([@thecode] - [#64290]) ([webostv docs]) +- Add switch entity to Overkiz integration ([@iMicknl] - [#64000]) +- Remove Windows workarounds from tests/utils/test_json.py ([@emontnemery] - [#64311]) +- Add Air Quality PPB sensor to deCONZ integration ([@Kane610] - [#64164]) ([deconz docs]) +- Code quality improvements smhi ([@gjohansson-ST] - [#64312]) ([smhi docs]) +- Add additional buttons to Overkiz integration ([@iMicknl] - [#64321]) ([overkiz docs]) +- Address late feedback to Overkiz (move to constants) ([@iMicknl] - [#64324]) ([overkiz docs]) +- Finish deduplicating homekit_controller enumeration tests ([@Jc2k] - [#64306]) ([homekit_controller docs]) +- Add new Binary Sensor description to Overkiz integration ([@iMicknl] - [#64322]) ([overkiz docs]) +- Refactor some sensors and add translations to Overkiz ([@iMicknl] - [#64108]) ([overkiz docs]) +- Cleans up various asserts/type ignores for UniFi Protect ([@AngellusMortis] - [#63824]) ([unifiprotect docs]) +- Add low battery binary sensor to deCONZ integration ([@Kane610] - [#64168]) ([deconz docs]) +- Remove tado from mypy ignored modules ([@epenet] - [#64333]) ([tado docs]) +- spelling: components/airly ([@jsoref] - [#64266]) ([airly docs]) +- Exception handling config flow yale_smart_alarm ([@gjohansson-ST] - [#63623]) ([yale_smart_alarm docs]) +- Add diagnostics integration ([@balloob] - [#64330]) ([default_config docs]) ([diagnostics docs]) (new-integration) +- Add zwave_js support for diagnostics ([@raman325] - [#64336]) ([zwave_js docs]) +- Import tts ([@epenet] - [#64212]) ([tts docs]) ([cast docs]) +- Clean last usages of old config flow handlers decorator ([@frenck] - [#64329]) ([homematicip_cloud docs]) ([hangouts docs]) ([almond docs]) +- Bump google-nest-sdm 1.5.1 ([@allenporter] - [#64334]) ([nest docs]) +- Cleanup nest auth registration, moving out of __init__.py ([@allenporter] - [#63350]) ([nest docs]) +- Enable Alexa state reporting by default ([@emontnemery] - [#63802]) ([cloud docs]) +- Fix media player image url password logged ([@MartinHjelmare] - [#64293]) ([media_player docs]) +- Remove Windows workarounds from frontend ([@emontnemery] - [#64343]) ([frontend docs]) +- Fix webostv media next/previous services ([@thecode] - [#64355]) ([webostv docs]) +- Cleanup mypy ignored modules ([@epenet] - [#64341]) +- Remove integrations from mypy ignored modules ([@epenet] - [#64358]) ([doorbird docs]) ([foscam docs]) ([enphase_envoy docs]) ([fortios docs]) ([flo docs]) +- Remove --daemon and --pid-file option from __main__.py ([@emontnemery] - [#64345]) +- Remove --runner option from __main__.py ([@emontnemery] - [#64347]) +- Bump pypck to 0.7.13 ([@alengwenus] - [#64368]) ([lcn docs]) +- Import configurator ([@epenet] - [#64211]) +- Add discovery support to unifiprotect ([@bdraco] - [#64340]) ([unifiprotect docs]) +- Netgear try all ports ([@starkillerOG] - [#64170]) ([netgear docs]) +- Revamp github integration ([@ludeeus] - [#64190]) ([github docs]) (breaking-change) +- Add two new sensors to Launch Library ([@DurgNomis-drol] - [#64203]) ([launch_library docs]) (breaking-change) +- Add evil genius labs diagnostics ([@balloob] - [#64339]) ([evil_genius_labs docs]) +- Update xknx to 0.19.0 ([@farmio] - [#64379]) ([knx docs]) +- Add diagnostics support to Tuya ([@frenck] - [#64374]) ([tuya docs]) +- Fix unifi discovery, add Dream Machine SE ([@bdraco] - [#64377]) ([unifi docs]) +- Update pre-commit to 2.17.0 ([@frenck] - [#64378]) +- Add daily weather forecasts to Open-Meteo integration ([@frenck] - [#63677]) ([open_meteo docs]) +- Validate operating system is supported ([@emontnemery] - [#64352]) +- Add device registry cleanup to github ([@ludeeus] - [#64380]) ([github docs]) +- Add launch status sensor for launch_library ([@DurgNomis-drol] - [#64382]) ([launch_library docs]) +- Add entity options to entity registry ([@emontnemery] - [#64350]) +- Remove http dependency from system log ([@balloob] - [#64386]) ([system_log docs]) +- Automatically add entry title as name placeholder in reauth ([@frenck] - [#64078]) ([pvoutput docs]) +- Cleanup unifiprotect discovery name ([@bdraco] - [#64389]) ([unifiprotect docs]) +- Bump frontend to 20220118.0 ([@balloob] - [#64388]) ([frontend docs]) +- Bump unifi-discovery to 1.1.0 ([@bdraco] - [#64391]) ([unifiprotect docs]) +- Use unifi direct connect w/ssl verify for unifiprotect when possible ([@bdraco] - [#64395]) ([unifiprotect docs]) +- Fix situation where 'model' can be None (string) in Overkiz ([@iMicknl] - [#64320]) ([overkiz docs]) +- Convert some tests to async and drop usage get_test_home_assistant ([@balloob] - [#64394]) ([microsoft_face docs]) ([camera docs]) ([logbook docs]) ([aprs docs]) +- Add camera play stream support to roku ([@ctalkington] - [#64153]) ([roku docs]) +- Add HomeConnect Freezer ([@BraveChicken1] - [#63851]) ([home_connect docs]) +- Use async_create_task for microsoft_face tests ([@balloob] - [#64409]) ([microsoft_face docs]) +- Bump zwave-js-server-python to 0.34.0 ([@raman325] - [#64407]) ([zwave_js docs]) (breaking-change) +- Add setup type hints (platforms) ([@epenet] - [#64354]) ([zha docs]) ([philips_js docs]) ([denonavr docs]) ([arcam_fmj docs]) +- Unifi protect discovery cleanups ([@bdraco] - [#64413]) ([unifiprotect docs]) +- Remove integrations from mypy ignored modules (part 2) ([@epenet] - [#64367]) +- Use wemo enums in fan entity ([@esev] - [#64397]) ([wemo docs]) +- spelling: components/emulated_hue ([@jsoref] - [#64250]) ([emulated_hue docs]) +- Add launch mission sensor for launch_library ([@DurgNomis-drol] - [#64387]) ([launch_library docs]) +- Add diagnostic information for nest ([@allenporter] - [#64405]) ([nest docs]) +- Clean up Launch Library consts ([@ludeeus] - [#64420]) ([launch_library docs]) +- Make launch library lambdas single line ([@ludeeus] - [#64424]) ([launch_library docs]) +- Remove integrations from mypy ignored modules (part 3) ([@epenet] - [#64414]) ([kodi docs]) ([keenetic_ndms2 docs]) ([litejet docs]) ([kaiterra docs]) ([kulersky docs]) ([motion_blinds docs]) +- Add AQHI sensor for Environment Canada ([@gwww] - [#63644]) ([environment_canada docs]) +- Add diagnostics to the core files ([@epenet] - [#64417]) +- Address late Netgear review comments ([@starkillerOG] - [#64428]) ([netgear docs]) +- Add webostv 100% tests coverage for notify ([@thecode] - [#64412]) ([webostv docs]) +- Convert discovery tests to async ([@balloob] - [#64411]) +- Get rid of name collision in iaqualink tests ([@flz] - [#63642]) ([iaqualink docs]) +- Remove integrations from mypy ignored modules (part 4) ([@epenet] - [#64435]) ([onboarding docs]) ([ness_alarm docs]) ([nuki docs]) ([nws docs]) ([ovo_energy docs]) ([nightscout docs]) +- Add diagnostics to GitHub integration ([@ludeeus] - [#64385]) ([github docs]) +- Fix source ip detection in unifi-discovery ([@bdraco] - [#64419]) ([unifiprotect docs]) +- Add HVAC modes of climate entities to Prometheus exporter ([@rnurgaliyev] - [#62144]) ([prometheus docs]) +- Improved stream url and removed dependency on track numbers ([@Djowie] - [#64079]) ([jellyfin docs]) +- Allow to skip artist level in media hierarchy ([@j-stienstra] - [#64160]) ([jellyfin docs]) +- Move logger to constants ([@iMicknl] - [#64431]) ([overkiz docs]) +- fix: 17track package summary status is not updated when there are no more packages in that summary ([@regevbr] - [#64421]) ([seventeentrack docs]) +- Fix the Android TV volume mute service ([@JeffLIrion] - [#64403]) ([androidtv docs]) +- Bump Lightwave Version - Improved Error Handling ([@ColinRobbins] - [#64452]) ([lightwave docs]) +- Add setup type hints (init) ([@epenet] - [#64351]) +- Signal messenger attachments as bytes support ([@burnsie-la] - [#62311]) ([signal_messenger docs]) +- Catch exceptions when trying to enable Alexa ([@emontnemery] - [#64438]) ([cloud docs]) +- Prevent race when loading cloud config ([@emontnemery] - [#64437]) ([cloud docs]) +- Extract fibaro switch energy attributes into sensors ([@rappenze] - [#63697]) ([fibaro docs]) (breaking-change) +- spelling: components/cast ([@jsoref] - [#64241]) ([cast docs]) +- Clean up AirVisual tests ([@bachya] - [#64402]) ([airvisual docs]) +- Add `restrict_watering` and `unrestrict_watering` services to RainMachine ([@bachya] - [#64219]) ([rainmachine docs]) +- Update shodan to 1.26.1 ([@frenck] - [#64457]) ([shodan docs]) +- Adjust tests for removing github devices ([@ludeeus] - [#64448]) ([github docs]) +- Initial Tuya support for FSD based fans ([@candreacchio] - [#64283]) ([tuya docs]) (new-integration) +- Improve code quality trafikverket_train ([@gjohansson-ST] - [#62677]) ([trafikverket_train docs]) +- Remove ping from mypy ignored modules ([@epenet] - [#64439]) ([ping docs]) +- Add webostv YAML to config flow migration warning ([@thecode] - [#64450]) ([webostv docs]) +- spelling: components/abode ([@jsoref] - [#64263]) ([abode docs]) +- Add diagnostics to KNX ([@farmio] - [#64471]) ([knx docs]) +- Remove somfy from mypy ignore list ([@epenet] - [#64462]) ([somfy docs]) +- Make setup tests async ([@balloob] - [#64456]) +- Add libturbojpeg0 to dev-container ([@mib1185] - [#64466]) +- Add Volumio repeat support ([@m4rkireland] - [#64132]) +- Streamline `hass.data` storage for AirVisual ([@bachya] - [#64476]) ([airvisual docs]) +- Perform some more AirVisual test cleanup ([@bachya] - [#64470]) ([airvisual docs]) +- Address stateless switch feedback in Overkiz integration ([@iMicknl] - [#64430]) ([overkiz docs]) +- Add redacted constant in diagnostics ([@frenck] - [#64473]) ([tuya docs]) ([evil_genius_labs docs]) ([diagnostics docs]) +- Remove verisure from mypy ignore list ([@epenet] - [#64475]) ([verisure docs]) +- Add edl21 sensor state class and device class ([@StephanU] - [#56968]) ([edl21 docs]) +- Small cleanup of Shodan ([@frenck] - [#64467]) ([shodan docs]) +- Use callback for async_cleanup_device_registry ([@ludeeus] - [#64481]) ([github docs]) +- Add diagnostics for the AirVisual integration ([@bachya] - [#64479]) ([airvisual docs]) +- Remove unnecessary AirVisual attribute constants ([@bachya] - [#64483]) ([airvisual docs]) +- Add diagnostics to Overkiz integration ([@iMicknl] - [#64427]) ([overkiz docs]) +- Add diagnostics to Netatmo integration ([@cgtobi] - [#64392]) ([netatmo docs]) +- Clean up Ambient PWS tests ([@bachya] - [#64486]) ([ambient_station docs]) +- Fix attr spelling error in Nest SDM SensorBase ([@iMicknl] - [#64490]) ([nest docs]) +- Add diagnostics to Ambient PWS ([@bachya] - [#64489]) ([ambient_station docs]) ([airvisual docs]) +- Fix incorrect docstring in AirVisual test ([@bachya] - [#64496]) +- Add support for device diagnostics ([@raman325] - [#64344]) ([diagnostics docs]) +- Add explicit branching in AirVisual diagnostics ([@bachya] - [#64493]) ([airvisual docs]) +- Pass device entry to async_get_device_diagnostics instead of device_id ([@raman325] - [#64501]) ([diagnostics docs]) +- Drop slash from media source directories ([@balloob] - [#64499]) ([media_source docs]) +- Add support for checking if an entity is explicitly included in an entity filter ([@bdraco] - [#64463]) +- Remove vera from mypy ignore list ([@epenet] - [#64474]) ([vera docs]) +- Remove sma from mypy ignore list ([@epenet] - [#64510]) ([sma docs]) +- Add entity category support to HomeKit ([@bdraco] - [#64492]) ([homekit docs]) (breaking-change) +- Remove rachio from mypy ignore list ([@epenet] - [#64521]) ([rachio docs]) +- Remove screenlogic from mypy ignore list ([@epenet] - [#64512]) ([screenlogic docs]) +- Strip whitespace in nest cloud project id ([@allenporter] - [#64503]) ([nest docs]) +- Remove ruckus unleashed from mypy ignore list ([@epenet] - [#64513]) ([ruckus_unleashed docs]) +- Fix incorrect preset mode in senseme ([@bdraco] - [#64526]) ([senseme docs]) +- Remove search from mypy ignore list ([@epenet] - [#64507]) ([search docs]) +- Bump unifi-discovery to 1.1.2 to fix exception on missing mac ([@bdraco] - [#64527]) ([unifiprotect docs]) +- Bump aiosenseme to 0.6.1 to fix parser ([@bdraco] - [#64520]) ([senseme docs]) +- Expose UniFi controller configuration url from discovered entry ([@Kane610] - [#64514]) ([unifi docs]) +- Remove sense from mypy ignore list ([@epenet] - [#64508]) ([sense docs]) +- Remove point from mypy ignore list ([@epenet] - [#64524]) ([point docs]) +- Bump aioesphomeapi to 10.7.0 ([@jesserockz] - [#64495]) ([esphome docs]) +- Address late review in screenlogic ([@epenet] - [#64529]) ([screenlogic docs]) +- Fix rtsp-to-webrtc bug in calling client library ([@allenporter] - [#64502]) ([rtsp_to_webrtc docs]) +- Remove pioneer from mypy ignore list ([@epenet] - [#64515]) ([pioneer docs]) +- Remove sharkiq from mypy ignore list ([@epenet] - [#64509]) ([sharkiq docs]) +- Expose Axis device configuration url from discovered entry ([@Kane610] - [#64517]) ([axis docs]) +- Remove plum lightpad from mypy ignore list ([@epenet] - [#64523]) ([plum_lightpad docs]) +- Remove stt from mypy ignore list ([@epenet] - [#64468]) ([stt docs]) +- Remove system_log from mypy ignore list ([@epenet] - [#64469]) ([system_log docs]) +- Remove plaato from mypy ignore list ([@epenet] - [#64516]) ([plaato docs]) +- Add Intellifire Gas Fireplace integration ([@jeeftor] - [#63637]) ([intellifire docs]) (new-integration) +- Remove smartthings from mypy ignore list ([@epenet] - [#64511]) ([smartthings docs]) +- Abort rtsp_to_webrtc config flow on error during add-on discovery ([@allenporter] - [#64500]) ([rtsp_to_webrtc docs]) +- Remove plugwise from mypy ignore list ([@epenet] - [#64525]) ([plugwise docs]) +- Replace whois library in Whois integration ([@frenck] - [#63227]) ([whois docs]) +- Add zwave_js device diagnostics ([@raman325] - [#64504]) +- Import mqtt ([@epenet] - [#64543]) ([owntracks docs]) +- Update pytest-timeout to 2.1.0 ([@frenck] - [#64533]) +- Import webhook in toon ([@epenet] - [#64544]) ([toon docs]) +- Fix braviatv tests doing IO ([@thecode] - [#64549]) ([braviatv docs]) +- Add device diagnostics support to Tuya ([@frenck] - [#64537]) ([tuya docs]) +- Let the new wrapper just extend the `FritzBoxTools` class ([@mib1185] - [#64133]) ([fritz docs]) +- Run scheduled workflows only in the home-assistant organization ([@slovdahl] - [#64085]) +- Import panel_custom ([@epenet] - [#64541]) ([hassio docs]) +- Import camera ([@epenet] - [#64540]) ([google_assistant docs]) ([homekit docs]) ([mobile_app docs]) +- Cleanup logger in sharkiq ([@epenet] - [#64552]) ([sharkiq docs]) +- Expose deCONZ configuration url from discovered entry ([@Kane610] - [#64519]) ([deconz docs]) +- Remove the deprecated discovery_info endpoint ([@ludeeus] - [#64534]) ([api docs]) (breaking-change) +- MQTT Remove unused and not tested code ([@jbouwh] - [#64550]) ([mqtt docs]) +- Address after merge review comments on IntelliFire ([@frenck] - [#64553]) ([intellifire docs]) +- Import auth, hassio and person in onboarding ([@epenet] - [#64542]) ([onboarding docs]) +- Improve code coverage MQTT integration ([@jbouwh] - [#64546]) ([mqtt docs]) +- Address late review in sharkiq config flow ([@epenet] - [#64554]) ([sharkiq docs]) +- Add siren platform to devolo Home Control ([@Shutgun] - [#53400]) ([devolo_home_control docs]) +- Add vicare solar collector and pump information ([@bairnhard] - [#64178]) ([vicare docs]) +- Add dishwasher program to Home Connect Integration ([@jan-loeffler] - [#61237]) ([home_connect docs]) +- Handle missing values in alpha_vantage sensor ([@martin3000] - [#63632]) ([alpha_vantage docs]) +- Tibber diagnostics ([@Danielhiversen] - [#64472]) ([tibber docs]) +- Fix onboarding ([@epenet] - [#64557]) ([onboarding docs]) +- Fix errors when trying to enable Alexa ([@emontnemery] - [#64536]) ([cloud docs]) +- Move CONF_COMMAND_TEMPLATE to .const ([@jbouwh] - [#64558]) ([mqtt docs]) +- Use EntityCategory enum in Overkiz ([@iMicknl] - [#64565]) ([overkiz docs]) +- Convert remaining TTS tests to async ([@balloob] - [#64505]) ([voicerss docs]) ([marytts docs]) ([yandextts docs]) +- Convert remaining image processing tests to async ([@balloob] - [#64506]) ([openalpr_cloud docs]) ([openalpr_local docs]) +- Fix bug for zwave_js diagnostics ([@raman325] - [#64568]) +- Import hassio ([@epenet] - [#64561]) ([http docs]) ([updater docs]) ([hassio docs]) ([ozw docs]) +- Remove default value of async_add_entities in devolo Home Control ([@Shutgun] - [#64574]) ([devolo_home_control docs]) +- Add support for Soma Tilt devices ([@sebfortier2288] - [#49734]) ([soma docs]) +- Fix atag slow tests ([@thecode] - [#64567]) ([atag docs]) +- Remove ring from mypy ignore list ([@epenet] - [#64522]) ([ring docs]) +- Add diagnostics to Renault integration ([@epenet] - [#64531]) ([renault docs]) ([diagnostics docs]) +- Add last_reset for Sense trend sensors ([@kbickar] - [#63490]) ([sense docs]) ([emulated_kasa docs]) +- Implement config flow dnsip ([@gjohansson-ST] - [#62843]) ([dnsip docs]) (breaking-change) +- Add version info to zwave js device diagnostics ([@raman325] - [#64573]) ([zwave_js docs]) +- Convert last media player tests to async ([@balloob] - [#64572]) ([universal docs]) ([blackbird docs]) +- Update wled to 0.12.0 ([@frenck] - [#64580]) ([wled docs]) +- Ignore further ssdp:alive message if connection fails in dlna_dmr ([@chishm] - [#59891]) ([dlna_dmr docs]) +- Add diagnostics support to Sonos ([@jjlawren] - [#64576]) ([sonos docs]) +- Introduce new redact helper ([@balloob] - [#64579]) ([netatmo docs]) ([ambient_station docs]) ([airvisual docs]) ([renault docs]) ([evil_genius_labs docs]) ([diagnostics docs]) +- Mark Switcher as a platinum quality integration ([@thecode] - [#64584]) ([switcher_kis docs]) +- Fix switcher_kis test sleep time patching ([@thecode] - [#64582]) ([switcher_kis docs]) +- Add diagnostics to deCONZ integration ([@Kane610] - [#64585]) ([deconz docs]) +- Add version constraint for google-auth ([@cdce8p] - [#64583]) +- Improve Sonos diagnostics ([@jjlawren] - [#64586]) ([sonos docs]) +- Change webostv iot class to local push ([@thecode] - [#64593]) ([webostv docs]) +- Clean up Flu Near You tests ([@bachya] - [#64575]) ([flunearyou docs]) +- Use return_value in Flu Near You config flow tests ([@bachya] - [#64596]) ([flunearyou docs]) +- Clean up Guardian config flow tests ([@bachya] - [#64598]) +- Clean up IQVIA config flow tests ([@bachya] - [#64601]) ([iqvia docs]) +- Add Aussie Broadband integration ([@nickw444] - [#53552]) ([aussie_broadband docs]) (new-integration) +- Add diagnostics to IQVIA ([@bachya] - [#64602]) ([iqvia docs]) +- Revert "Add version constraint for google-auth (#64583)" ([@allenporter] - [#64605]) +- Add diagnostics to Elexa Guardian ([@bachya] - [#64599]) ([guardian docs]) +- Don't import from integration `.const` ([@bachya] - [#64608]) ([ambient_station docs]) ([airvisual docs]) ([flunearyou docs]) +- Handle WLED devices with CCT channels ([@frenck] - [#64581]) ([wled docs]) +- Bump fiblary3 to 0.1.8 ([@rappenze] - [#64577]) ([fibaro docs]) +- Update Netatmo diagnostics ([@cgtobi] - [#64610]) ([netatmo docs]) +- Add switch platform to HomeWizard Energy ([@DCSBL] - [#64084]) ([homewizard docs]) (new-platform) +- Add ToDoist Assignee option for new task service ([@Lyr3x] - [#63918]) ([todoist docs]) +- Scrape HTML attributes that are not key/val pairs ([@MizterB] - [#58247]) ([scrape docs]) +- Fix incorrect usage of ToggleEntity in switch platforms ([@frenck] - [#64620]) +- Add diagnostics support to TwenteMilieu ([@frenck] - [#64627]) ([twentemilieu docs]) +- Update sentry-dsk to 1.5.3 ([@frenck] - [#64630]) ([sentry docs]) +- Deprecate Apple Push Notification Service (APNS) ([@frenck] - [#64629]) ([apns docs]) (breaking-change) +- Add diagnostics to Brother integration ([@bieniu] - [#64478]) ([brother docs]) +- Attempt to fix flaky upnp test ([@emontnemery] - [#64617]) ([upnp docs]) +- Update hassfest dependency check ([@balloob] - [#64638]) +- Store remote domain in Cloud preferences ([@emontnemery] - [#64532]) ([cloud docs]) +- Attempt to fix flaky nam test ([@emontnemery] - [#64613]) ([nam docs]) +- Add Home Assistant Content user ([@balloob] - [#64337]) ([http docs]) ([websocket_api docs]) ([auth docs]) ([cast docs]) ([media_source docs]) (breaking-change) +- Add DataUpdateCoordinator to Elgato ([@frenck] - [#64642]) ([elgato docs]) +- Add rainforest diagnostics ([@balloob] - [#64647]) ([rainforest_eagle docs]) +- Fix UniFi Protect test warning ([@AngellusMortis] - [#64650]) ([unifiprotect docs]) +- Add note to unifiprotect flow that a local user is required ([@bdraco] - [#64651]) ([unifiprotect docs]) +- Update of the ihcsdk to 2.7.5 ([@dingusdk] - [#64631]) ([ihc docs]) +- Fix flaky upnp test ([@balloob] - [#64656]) ([upnp docs]) +- Add CO2signal diagnostics ([@balloob] - [#64646]) ([co2signal docs]) +- Add diagnostics platform to AVM Fritz!Smarthome ([@mib1185] - [#64657]) ([fritzbox docs]) +- Some tweaks for media source ([@balloob] - [#64641]) ([media_player docs]) ([media_source docs]) +- Add diagnostics to Synology DSM integration ([@mib1185] - [#64480]) ([synology_dsm docs]) +- Feature/voc olinc smart adapter vp3 power measurement ([@beele] - [#64571]) ([homekit_controller docs]) +- Fix tilt-position for HmIPW-DRBL4 ([@danielperna84] - [#64208]) ([homematic docs]) +- Update luftdaten to 0.7.2 ([@frenck] - [#64662]) ([luftdaten docs]) +- Update codespell to 2.1.0 ([@frenck] - [#64661]) ([recorder docs]) ([wemo docs]) +- Allow Sonos to browse and play local media via media browser ([@balloob] - [#64603]) +- Add local media browser to VLC ([@balloob] - [#64655]) ([media_source docs]) ([vlc_telnet docs]) +- Update emoji to 1.6.3 ([@frenck] - [#64663]) ([mobile_app docs]) +- Bump up ZHA dependencies ([@Adminiuga] - [#64676]) ([zha docs]) +- Bump flux_led to fix setting strip order on SK6812RGBW ([@bdraco] - [#64671]) ([flux_led docs]) +- Fix music mode and on with older 0x08 flux_led models ([@bdraco] - [#64672]) ([flux_led docs]) +- rfxtrx: bump to 0.27.1 ([@elupus] - [#64666]) ([rfxtrx docs]) +- Update of the ihcsdk to 2.7.6 ([@dingusdk] - [#64664]) ([ihc docs]) +- bump motionblinds to 0.5.10 ([@starkillerOG] - [#64695]) ([motion_blinds docs]) +- Add diagnostics support to PVOutput ([@frenck] - [#64625]) ([pvoutput docs]) +- Add diagnostics support to Open-Meteo ([@frenck] - [#64645]) ([open_meteo docs]) +- Bump bsblan python lib v0.5.0 ([@liudger] - [#64702]) +- Change ssdp scanning interval to 2 minutes ([@bdraco] - [#64688]) ([ssdp docs]) +- Fix webostv media player ([@thecode] - [#64690]) ([webostv docs]) +- Refactor roku tests ([@ctalkington] - [#64498]) ([roku docs]) +- Add tests for LCN switch platform ([@alengwenus] - [#52590]) ([lcn docs]) +- Remove system info from KNX diagnostic ([@marvin-w] - [#64721]) ([knx docs]) +- Fix small inconsistency in OpenUV data storage ([@bachya] - [#64717]) ([openuv docs]) +- Fix webserver responsiveness where there are a lot of discoveries ([@bdraco] - [#64719]) +- Discard duplicate sonos events ([@jjlawren] - [#64722]) ([sonos docs]) +- Clean up OpenUV config flow tests ([@bachya] - [#64715]) +- Update version requirements for httpcore and anyio ([@uvjustin] - [#64711]) +- Add webostv 100% tests coverage for media player ([@thecode] - [#64723]) ([webostv docs]) +- Add diagnostics platform to Shelly ([@mib1185] - [#64660]) ([shelly docs]) +- Add diagnostics to OpenUV ([@bachya] - [#64716]) ([openuv docs]) +- Motionblinds improvements ([@starkillerOG] - [#64698]) ([motion_blinds docs]) +- Migrate amcrest integration to new async API ([@flacjacket] - [#56294]) ([amcrest docs]) +- Add Device Info to Aussie Broadband ([@Bre77] - [#64673]) ([aussie_broadband docs]) +- Use `_attr_*` properties for Doorbird camera ([@flacjacket] - [#64734]) ([doorbird docs]) +- Make service functions async ([@dingusdk] - [#64705]) ([ihc docs]) +- Update the states of the amcrest camera on every update ([@flacjacket] - [#56284]) ([amcrest docs]) +- Fix MultiDict typing with multidict-6.0.0 ([@bdraco] - [#64733]) +- Add button platform to bond to replace custom services ([@bdraco] - [#64725]) ([bond docs]) (breaking-change) +- Refactor nest test_init_sdm tests to use fixtures with varied config types ([@allenporter] - [#64736]) ([nest docs]) +- Fix flux_led reloading too quickly after an operating mode change ([@bdraco] - [#64591]) ([flux_led docs]) +- Remove system info from deCONZ diagnostics ([@Kane610] - [#64704]) ([deconz docs]) +- Prevent lookin polling when push updates are coming in ([@bdraco] - [#64687]) ([lookin docs]) +- Upgrade rokuecp to 0.11.0 ([@ctalkington] - [#64740]) ([roku docs]) +- Update nest media player device thumbnails ([@allenporter] - [#64738]) ([nest docs]) +- Refactor Tuya DPCode and data type handling ([@frenck] - [#64707]) ([tuya docs]) +- Add diagnostics support to Tailscale ([@frenck] - [#64649]) ([tailscale docs]) +- Add diagnostics support to Sensor.Community ([@frenck] - [#64636]) ([luftdaten docs]) +- Add diagnostics support to Elgato ([@frenck] - [#64652]) ([elgato docs]) +- Add diagnostics to NAM ([@bieniu] - [#64743]) ([nam docs]) +- Add warning when calling deprecated bond services ([@bdraco] - [#64744]) ([bond docs]) +- Improve seperation of lookin udp listener and typing ([@bdraco] - [#64742]) +- Enhancements for diagnostics platform ([@mib1185] - [#64670]) ([diagnostics docs]) +- Clean up Notion config tests ([@bachya] - [#64669]) ([notion docs]) +- Clean up AirVisual config flow tests ([@bachya] - [#64714]) ([airvisual docs]) +- Update pipdeptree to 2.2.1 ([@frenck] - [#64746]) +- Bump tensorflow to be compatible with python3.9 ([@dshokouhi] - [#64732]) ([tensorflow docs]) +- Redact possibly sensitive information in deCONZ diagnostics data ([@Kane610] - [#64754]) ([deconz docs]) +- Allow toggles (switches) state to be None ([@frenck] - [#64621]) (breaking-change) +- Diagnostics extended info adjustment ([@frenck] - [#64752]) ([diagnostics docs]) +- Add command template for MQTT button ([@jbouwh] - [#63838]) ([mqtt docs]) +- Move call_action to AvmWrapper for Fritz ([@chemelli74] - [#64667]) ([fritz docs]) +- Add diagnostics support to UniFi Network integration ([@Kane610] - [#64640]) ([unifi docs]) +- Bump dwdwfsapi to 1.0.5 ([@stephan192] - [#64766]) ([dwd_weather_warnings docs]) +- Add service send command in Tuya Vacuum ([@dougiteixeira] - [#63417]) ([tuya docs]) +- Expose entity device temperature from cluster in ZHA ([@rforro] - [#64189]) ([zha docs]) +- Enable Low Latency HLS (LL-HLS) by default to lower stream latency ([@allenporter] - [#64643]) ([stream docs]) +- Simplify hass data in acmeda ([@tkdrob] - [#62479]) ([acmeda docs]) +- Fix webostv sources import from YAML ([@thecode] - [#64768]) ([webostv docs]) +- Add vicare one-time charge ([@oischinger] - [#64376]) ([vicare docs]) +- Add tests for LCN light platform ([@alengwenus] - [#64741]) ([lcn docs]) +- Fix ESPHome ReconnectLogic to make faster connection when device comes online ([@jesserockz] - [#64697]) ([esphome docs]) +- Clean up RainMachine tests ([@bachya] - [#64785]) +- Add option to select quality of camera snapshots taken from Synology DSM connected cameras ([@mib1185] - [#58306]) ([synology_dsm docs]) +- Use friendly name instead of hostname in Tailscale integration ([@bdr99] - [#64682]) ([tailscale docs]) +- Add HUB_TEST_ACCESSORY_ID const for homekit_controller tests ([@Jc2k] - [#64750]) ([homekit_controller docs]) +- Add diagnostics support to Axis integration ([@Kane610] - [#64637]) ([axis docs]) +- Add diagnostics support for homekit_controller ([@Jc2k] - [#64773]) ([homekit_controller docs]) +- De-duplicate generation of DeviceInfo data in homekit_controller ([@Jc2k] - [#64751]) ([homekit_controller docs]) +- Revert "Don't import from integration `.const` (#64608)" ([@bachya] - [#64793]) ([ambient_station docs]) ([airvisual docs]) ([flunearyou docs]) +- Redact usernames in UniFi diagnostics ([@Kane610] - [#64794]) ([unifi docs]) +- Use whole config entry in deCONZ diagnostics ([@Kane610] - [#64795]) ([deconz docs]) +- Revert fix MultiDict typing with multidict-6.0.0 (#64733) ([@mib1185] - [#64792]) +- Use basic entity attributes in fibaro integration ([@rappenze] - [#64784]) ([fibaro docs]) +- Add support for preset modes to bond fans ([@bdraco] - [#64786]) ([bond docs]) +- Add diagnostics support to roku ([@ctalkington] - [#64729]) ([roku docs]) +- Allow homekit_controller to handle device registry entries for devices with poor serial numbers ([@Jc2k] - [#64749]) ([homekit_controller docs]) +- Bump pysml to 0.0.7 ([@mtdcr] - [#64798]) ([edl21 docs]) +- bump total_connect_client to 2022.1 ([@austinmroczek] - [#64797]) ([totalconnect docs]) +- Add diagnostics support to Verisure ([@frenck] - [#64789]) ([verisure docs]) +- Add diagnostics support to RDW ([@frenck] - [#64787]) +- Add diagnostics support to Stookalert ([@frenck] - [#64747]) ([stookalert docs]) +- Add diagnostics support to CPU Speed ([@frenck] - [#64745]) ([cpuspeed docs]) +- spelling: components/coinbase ([@jsoref] - [#64239]) ([coinbase docs]) +- Update denonavr to version 0.10.10 ([@ol-iver] - [#64805]) ([denonavr docs]) +- Update nest climate and sensor test fixtures ([@allenporter] - [#64800]) ([nest docs]) +- Bump pymazda to 0.3.1 ([@bdr99] - [#64807]) ([mazda docs]) +- Easier identification of devices with homekit_controller ([@Jc2k] - [#64804]) ([homekit_controller docs]) +- Revert "Allow setting entity options with config/entity_registry/update" ([@emontnemery] - [#64693]) +- Start depreciation of custom services in Advantage Air ([@Bre77] - [#58777]) ([advantage_air docs]) (breaking-change) +- Fix unexpected color mode switch in flux_led when brightness is near 0 ([@bdraco] - [#64812]) ([flux_led docs]) +- Bump plexapi to 4.9.0 ([@jjlawren] - [#64818]) ([plex docs]) +- Add webostv 100% tests coverage for init ([@thecode] - [#64801]) ([webostv docs]) +- ESPHome prevent connecting to different hosts when IP reassigned ([@OttoWinter] - [#64559]) ([esphome docs]) +- Update method names reflecting changes in UniFi library ([@Kane610] - [#64817]) ([unifi docs]) +- Tuya: Add support for turning smart heater LEDs on and off ([@alexanv1] - [#64739]) ([tuya docs]) +- Make sensor name consistent with other homekit_controller entity names ([@Jc2k] - [#64821]) ([homekit_controller docs]) +- Bump flux_led to 0.28.11 ([@bdraco] - [#64823]) ([flux_led docs]) +- Add coordinator data to Renault diagnostics ([@epenet] - [#64783]) ([renault docs]) +- Mark webOS TV as a platinum quality integration ([@thecode] - [#64587]) ([webostv docs]) +- Fix DPCode in battery support check for vacuum Tuya ([@dougiteixeira] - [#64806]) ([tuya docs]) +- Bump httpx to 0.21.3 and pin requirements for httpcore, anyio, and h11 ([@uvjustin] - [#64822]) +- Remove source and channel attributes from local version ([@ludeeus] - [#64827]) ([version docs]) (breaking-change) +- Add diagnostics to RainMachine ([@bachya] - [#64788]) ([rainmachine docs]) +- vicare: Fix dynamic unit of measurement ([@oischinger] - [#64782]) ([vicare docs]) +- Add more vicare binary sensors and clean up constants ([@oischinger] - [#64780]) ([vicare docs]) +- Support systems w/o circuits ([@oischinger] - [#64779]) ([vicare docs]) +- vicare: Add support for hybrid devices ([@oischinger] - [#64776]) +- Use shorthand attributes in shelly covers ([@epenet] - [#64829]) ([shelly docs]) +- Increase BleBox timeout ([@maxcanna] - [#64760]) ([blebox docs]) +- Add pylint to pre-commit hooks ([@mib1185] - [#64665]) +- Move autosetup out of init.py ([@dingusdk] - [#64761]) ([ihc docs]) +- Use Etag in GitHub coordinator updates ([@ludeeus] - [#64449]) ([github docs]) +- Add missing voices to Amazon Polly ([@aomann] - [#64708]) +- Add diagnostics to Mazda integration ([@bdr99] - [#64606]) ([mazda docs]) +- Add type hint to RegistryEntry.entity_category ([@epenet] - [#64618]) +- Add long-term battery and discharge sensors for energy panel to kostal_plenticore ([@ngdio] - [#62761]) ([kostal_plenticore docs]) +- Fix import for new AWS aiobotocore lib ([@chemelli74] - [#64769]) +- spelling: components/ezviz ([@jsoref] - [#64247]) ([ezviz docs]) +- Use zeroconf for scanning in apple_tv ([@bdraco] - [#64528]) ([apple_tv docs]) +- Clean up webostv tests ([@thecode] - [#64833]) ([webostv docs]) +- Drop use of deprecated ENTITY_CATEGORIES ([@epenet] - [#64607]) ([alexa docs]) ([cloud docs]) ([google_assistant docs]) ([homekit docs]) +- Add pylint plugin to enforce type hints ([@epenet] - [#64313]) +- Make UniFi bandwidth sensors be about current transfer rather than total transfer ([@Kane610] - [#64701]) ([unifi docs]) +- Only show music files for Cast Audio in media browser ([@balloob] - [#64683]) ([cast docs]) +- Point updates ([@fredrike] - [#64748]) +- Add diagnostics to Nanoleaf ([@ludeeus] - [#64835]) ([nanoleaf docs]) +- Fix error in Tuya diagnostics ([@dougiteixeira] - [#64808]) +- Add Home Connect CookProcessor (Bosch Cookit) ([@noxhirsch] - [#62445]) ([home_connect docs]) +- Bump soco to 0.26.0 ([@jjlawren] - [#64819]) ([sonos docs]) +- Add a reboot button for ONVIF devices ([@esev] - [#61522]) ([onvif docs]) +- UniFi events aren't reliable for device tracker usage, use last_seen instead ([@Kane610] - [#64147]) ([unifi docs]) +- Fix units not being pulled from source sensor ([@rsteckler] - [#63639]) ([integration docs]) +- Add entity description support to WHOIS integration ([@frenck] - [#64619]) ([whois docs]) +- Teach TemplateEntity entity name ([@emontnemery] - [#62175]) ([template docs]) +- Clean up ReCollect Waste config flow tests ([@bachya] - [#64813]) ([recollect_waste docs]) +- Add diagnostics to Notion ([@bachya] - [#64713]) ([notion docs]) +- Add diagnostics to Flu Near You ([@bachya] - [#64597]) ([flunearyou docs]) +- Add diagnostics to ReCollect Waste ([@bachya] - [#64814]) ([recollect_waste docs]) +- Add GPS direction to BMW ConnectedDrive device_tracker ([@rikroe] - [#63744]) ([bmw_connected_drive docs]) +- Render icon and picture templates at setup ([@emontnemery] - [#64838]) ([template docs]) +- Clean up post-merge review comments ([@bachya] - [#64842]) ([flunearyou docs]) ([notion docs]) +- Clarify cloud docstring ([@emontnemery] - [#64841]) ([cloud docs]) +- Allow roku to browse and play local media ([@ctalkington] - [#64799]) ([roku docs]) +- Improve tests for Overkiz config flow ([@iMicknl] - [#64624]) +- Fix bond buttons where an argument is required ([@bdraco] - [#64781]) ([bond docs]) +- Use entity_description in shelly rest sensors ([@epenet] - [#64843]) ([shelly docs]) +- Add additional energy sensors to Eve Energy ([@Jc2k] - [#64826]) ([homekit_controller docs]) +- Cleanup GitHub sensor classes and descriptions ([@ludeeus] - [#64853]) ([github docs]) +- Add data update coordinator to Whois ([@frenck] - [#64846]) ([whois docs]) +- Adjust pylint plugin to enforce platform type hints ([@epenet] - [#64836]) +- Add cover platform to Overkiz integration ([@iMicknl] - [#64564]) ([overkiz docs]) (new-platform) +- Add diagnostics support to Whois ([@frenck] - [#64855]) ([whois docs]) +- Add whois diagnostics to coveragerc ([@ludeeus] - [#64857]) +- Add additional sensors to Whois ([@frenck] - [#64854]) ([whois docs]) +- Bump aioshelly to 1.0.8 ([@thecode] - [#64864]) ([shelly docs]) +- Create tasks to load Amcrest platforms ([@flacjacket] - [#64848]) ([amcrest docs]) +- Address late review in entity registry ([@epenet] - [#64851]) +- Add support for converting to and from mmHg ([@emontnemery] - [#64844]) +- Add diagnostics to Launch Library ([@ludeeus] - [#64871]) ([launch_library docs]) +- Avoid creating bond stop action button when there are no other buttons ([@bdraco] - [#64869]) ([bond docs]) +- Clean up Tile config flow tests ([@bachya] - [#64866]) ([tile docs]) +- Clean up Ridwell config flow tests ([@bachya] - [#64858]) ([ridwell docs]) +- Teach TemplateEntity unique_id ([@emontnemery] - [#64837]) ([template docs]) +- Bump plexapi to 4.9.1 ([@jjlawren] - [#64872]) ([plex docs]) +- Bump version pyunifiprotect to 3.2.0 ([@AngellusMortis] - [#64874]) +- Add basic Doorlock support for UniFi protect ([@AngellusMortis] - [#64877]) ([unifiprotect docs]) +- Bump frontend to 20220124.0 ([@balloob] - [#64878]) ([frontend docs]) +- Adds enabled entity_ids associated with each speaker ([@jjlawren] - [#64876]) +- Remove unused fixture in RainMachine config flow test ([@bachya] - [#64881]) ([rainmachine docs]) +- Add outlets to UniFi switch platform ([@Kane610] - [#64859]) ([unifi docs]) +- Fix Shelly climate entity state ([@bieniu] - [#64756]) ([shelly docs]) +- Bump aiodiscover to 1.4.7 to fix finding the gateway on MacOS ([@bdraco] - [#64893]) ([dhcp docs]) +- Changing the Return to home in Tuya vacuum ([@dougiteixeira] - [#64810]) ([tuya docs]) +- Add binary sensor for Vallox post heater ([@viiru-] - [#59762]) ([vallox docs]) (new-platform) +- Bump rtsp-to-webrtc to 0.5.0 (diagnostics support) ([@allenporter] - [#64889]) ([rtsp_to_webrtc docs]) +- Add init tests for Whois ([@frenck] - [#64862]) ([whois docs]) +- Refactor Tuya Fans ([@frenck] - [#64765]) ([tuya docs]) +- Clean up WattTime config flow tests ([@bachya] - [#64885]) ([watttime docs]) +- Replace Synology DSM services with buttons ([@mib1185] - [#57352]) ([synology_dsm docs]) (breaking-change) (new-platform) +- Add event statistics to Sonos diagnostics ([@jjlawren] - [#64845]) ([sonos docs]) +- Update pylint to 2.12.2 ([@frenck] - [#64896]) +- Fix extra data for AWS sns service ([@chemelli74] - [#64771]) ([aws docs]) +- Include entity_id in Alexa state report error log ([@emontnemery] - [#64898]) ([alexa docs]) +- Add support for DS2760 1-Wire TypeK Thermocouple ([@droberg] - [#63222]) ([onewire docs]) +- Ignore draft releases for GitHub sensor ([@ludeeus] - [#64906]) ([github docs]) +- Use Integration properties for custom integration listing in diagnostics ([@ludeeus] - [#64908]) ([diagnostics docs]) +- Use shorthand attributes in shelly light ([@epenet] - [#64831]) ([shelly docs]) +- Use entity_description in shelly rpc sensors ([@epenet] - [#64895]) ([shelly docs]) +- Add diagnostics to UptimeRobot ([@ludeeus] - [#64905]) ([uptimerobot docs]) +- Add diagnostics for Coinbase ([@TomBrien] - [#64900]) +- Fix duplicate metrics in prometheus ([@alim4r] - [#61355]) ([prometheus docs]) +- Add binary sensor for smoke alarm test state ([@Kane610] - [#64873]) ([deconz docs]) +- Update _TrackStateChangeFiltered entity listener with new entities ([@emontnemery] - [#64909]) ([geo_location docs]) +- Adjust pylint plugin to enforce device_tracker type hints ([@epenet] - [#64903]) +- Bump rflink to 0.0.62 ([@thecode] - [#64911]) ([rflink docs]) +- Add lock support for unifiprotect Doorlock ([@AngellusMortis] - [#64882]) ([unifiprotect docs]) (new-platform) +- Add full test coverage to Whois ([@frenck] - [#64899]) ([whois docs]) +- Add zeroconf to overkiz integration ([@egguy] - [#64907]) ([overkiz docs]) +- Add dhcp discovery to senseme ([@bdraco] - [#64894]) ([senseme docs]) +- Bump home-assistant/wheels to 2021.01 to pick up grpc changes ([@allenporter] - [#64917]) +- Bump ZHA quirks to 0.0.66 ([@dmulcahey] - [#64915]) ([zha docs]) +- Add Elgato hw version to device info ([@frenck] - [#64922]) ([elgato docs]) +- Bump pylaunches to 1.3.0 ([@DurgNomis-drol] - [#64923]) ([launch_library docs]) +- Allow browsing the Spotify media player in Sonos ([@balloob] - [#64921]) ([sonos docs]) ([spotify docs]) +- Add "Recommended" and radio station support to Plex media browser ([@jjlawren] - [#64057]) ([plex docs]) +- Bump pyoverkiz to 1.3.0 in Overkiz integration (fixes auth issues) ([@iMicknl] - [#64937]) ([overkiz docs]) +- Add reauth flow to Overkiz integration ([@iMicknl] - [#64622]) ([overkiz docs]) +- Add WLED hw version to device info ([@frenck] - [#64924]) ([wled docs]) +- Create zone bypass switches for DSC panels ([@ufodone] - [#63200]) ([envisalink docs]) (new-platform) +- Add per-device diagnostics to Sonos ([@jjlawren] - [#64912]) ([sonos docs]) +- Add state class to screenlogic sensors ([@bdraco] - [#64941]) ([screenlogic docs]) +- Add state class to powerwall charge sensor ([@bdraco] - [#64939]) ([powerwall docs]) +- Add state class to hunterdouglas_powerview ([@bdraco] - [#64936]) ([hunterdouglas_powerview docs]) +- Small cleanups to gogogate2 ([@bdraco] - [#64935]) ([gogogate2 docs]) +- Add state class to emonitor sensors ([@bdraco] - [#64934]) ([emonitor docs]) +- Add state class to nexia sensors ([@bdraco] - [#64932]) ([nexia docs]) +- Add state classes to august sensors ([@bdraco] - [#64931]) ([august docs]) +- Catch all exceptions on import component/platform ([@balloob] - [#64930]) +- Add 'compile translations' task to VSCode tasks ([@iMicknl] - [#64933]) +- Decouple initial refreshes in setup for Environment Canada ([@gwww] - [#64946]) ([environment_canada docs]) +- Use local Sonos API for Plex music playback ([@jjlawren] - [#63357]) ([sonos docs]) ([cast docs]) ([plex docs]) +- Add support for TCP tunneling connections to KNX ([@marvin-w] - [#64928]) ([knx docs]) +- Add diagnostics to Tile ([@bachya] - [#64875]) ([tile docs]) +- Add diagnostics to Ridwell ([@bachya] - [#64863]) ([ridwell docs]) +- Expose if HTTP is configured for SSL ([@balloob] - [#64940]) ([cloud docs]) +- Change the name of the vacuum switch voice ([@dougiteixeira] - [#64948]) +- Some media source things ([@balloob] - [#64954]) +- Limit GitHub API calls during setup ([@ludeeus] - [#64956]) ([github docs]) +- Update home-assistant/wheels to 2021.01.2 ([@frenck] - [#64958]) +- Cleanup tests for AWS ([@chemelli74] - [#64943]) ([aws docs]) +- Add unique_id to modbus entities ([@Tathar] - [#64634]) ([modbus docs]) +- Enable `no_implicit_reexport` for core files [mypy] ([@cdce8p] - [#63820]) +- Add solax config flow ([@tokenize47] - [#56620]) ([solax docs]) +- Prevent race when loading cloud config ([@emontnemery] - [#64901]) ([cloud docs]) +- Add backlight controls for Tuya curtain switches ([@frenck] - [#64961]) ([tuya docs]) +- Set entity category on Tuya backlights ([@frenck] - [#64962]) ([tuya docs]) +- Fix send command in vacuum Tuya ([@dougiteixeira] - [#64949]) ([tuya docs]) +- Fix use of implicit re-export in env canada ([@frenck] - [#64964]) ([environment_canada docs]) +- Add next starship launch sensor to launch_library ([@DurgNomis-drol] - [#64929]) ([launch_library docs]) +- Complementing the Tuya Fan (fs) category ([@dougiteixeira] - [#64947]) ([tuya docs]) +- Use entity_description in shelly block sensors ([@epenet] - [#64897]) ([shelly docs]) +- Add starship event sensor ([@DurgNomis-drol] - [#64965]) ([launch_library docs]) +- Correct netatmo startup ([@emontnemery] - [#64970]) ([netatmo docs]) +- Drop owntracks import flow ([@emontnemery] - [#64967]) ([owntracks docs]) +- Add diagnostics to WattTime ([@bachya] - [#64887]) ([watttime docs]) +- Fix custom message for UniFi Protect doorbell select ([@AngellusMortis] - [#64971]) ([unifiprotect docs]) +- Add IntelliFire sensors ([@jeeftor] - [#64600]) ([intellifire docs]) (new-platform) +- Check for empty release array ([@ludeeus] - [#64973]) ([github docs]) +- Add detailed status for UptimeRobot ([@chemelli74] - [#64879]) ([uptimerobot docs]) (new-platform) +- Bump pyoverkiz to 1.3.1 (to fix bugs) ([@iMicknl] - [#64979]) ([overkiz docs]) +- Fix battery sensor in Overkiz integration ([@iMicknl] - [#64980]) ([overkiz docs]) +- Change zone's state to be number of person entities in the zone ([@emontnemery] - [#64910]) ([zone docs]) +- Store new spotify client in hass.data ([@balloob] - [#64984]) ([spotify docs]) +- Only log exception in GitHub when something unexpected raised ([@ludeeus] - [#64974]) ([github docs]) +- Fix Shelly HT invalid value on sensor error ([@thecode] - [#64982]) ([shelly docs]) +- Disable google_assistant local SDK if SSL is enabled ([@emontnemery] - [#64983]) ([google_assistant docs]) +- Fix circles in person integration ([@balloob] - [#64991]) ([zone docs]) +- Update frontend to 20220126.0 ([@bramkragten] - [#64990]) ([frontend docs]) +- Support Plex in Sonos media browser ([@jjlawren] - [#64951]) ([sonos docs]) ([plex docs]) +- Support Plex in Cast media browser ([@jjlawren] - [#64994]) ([cast docs]) +- Fix media classes ([@balloob] - [#64993]) ([sonos docs]) +- Abort webhook flow when not connected to home assistant cloud ([@emontnemery] - [#64963]) +- Fix Plex media class in Cast media browser ([@balloob] - [#64995]) ([cast docs]) +- Make toon fall back to webhooks if cloud is not available ([@emontnemery] - [#64981]) ([toon docs]) +- Abort rachio config entry setup when not connected to cloud ([@emontnemery] - [#64975]) ([rachio docs]) +- Abort plaato flows when not connected to home assistant cloud ([@emontnemery] - [#64969]) ([plaato docs]) +- Abort owntracks config flow when not connected to home assistant cloud ([@emontnemery] - [#64968]) ([owntracks docs]) +- Fix MQTT climate action null warnings ([@jbouwh] - [#64658]) (beta fix) +- Update Arris TG2492LG dependency to 1.2.1 ([@vanbalken] - [#64999]) ([arris_tg2492lg docs]) (beta fix) +- Add diagnostics download to ESPHome ([@jesserockz] - [#65008]) ([esphome docs]) (beta fix) +- Handle Tuya sendings strings instead of numeric values ([@frenck] - [#65009]) ([tuya docs]) (beta fix) +- Bump flux_led to fix push updates on newer devices ([@bdraco] - [#65011]) ([flux_led docs]) (beta fix) +- Set ping data to None instead of False ([@ludeeus] - [#65013]) ([ping docs]) (beta fix) +- Bump pymazda to 0.3.2 ([@bdr99] - [#65025]) ([mazda docs]) (beta fix) +- Catch connection reset error ([@balloob] - [#65027]) ([hassio docs]) (beta fix) +- Update rokuecp to 0.12.0 ([@ctalkington] - [#65030]) ([roku docs]) (beta fix) +- Fix Shelly battery powered devices unavailable ([@thecode] - [#65031]) ([shelly docs]) (beta fix) +- Correct zone state ([@emontnemery] - [#65040]) ([device_tracker docs]) ([zone docs]) (beta fix) +- Unset Alexa authorized flag in additional case ([@emontnemery] - [#65044]) ([cloud docs]) (beta fix) +- Add `flow_title` for HomeWizard Energy ([@DCSBL] - [#65047]) ([homewizard docs]) (beta fix) +- Fix typo in entity name for launchlibrary ([@DurgNomis-drol] - [#65048]) ([launch_library docs]) (beta fix) +- Fix notify leaving zone blueprint ([@MartinHjelmare] - [#65056]) ([automation docs]) (beta fix) +- Remove `backports.zoneinfo` dependency ([@cdce8p] - [#65069]) (beta fix) +- Update PyVicare to 2.16.1 ([@oischinger] - [#65073]) ([vicare docs]) (beta fix) +- Guard browsing Spotify if setup failed ([@jjlawren] - [#65074]) ([spotify docs]) (beta fix) +- Bump frontend to 20220127.0 ([@balloob] - [#65075]) ([frontend docs]) (beta fix) +- Update Renault to 0.1.7 ([@epenet] - [#65076]) ([renault docs]) (beta fix) +- Check explicitly for None value in Overkiz integration ([@tetienne] - [#65045]) ([overkiz docs]) (beta fix) +- Better names for energy related homekit_controller sensors ([@Jc2k] - [#65055]) ([homekit_controller docs]) (beta fix) +- Fix Shelly detached switches automation triggers ([@thecode] - [#65059]) ([shelly docs]) (beta fix) +- Add diagnostics support to P1 Monitor ([@klaasnicolaas] - [#65060]) ([p1_monitor docs]) (beta fix) +- Support unpairing homekit accessories from homekit_controller ([@Jc2k] - [#65065]) ([homekit_controller docs]) (beta fix) +- Fix Yale optionsflow ([@gjohansson-ST] - [#65072]) ([yale_smart_alarm docs]) (beta fix) +- Reconnect client service tried to connect even if device didn't exist ([@Kane610] - [#65082]) ([unifi docs]) (beta fix) +- Add support for proxy-selected intent ([@balloob] - [#65094]) ([google_assistant docs]) (beta fix) +- Fix Shelly 1/1PM external temperature sensor unavailable ([@thecode] - [#65096]) ([shelly docs]) (beta fix) +- Downgrade homekit linked humidity sensor error to debug ([@bdraco] - [#65098]) ([homekit docs]) (beta fix) +- Handle vicare I/O in executor ([@oischinger] - [#65105]) ([vicare docs]) (beta fix) +- Fix cast support for browsing local media source ([@emontnemery] - [#65115]) ([cast docs]) (beta fix) +- Goodwe - fix value errors ([@starkillerOG] - [#65121]) ([goodwe docs]) (beta fix) +- Handle FritzInternalError exception for Fritz ([@chemelli74] - [#65124]) ([fritz docs]) (beta fix) +- Add diagnostics support to onewire ([@epenet] - [#65131]) ([onewire docs]) (beta fix) +- Use new withings oauth2 refresh token endpoint ([@nbogojevic] - [#65134]) ([withings docs]) (beta fix) +- Bump google-nest-sdm to 1.6.0 (diagnostics) ([@allenporter] - [#65135]) ([nest docs]) (beta fix) +- Add diagnostics for rtsp_to_webrtc ([@allenporter] - [#65138]) ([rtsp_to_webrtc docs]) (beta fix) +- Move `install_requires` to `setup.cfg` ([@cdce8p] - [#65095]) (beta fix) +- Move version metadata key to setup.cfg ([@cdce8p] - [#65091]) (beta fix) +- Move `project_urls` to `setup.cfg` ([@cdce8p] - [#65129]) (beta fix) +- Update nest diagnostics ([@allenporter] - [#65141]) ([nest docs]) (beta fix) +- Use isolated build environments ([@cdce8p] - [#65145]) (beta fix) +- Fix excepton for SamsungTV getting device info ([@chemelli74] - [#65151]) ([samsungtv docs]) (beta fix) +- Fix status for Fritz device tracker ([@chemelli74] - [#65152]) ([fritz docs]) (beta fix) +- Move remaining keys to `setup.cfg` ([@cdce8p] - [#65154]) (beta fix) +- Fix setting speed of Tuya fan ([@frenck] - [#65155]) ([tuya docs]) (beta fix) +- Add OUI for KL430 tplink light strip to discovery ([@bdraco] - [#65159]) ([tplink docs]) (beta fix) +- Add dhcp discovery to oncue ([@bdraco] - [#65160]) ([oncue docs]) (beta fix) +- Add additional roomba OUIs to DHCP discovery ([@bdraco] - [#65161]) ([roomba docs]) (beta fix) +- Add additional blink OUIs to DHCP discovery ([@bdraco] - [#65162]) ([blink docs]) (beta fix) +- Fix uncaught exception during isy994 dhcp discovery with ignored entry ([@bdraco] - [#65165]) ([isy994 docs]) (beta fix) +- Add tests for KNX diagnostic and expose ([@marvin-w] - [#64938]) ([knx docs]) (beta fix) +- Fix KNX Expose for strings longer than 14 bytes ([@marvin-w] - [#63026]) ([knx docs]) (beta fix) +- Minor refactoring of cast media_player ([@emontnemery] - [#65125]) ([cast docs]) (beta fix) +- Aqara restore door sensor state on start ([@starkillerOG] - [#65128]) ([xiaomi_aqara docs]) (beta fix) +- Clean up SimpliSafe config flow tests ([@bachya] - [#65167]) (beta fix) +- Ensure diagnostics redaction can handle lists of lists ([@bachya] - [#65170]) ([diagnostics docs]) (beta fix) +- Add diagnostics to SimpliSafe ([@bachya] - [#65171]) ([simplisafe docs]) (beta fix) +- Better manage of nested lists ([@Kane610] - [#65176]) ([unifi docs]) (beta fix) +- Fix "internet access" switch for Fritz connected device without known IP address ([@mib1185] - [#65190]) ([fritz docs]) (beta fix) +- Fix webostv configure sources when selected source is missing ([@thecode] - [#65195]) ([webostv docs]) (beta fix) +- Add logic to avoid creating the same scene multiple times ([@Kane610] - [#65207]) ([deconz docs]) (beta fix) +- Add activity statistics to Sonos diagnostics ([@jjlawren] - [#65214]) ([sonos docs]) (beta fix) +- Fix senseme fan lights ([@bdraco] - [#65217]) ([senseme docs]) (beta fix) +- Increase the timeout for flux_led directed discovery ([@bdraco] - [#65222]) ([flux_led docs]) (beta fix) +- Use .json.txt for diagnostics download filetype ([@ludeeus] - [#65236]) (beta fix) +- Fix webostv live TV source missing when configuring sources ([@thecode] - [#65243]) ([webostv docs]) (beta fix) +- Fix powerwall login retry when hitting rate limit ([@bdraco] - [#65245]) ([powerwall docs]) (beta fix) +- Fix flux_led not generating unique ids when discovery fails ([@bdraco] - [#65250]) ([flux_led docs]) (beta fix) +- Fix debugpy blocking the event loop at startup ([@bdraco] - [#65252]) ([debugpy docs]) (beta fix) +- Handle missing attrs in whois results ([@bdraco] - [#65254]) ([whois docs]) (beta fix) +- Simplify whois value_fn ([@bdraco] - [#65265]) ([whois docs]) (beta fix) +- Bump aiowebostv to 0.1.2 ([@thecode] - [#65267]) ([webostv docs]) (beta fix) +- Fix flick_electric auth failures ([@ZephireNZ] - [#65274]) ([flick_electric docs]) (beta fix) +- Update xknx to 0.19.1 ([@farmio] - [#65275]) ([knx docs]) (beta fix) +- Bump python-kasa to 0.4.1 for tplink integration ([@rytilahti] - [#64123]) ([tplink docs]) (beta fix) +- Add diagnostics to Advantage Air ([@Bre77] - [#65006]) ([advantage_air docs]) (beta fix) +- Send notification to alert of Sonos networking issues ([@jjlawren] - [#65084]) ([sonos docs]) (beta fix) +- Add cast platform for extending Google Cast media_player ([@emontnemery] - [#65149]) ([cast docs]) ([plex docs]) (beta fix) +- Tuya fan percentage fix ([@fOmey] - [#65225]) ([tuya docs]) (beta fix) +- Increase august timeout and make failure to sync at startup non-fatal ([@bdraco] - [#65281]) ([august docs]) (beta fix) +- Bump pyatmo to v.6.2.4 ([@cgtobi] - [#65285]) ([netatmo docs]) (beta fix) +- Correct cast media browse filter for audio groups ([@emontnemery] - [#65288]) ([cast docs]) (beta fix) +- Bump pynetgear to 0.9.1 ([@starkillerOG] - [#65290]) ([netgear docs]) (beta fix) +- Bump pyoverkiz to 1.3.2 ([@iMicknl] - [#65293]) ([overkiz docs]) (beta fix) +- Fix HomeWizard unclosed clientsession error when closing Home Assistant ([@DCSBL] - [#65296]) ([homewizard docs]) (beta fix) +- Add HomeWizard diagnostics ([@DCSBL] - [#65297]) ([homewizard docs]) (beta fix) (new-integration) +- Update adguard to 0.5.1 ([@frenck] - [#65305]) ([adguard docs]) (beta fix) +- Update wled to 0.13.0 ([@frenck] - [#65312]) ([wled docs]) (beta fix) +- Fix missing expiration data in Whois information ([@frenck] - [#65313]) ([whois docs]) (beta fix) +- Improve reliability of august setup with recent api changes ([@bdraco] - [#65314]) ([august docs]) (beta fix) +- Bump androidtv to 0.0.61 ([@JeffLIrion] - [#65315]) (beta fix) +- Add diagnostics support to WLED ([@frenck] - [#65317]) ([wled docs]) (beta fix) +- Update tailscale to 0.2.0 ([@frenck] - [#65318]) ([tailscale docs]) (beta fix) +- Ensure PVOutput connection error is logged ([@frenck] - [#65319]) ([pvoutput docs]) (beta fix) +- Bump pyps4-2ndscreen to 1.3.1 ([@pascalwinters] - [#65320]) ([ps4 docs]) (beta fix) +- Alexa to handle brightness and catch exceptions ([@balloob] - [#65322]) ([alexa docs]) (beta fix) +- Fritz tests cleanup ([@chemelli74] - [#65054]) ([fritz docs]) (beta fix) +- Improve debugging and error handling in Fritz!Tools ([@mib1185] - [#65324]) ([fritz docs]) (beta fix) +- Fix guardian being rediscovered via dhcp ([@bdraco] - [#65332]) ([guardian docs]) (beta fix) +- Add diagnostics support to Fritz ([@chemelli74] - [#65334]) ([fritz docs]) (beta fix) +- Prevent unifiprotect from being rediscovered on UDM-PROs ([@bdraco] - [#65335]) ([unifiprotect docs]) (beta fix) +- Bump version tag on async_timeout warning ([@balloob] - [#65339]) (beta fix) +- Bump aiohue to 4.0.1 ([@balloob] - [#65340]) ([hue docs]) (beta fix) +- Bump zeroconf to 0.38.3 ([@bdraco] - [#65341]) ([zeroconf docs]) (beta fix) +- Add diagnostics for SamsungTV ([@chemelli74] - [#65342]) ([samsungtv docs]) (beta fix) +- I zone, you zone, we zoning ([@balloob] - [#65344]) ([zone docs]) (beta fix) +- Fix MotionEye config flow ([@ZuluWhiskey] - [#64360]) ([motioneye docs]) (beta fix) +- Fix honeywell hold mode ([@schreyack] - [#65327]) ([honeywell docs]) (beta fix) +- Simplify unifi cleanup logic ([@balloob] - [#65345]) ([unifi docs]) (beta fix) +- Improve CastProtocol ([@emontnemery] - [#65357]) ([cast docs]) ([plex docs]) (beta fix) +- Fix options for dnsip ([@gjohansson-ST] - [#65369]) ([dnsip docs]) (beta fix) +- Allow removing keys from automation ([@bramkragten] - [#65374]) ([config docs]) (beta fix) +- Fix wan_access switch for disconnected devices in Fritz!Tools ([@mib1185] - [#65378]) ([fritz docs]) (beta fix) +- Redact host address in UniFi diagnostics ([@Kane610] - [#65379]) ([unifi docs]) (beta fix) +- Bump frontend to 20220201.0 ([@balloob] - [#65380]) ([frontend docs]) (beta fix) +- Report unmet dependencies for failing config flows ([@emontnemery] - [#65061]) (beta fix) +- Fix MQTT expire_after effects after reloading ([@jbouwh] - [#65359]) ([mqtt docs]) (beta fix) +- Handle brightness being None for senseme ([@bdraco] - [#65372]) ([senseme docs]) (beta fix) +- Detect battery-operated Sonos devices going offline ([@jjlawren] - [#65382]) ([sonos docs]) (beta fix) +- Fix disconnect bug in Apple TV integration ([@postlund] - [#65385]) ([apple_tv docs]) (beta fix) +- Sort Apple TV app list by name ([@postlund] - [#65386]) ([apple_tv docs]) (beta fix) +- Fix Sonos diagnostics with offline device ([@jjlawren] - [#65393]) ([sonos docs]) (beta fix) +- Bump lutron_caseta to 0.13.1 to fix setup when no button devices are present ([@bdraco] - [#65400]) ([lutron_caseta docs]) (beta fix) +- Ensure unifiprotect discovery can be ignored ([@bdraco] - [#65406]) ([unifiprotect docs]) (beta fix) +- Bump aladdin_connect to 0.4 to fix integration for some users due to API changes ([@shoejosh] - [#65407]) ([aladdin_connect docs]) (beta fix) +- Don't warn on time.sleep injected by the debugger ([@emontnemery] - [#65420]) (beta fix) +- Bump velbus-aio to 2022.2.1 ([@Cereal2nd] - [#65422]) ([velbus docs]) (beta fix) +- Stringify MQTT payload in mqtt/debug/info WS response ([@emontnemery] - [#65429]) ([mqtt docs]) (beta fix) +- Update frontend to 20220202.0 ([@bramkragten] - [#65432]) ([frontend docs]) (beta fix) + +{% enddetails %} + +[#49734]: https://github.com/home-assistant/core/pull/49734 +[#52590]: https://github.com/home-assistant/core/pull/52590 +[#53400]: https://github.com/home-assistant/core/pull/53400 +[#53552]: https://github.com/home-assistant/core/pull/53552 +[#53745]: https://github.com/home-assistant/core/pull/53745 +[#54097]: https://github.com/home-assistant/core/pull/54097 +[#54444]: https://github.com/home-assistant/core/pull/54444 +[#54586]: https://github.com/home-assistant/core/pull/54586 +[#54642]: https://github.com/home-assistant/core/pull/54642 +[#55264]: https://github.com/home-assistant/core/pull/55264 +[#55812]: https://github.com/home-assistant/core/pull/55812 +[#56080]: https://github.com/home-assistant/core/pull/56080 +[#56284]: https://github.com/home-assistant/core/pull/56284 +[#56294]: https://github.com/home-assistant/core/pull/56294 +[#56299]: https://github.com/home-assistant/core/pull/56299 +[#56620]: https://github.com/home-assistant/core/pull/56620 +[#56647]: https://github.com/home-assistant/core/pull/56647 +[#56968]: https://github.com/home-assistant/core/pull/56968 +[#57352]: https://github.com/home-assistant/core/pull/57352 +[#57673]: https://github.com/home-assistant/core/pull/57673 +[#58198]: https://github.com/home-assistant/core/pull/58198 +[#58247]: https://github.com/home-assistant/core/pull/58247 +[#58306]: https://github.com/home-assistant/core/pull/58306 +[#58503]: https://github.com/home-assistant/core/pull/58503 +[#58544]: https://github.com/home-assistant/core/pull/58544 +[#58596]: https://github.com/home-assistant/core/pull/58596 +[#58615]: https://github.com/home-assistant/core/pull/58615 +[#58665]: https://github.com/home-assistant/core/pull/58665 +[#58699]: https://github.com/home-assistant/core/pull/58699 +[#58724]: https://github.com/home-assistant/core/pull/58724 +[#58745]: https://github.com/home-assistant/core/pull/58745 +[#58761]: https://github.com/home-assistant/core/pull/58761 +[#58777]: https://github.com/home-assistant/core/pull/58777 +[#58806]: https://github.com/home-assistant/core/pull/58806 +[#58837]: https://github.com/home-assistant/core/pull/58837 +[#58844]: https://github.com/home-assistant/core/pull/58844 +[#58917]: https://github.com/home-assistant/core/pull/58917 +[#58964]: https://github.com/home-assistant/core/pull/58964 +[#59205]: https://github.com/home-assistant/core/pull/59205 +[#59213]: https://github.com/home-assistant/core/pull/59213 +[#59309]: https://github.com/home-assistant/core/pull/59309 +[#59321]: https://github.com/home-assistant/core/pull/59321 +[#59341]: https://github.com/home-assistant/core/pull/59341 +[#59660]: https://github.com/home-assistant/core/pull/59660 +[#59762]: https://github.com/home-assistant/core/pull/59762 +[#59781]: https://github.com/home-assistant/core/pull/59781 +[#59869]: https://github.com/home-assistant/core/pull/59869 +[#59891]: https://github.com/home-assistant/core/pull/59891 +[#60019]: https://github.com/home-assistant/core/pull/60019 +[#60063]: https://github.com/home-assistant/core/pull/60063 +[#60080]: https://github.com/home-assistant/core/pull/60080 +[#60156]: https://github.com/home-assistant/core/pull/60156 +[#60193]: https://github.com/home-assistant/core/pull/60193 +[#60327]: https://github.com/home-assistant/core/pull/60327 +[#60337]: https://github.com/home-assistant/core/pull/60337 +[#60379]: https://github.com/home-assistant/core/pull/60379 +[#60388]: https://github.com/home-assistant/core/pull/60388 +[#60414]: https://github.com/home-assistant/core/pull/60414 +[#60426]: https://github.com/home-assistant/core/pull/60426 +[#60436]: https://github.com/home-assistant/core/pull/60436 +[#60437]: https://github.com/home-assistant/core/pull/60437 +[#60445]: https://github.com/home-assistant/core/pull/60445 +[#60451]: https://github.com/home-assistant/core/pull/60451 +[#60645]: https://github.com/home-assistant/core/pull/60645 +[#60682]: https://github.com/home-assistant/core/pull/60682 +[#60900]: https://github.com/home-assistant/core/pull/60900 +[#60909]: https://github.com/home-assistant/core/pull/60909 +[#60933]: https://github.com/home-assistant/core/pull/60933 +[#60935]: https://github.com/home-assistant/core/pull/60935 +[#60936]: https://github.com/home-assistant/core/pull/60936 +[#60937]: https://github.com/home-assistant/core/pull/60937 +[#60940]: https://github.com/home-assistant/core/pull/60940 +[#60942]: https://github.com/home-assistant/core/pull/60942 +[#60943]: https://github.com/home-assistant/core/pull/60943 +[#60944]: https://github.com/home-assistant/core/pull/60944 +[#60948]: https://github.com/home-assistant/core/pull/60948 +[#60951]: https://github.com/home-assistant/core/pull/60951 +[#60956]: https://github.com/home-assistant/core/pull/60956 +[#60975]: https://github.com/home-assistant/core/pull/60975 +[#60993]: https://github.com/home-assistant/core/pull/60993 +[#60997]: https://github.com/home-assistant/core/pull/60997 +[#60999]: https://github.com/home-assistant/core/pull/60999 +[#61004]: https://github.com/home-assistant/core/pull/61004 +[#61006]: https://github.com/home-assistant/core/pull/61006 +[#61007]: https://github.com/home-assistant/core/pull/61007 +[#61008]: https://github.com/home-assistant/core/pull/61008 +[#61009]: https://github.com/home-assistant/core/pull/61009 +[#61012]: https://github.com/home-assistant/core/pull/61012 +[#61013]: https://github.com/home-assistant/core/pull/61013 +[#61014]: https://github.com/home-assistant/core/pull/61014 +[#61015]: https://github.com/home-assistant/core/pull/61015 +[#61016]: https://github.com/home-assistant/core/pull/61016 +[#61017]: https://github.com/home-assistant/core/pull/61017 +[#61021]: https://github.com/home-assistant/core/pull/61021 +[#61032]: https://github.com/home-assistant/core/pull/61032 +[#61049]: https://github.com/home-assistant/core/pull/61049 +[#61065]: https://github.com/home-assistant/core/pull/61065 +[#61068]: https://github.com/home-assistant/core/pull/61068 +[#61072]: https://github.com/home-assistant/core/pull/61072 +[#61078]: https://github.com/home-assistant/core/pull/61078 +[#61089]: https://github.com/home-assistant/core/pull/61089 +[#61090]: https://github.com/home-assistant/core/pull/61090 +[#61094]: https://github.com/home-assistant/core/pull/61094 +[#61098]: https://github.com/home-assistant/core/pull/61098 +[#61100]: https://github.com/home-assistant/core/pull/61100 +[#61104]: https://github.com/home-assistant/core/pull/61104 +[#61107]: https://github.com/home-assistant/core/pull/61107 +[#61109]: https://github.com/home-assistant/core/pull/61109 +[#61130]: https://github.com/home-assistant/core/pull/61130 +[#61132]: https://github.com/home-assistant/core/pull/61132 +[#61137]: https://github.com/home-assistant/core/pull/61137 +[#61138]: https://github.com/home-assistant/core/pull/61138 +[#61141]: https://github.com/home-assistant/core/pull/61141 +[#61146]: https://github.com/home-assistant/core/pull/61146 +[#61149]: https://github.com/home-assistant/core/pull/61149 +[#61153]: https://github.com/home-assistant/core/pull/61153 +[#61155]: https://github.com/home-assistant/core/pull/61155 +[#61157]: https://github.com/home-assistant/core/pull/61157 +[#61161]: https://github.com/home-assistant/core/pull/61161 +[#61167]: https://github.com/home-assistant/core/pull/61167 +[#61168]: https://github.com/home-assistant/core/pull/61168 +[#61170]: https://github.com/home-assistant/core/pull/61170 +[#61172]: https://github.com/home-assistant/core/pull/61172 +[#61177]: https://github.com/home-assistant/core/pull/61177 +[#61179]: https://github.com/home-assistant/core/pull/61179 +[#61187]: https://github.com/home-assistant/core/pull/61187 +[#61192]: https://github.com/home-assistant/core/pull/61192 +[#61198]: https://github.com/home-assistant/core/pull/61198 +[#61200]: https://github.com/home-assistant/core/pull/61200 +[#61215]: https://github.com/home-assistant/core/pull/61215 +[#61218]: https://github.com/home-assistant/core/pull/61218 +[#61222]: https://github.com/home-assistant/core/pull/61222 +[#61231]: https://github.com/home-assistant/core/pull/61231 +[#61237]: https://github.com/home-assistant/core/pull/61237 +[#61242]: https://github.com/home-assistant/core/pull/61242 +[#61243]: https://github.com/home-assistant/core/pull/61243 +[#61244]: https://github.com/home-assistant/core/pull/61244 +[#61245]: https://github.com/home-assistant/core/pull/61245 +[#61246]: https://github.com/home-assistant/core/pull/61246 +[#61247]: https://github.com/home-assistant/core/pull/61247 +[#61248]: https://github.com/home-assistant/core/pull/61248 +[#61249]: https://github.com/home-assistant/core/pull/61249 +[#61250]: https://github.com/home-assistant/core/pull/61250 +[#61255]: https://github.com/home-assistant/core/pull/61255 +[#61256]: https://github.com/home-assistant/core/pull/61256 +[#61258]: https://github.com/home-assistant/core/pull/61258 +[#61259]: https://github.com/home-assistant/core/pull/61259 +[#61260]: https://github.com/home-assistant/core/pull/61260 +[#61261]: https://github.com/home-assistant/core/pull/61261 +[#61262]: https://github.com/home-assistant/core/pull/61262 +[#61263]: https://github.com/home-assistant/core/pull/61263 +[#61264]: https://github.com/home-assistant/core/pull/61264 +[#61265]: https://github.com/home-assistant/core/pull/61265 +[#61266]: https://github.com/home-assistant/core/pull/61266 +[#61268]: https://github.com/home-assistant/core/pull/61268 +[#61270]: https://github.com/home-assistant/core/pull/61270 +[#61271]: https://github.com/home-assistant/core/pull/61271 +[#61272]: https://github.com/home-assistant/core/pull/61272 +[#61273]: https://github.com/home-assistant/core/pull/61273 +[#61274]: https://github.com/home-assistant/core/pull/61274 +[#61275]: https://github.com/home-assistant/core/pull/61275 +[#61276]: https://github.com/home-assistant/core/pull/61276 +[#61278]: https://github.com/home-assistant/core/pull/61278 +[#61279]: https://github.com/home-assistant/core/pull/61279 +[#61280]: https://github.com/home-assistant/core/pull/61280 +[#61281]: https://github.com/home-assistant/core/pull/61281 +[#61282]: https://github.com/home-assistant/core/pull/61282 +[#61284]: https://github.com/home-assistant/core/pull/61284 +[#61285]: https://github.com/home-assistant/core/pull/61285 +[#61288]: https://github.com/home-assistant/core/pull/61288 +[#61289]: https://github.com/home-assistant/core/pull/61289 +[#61290]: https://github.com/home-assistant/core/pull/61290 +[#61291]: https://github.com/home-assistant/core/pull/61291 +[#61292]: https://github.com/home-assistant/core/pull/61292 +[#61294]: https://github.com/home-assistant/core/pull/61294 +[#61295]: https://github.com/home-assistant/core/pull/61295 +[#61309]: https://github.com/home-assistant/core/pull/61309 +[#61313]: https://github.com/home-assistant/core/pull/61313 +[#61314]: https://github.com/home-assistant/core/pull/61314 +[#61315]: https://github.com/home-assistant/core/pull/61315 +[#61316]: https://github.com/home-assistant/core/pull/61316 +[#61318]: https://github.com/home-assistant/core/pull/61318 +[#61319]: https://github.com/home-assistant/core/pull/61319 +[#61320]: https://github.com/home-assistant/core/pull/61320 +[#61321]: https://github.com/home-assistant/core/pull/61321 +[#61322]: https://github.com/home-assistant/core/pull/61322 +[#61323]: https://github.com/home-assistant/core/pull/61323 +[#61324]: https://github.com/home-assistant/core/pull/61324 +[#61325]: https://github.com/home-assistant/core/pull/61325 +[#61326]: https://github.com/home-assistant/core/pull/61326 +[#61327]: https://github.com/home-assistant/core/pull/61327 +[#61328]: https://github.com/home-assistant/core/pull/61328 +[#61329]: https://github.com/home-assistant/core/pull/61329 +[#61330]: https://github.com/home-assistant/core/pull/61330 +[#61331]: https://github.com/home-assistant/core/pull/61331 +[#61332]: https://github.com/home-assistant/core/pull/61332 +[#61333]: https://github.com/home-assistant/core/pull/61333 +[#61334]: https://github.com/home-assistant/core/pull/61334 +[#61335]: https://github.com/home-assistant/core/pull/61335 +[#61337]: https://github.com/home-assistant/core/pull/61337 +[#61339]: https://github.com/home-assistant/core/pull/61339 +[#61340]: https://github.com/home-assistant/core/pull/61340 +[#61341]: https://github.com/home-assistant/core/pull/61341 +[#61342]: https://github.com/home-assistant/core/pull/61342 +[#61343]: https://github.com/home-assistant/core/pull/61343 +[#61344]: https://github.com/home-assistant/core/pull/61344 +[#61345]: https://github.com/home-assistant/core/pull/61345 +[#61346]: https://github.com/home-assistant/core/pull/61346 +[#61348]: https://github.com/home-assistant/core/pull/61348 +[#61349]: https://github.com/home-assistant/core/pull/61349 +[#61350]: https://github.com/home-assistant/core/pull/61350 +[#61351]: https://github.com/home-assistant/core/pull/61351 +[#61352]: https://github.com/home-assistant/core/pull/61352 +[#61353]: https://github.com/home-assistant/core/pull/61353 +[#61354]: https://github.com/home-assistant/core/pull/61354 +[#61355]: https://github.com/home-assistant/core/pull/61355 +[#61357]: https://github.com/home-assistant/core/pull/61357 +[#61359]: https://github.com/home-assistant/core/pull/61359 +[#61361]: https://github.com/home-assistant/core/pull/61361 +[#61362]: https://github.com/home-assistant/core/pull/61362 +[#61363]: https://github.com/home-assistant/core/pull/61363 +[#61371]: https://github.com/home-assistant/core/pull/61371 +[#61372]: https://github.com/home-assistant/core/pull/61372 +[#61374]: https://github.com/home-assistant/core/pull/61374 +[#61375]: https://github.com/home-assistant/core/pull/61375 +[#61376]: https://github.com/home-assistant/core/pull/61376 +[#61377]: https://github.com/home-assistant/core/pull/61377 +[#61378]: https://github.com/home-assistant/core/pull/61378 +[#61379]: https://github.com/home-assistant/core/pull/61379 +[#61380]: https://github.com/home-assistant/core/pull/61380 +[#61381]: https://github.com/home-assistant/core/pull/61381 +[#61382]: https://github.com/home-assistant/core/pull/61382 +[#61383]: https://github.com/home-assistant/core/pull/61383 +[#61385]: https://github.com/home-assistant/core/pull/61385 +[#61386]: https://github.com/home-assistant/core/pull/61386 +[#61387]: https://github.com/home-assistant/core/pull/61387 +[#61388]: https://github.com/home-assistant/core/pull/61388 +[#61389]: https://github.com/home-assistant/core/pull/61389 +[#61390]: https://github.com/home-assistant/core/pull/61390 +[#61391]: https://github.com/home-assistant/core/pull/61391 +[#61400]: https://github.com/home-assistant/core/pull/61400 +[#61423]: https://github.com/home-assistant/core/pull/61423 +[#61424]: https://github.com/home-assistant/core/pull/61424 +[#61425]: https://github.com/home-assistant/core/pull/61425 +[#61428]: https://github.com/home-assistant/core/pull/61428 +[#61431]: https://github.com/home-assistant/core/pull/61431 +[#61432]: https://github.com/home-assistant/core/pull/61432 +[#61434]: https://github.com/home-assistant/core/pull/61434 +[#61436]: https://github.com/home-assistant/core/pull/61436 +[#61437]: https://github.com/home-assistant/core/pull/61437 +[#61438]: https://github.com/home-assistant/core/pull/61438 +[#61439]: https://github.com/home-assistant/core/pull/61439 +[#61440]: https://github.com/home-assistant/core/pull/61440 +[#61441]: https://github.com/home-assistant/core/pull/61441 +[#61442]: https://github.com/home-assistant/core/pull/61442 +[#61443]: https://github.com/home-assistant/core/pull/61443 +[#61444]: https://github.com/home-assistant/core/pull/61444 +[#61445]: https://github.com/home-assistant/core/pull/61445 +[#61446]: https://github.com/home-assistant/core/pull/61446 +[#61447]: https://github.com/home-assistant/core/pull/61447 +[#61449]: https://github.com/home-assistant/core/pull/61449 +[#61456]: https://github.com/home-assistant/core/pull/61456 +[#61460]: https://github.com/home-assistant/core/pull/61460 +[#61461]: https://github.com/home-assistant/core/pull/61461 +[#61467]: https://github.com/home-assistant/core/pull/61467 +[#61468]: https://github.com/home-assistant/core/pull/61468 +[#61470]: https://github.com/home-assistant/core/pull/61470 +[#61472]: https://github.com/home-assistant/core/pull/61472 +[#61473]: https://github.com/home-assistant/core/pull/61473 +[#61474]: https://github.com/home-assistant/core/pull/61474 +[#61476]: https://github.com/home-assistant/core/pull/61476 +[#61483]: https://github.com/home-assistant/core/pull/61483 +[#61484]: https://github.com/home-assistant/core/pull/61484 +[#61492]: https://github.com/home-assistant/core/pull/61492 +[#61495]: https://github.com/home-assistant/core/pull/61495 +[#61496]: https://github.com/home-assistant/core/pull/61496 +[#61508]: https://github.com/home-assistant/core/pull/61508 +[#61515]: https://github.com/home-assistant/core/pull/61515 +[#61517]: https://github.com/home-assistant/core/pull/61517 +[#61518]: https://github.com/home-assistant/core/pull/61518 +[#61520]: https://github.com/home-assistant/core/pull/61520 +[#61522]: https://github.com/home-assistant/core/pull/61522 +[#61526]: https://github.com/home-assistant/core/pull/61526 +[#61536]: https://github.com/home-assistant/core/pull/61536 +[#61538]: https://github.com/home-assistant/core/pull/61538 +[#61571]: https://github.com/home-assistant/core/pull/61571 +[#61574]: https://github.com/home-assistant/core/pull/61574 +[#61575]: https://github.com/home-assistant/core/pull/61575 +[#61576]: https://github.com/home-assistant/core/pull/61576 +[#61589]: https://github.com/home-assistant/core/pull/61589 +[#61595]: https://github.com/home-assistant/core/pull/61595 +[#61605]: https://github.com/home-assistant/core/pull/61605 +[#61607]: https://github.com/home-assistant/core/pull/61607 +[#61608]: https://github.com/home-assistant/core/pull/61608 +[#61609]: https://github.com/home-assistant/core/pull/61609 +[#61610]: https://github.com/home-assistant/core/pull/61610 +[#61611]: https://github.com/home-assistant/core/pull/61611 +[#61613]: https://github.com/home-assistant/core/pull/61613 +[#61617]: https://github.com/home-assistant/core/pull/61617 +[#61641]: https://github.com/home-assistant/core/pull/61641 +[#61646]: https://github.com/home-assistant/core/pull/61646 +[#61647]: https://github.com/home-assistant/core/pull/61647 +[#61650]: https://github.com/home-assistant/core/pull/61650 +[#61653]: https://github.com/home-assistant/core/pull/61653 +[#61655]: https://github.com/home-assistant/core/pull/61655 +[#61656]: https://github.com/home-assistant/core/pull/61656 +[#61657]: https://github.com/home-assistant/core/pull/61657 +[#61658]: https://github.com/home-assistant/core/pull/61658 +[#61660]: https://github.com/home-assistant/core/pull/61660 +[#61661]: https://github.com/home-assistant/core/pull/61661 +[#61665]: https://github.com/home-assistant/core/pull/61665 +[#61678]: https://github.com/home-assistant/core/pull/61678 +[#61689]: https://github.com/home-assistant/core/pull/61689 +[#61691]: https://github.com/home-assistant/core/pull/61691 +[#61716]: https://github.com/home-assistant/core/pull/61716 +[#61719]: https://github.com/home-assistant/core/pull/61719 +[#61720]: https://github.com/home-assistant/core/pull/61720 +[#61721]: https://github.com/home-assistant/core/pull/61721 +[#61722]: https://github.com/home-assistant/core/pull/61722 +[#61724]: https://github.com/home-assistant/core/pull/61724 +[#61732]: https://github.com/home-assistant/core/pull/61732 +[#61734]: https://github.com/home-assistant/core/pull/61734 +[#61735]: https://github.com/home-assistant/core/pull/61735 +[#61738]: https://github.com/home-assistant/core/pull/61738 +[#61741]: https://github.com/home-assistant/core/pull/61741 +[#61742]: https://github.com/home-assistant/core/pull/61742 +[#61743]: https://github.com/home-assistant/core/pull/61743 +[#61746]: https://github.com/home-assistant/core/pull/61746 +[#61748]: https://github.com/home-assistant/core/pull/61748 +[#61757]: https://github.com/home-assistant/core/pull/61757 +[#61758]: https://github.com/home-assistant/core/pull/61758 +[#61759]: https://github.com/home-assistant/core/pull/61759 +[#61760]: https://github.com/home-assistant/core/pull/61760 +[#61761]: https://github.com/home-assistant/core/pull/61761 +[#61763]: https://github.com/home-assistant/core/pull/61763 +[#61764]: https://github.com/home-assistant/core/pull/61764 +[#61765]: https://github.com/home-assistant/core/pull/61765 +[#61768]: https://github.com/home-assistant/core/pull/61768 +[#61770]: https://github.com/home-assistant/core/pull/61770 +[#61771]: https://github.com/home-assistant/core/pull/61771 +[#61772]: https://github.com/home-assistant/core/pull/61772 +[#61776]: https://github.com/home-assistant/core/pull/61776 +[#61777]: https://github.com/home-assistant/core/pull/61777 +[#61780]: https://github.com/home-assistant/core/pull/61780 +[#61781]: https://github.com/home-assistant/core/pull/61781 +[#61786]: https://github.com/home-assistant/core/pull/61786 +[#61793]: https://github.com/home-assistant/core/pull/61793 +[#61799]: https://github.com/home-assistant/core/pull/61799 +[#61800]: https://github.com/home-assistant/core/pull/61800 +[#61801]: https://github.com/home-assistant/core/pull/61801 +[#61802]: https://github.com/home-assistant/core/pull/61802 +[#61803]: https://github.com/home-assistant/core/pull/61803 +[#61804]: https://github.com/home-assistant/core/pull/61804 +[#61805]: https://github.com/home-assistant/core/pull/61805 +[#61816]: https://github.com/home-assistant/core/pull/61816 +[#61822]: https://github.com/home-assistant/core/pull/61822 +[#61823]: https://github.com/home-assistant/core/pull/61823 +[#61824]: https://github.com/home-assistant/core/pull/61824 +[#61825]: https://github.com/home-assistant/core/pull/61825 +[#61827]: https://github.com/home-assistant/core/pull/61827 +[#61828]: https://github.com/home-assistant/core/pull/61828 +[#61837]: https://github.com/home-assistant/core/pull/61837 +[#61839]: https://github.com/home-assistant/core/pull/61839 +[#61840]: https://github.com/home-assistant/core/pull/61840 +[#61844]: https://github.com/home-assistant/core/pull/61844 +[#61853]: https://github.com/home-assistant/core/pull/61853 +[#61856]: https://github.com/home-assistant/core/pull/61856 +[#61857]: https://github.com/home-assistant/core/pull/61857 +[#61858]: https://github.com/home-assistant/core/pull/61858 +[#61859]: https://github.com/home-assistant/core/pull/61859 +[#61860]: https://github.com/home-assistant/core/pull/61860 +[#61861]: https://github.com/home-assistant/core/pull/61861 +[#61862]: https://github.com/home-assistant/core/pull/61862 +[#61863]: https://github.com/home-assistant/core/pull/61863 +[#61865]: https://github.com/home-assistant/core/pull/61865 +[#61866]: https://github.com/home-assistant/core/pull/61866 +[#61867]: https://github.com/home-assistant/core/pull/61867 +[#61868]: https://github.com/home-assistant/core/pull/61868 +[#61869]: https://github.com/home-assistant/core/pull/61869 +[#61870]: https://github.com/home-assistant/core/pull/61870 +[#61871]: https://github.com/home-assistant/core/pull/61871 +[#61879]: https://github.com/home-assistant/core/pull/61879 +[#61881]: https://github.com/home-assistant/core/pull/61881 +[#61882]: https://github.com/home-assistant/core/pull/61882 +[#61883]: https://github.com/home-assistant/core/pull/61883 +[#61884]: https://github.com/home-assistant/core/pull/61884 +[#61885]: https://github.com/home-assistant/core/pull/61885 +[#61886]: https://github.com/home-assistant/core/pull/61886 +[#61887]: https://github.com/home-assistant/core/pull/61887 +[#61888]: https://github.com/home-assistant/core/pull/61888 +[#61889]: https://github.com/home-assistant/core/pull/61889 +[#61890]: https://github.com/home-assistant/core/pull/61890 +[#61894]: https://github.com/home-assistant/core/pull/61894 +[#61895]: https://github.com/home-assistant/core/pull/61895 +[#61896]: https://github.com/home-assistant/core/pull/61896 +[#61897]: https://github.com/home-assistant/core/pull/61897 +[#61898]: https://github.com/home-assistant/core/pull/61898 +[#61899]: https://github.com/home-assistant/core/pull/61899 +[#61900]: https://github.com/home-assistant/core/pull/61900 +[#61904]: https://github.com/home-assistant/core/pull/61904 +[#61906]: https://github.com/home-assistant/core/pull/61906 +[#61908]: https://github.com/home-assistant/core/pull/61908 +[#61914]: https://github.com/home-assistant/core/pull/61914 +[#61915]: https://github.com/home-assistant/core/pull/61915 +[#61918]: https://github.com/home-assistant/core/pull/61918 +[#61919]: https://github.com/home-assistant/core/pull/61919 +[#61922]: https://github.com/home-assistant/core/pull/61922 +[#61923]: https://github.com/home-assistant/core/pull/61923 +[#61924]: https://github.com/home-assistant/core/pull/61924 +[#61925]: https://github.com/home-assistant/core/pull/61925 +[#61927]: https://github.com/home-assistant/core/pull/61927 +[#61929]: https://github.com/home-assistant/core/pull/61929 +[#61930]: https://github.com/home-assistant/core/pull/61930 +[#61931]: https://github.com/home-assistant/core/pull/61931 +[#61932]: https://github.com/home-assistant/core/pull/61932 +[#61933]: https://github.com/home-assistant/core/pull/61933 +[#61934]: https://github.com/home-assistant/core/pull/61934 +[#61935]: https://github.com/home-assistant/core/pull/61935 +[#61936]: https://github.com/home-assistant/core/pull/61936 +[#61937]: https://github.com/home-assistant/core/pull/61937 +[#61938]: https://github.com/home-assistant/core/pull/61938 +[#61939]: https://github.com/home-assistant/core/pull/61939 +[#61940]: https://github.com/home-assistant/core/pull/61940 +[#61941]: https://github.com/home-assistant/core/pull/61941 +[#61942]: https://github.com/home-assistant/core/pull/61942 +[#61943]: https://github.com/home-assistant/core/pull/61943 +[#61946]: https://github.com/home-assistant/core/pull/61946 +[#61947]: https://github.com/home-assistant/core/pull/61947 +[#61948]: https://github.com/home-assistant/core/pull/61948 +[#61949]: https://github.com/home-assistant/core/pull/61949 +[#61950]: https://github.com/home-assistant/core/pull/61950 +[#61951]: https://github.com/home-assistant/core/pull/61951 +[#61952]: https://github.com/home-assistant/core/pull/61952 +[#61953]: https://github.com/home-assistant/core/pull/61953 +[#61954]: https://github.com/home-assistant/core/pull/61954 +[#61955]: https://github.com/home-assistant/core/pull/61955 +[#61959]: https://github.com/home-assistant/core/pull/61959 +[#61960]: https://github.com/home-assistant/core/pull/61960 +[#61961]: https://github.com/home-assistant/core/pull/61961 +[#61962]: https://github.com/home-assistant/core/pull/61962 +[#61964]: https://github.com/home-assistant/core/pull/61964 +[#61966]: https://github.com/home-assistant/core/pull/61966 +[#61967]: https://github.com/home-assistant/core/pull/61967 +[#61968]: https://github.com/home-assistant/core/pull/61968 +[#61969]: https://github.com/home-assistant/core/pull/61969 +[#61970]: https://github.com/home-assistant/core/pull/61970 +[#61971]: https://github.com/home-assistant/core/pull/61971 +[#61973]: https://github.com/home-assistant/core/pull/61973 +[#61975]: https://github.com/home-assistant/core/pull/61975 +[#61976]: https://github.com/home-assistant/core/pull/61976 +[#61977]: https://github.com/home-assistant/core/pull/61977 +[#61978]: https://github.com/home-assistant/core/pull/61978 +[#61979]: https://github.com/home-assistant/core/pull/61979 +[#61980]: https://github.com/home-assistant/core/pull/61980 +[#61981]: https://github.com/home-assistant/core/pull/61981 +[#61982]: https://github.com/home-assistant/core/pull/61982 +[#61983]: https://github.com/home-assistant/core/pull/61983 +[#61984]: https://github.com/home-assistant/core/pull/61984 +[#61985]: https://github.com/home-assistant/core/pull/61985 +[#61986]: https://github.com/home-assistant/core/pull/61986 +[#61987]: https://github.com/home-assistant/core/pull/61987 +[#61988]: https://github.com/home-assistant/core/pull/61988 +[#61989]: https://github.com/home-assistant/core/pull/61989 +[#61990]: https://github.com/home-assistant/core/pull/61990 +[#61991]: https://github.com/home-assistant/core/pull/61991 +[#61992]: https://github.com/home-assistant/core/pull/61992 +[#61993]: https://github.com/home-assistant/core/pull/61993 +[#61994]: https://github.com/home-assistant/core/pull/61994 +[#61995]: https://github.com/home-assistant/core/pull/61995 +[#61997]: https://github.com/home-assistant/core/pull/61997 +[#61998]: https://github.com/home-assistant/core/pull/61998 +[#61999]: https://github.com/home-assistant/core/pull/61999 +[#62000]: https://github.com/home-assistant/core/pull/62000 +[#62003]: https://github.com/home-assistant/core/pull/62003 +[#62004]: https://github.com/home-assistant/core/pull/62004 +[#62006]: https://github.com/home-assistant/core/pull/62006 +[#62008]: https://github.com/home-assistant/core/pull/62008 +[#62010]: https://github.com/home-assistant/core/pull/62010 +[#62011]: https://github.com/home-assistant/core/pull/62011 +[#62020]: https://github.com/home-assistant/core/pull/62020 +[#62021]: https://github.com/home-assistant/core/pull/62021 +[#62022]: https://github.com/home-assistant/core/pull/62022 +[#62023]: https://github.com/home-assistant/core/pull/62023 +[#62024]: https://github.com/home-assistant/core/pull/62024 +[#62025]: https://github.com/home-assistant/core/pull/62025 +[#62026]: https://github.com/home-assistant/core/pull/62026 +[#62027]: https://github.com/home-assistant/core/pull/62027 +[#62028]: https://github.com/home-assistant/core/pull/62028 +[#62029]: https://github.com/home-assistant/core/pull/62029 +[#62030]: https://github.com/home-assistant/core/pull/62030 +[#62031]: https://github.com/home-assistant/core/pull/62031 +[#62032]: https://github.com/home-assistant/core/pull/62032 +[#62033]: https://github.com/home-assistant/core/pull/62033 +[#62035]: https://github.com/home-assistant/core/pull/62035 +[#62036]: https://github.com/home-assistant/core/pull/62036 +[#62037]: https://github.com/home-assistant/core/pull/62037 +[#62038]: https://github.com/home-assistant/core/pull/62038 +[#62039]: https://github.com/home-assistant/core/pull/62039 +[#62040]: https://github.com/home-assistant/core/pull/62040 +[#62041]: https://github.com/home-assistant/core/pull/62041 +[#62042]: https://github.com/home-assistant/core/pull/62042 +[#62043]: https://github.com/home-assistant/core/pull/62043 +[#62044]: https://github.com/home-assistant/core/pull/62044 +[#62045]: https://github.com/home-assistant/core/pull/62045 +[#62046]: https://github.com/home-assistant/core/pull/62046 +[#62047]: https://github.com/home-assistant/core/pull/62047 +[#62048]: https://github.com/home-assistant/core/pull/62048 +[#62049]: https://github.com/home-assistant/core/pull/62049 +[#62050]: https://github.com/home-assistant/core/pull/62050 +[#62051]: https://github.com/home-assistant/core/pull/62051 +[#62052]: https://github.com/home-assistant/core/pull/62052 +[#62053]: https://github.com/home-assistant/core/pull/62053 +[#62055]: https://github.com/home-assistant/core/pull/62055 +[#62056]: https://github.com/home-assistant/core/pull/62056 +[#62057]: https://github.com/home-assistant/core/pull/62057 +[#62058]: https://github.com/home-assistant/core/pull/62058 +[#62059]: https://github.com/home-assistant/core/pull/62059 +[#62060]: https://github.com/home-assistant/core/pull/62060 +[#62061]: https://github.com/home-assistant/core/pull/62061 +[#62062]: https://github.com/home-assistant/core/pull/62062 +[#62063]: https://github.com/home-assistant/core/pull/62063 +[#62064]: https://github.com/home-assistant/core/pull/62064 +[#62065]: https://github.com/home-assistant/core/pull/62065 +[#62066]: https://github.com/home-assistant/core/pull/62066 +[#62067]: https://github.com/home-assistant/core/pull/62067 +[#62069]: https://github.com/home-assistant/core/pull/62069 +[#62070]: https://github.com/home-assistant/core/pull/62070 +[#62071]: https://github.com/home-assistant/core/pull/62071 +[#62072]: https://github.com/home-assistant/core/pull/62072 +[#62073]: https://github.com/home-assistant/core/pull/62073 +[#62076]: https://github.com/home-assistant/core/pull/62076 +[#62077]: https://github.com/home-assistant/core/pull/62077 +[#62078]: https://github.com/home-assistant/core/pull/62078 +[#62079]: https://github.com/home-assistant/core/pull/62079 +[#62080]: https://github.com/home-assistant/core/pull/62080 +[#62081]: https://github.com/home-assistant/core/pull/62081 +[#62082]: https://github.com/home-assistant/core/pull/62082 +[#62083]: https://github.com/home-assistant/core/pull/62083 +[#62084]: https://github.com/home-assistant/core/pull/62084 +[#62085]: https://github.com/home-assistant/core/pull/62085 +[#62086]: https://github.com/home-assistant/core/pull/62086 +[#62087]: https://github.com/home-assistant/core/pull/62087 +[#62088]: https://github.com/home-assistant/core/pull/62088 +[#62090]: https://github.com/home-assistant/core/pull/62090 +[#62091]: https://github.com/home-assistant/core/pull/62091 +[#62093]: https://github.com/home-assistant/core/pull/62093 +[#62095]: https://github.com/home-assistant/core/pull/62095 +[#62096]: https://github.com/home-assistant/core/pull/62096 +[#62103]: https://github.com/home-assistant/core/pull/62103 +[#62104]: https://github.com/home-assistant/core/pull/62104 +[#62105]: https://github.com/home-assistant/core/pull/62105 +[#62108]: https://github.com/home-assistant/core/pull/62108 +[#62109]: https://github.com/home-assistant/core/pull/62109 +[#62110]: https://github.com/home-assistant/core/pull/62110 +[#62112]: https://github.com/home-assistant/core/pull/62112 +[#62113]: https://github.com/home-assistant/core/pull/62113 +[#62114]: https://github.com/home-assistant/core/pull/62114 +[#62116]: https://github.com/home-assistant/core/pull/62116 +[#62117]: https://github.com/home-assistant/core/pull/62117 +[#62118]: https://github.com/home-assistant/core/pull/62118 +[#62119]: https://github.com/home-assistant/core/pull/62119 +[#62121]: https://github.com/home-assistant/core/pull/62121 +[#62122]: https://github.com/home-assistant/core/pull/62122 +[#62123]: https://github.com/home-assistant/core/pull/62123 +[#62130]: https://github.com/home-assistant/core/pull/62130 +[#62131]: https://github.com/home-assistant/core/pull/62131 +[#62132]: https://github.com/home-assistant/core/pull/62132 +[#62133]: https://github.com/home-assistant/core/pull/62133 +[#62134]: https://github.com/home-assistant/core/pull/62134 +[#62135]: https://github.com/home-assistant/core/pull/62135 +[#62136]: https://github.com/home-assistant/core/pull/62136 +[#62137]: https://github.com/home-assistant/core/pull/62137 +[#62138]: https://github.com/home-assistant/core/pull/62138 +[#62140]: https://github.com/home-assistant/core/pull/62140 +[#62141]: https://github.com/home-assistant/core/pull/62141 +[#62142]: https://github.com/home-assistant/core/pull/62142 +[#62143]: https://github.com/home-assistant/core/pull/62143 +[#62144]: https://github.com/home-assistant/core/pull/62144 +[#62150]: https://github.com/home-assistant/core/pull/62150 +[#62151]: https://github.com/home-assistant/core/pull/62151 +[#62152]: https://github.com/home-assistant/core/pull/62152 +[#62153]: https://github.com/home-assistant/core/pull/62153 +[#62157]: https://github.com/home-assistant/core/pull/62157 +[#62158]: https://github.com/home-assistant/core/pull/62158 +[#62159]: https://github.com/home-assistant/core/pull/62159 +[#62165]: https://github.com/home-assistant/core/pull/62165 +[#62171]: https://github.com/home-assistant/core/pull/62171 +[#62173]: https://github.com/home-assistant/core/pull/62173 +[#62175]: https://github.com/home-assistant/core/pull/62175 +[#62176]: https://github.com/home-assistant/core/pull/62176 +[#62179]: https://github.com/home-assistant/core/pull/62179 +[#62180]: https://github.com/home-assistant/core/pull/62180 +[#62181]: https://github.com/home-assistant/core/pull/62181 +[#62185]: https://github.com/home-assistant/core/pull/62185 +[#62187]: https://github.com/home-assistant/core/pull/62187 +[#62189]: https://github.com/home-assistant/core/pull/62189 +[#62190]: https://github.com/home-assistant/core/pull/62190 +[#62191]: https://github.com/home-assistant/core/pull/62191 +[#62192]: https://github.com/home-assistant/core/pull/62192 +[#62194]: https://github.com/home-assistant/core/pull/62194 +[#62195]: https://github.com/home-assistant/core/pull/62195 +[#62196]: https://github.com/home-assistant/core/pull/62196 +[#62197]: https://github.com/home-assistant/core/pull/62197 +[#62198]: https://github.com/home-assistant/core/pull/62198 +[#62201]: https://github.com/home-assistant/core/pull/62201 +[#62202]: https://github.com/home-assistant/core/pull/62202 +[#62203]: https://github.com/home-assistant/core/pull/62203 +[#62204]: https://github.com/home-assistant/core/pull/62204 +[#62205]: https://github.com/home-assistant/core/pull/62205 +[#62206]: https://github.com/home-assistant/core/pull/62206 +[#62208]: https://github.com/home-assistant/core/pull/62208 +[#62209]: https://github.com/home-assistant/core/pull/62209 +[#62210]: https://github.com/home-assistant/core/pull/62210 +[#62212]: https://github.com/home-assistant/core/pull/62212 +[#62213]: https://github.com/home-assistant/core/pull/62213 +[#62216]: https://github.com/home-assistant/core/pull/62216 +[#62217]: https://github.com/home-assistant/core/pull/62217 +[#62218]: https://github.com/home-assistant/core/pull/62218 +[#62219]: https://github.com/home-assistant/core/pull/62219 +[#62220]: https://github.com/home-assistant/core/pull/62220 +[#62221]: https://github.com/home-assistant/core/pull/62221 +[#62228]: https://github.com/home-assistant/core/pull/62228 +[#62239]: https://github.com/home-assistant/core/pull/62239 +[#62243]: https://github.com/home-assistant/core/pull/62243 +[#62249]: https://github.com/home-assistant/core/pull/62249 +[#62254]: https://github.com/home-assistant/core/pull/62254 +[#62255]: https://github.com/home-assistant/core/pull/62255 +[#62256]: https://github.com/home-assistant/core/pull/62256 +[#62258]: https://github.com/home-assistant/core/pull/62258 +[#62260]: https://github.com/home-assistant/core/pull/62260 +[#62262]: https://github.com/home-assistant/core/pull/62262 +[#62263]: https://github.com/home-assistant/core/pull/62263 +[#62266]: https://github.com/home-assistant/core/pull/62266 +[#62268]: https://github.com/home-assistant/core/pull/62268 +[#62274]: https://github.com/home-assistant/core/pull/62274 +[#62282]: https://github.com/home-assistant/core/pull/62282 +[#62284]: https://github.com/home-assistant/core/pull/62284 +[#62285]: https://github.com/home-assistant/core/pull/62285 +[#62293]: https://github.com/home-assistant/core/pull/62293 +[#62294]: https://github.com/home-assistant/core/pull/62294 +[#62300]: https://github.com/home-assistant/core/pull/62300 +[#62301]: https://github.com/home-assistant/core/pull/62301 +[#62303]: https://github.com/home-assistant/core/pull/62303 +[#62311]: https://github.com/home-assistant/core/pull/62311 +[#62313]: https://github.com/home-assistant/core/pull/62313 +[#62317]: https://github.com/home-assistant/core/pull/62317 +[#62320]: https://github.com/home-assistant/core/pull/62320 +[#62321]: https://github.com/home-assistant/core/pull/62321 +[#62323]: https://github.com/home-assistant/core/pull/62323 +[#62324]: https://github.com/home-assistant/core/pull/62324 +[#62326]: https://github.com/home-assistant/core/pull/62326 +[#62327]: https://github.com/home-assistant/core/pull/62327 +[#62328]: https://github.com/home-assistant/core/pull/62328 +[#62334]: https://github.com/home-assistant/core/pull/62334 +[#62335]: https://github.com/home-assistant/core/pull/62335 +[#62336]: https://github.com/home-assistant/core/pull/62336 +[#62337]: https://github.com/home-assistant/core/pull/62337 +[#62341]: https://github.com/home-assistant/core/pull/62341 +[#62342]: https://github.com/home-assistant/core/pull/62342 +[#62343]: https://github.com/home-assistant/core/pull/62343 +[#62344]: https://github.com/home-assistant/core/pull/62344 +[#62348]: https://github.com/home-assistant/core/pull/62348 +[#62349]: https://github.com/home-assistant/core/pull/62349 +[#62350]: https://github.com/home-assistant/core/pull/62350 +[#62351]: https://github.com/home-assistant/core/pull/62351 +[#62352]: https://github.com/home-assistant/core/pull/62352 +[#62354]: https://github.com/home-assistant/core/pull/62354 +[#62359]: https://github.com/home-assistant/core/pull/62359 +[#62365]: https://github.com/home-assistant/core/pull/62365 +[#62371]: https://github.com/home-assistant/core/pull/62371 +[#62372]: https://github.com/home-assistant/core/pull/62372 +[#62373]: https://github.com/home-assistant/core/pull/62373 +[#62374]: https://github.com/home-assistant/core/pull/62374 +[#62376]: https://github.com/home-assistant/core/pull/62376 +[#62377]: https://github.com/home-assistant/core/pull/62377 +[#62378]: https://github.com/home-assistant/core/pull/62378 +[#62380]: https://github.com/home-assistant/core/pull/62380 +[#62381]: https://github.com/home-assistant/core/pull/62381 +[#62382]: https://github.com/home-assistant/core/pull/62382 +[#62383]: https://github.com/home-assistant/core/pull/62383 +[#62384]: https://github.com/home-assistant/core/pull/62384 +[#62391]: https://github.com/home-assistant/core/pull/62391 +[#62395]: https://github.com/home-assistant/core/pull/62395 +[#62396]: https://github.com/home-assistant/core/pull/62396 +[#62397]: https://github.com/home-assistant/core/pull/62397 +[#62398]: https://github.com/home-assistant/core/pull/62398 +[#62399]: https://github.com/home-assistant/core/pull/62399 +[#62400]: https://github.com/home-assistant/core/pull/62400 +[#62401]: https://github.com/home-assistant/core/pull/62401 +[#62402]: https://github.com/home-assistant/core/pull/62402 +[#62403]: https://github.com/home-assistant/core/pull/62403 +[#62404]: https://github.com/home-assistant/core/pull/62404 +[#62405]: https://github.com/home-assistant/core/pull/62405 +[#62406]: https://github.com/home-assistant/core/pull/62406 +[#62407]: https://github.com/home-assistant/core/pull/62407 +[#62410]: https://github.com/home-assistant/core/pull/62410 +[#62415]: https://github.com/home-assistant/core/pull/62415 +[#62416]: https://github.com/home-assistant/core/pull/62416 +[#62417]: https://github.com/home-assistant/core/pull/62417 +[#62418]: https://github.com/home-assistant/core/pull/62418 +[#62422]: https://github.com/home-assistant/core/pull/62422 +[#62423]: https://github.com/home-assistant/core/pull/62423 +[#62424]: https://github.com/home-assistant/core/pull/62424 +[#62425]: https://github.com/home-assistant/core/pull/62425 +[#62426]: https://github.com/home-assistant/core/pull/62426 +[#62427]: https://github.com/home-assistant/core/pull/62427 +[#62428]: https://github.com/home-assistant/core/pull/62428 +[#62429]: https://github.com/home-assistant/core/pull/62429 +[#62430]: https://github.com/home-assistant/core/pull/62430 +[#62431]: https://github.com/home-assistant/core/pull/62431 +[#62432]: https://github.com/home-assistant/core/pull/62432 +[#62433]: https://github.com/home-assistant/core/pull/62433 +[#62434]: https://github.com/home-assistant/core/pull/62434 +[#62436]: https://github.com/home-assistant/core/pull/62436 +[#62438]: https://github.com/home-assistant/core/pull/62438 +[#62439]: https://github.com/home-assistant/core/pull/62439 +[#62440]: https://github.com/home-assistant/core/pull/62440 +[#62441]: https://github.com/home-assistant/core/pull/62441 +[#62443]: https://github.com/home-assistant/core/pull/62443 +[#62445]: https://github.com/home-assistant/core/pull/62445 +[#62449]: https://github.com/home-assistant/core/pull/62449 +[#62450]: https://github.com/home-assistant/core/pull/62450 +[#62454]: https://github.com/home-assistant/core/pull/62454 +[#62455]: https://github.com/home-assistant/core/pull/62455 +[#62457]: https://github.com/home-assistant/core/pull/62457 +[#62462]: https://github.com/home-assistant/core/pull/62462 +[#62464]: https://github.com/home-assistant/core/pull/62464 +[#62466]: https://github.com/home-assistant/core/pull/62466 +[#62468]: https://github.com/home-assistant/core/pull/62468 +[#62469]: https://github.com/home-assistant/core/pull/62469 +[#62470]: https://github.com/home-assistant/core/pull/62470 +[#62471]: https://github.com/home-assistant/core/pull/62471 +[#62472]: https://github.com/home-assistant/core/pull/62472 +[#62476]: https://github.com/home-assistant/core/pull/62476 +[#62479]: https://github.com/home-assistant/core/pull/62479 +[#62480]: https://github.com/home-assistant/core/pull/62480 +[#62484]: https://github.com/home-assistant/core/pull/62484 +[#62485]: https://github.com/home-assistant/core/pull/62485 +[#62486]: https://github.com/home-assistant/core/pull/62486 +[#62487]: https://github.com/home-assistant/core/pull/62487 +[#62488]: https://github.com/home-assistant/core/pull/62488 +[#62489]: https://github.com/home-assistant/core/pull/62489 +[#62491]: https://github.com/home-assistant/core/pull/62491 +[#62492]: https://github.com/home-assistant/core/pull/62492 +[#62493]: https://github.com/home-assistant/core/pull/62493 +[#62495]: https://github.com/home-assistant/core/pull/62495 +[#62496]: https://github.com/home-assistant/core/pull/62496 +[#62498]: https://github.com/home-assistant/core/pull/62498 +[#62501]: https://github.com/home-assistant/core/pull/62501 +[#62508]: https://github.com/home-assistant/core/pull/62508 +[#62509]: https://github.com/home-assistant/core/pull/62509 +[#62511]: https://github.com/home-assistant/core/pull/62511 +[#62512]: https://github.com/home-assistant/core/pull/62512 +[#62513]: https://github.com/home-assistant/core/pull/62513 +[#62515]: https://github.com/home-assistant/core/pull/62515 +[#62516]: https://github.com/home-assistant/core/pull/62516 +[#62517]: https://github.com/home-assistant/core/pull/62517 +[#62518]: https://github.com/home-assistant/core/pull/62518 +[#62519]: https://github.com/home-assistant/core/pull/62519 +[#62520]: https://github.com/home-assistant/core/pull/62520 +[#62521]: https://github.com/home-assistant/core/pull/62521 +[#62522]: https://github.com/home-assistant/core/pull/62522 +[#62524]: https://github.com/home-assistant/core/pull/62524 +[#62525]: https://github.com/home-assistant/core/pull/62525 +[#62526]: https://github.com/home-assistant/core/pull/62526 +[#62531]: https://github.com/home-assistant/core/pull/62531 +[#62532]: https://github.com/home-assistant/core/pull/62532 +[#62537]: https://github.com/home-assistant/core/pull/62537 +[#62538]: https://github.com/home-assistant/core/pull/62538 +[#62541]: https://github.com/home-assistant/core/pull/62541 +[#62542]: https://github.com/home-assistant/core/pull/62542 +[#62543]: https://github.com/home-assistant/core/pull/62543 +[#62547]: https://github.com/home-assistant/core/pull/62547 +[#62548]: https://github.com/home-assistant/core/pull/62548 +[#62549]: https://github.com/home-assistant/core/pull/62549 +[#62550]: https://github.com/home-assistant/core/pull/62550 +[#62551]: https://github.com/home-assistant/core/pull/62551 +[#62553]: https://github.com/home-assistant/core/pull/62553 +[#62555]: https://github.com/home-assistant/core/pull/62555 +[#62558]: https://github.com/home-assistant/core/pull/62558 +[#62561]: https://github.com/home-assistant/core/pull/62561 +[#62564]: https://github.com/home-assistant/core/pull/62564 +[#62565]: https://github.com/home-assistant/core/pull/62565 +[#62569]: https://github.com/home-assistant/core/pull/62569 +[#62570]: https://github.com/home-assistant/core/pull/62570 +[#62574]: https://github.com/home-assistant/core/pull/62574 +[#62576]: https://github.com/home-assistant/core/pull/62576 +[#62577]: https://github.com/home-assistant/core/pull/62577 +[#62578]: https://github.com/home-assistant/core/pull/62578 +[#62580]: https://github.com/home-assistant/core/pull/62580 +[#62583]: https://github.com/home-assistant/core/pull/62583 +[#62584]: https://github.com/home-assistant/core/pull/62584 +[#62585]: https://github.com/home-assistant/core/pull/62585 +[#62588]: https://github.com/home-assistant/core/pull/62588 +[#62589]: https://github.com/home-assistant/core/pull/62589 +[#62590]: https://github.com/home-assistant/core/pull/62590 +[#62592]: https://github.com/home-assistant/core/pull/62592 +[#62593]: https://github.com/home-assistant/core/pull/62593 +[#62594]: https://github.com/home-assistant/core/pull/62594 +[#62596]: https://github.com/home-assistant/core/pull/62596 +[#62597]: https://github.com/home-assistant/core/pull/62597 +[#62599]: https://github.com/home-assistant/core/pull/62599 +[#62600]: https://github.com/home-assistant/core/pull/62600 +[#62601]: https://github.com/home-assistant/core/pull/62601 +[#62607]: https://github.com/home-assistant/core/pull/62607 +[#62611]: https://github.com/home-assistant/core/pull/62611 +[#62612]: https://github.com/home-assistant/core/pull/62612 +[#62614]: https://github.com/home-assistant/core/pull/62614 +[#62616]: https://github.com/home-assistant/core/pull/62616 +[#62618]: https://github.com/home-assistant/core/pull/62618 +[#62622]: https://github.com/home-assistant/core/pull/62622 +[#62625]: https://github.com/home-assistant/core/pull/62625 +[#62627]: https://github.com/home-assistant/core/pull/62627 +[#62628]: https://github.com/home-assistant/core/pull/62628 +[#62629]: https://github.com/home-assistant/core/pull/62629 +[#62632]: https://github.com/home-assistant/core/pull/62632 +[#62634]: https://github.com/home-assistant/core/pull/62634 +[#62635]: https://github.com/home-assistant/core/pull/62635 +[#62636]: https://github.com/home-assistant/core/pull/62636 +[#62637]: https://github.com/home-assistant/core/pull/62637 +[#62638]: https://github.com/home-assistant/core/pull/62638 +[#62639]: https://github.com/home-assistant/core/pull/62639 +[#62640]: https://github.com/home-assistant/core/pull/62640 +[#62642]: https://github.com/home-assistant/core/pull/62642 +[#62643]: https://github.com/home-assistant/core/pull/62643 +[#62645]: https://github.com/home-assistant/core/pull/62645 +[#62646]: https://github.com/home-assistant/core/pull/62646 +[#62648]: https://github.com/home-assistant/core/pull/62648 +[#62649]: https://github.com/home-assistant/core/pull/62649 +[#62650]: https://github.com/home-assistant/core/pull/62650 +[#62663]: https://github.com/home-assistant/core/pull/62663 +[#62667]: https://github.com/home-assistant/core/pull/62667 +[#62668]: https://github.com/home-assistant/core/pull/62668 +[#62673]: https://github.com/home-assistant/core/pull/62673 +[#62675]: https://github.com/home-assistant/core/pull/62675 +[#62677]: https://github.com/home-assistant/core/pull/62677 +[#62680]: https://github.com/home-assistant/core/pull/62680 +[#62681]: https://github.com/home-assistant/core/pull/62681 +[#62682]: https://github.com/home-assistant/core/pull/62682 +[#62683]: https://github.com/home-assistant/core/pull/62683 +[#62692]: https://github.com/home-assistant/core/pull/62692 +[#62693]: https://github.com/home-assistant/core/pull/62693 +[#62697]: https://github.com/home-assistant/core/pull/62697 +[#62705]: https://github.com/home-assistant/core/pull/62705 +[#62707]: https://github.com/home-assistant/core/pull/62707 +[#62708]: https://github.com/home-assistant/core/pull/62708 +[#62711]: https://github.com/home-assistant/core/pull/62711 +[#62712]: https://github.com/home-assistant/core/pull/62712 +[#62713]: https://github.com/home-assistant/core/pull/62713 +[#62714]: https://github.com/home-assistant/core/pull/62714 +[#62716]: https://github.com/home-assistant/core/pull/62716 +[#62718]: https://github.com/home-assistant/core/pull/62718 +[#62719]: https://github.com/home-assistant/core/pull/62719 +[#62725]: https://github.com/home-assistant/core/pull/62725 +[#62727]: https://github.com/home-assistant/core/pull/62727 +[#62730]: https://github.com/home-assistant/core/pull/62730 +[#62732]: https://github.com/home-assistant/core/pull/62732 +[#62736]: https://github.com/home-assistant/core/pull/62736 +[#62737]: https://github.com/home-assistant/core/pull/62737 +[#62738]: https://github.com/home-assistant/core/pull/62738 +[#62739]: https://github.com/home-assistant/core/pull/62739 +[#62743]: https://github.com/home-assistant/core/pull/62743 +[#62744]: https://github.com/home-assistant/core/pull/62744 +[#62746]: https://github.com/home-assistant/core/pull/62746 +[#62747]: https://github.com/home-assistant/core/pull/62747 +[#62748]: https://github.com/home-assistant/core/pull/62748 +[#62752]: https://github.com/home-assistant/core/pull/62752 +[#62755]: https://github.com/home-assistant/core/pull/62755 +[#62757]: https://github.com/home-assistant/core/pull/62757 +[#62758]: https://github.com/home-assistant/core/pull/62758 +[#62759]: https://github.com/home-assistant/core/pull/62759 +[#62761]: https://github.com/home-assistant/core/pull/62761 +[#62765]: https://github.com/home-assistant/core/pull/62765 +[#62769]: https://github.com/home-assistant/core/pull/62769 +[#62770]: https://github.com/home-assistant/core/pull/62770 +[#62773]: https://github.com/home-assistant/core/pull/62773 +[#62775]: https://github.com/home-assistant/core/pull/62775 +[#62778]: https://github.com/home-assistant/core/pull/62778 +[#62779]: https://github.com/home-assistant/core/pull/62779 +[#62780]: https://github.com/home-assistant/core/pull/62780 +[#62783]: https://github.com/home-assistant/core/pull/62783 +[#62785]: https://github.com/home-assistant/core/pull/62785 +[#62786]: https://github.com/home-assistant/core/pull/62786 +[#62789]: https://github.com/home-assistant/core/pull/62789 +[#62790]: https://github.com/home-assistant/core/pull/62790 +[#62793]: https://github.com/home-assistant/core/pull/62793 +[#62802]: https://github.com/home-assistant/core/pull/62802 +[#62806]: https://github.com/home-assistant/core/pull/62806 +[#62810]: https://github.com/home-assistant/core/pull/62810 +[#62811]: https://github.com/home-assistant/core/pull/62811 +[#62816]: https://github.com/home-assistant/core/pull/62816 +[#62821]: https://github.com/home-assistant/core/pull/62821 +[#62822]: https://github.com/home-assistant/core/pull/62822 +[#62824]: https://github.com/home-assistant/core/pull/62824 +[#62827]: https://github.com/home-assistant/core/pull/62827 +[#62831]: https://github.com/home-assistant/core/pull/62831 +[#62835]: https://github.com/home-assistant/core/pull/62835 +[#62841]: https://github.com/home-assistant/core/pull/62841 +[#62843]: https://github.com/home-assistant/core/pull/62843 +[#62847]: https://github.com/home-assistant/core/pull/62847 +[#62854]: https://github.com/home-assistant/core/pull/62854 +[#62857]: https://github.com/home-assistant/core/pull/62857 +[#62865]: https://github.com/home-assistant/core/pull/62865 +[#62866]: https://github.com/home-assistant/core/pull/62866 +[#62868]: https://github.com/home-assistant/core/pull/62868 +[#62869]: https://github.com/home-assistant/core/pull/62869 +[#62871]: https://github.com/home-assistant/core/pull/62871 +[#62875]: https://github.com/home-assistant/core/pull/62875 +[#62876]: https://github.com/home-assistant/core/pull/62876 +[#62877]: https://github.com/home-assistant/core/pull/62877 +[#62878]: https://github.com/home-assistant/core/pull/62878 +[#62879]: https://github.com/home-assistant/core/pull/62879 +[#62880]: https://github.com/home-assistant/core/pull/62880 +[#62883]: https://github.com/home-assistant/core/pull/62883 +[#62884]: https://github.com/home-assistant/core/pull/62884 +[#62886]: https://github.com/home-assistant/core/pull/62886 +[#62887]: https://github.com/home-assistant/core/pull/62887 +[#62888]: https://github.com/home-assistant/core/pull/62888 +[#62889]: https://github.com/home-assistant/core/pull/62889 +[#62890]: https://github.com/home-assistant/core/pull/62890 +[#62891]: https://github.com/home-assistant/core/pull/62891 +[#62893]: https://github.com/home-assistant/core/pull/62893 +[#62894]: https://github.com/home-assistant/core/pull/62894 +[#62895]: https://github.com/home-assistant/core/pull/62895 +[#62896]: https://github.com/home-assistant/core/pull/62896 +[#62899]: https://github.com/home-assistant/core/pull/62899 +[#62900]: https://github.com/home-assistant/core/pull/62900 +[#62904]: https://github.com/home-assistant/core/pull/62904 +[#62909]: https://github.com/home-assistant/core/pull/62909 +[#62912]: https://github.com/home-assistant/core/pull/62912 +[#62913]: https://github.com/home-assistant/core/pull/62913 +[#62914]: https://github.com/home-assistant/core/pull/62914 +[#62915]: https://github.com/home-assistant/core/pull/62915 +[#62916]: https://github.com/home-assistant/core/pull/62916 +[#62917]: https://github.com/home-assistant/core/pull/62917 +[#62920]: https://github.com/home-assistant/core/pull/62920 +[#62922]: https://github.com/home-assistant/core/pull/62922 +[#62923]: https://github.com/home-assistant/core/pull/62923 +[#62924]: https://github.com/home-assistant/core/pull/62924 +[#62926]: https://github.com/home-assistant/core/pull/62926 +[#62929]: https://github.com/home-assistant/core/pull/62929 +[#62932]: https://github.com/home-assistant/core/pull/62932 +[#62934]: https://github.com/home-assistant/core/pull/62934 +[#62936]: https://github.com/home-assistant/core/pull/62936 +[#62937]: https://github.com/home-assistant/core/pull/62937 +[#62946]: https://github.com/home-assistant/core/pull/62946 +[#62948]: https://github.com/home-assistant/core/pull/62948 +[#62950]: https://github.com/home-assistant/core/pull/62950 +[#62951]: https://github.com/home-assistant/core/pull/62951 +[#62952]: https://github.com/home-assistant/core/pull/62952 +[#62953]: https://github.com/home-assistant/core/pull/62953 +[#62954]: https://github.com/home-assistant/core/pull/62954 +[#62955]: https://github.com/home-assistant/core/pull/62955 +[#62956]: https://github.com/home-assistant/core/pull/62956 +[#62958]: https://github.com/home-assistant/core/pull/62958 +[#62959]: https://github.com/home-assistant/core/pull/62959 +[#62961]: https://github.com/home-assistant/core/pull/62961 +[#62962]: https://github.com/home-assistant/core/pull/62962 +[#62963]: https://github.com/home-assistant/core/pull/62963 +[#62964]: https://github.com/home-assistant/core/pull/62964 +[#62967]: https://github.com/home-assistant/core/pull/62967 +[#62970]: https://github.com/home-assistant/core/pull/62970 +[#62972]: https://github.com/home-assistant/core/pull/62972 +[#62976]: https://github.com/home-assistant/core/pull/62976 +[#62977]: https://github.com/home-assistant/core/pull/62977 +[#62990]: https://github.com/home-assistant/core/pull/62990 +[#62999]: https://github.com/home-assistant/core/pull/62999 +[#63000]: https://github.com/home-assistant/core/pull/63000 +[#63001]: https://github.com/home-assistant/core/pull/63001 +[#63005]: https://github.com/home-assistant/core/pull/63005 +[#63011]: https://github.com/home-assistant/core/pull/63011 +[#63012]: https://github.com/home-assistant/core/pull/63012 +[#63013]: https://github.com/home-assistant/core/pull/63013 +[#63014]: https://github.com/home-assistant/core/pull/63014 +[#63016]: https://github.com/home-assistant/core/pull/63016 +[#63017]: https://github.com/home-assistant/core/pull/63017 +[#63018]: https://github.com/home-assistant/core/pull/63018 +[#63019]: https://github.com/home-assistant/core/pull/63019 +[#63020]: https://github.com/home-assistant/core/pull/63020 +[#63022]: https://github.com/home-assistant/core/pull/63022 +[#63023]: https://github.com/home-assistant/core/pull/63023 +[#63026]: https://github.com/home-assistant/core/pull/63026 +[#63027]: https://github.com/home-assistant/core/pull/63027 +[#63032]: https://github.com/home-assistant/core/pull/63032 +[#63034]: https://github.com/home-assistant/core/pull/63034 +[#63035]: https://github.com/home-assistant/core/pull/63035 +[#63036]: https://github.com/home-assistant/core/pull/63036 +[#63042]: https://github.com/home-assistant/core/pull/63042 +[#63046]: https://github.com/home-assistant/core/pull/63046 +[#63047]: https://github.com/home-assistant/core/pull/63047 +[#63048]: https://github.com/home-assistant/core/pull/63048 +[#63049]: https://github.com/home-assistant/core/pull/63049 +[#63050]: https://github.com/home-assistant/core/pull/63050 +[#63051]: https://github.com/home-assistant/core/pull/63051 +[#63058]: https://github.com/home-assistant/core/pull/63058 +[#63069]: https://github.com/home-assistant/core/pull/63069 +[#63072]: https://github.com/home-assistant/core/pull/63072 +[#63073]: https://github.com/home-assistant/core/pull/63073 +[#63074]: https://github.com/home-assistant/core/pull/63074 +[#63075]: https://github.com/home-assistant/core/pull/63075 +[#63076]: https://github.com/home-assistant/core/pull/63076 +[#63078]: https://github.com/home-assistant/core/pull/63078 +[#63079]: https://github.com/home-assistant/core/pull/63079 +[#63080]: https://github.com/home-assistant/core/pull/63080 +[#63082]: https://github.com/home-assistant/core/pull/63082 +[#63093]: https://github.com/home-assistant/core/pull/63093 +[#63094]: https://github.com/home-assistant/core/pull/63094 +[#63097]: https://github.com/home-assistant/core/pull/63097 +[#63098]: https://github.com/home-assistant/core/pull/63098 +[#63099]: https://github.com/home-assistant/core/pull/63099 +[#63100]: https://github.com/home-assistant/core/pull/63100 +[#63101]: https://github.com/home-assistant/core/pull/63101 +[#63102]: https://github.com/home-assistant/core/pull/63102 +[#63105]: https://github.com/home-assistant/core/pull/63105 +[#63106]: https://github.com/home-assistant/core/pull/63106 +[#63108]: https://github.com/home-assistant/core/pull/63108 +[#63110]: https://github.com/home-assistant/core/pull/63110 +[#63113]: https://github.com/home-assistant/core/pull/63113 +[#63117]: https://github.com/home-assistant/core/pull/63117 +[#63119]: https://github.com/home-assistant/core/pull/63119 +[#63121]: https://github.com/home-assistant/core/pull/63121 +[#63123]: https://github.com/home-assistant/core/pull/63123 +[#63124]: https://github.com/home-assistant/core/pull/63124 +[#63127]: https://github.com/home-assistant/core/pull/63127 +[#63129]: https://github.com/home-assistant/core/pull/63129 +[#63130]: https://github.com/home-assistant/core/pull/63130 +[#63132]: https://github.com/home-assistant/core/pull/63132 +[#63133]: https://github.com/home-assistant/core/pull/63133 +[#63134]: https://github.com/home-assistant/core/pull/63134 +[#63136]: https://github.com/home-assistant/core/pull/63136 +[#63137]: https://github.com/home-assistant/core/pull/63137 +[#63139]: https://github.com/home-assistant/core/pull/63139 +[#63141]: https://github.com/home-assistant/core/pull/63141 +[#63148]: https://github.com/home-assistant/core/pull/63148 +[#63149]: https://github.com/home-assistant/core/pull/63149 +[#63151]: https://github.com/home-assistant/core/pull/63151 +[#63156]: https://github.com/home-assistant/core/pull/63156 +[#63165]: https://github.com/home-assistant/core/pull/63165 +[#63166]: https://github.com/home-assistant/core/pull/63166 +[#63167]: https://github.com/home-assistant/core/pull/63167 +[#63169]: https://github.com/home-assistant/core/pull/63169 +[#63170]: https://github.com/home-assistant/core/pull/63170 +[#63171]: https://github.com/home-assistant/core/pull/63171 +[#63177]: https://github.com/home-assistant/core/pull/63177 +[#63179]: https://github.com/home-assistant/core/pull/63179 +[#63182]: https://github.com/home-assistant/core/pull/63182 +[#63183]: https://github.com/home-assistant/core/pull/63183 +[#63186]: https://github.com/home-assistant/core/pull/63186 +[#63187]: https://github.com/home-assistant/core/pull/63187 +[#63188]: https://github.com/home-assistant/core/pull/63188 +[#63189]: https://github.com/home-assistant/core/pull/63189 +[#63190]: https://github.com/home-assistant/core/pull/63190 +[#63191]: https://github.com/home-assistant/core/pull/63191 +[#63192]: https://github.com/home-assistant/core/pull/63192 +[#63193]: https://github.com/home-assistant/core/pull/63193 +[#63194]: https://github.com/home-assistant/core/pull/63194 +[#63195]: https://github.com/home-assistant/core/pull/63195 +[#63197]: https://github.com/home-assistant/core/pull/63197 +[#63200]: https://github.com/home-assistant/core/pull/63200 +[#63203]: https://github.com/home-assistant/core/pull/63203 +[#63206]: https://github.com/home-assistant/core/pull/63206 +[#63207]: https://github.com/home-assistant/core/pull/63207 +[#63208]: https://github.com/home-assistant/core/pull/63208 +[#63211]: https://github.com/home-assistant/core/pull/63211 +[#63212]: https://github.com/home-assistant/core/pull/63212 +[#63218]: https://github.com/home-assistant/core/pull/63218 +[#63220]: https://github.com/home-assistant/core/pull/63220 +[#63222]: https://github.com/home-assistant/core/pull/63222 +[#63224]: https://github.com/home-assistant/core/pull/63224 +[#63225]: https://github.com/home-assistant/core/pull/63225 +[#63227]: https://github.com/home-assistant/core/pull/63227 +[#63228]: https://github.com/home-assistant/core/pull/63228 +[#63231]: https://github.com/home-assistant/core/pull/63231 +[#63232]: https://github.com/home-assistant/core/pull/63232 +[#63234]: https://github.com/home-assistant/core/pull/63234 +[#63236]: https://github.com/home-assistant/core/pull/63236 +[#63237]: https://github.com/home-assistant/core/pull/63237 +[#63238]: https://github.com/home-assistant/core/pull/63238 +[#63239]: https://github.com/home-assistant/core/pull/63239 +[#63240]: https://github.com/home-assistant/core/pull/63240 +[#63241]: https://github.com/home-assistant/core/pull/63241 +[#63242]: https://github.com/home-assistant/core/pull/63242 +[#63243]: https://github.com/home-assistant/core/pull/63243 +[#63244]: https://github.com/home-assistant/core/pull/63244 +[#63248]: https://github.com/home-assistant/core/pull/63248 +[#63249]: https://github.com/home-assistant/core/pull/63249 +[#63251]: https://github.com/home-assistant/core/pull/63251 +[#63254]: https://github.com/home-assistant/core/pull/63254 +[#63256]: https://github.com/home-assistant/core/pull/63256 +[#63259]: https://github.com/home-assistant/core/pull/63259 +[#63261]: https://github.com/home-assistant/core/pull/63261 +[#63263]: https://github.com/home-assistant/core/pull/63263 +[#63264]: https://github.com/home-assistant/core/pull/63264 +[#63265]: https://github.com/home-assistant/core/pull/63265 +[#63268]: https://github.com/home-assistant/core/pull/63268 +[#63269]: https://github.com/home-assistant/core/pull/63269 +[#63270]: https://github.com/home-assistant/core/pull/63270 +[#63271]: https://github.com/home-assistant/core/pull/63271 +[#63272]: https://github.com/home-assistant/core/pull/63272 +[#63274]: https://github.com/home-assistant/core/pull/63274 +[#63277]: https://github.com/home-assistant/core/pull/63277 +[#63278]: https://github.com/home-assistant/core/pull/63278 +[#63279]: https://github.com/home-assistant/core/pull/63279 +[#63280]: https://github.com/home-assistant/core/pull/63280 +[#63282]: https://github.com/home-assistant/core/pull/63282 +[#63283]: https://github.com/home-assistant/core/pull/63283 +[#63284]: https://github.com/home-assistant/core/pull/63284 +[#63285]: https://github.com/home-assistant/core/pull/63285 +[#63286]: https://github.com/home-assistant/core/pull/63286 +[#63287]: https://github.com/home-assistant/core/pull/63287 +[#63288]: https://github.com/home-assistant/core/pull/63288 +[#63289]: https://github.com/home-assistant/core/pull/63289 +[#63290]: https://github.com/home-assistant/core/pull/63290 +[#63291]: https://github.com/home-assistant/core/pull/63291 +[#63292]: https://github.com/home-assistant/core/pull/63292 +[#63293]: https://github.com/home-assistant/core/pull/63293 +[#63294]: https://github.com/home-assistant/core/pull/63294 +[#63295]: https://github.com/home-assistant/core/pull/63295 +[#63296]: https://github.com/home-assistant/core/pull/63296 +[#63297]: https://github.com/home-assistant/core/pull/63297 +[#63298]: https://github.com/home-assistant/core/pull/63298 +[#63299]: https://github.com/home-assistant/core/pull/63299 +[#63300]: https://github.com/home-assistant/core/pull/63300 +[#63301]: https://github.com/home-assistant/core/pull/63301 +[#63302]: https://github.com/home-assistant/core/pull/63302 +[#63303]: https://github.com/home-assistant/core/pull/63303 +[#63304]: https://github.com/home-assistant/core/pull/63304 +[#63305]: https://github.com/home-assistant/core/pull/63305 +[#63308]: https://github.com/home-assistant/core/pull/63308 +[#63309]: https://github.com/home-assistant/core/pull/63309 +[#63310]: https://github.com/home-assistant/core/pull/63310 +[#63311]: https://github.com/home-assistant/core/pull/63311 +[#63312]: https://github.com/home-assistant/core/pull/63312 +[#63313]: https://github.com/home-assistant/core/pull/63313 +[#63314]: https://github.com/home-assistant/core/pull/63314 +[#63315]: https://github.com/home-assistant/core/pull/63315 +[#63316]: https://github.com/home-assistant/core/pull/63316 +[#63317]: https://github.com/home-assistant/core/pull/63317 +[#63318]: https://github.com/home-assistant/core/pull/63318 +[#63319]: https://github.com/home-assistant/core/pull/63319 +[#63322]: https://github.com/home-assistant/core/pull/63322 +[#63328]: https://github.com/home-assistant/core/pull/63328 +[#63330]: https://github.com/home-assistant/core/pull/63330 +[#63336]: https://github.com/home-assistant/core/pull/63336 +[#63337]: https://github.com/home-assistant/core/pull/63337 +[#63342]: https://github.com/home-assistant/core/pull/63342 +[#63343]: https://github.com/home-assistant/core/pull/63343 +[#63345]: https://github.com/home-assistant/core/pull/63345 +[#63346]: https://github.com/home-assistant/core/pull/63346 +[#63349]: https://github.com/home-assistant/core/pull/63349 +[#63350]: https://github.com/home-assistant/core/pull/63350 +[#63351]: https://github.com/home-assistant/core/pull/63351 +[#63353]: https://github.com/home-assistant/core/pull/63353 +[#63357]: https://github.com/home-assistant/core/pull/63357 +[#63358]: https://github.com/home-assistant/core/pull/63358 +[#63359]: https://github.com/home-assistant/core/pull/63359 +[#63362]: https://github.com/home-assistant/core/pull/63362 +[#63363]: https://github.com/home-assistant/core/pull/63363 +[#63365]: https://github.com/home-assistant/core/pull/63365 +[#63366]: https://github.com/home-assistant/core/pull/63366 +[#63367]: https://github.com/home-assistant/core/pull/63367 +[#63373]: https://github.com/home-assistant/core/pull/63373 +[#63377]: https://github.com/home-assistant/core/pull/63377 +[#63378]: https://github.com/home-assistant/core/pull/63378 +[#63379]: https://github.com/home-assistant/core/pull/63379 +[#63380]: https://github.com/home-assistant/core/pull/63380 +[#63385]: https://github.com/home-assistant/core/pull/63385 +[#63388]: https://github.com/home-assistant/core/pull/63388 +[#63389]: https://github.com/home-assistant/core/pull/63389 +[#63390]: https://github.com/home-assistant/core/pull/63390 +[#63391]: https://github.com/home-assistant/core/pull/63391 +[#63395]: https://github.com/home-assistant/core/pull/63395 +[#63397]: https://github.com/home-assistant/core/pull/63397 +[#63400]: https://github.com/home-assistant/core/pull/63400 +[#63404]: https://github.com/home-assistant/core/pull/63404 +[#63405]: https://github.com/home-assistant/core/pull/63405 +[#63406]: https://github.com/home-assistant/core/pull/63406 +[#63407]: https://github.com/home-assistant/core/pull/63407 +[#63408]: https://github.com/home-assistant/core/pull/63408 +[#63409]: https://github.com/home-assistant/core/pull/63409 +[#63417]: https://github.com/home-assistant/core/pull/63417 +[#63422]: https://github.com/home-assistant/core/pull/63422 +[#63423]: https://github.com/home-assistant/core/pull/63423 +[#63424]: https://github.com/home-assistant/core/pull/63424 +[#63427]: https://github.com/home-assistant/core/pull/63427 +[#63428]: https://github.com/home-assistant/core/pull/63428 +[#63430]: https://github.com/home-assistant/core/pull/63430 +[#63431]: https://github.com/home-assistant/core/pull/63431 +[#63432]: https://github.com/home-assistant/core/pull/63432 +[#63434]: https://github.com/home-assistant/core/pull/63434 +[#63436]: https://github.com/home-assistant/core/pull/63436 +[#63438]: https://github.com/home-assistant/core/pull/63438 +[#63439]: https://github.com/home-assistant/core/pull/63439 +[#63441]: https://github.com/home-assistant/core/pull/63441 +[#63444]: https://github.com/home-assistant/core/pull/63444 +[#63450]: https://github.com/home-assistant/core/pull/63450 +[#63451]: https://github.com/home-assistant/core/pull/63451 +[#63452]: https://github.com/home-assistant/core/pull/63452 +[#63453]: https://github.com/home-assistant/core/pull/63453 +[#63454]: https://github.com/home-assistant/core/pull/63454 +[#63455]: https://github.com/home-assistant/core/pull/63455 +[#63456]: https://github.com/home-assistant/core/pull/63456 +[#63458]: https://github.com/home-assistant/core/pull/63458 +[#63459]: https://github.com/home-assistant/core/pull/63459 +[#63460]: https://github.com/home-assistant/core/pull/63460 +[#63461]: https://github.com/home-assistant/core/pull/63461 +[#63462]: https://github.com/home-assistant/core/pull/63462 +[#63463]: https://github.com/home-assistant/core/pull/63463 +[#63465]: https://github.com/home-assistant/core/pull/63465 +[#63467]: https://github.com/home-assistant/core/pull/63467 +[#63468]: https://github.com/home-assistant/core/pull/63468 +[#63469]: https://github.com/home-assistant/core/pull/63469 +[#63470]: https://github.com/home-assistant/core/pull/63470 +[#63471]: https://github.com/home-assistant/core/pull/63471 +[#63472]: https://github.com/home-assistant/core/pull/63472 +[#63473]: https://github.com/home-assistant/core/pull/63473 +[#63474]: https://github.com/home-assistant/core/pull/63474 +[#63475]: https://github.com/home-assistant/core/pull/63475 +[#63476]: https://github.com/home-assistant/core/pull/63476 +[#63477]: https://github.com/home-assistant/core/pull/63477 +[#63479]: https://github.com/home-assistant/core/pull/63479 +[#63480]: https://github.com/home-assistant/core/pull/63480 +[#63483]: https://github.com/home-assistant/core/pull/63483 +[#63484]: https://github.com/home-assistant/core/pull/63484 +[#63485]: https://github.com/home-assistant/core/pull/63485 +[#63486]: https://github.com/home-assistant/core/pull/63486 +[#63487]: https://github.com/home-assistant/core/pull/63487 +[#63489]: https://github.com/home-assistant/core/pull/63489 +[#63490]: https://github.com/home-assistant/core/pull/63490 +[#63491]: https://github.com/home-assistant/core/pull/63491 +[#63493]: https://github.com/home-assistant/core/pull/63493 +[#63498]: https://github.com/home-assistant/core/pull/63498 +[#63500]: https://github.com/home-assistant/core/pull/63500 +[#63501]: https://github.com/home-assistant/core/pull/63501 +[#63502]: https://github.com/home-assistant/core/pull/63502 +[#63503]: https://github.com/home-assistant/core/pull/63503 +[#63504]: https://github.com/home-assistant/core/pull/63504 +[#63505]: https://github.com/home-assistant/core/pull/63505 +[#63506]: https://github.com/home-assistant/core/pull/63506 +[#63507]: https://github.com/home-assistant/core/pull/63507 +[#63508]: https://github.com/home-assistant/core/pull/63508 +[#63509]: https://github.com/home-assistant/core/pull/63509 +[#63510]: https://github.com/home-assistant/core/pull/63510 +[#63513]: https://github.com/home-assistant/core/pull/63513 +[#63516]: https://github.com/home-assistant/core/pull/63516 +[#63517]: https://github.com/home-assistant/core/pull/63517 +[#63518]: https://github.com/home-assistant/core/pull/63518 +[#63519]: https://github.com/home-assistant/core/pull/63519 +[#63521]: https://github.com/home-assistant/core/pull/63521 +[#63522]: https://github.com/home-assistant/core/pull/63522 +[#63524]: https://github.com/home-assistant/core/pull/63524 +[#63526]: https://github.com/home-assistant/core/pull/63526 +[#63531]: https://github.com/home-assistant/core/pull/63531 +[#63535]: https://github.com/home-assistant/core/pull/63535 +[#63541]: https://github.com/home-assistant/core/pull/63541 +[#63542]: https://github.com/home-assistant/core/pull/63542 +[#63543]: https://github.com/home-assistant/core/pull/63543 +[#63547]: https://github.com/home-assistant/core/pull/63547 +[#63552]: https://github.com/home-assistant/core/pull/63552 +[#63553]: https://github.com/home-assistant/core/pull/63553 +[#63554]: https://github.com/home-assistant/core/pull/63554 +[#63559]: https://github.com/home-assistant/core/pull/63559 +[#63561]: https://github.com/home-assistant/core/pull/63561 +[#63563]: https://github.com/home-assistant/core/pull/63563 +[#63564]: https://github.com/home-assistant/core/pull/63564 +[#63565]: https://github.com/home-assistant/core/pull/63565 +[#63566]: https://github.com/home-assistant/core/pull/63566 +[#63569]: https://github.com/home-assistant/core/pull/63569 +[#63570]: https://github.com/home-assistant/core/pull/63570 +[#63571]: https://github.com/home-assistant/core/pull/63571 +[#63573]: https://github.com/home-assistant/core/pull/63573 +[#63576]: https://github.com/home-assistant/core/pull/63576 +[#63577]: https://github.com/home-assistant/core/pull/63577 +[#63579]: https://github.com/home-assistant/core/pull/63579 +[#63581]: https://github.com/home-assistant/core/pull/63581 +[#63586]: https://github.com/home-assistant/core/pull/63586 +[#63587]: https://github.com/home-assistant/core/pull/63587 +[#63589]: https://github.com/home-assistant/core/pull/63589 +[#63590]: https://github.com/home-assistant/core/pull/63590 +[#63592]: https://github.com/home-assistant/core/pull/63592 +[#63596]: https://github.com/home-assistant/core/pull/63596 +[#63597]: https://github.com/home-assistant/core/pull/63597 +[#63598]: https://github.com/home-assistant/core/pull/63598 +[#63599]: https://github.com/home-assistant/core/pull/63599 +[#63603]: https://github.com/home-assistant/core/pull/63603 +[#63605]: https://github.com/home-assistant/core/pull/63605 +[#63607]: https://github.com/home-assistant/core/pull/63607 +[#63613]: https://github.com/home-assistant/core/pull/63613 +[#63614]: https://github.com/home-assistant/core/pull/63614 +[#63622]: https://github.com/home-assistant/core/pull/63622 +[#63623]: https://github.com/home-assistant/core/pull/63623 +[#63625]: https://github.com/home-assistant/core/pull/63625 +[#63626]: https://github.com/home-assistant/core/pull/63626 +[#63632]: https://github.com/home-assistant/core/pull/63632 +[#63637]: https://github.com/home-assistant/core/pull/63637 +[#63639]: https://github.com/home-assistant/core/pull/63639 +[#63642]: https://github.com/home-assistant/core/pull/63642 +[#63643]: https://github.com/home-assistant/core/pull/63643 +[#63644]: https://github.com/home-assistant/core/pull/63644 +[#63645]: https://github.com/home-assistant/core/pull/63645 +[#63646]: https://github.com/home-assistant/core/pull/63646 +[#63648]: https://github.com/home-assistant/core/pull/63648 +[#63653]: https://github.com/home-assistant/core/pull/63653 +[#63657]: https://github.com/home-assistant/core/pull/63657 +[#63659]: https://github.com/home-assistant/core/pull/63659 +[#63660]: https://github.com/home-assistant/core/pull/63660 +[#63661]: https://github.com/home-assistant/core/pull/63661 +[#63663]: https://github.com/home-assistant/core/pull/63663 +[#63664]: https://github.com/home-assistant/core/pull/63664 +[#63665]: https://github.com/home-assistant/core/pull/63665 +[#63667]: https://github.com/home-assistant/core/pull/63667 +[#63668]: https://github.com/home-assistant/core/pull/63668 +[#63669]: https://github.com/home-assistant/core/pull/63669 +[#63672]: https://github.com/home-assistant/core/pull/63672 +[#63673]: https://github.com/home-assistant/core/pull/63673 +[#63674]: https://github.com/home-assistant/core/pull/63674 +[#63675]: https://github.com/home-assistant/core/pull/63675 +[#63676]: https://github.com/home-assistant/core/pull/63676 +[#63677]: https://github.com/home-assistant/core/pull/63677 +[#63681]: https://github.com/home-assistant/core/pull/63681 +[#63682]: https://github.com/home-assistant/core/pull/63682 +[#63685]: https://github.com/home-assistant/core/pull/63685 +[#63687]: https://github.com/home-assistant/core/pull/63687 +[#63691]: https://github.com/home-assistant/core/pull/63691 +[#63692]: https://github.com/home-assistant/core/pull/63692 +[#63693]: https://github.com/home-assistant/core/pull/63693 +[#63696]: https://github.com/home-assistant/core/pull/63696 +[#63697]: https://github.com/home-assistant/core/pull/63697 +[#63701]: https://github.com/home-assistant/core/pull/63701 +[#63703]: https://github.com/home-assistant/core/pull/63703 +[#63707]: https://github.com/home-assistant/core/pull/63707 +[#63708]: https://github.com/home-assistant/core/pull/63708 +[#63716]: https://github.com/home-assistant/core/pull/63716 +[#63719]: https://github.com/home-assistant/core/pull/63719 +[#63724]: https://github.com/home-assistant/core/pull/63724 +[#63732]: https://github.com/home-assistant/core/pull/63732 +[#63734]: https://github.com/home-assistant/core/pull/63734 +[#63744]: https://github.com/home-assistant/core/pull/63744 +[#63748]: https://github.com/home-assistant/core/pull/63748 +[#63750]: https://github.com/home-assistant/core/pull/63750 +[#63751]: https://github.com/home-assistant/core/pull/63751 +[#63753]: https://github.com/home-assistant/core/pull/63753 +[#63754]: https://github.com/home-assistant/core/pull/63754 +[#63756]: https://github.com/home-assistant/core/pull/63756 +[#63760]: https://github.com/home-assistant/core/pull/63760 +[#63761]: https://github.com/home-assistant/core/pull/63761 +[#63766]: https://github.com/home-assistant/core/pull/63766 +[#63767]: https://github.com/home-assistant/core/pull/63767 +[#63768]: https://github.com/home-assistant/core/pull/63768 +[#63772]: https://github.com/home-assistant/core/pull/63772 +[#63773]: https://github.com/home-assistant/core/pull/63773 +[#63774]: https://github.com/home-assistant/core/pull/63774 +[#63777]: https://github.com/home-assistant/core/pull/63777 +[#63778]: https://github.com/home-assistant/core/pull/63778 +[#63779]: https://github.com/home-assistant/core/pull/63779 +[#63781]: https://github.com/home-assistant/core/pull/63781 +[#63782]: https://github.com/home-assistant/core/pull/63782 +[#63783]: https://github.com/home-assistant/core/pull/63783 +[#63784]: https://github.com/home-assistant/core/pull/63784 +[#63785]: https://github.com/home-assistant/core/pull/63785 +[#63786]: https://github.com/home-assistant/core/pull/63786 +[#63787]: https://github.com/home-assistant/core/pull/63787 +[#63788]: https://github.com/home-assistant/core/pull/63788 +[#63789]: https://github.com/home-assistant/core/pull/63789 +[#63791]: https://github.com/home-assistant/core/pull/63791 +[#63792]: https://github.com/home-assistant/core/pull/63792 +[#63796]: https://github.com/home-assistant/core/pull/63796 +[#63797]: https://github.com/home-assistant/core/pull/63797 +[#63798]: https://github.com/home-assistant/core/pull/63798 +[#63801]: https://github.com/home-assistant/core/pull/63801 +[#63802]: https://github.com/home-assistant/core/pull/63802 +[#63803]: https://github.com/home-assistant/core/pull/63803 +[#63805]: https://github.com/home-assistant/core/pull/63805 +[#63807]: https://github.com/home-assistant/core/pull/63807 +[#63808]: https://github.com/home-assistant/core/pull/63808 +[#63809]: https://github.com/home-assistant/core/pull/63809 +[#63810]: https://github.com/home-assistant/core/pull/63810 +[#63811]: https://github.com/home-assistant/core/pull/63811 +[#63814]: https://github.com/home-assistant/core/pull/63814 +[#63820]: https://github.com/home-assistant/core/pull/63820 +[#63821]: https://github.com/home-assistant/core/pull/63821 +[#63824]: https://github.com/home-assistant/core/pull/63824 +[#63825]: https://github.com/home-assistant/core/pull/63825 +[#63826]: https://github.com/home-assistant/core/pull/63826 +[#63827]: https://github.com/home-assistant/core/pull/63827 +[#63828]: https://github.com/home-assistant/core/pull/63828 +[#63829]: https://github.com/home-assistant/core/pull/63829 +[#63830]: https://github.com/home-assistant/core/pull/63830 +[#63832]: https://github.com/home-assistant/core/pull/63832 +[#63833]: https://github.com/home-assistant/core/pull/63833 +[#63834]: https://github.com/home-assistant/core/pull/63834 +[#63836]: https://github.com/home-assistant/core/pull/63836 +[#63838]: https://github.com/home-assistant/core/pull/63838 +[#63839]: https://github.com/home-assistant/core/pull/63839 +[#63842]: https://github.com/home-assistant/core/pull/63842 +[#63843]: https://github.com/home-assistant/core/pull/63843 +[#63847]: https://github.com/home-assistant/core/pull/63847 +[#63848]: https://github.com/home-assistant/core/pull/63848 +[#63850]: https://github.com/home-assistant/core/pull/63850 +[#63851]: https://github.com/home-assistant/core/pull/63851 +[#63855]: https://github.com/home-assistant/core/pull/63855 +[#63856]: https://github.com/home-assistant/core/pull/63856 +[#63857]: https://github.com/home-assistant/core/pull/63857 +[#63860]: https://github.com/home-assistant/core/pull/63860 +[#63862]: https://github.com/home-assistant/core/pull/63862 +[#63863]: https://github.com/home-assistant/core/pull/63863 +[#63871]: https://github.com/home-assistant/core/pull/63871 +[#63873]: https://github.com/home-assistant/core/pull/63873 +[#63875]: https://github.com/home-assistant/core/pull/63875 +[#63877]: https://github.com/home-assistant/core/pull/63877 +[#63879]: https://github.com/home-assistant/core/pull/63879 +[#63880]: https://github.com/home-assistant/core/pull/63880 +[#63882]: https://github.com/home-assistant/core/pull/63882 +[#63883]: https://github.com/home-assistant/core/pull/63883 +[#63884]: https://github.com/home-assistant/core/pull/63884 +[#63887]: https://github.com/home-assistant/core/pull/63887 +[#63888]: https://github.com/home-assistant/core/pull/63888 +[#63890]: https://github.com/home-assistant/core/pull/63890 +[#63891]: https://github.com/home-assistant/core/pull/63891 +[#63894]: https://github.com/home-assistant/core/pull/63894 +[#63895]: https://github.com/home-assistant/core/pull/63895 +[#63897]: https://github.com/home-assistant/core/pull/63897 +[#63898]: https://github.com/home-assistant/core/pull/63898 +[#63899]: https://github.com/home-assistant/core/pull/63899 +[#63900]: https://github.com/home-assistant/core/pull/63900 +[#63901]: https://github.com/home-assistant/core/pull/63901 +[#63902]: https://github.com/home-assistant/core/pull/63902 +[#63903]: https://github.com/home-assistant/core/pull/63903 +[#63904]: https://github.com/home-assistant/core/pull/63904 +[#63905]: https://github.com/home-assistant/core/pull/63905 +[#63906]: https://github.com/home-assistant/core/pull/63906 +[#63907]: https://github.com/home-assistant/core/pull/63907 +[#63908]: https://github.com/home-assistant/core/pull/63908 +[#63910]: https://github.com/home-assistant/core/pull/63910 +[#63911]: https://github.com/home-assistant/core/pull/63911 +[#63912]: https://github.com/home-assistant/core/pull/63912 +[#63914]: https://github.com/home-assistant/core/pull/63914 +[#63917]: https://github.com/home-assistant/core/pull/63917 +[#63918]: https://github.com/home-assistant/core/pull/63918 +[#63919]: https://github.com/home-assistant/core/pull/63919 +[#63920]: https://github.com/home-assistant/core/pull/63920 +[#63921]: https://github.com/home-assistant/core/pull/63921 +[#63922]: https://github.com/home-assistant/core/pull/63922 +[#63923]: https://github.com/home-assistant/core/pull/63923 +[#63924]: https://github.com/home-assistant/core/pull/63924 +[#63925]: https://github.com/home-assistant/core/pull/63925 +[#63926]: https://github.com/home-assistant/core/pull/63926 +[#63927]: https://github.com/home-assistant/core/pull/63927 +[#63929]: https://github.com/home-assistant/core/pull/63929 +[#63933]: https://github.com/home-assistant/core/pull/63933 +[#63934]: https://github.com/home-assistant/core/pull/63934 +[#63935]: https://github.com/home-assistant/core/pull/63935 +[#63937]: https://github.com/home-assistant/core/pull/63937 +[#63940]: https://github.com/home-assistant/core/pull/63940 +[#63943]: https://github.com/home-assistant/core/pull/63943 +[#63945]: https://github.com/home-assistant/core/pull/63945 +[#63946]: https://github.com/home-assistant/core/pull/63946 +[#63947]: https://github.com/home-assistant/core/pull/63947 +[#63948]: https://github.com/home-assistant/core/pull/63948 +[#63951]: https://github.com/home-assistant/core/pull/63951 +[#63952]: https://github.com/home-assistant/core/pull/63952 +[#63955]: https://github.com/home-assistant/core/pull/63955 +[#63960]: https://github.com/home-assistant/core/pull/63960 +[#63961]: https://github.com/home-assistant/core/pull/63961 +[#63963]: https://github.com/home-assistant/core/pull/63963 +[#63968]: https://github.com/home-assistant/core/pull/63968 +[#63969]: https://github.com/home-assistant/core/pull/63969 +[#63972]: https://github.com/home-assistant/core/pull/63972 +[#63973]: https://github.com/home-assistant/core/pull/63973 +[#63974]: https://github.com/home-assistant/core/pull/63974 +[#63975]: https://github.com/home-assistant/core/pull/63975 +[#63979]: https://github.com/home-assistant/core/pull/63979 +[#63982]: https://github.com/home-assistant/core/pull/63982 +[#63983]: https://github.com/home-assistant/core/pull/63983 +[#63985]: https://github.com/home-assistant/core/pull/63985 +[#63986]: https://github.com/home-assistant/core/pull/63986 +[#63987]: https://github.com/home-assistant/core/pull/63987 +[#63988]: https://github.com/home-assistant/core/pull/63988 +[#63989]: https://github.com/home-assistant/core/pull/63989 +[#63990]: https://github.com/home-assistant/core/pull/63990 +[#63993]: https://github.com/home-assistant/core/pull/63993 +[#63994]: https://github.com/home-assistant/core/pull/63994 +[#63995]: https://github.com/home-assistant/core/pull/63995 +[#63998]: https://github.com/home-assistant/core/pull/63998 +[#64000]: https://github.com/home-assistant/core/pull/64000 +[#64001]: https://github.com/home-assistant/core/pull/64001 +[#64002]: https://github.com/home-assistant/core/pull/64002 +[#64005]: https://github.com/home-assistant/core/pull/64005 +[#64006]: https://github.com/home-assistant/core/pull/64006 +[#64008]: https://github.com/home-assistant/core/pull/64008 +[#64009]: https://github.com/home-assistant/core/pull/64009 +[#64010]: https://github.com/home-assistant/core/pull/64010 +[#64011]: https://github.com/home-assistant/core/pull/64011 +[#64012]: https://github.com/home-assistant/core/pull/64012 +[#64016]: https://github.com/home-assistant/core/pull/64016 +[#64017]: https://github.com/home-assistant/core/pull/64017 +[#64019]: https://github.com/home-assistant/core/pull/64019 +[#64021]: https://github.com/home-assistant/core/pull/64021 +[#64025]: https://github.com/home-assistant/core/pull/64025 +[#64028]: https://github.com/home-assistant/core/pull/64028 +[#64029]: https://github.com/home-assistant/core/pull/64029 +[#64030]: https://github.com/home-assistant/core/pull/64030 +[#64031]: https://github.com/home-assistant/core/pull/64031 +[#64033]: https://github.com/home-assistant/core/pull/64033 +[#64034]: https://github.com/home-assistant/core/pull/64034 +[#64035]: https://github.com/home-assistant/core/pull/64035 +[#64036]: https://github.com/home-assistant/core/pull/64036 +[#64041]: https://github.com/home-assistant/core/pull/64041 +[#64044]: https://github.com/home-assistant/core/pull/64044 +[#64045]: https://github.com/home-assistant/core/pull/64045 +[#64046]: https://github.com/home-assistant/core/pull/64046 +[#64048]: https://github.com/home-assistant/core/pull/64048 +[#64050]: https://github.com/home-assistant/core/pull/64050 +[#64051]: https://github.com/home-assistant/core/pull/64051 +[#64052]: https://github.com/home-assistant/core/pull/64052 +[#64054]: https://github.com/home-assistant/core/pull/64054 +[#64055]: https://github.com/home-assistant/core/pull/64055 +[#64056]: https://github.com/home-assistant/core/pull/64056 +[#64057]: https://github.com/home-assistant/core/pull/64057 +[#64058]: https://github.com/home-assistant/core/pull/64058 +[#64060]: https://github.com/home-assistant/core/pull/64060 +[#64064]: https://github.com/home-assistant/core/pull/64064 +[#64065]: https://github.com/home-assistant/core/pull/64065 +[#64068]: https://github.com/home-assistant/core/pull/64068 +[#64069]: https://github.com/home-assistant/core/pull/64069 +[#64070]: https://github.com/home-assistant/core/pull/64070 +[#64072]: https://github.com/home-assistant/core/pull/64072 +[#64073]: https://github.com/home-assistant/core/pull/64073 +[#64074]: https://github.com/home-assistant/core/pull/64074 +[#64076]: https://github.com/home-assistant/core/pull/64076 +[#64078]: https://github.com/home-assistant/core/pull/64078 +[#64079]: https://github.com/home-assistant/core/pull/64079 +[#64080]: https://github.com/home-assistant/core/pull/64080 +[#64081]: https://github.com/home-assistant/core/pull/64081 +[#64082]: https://github.com/home-assistant/core/pull/64082 +[#64083]: https://github.com/home-assistant/core/pull/64083 +[#64084]: https://github.com/home-assistant/core/pull/64084 +[#64085]: https://github.com/home-assistant/core/pull/64085 +[#64086]: https://github.com/home-assistant/core/pull/64086 +[#64088]: https://github.com/home-assistant/core/pull/64088 +[#64089]: https://github.com/home-assistant/core/pull/64089 +[#64091]: https://github.com/home-assistant/core/pull/64091 +[#64093]: https://github.com/home-assistant/core/pull/64093 +[#64095]: https://github.com/home-assistant/core/pull/64095 +[#64097]: https://github.com/home-assistant/core/pull/64097 +[#64098]: https://github.com/home-assistant/core/pull/64098 +[#64099]: https://github.com/home-assistant/core/pull/64099 +[#64100]: https://github.com/home-assistant/core/pull/64100 +[#64102]: https://github.com/home-assistant/core/pull/64102 +[#64104]: https://github.com/home-assistant/core/pull/64104 +[#64105]: https://github.com/home-assistant/core/pull/64105 +[#64106]: https://github.com/home-assistant/core/pull/64106 +[#64108]: https://github.com/home-assistant/core/pull/64108 +[#64109]: https://github.com/home-assistant/core/pull/64109 +[#64113]: https://github.com/home-assistant/core/pull/64113 +[#64115]: https://github.com/home-assistant/core/pull/64115 +[#64116]: https://github.com/home-assistant/core/pull/64116 +[#64117]: https://github.com/home-assistant/core/pull/64117 +[#64121]: https://github.com/home-assistant/core/pull/64121 +[#64122]: https://github.com/home-assistant/core/pull/64122 +[#64123]: https://github.com/home-assistant/core/pull/64123 +[#64126]: https://github.com/home-assistant/core/pull/64126 +[#64130]: https://github.com/home-assistant/core/pull/64130 +[#64131]: https://github.com/home-assistant/core/pull/64131 +[#64132]: https://github.com/home-assistant/core/pull/64132 +[#64133]: https://github.com/home-assistant/core/pull/64133 +[#64134]: https://github.com/home-assistant/core/pull/64134 +[#64135]: https://github.com/home-assistant/core/pull/64135 +[#64136]: https://github.com/home-assistant/core/pull/64136 +[#64138]: https://github.com/home-assistant/core/pull/64138 +[#64139]: https://github.com/home-assistant/core/pull/64139 +[#64145]: https://github.com/home-assistant/core/pull/64145 +[#64147]: https://github.com/home-assistant/core/pull/64147 +[#64153]: https://github.com/home-assistant/core/pull/64153 +[#64155]: https://github.com/home-assistant/core/pull/64155 +[#64156]: https://github.com/home-assistant/core/pull/64156 +[#64158]: https://github.com/home-assistant/core/pull/64158 +[#64159]: https://github.com/home-assistant/core/pull/64159 +[#64160]: https://github.com/home-assistant/core/pull/64160 +[#64164]: https://github.com/home-assistant/core/pull/64164 +[#64165]: https://github.com/home-assistant/core/pull/64165 +[#64168]: https://github.com/home-assistant/core/pull/64168 +[#64170]: https://github.com/home-assistant/core/pull/64170 +[#64171]: https://github.com/home-assistant/core/pull/64171 +[#64178]: https://github.com/home-assistant/core/pull/64178 +[#64179]: https://github.com/home-assistant/core/pull/64179 +[#64181]: https://github.com/home-assistant/core/pull/64181 +[#64185]: https://github.com/home-assistant/core/pull/64185 +[#64186]: https://github.com/home-assistant/core/pull/64186 +[#64187]: https://github.com/home-assistant/core/pull/64187 +[#64188]: https://github.com/home-assistant/core/pull/64188 +[#64189]: https://github.com/home-assistant/core/pull/64189 +[#64190]: https://github.com/home-assistant/core/pull/64190 +[#64193]: https://github.com/home-assistant/core/pull/64193 +[#64195]: https://github.com/home-assistant/core/pull/64195 +[#64197]: https://github.com/home-assistant/core/pull/64197 +[#64198]: https://github.com/home-assistant/core/pull/64198 +[#64201]: https://github.com/home-assistant/core/pull/64201 +[#64202]: https://github.com/home-assistant/core/pull/64202 +[#64203]: https://github.com/home-assistant/core/pull/64203 +[#64204]: https://github.com/home-assistant/core/pull/64204 +[#64205]: https://github.com/home-assistant/core/pull/64205 +[#64208]: https://github.com/home-assistant/core/pull/64208 +[#64209]: https://github.com/home-assistant/core/pull/64209 +[#64211]: https://github.com/home-assistant/core/pull/64211 +[#64212]: https://github.com/home-assistant/core/pull/64212 +[#64213]: https://github.com/home-assistant/core/pull/64213 +[#64214]: https://github.com/home-assistant/core/pull/64214 +[#64218]: https://github.com/home-assistant/core/pull/64218 +[#64219]: https://github.com/home-assistant/core/pull/64219 +[#64220]: https://github.com/home-assistant/core/pull/64220 +[#64227]: https://github.com/home-assistant/core/pull/64227 +[#64228]: https://github.com/home-assistant/core/pull/64228 +[#64229]: https://github.com/home-assistant/core/pull/64229 +[#64230]: https://github.com/home-assistant/core/pull/64230 +[#64231]: https://github.com/home-assistant/core/pull/64231 +[#64232]: https://github.com/home-assistant/core/pull/64232 +[#64233]: https://github.com/home-assistant/core/pull/64233 +[#64234]: https://github.com/home-assistant/core/pull/64234 +[#64235]: https://github.com/home-assistant/core/pull/64235 +[#64236]: https://github.com/home-assistant/core/pull/64236 +[#64237]: https://github.com/home-assistant/core/pull/64237 +[#64238]: https://github.com/home-assistant/core/pull/64238 +[#64239]: https://github.com/home-assistant/core/pull/64239 +[#64240]: https://github.com/home-assistant/core/pull/64240 +[#64241]: https://github.com/home-assistant/core/pull/64241 +[#64242]: https://github.com/home-assistant/core/pull/64242 +[#64243]: https://github.com/home-assistant/core/pull/64243 +[#64244]: https://github.com/home-assistant/core/pull/64244 +[#64245]: https://github.com/home-assistant/core/pull/64245 +[#64247]: https://github.com/home-assistant/core/pull/64247 +[#64248]: https://github.com/home-assistant/core/pull/64248 +[#64250]: https://github.com/home-assistant/core/pull/64250 +[#64251]: https://github.com/home-assistant/core/pull/64251 +[#64252]: https://github.com/home-assistant/core/pull/64252 +[#64253]: https://github.com/home-assistant/core/pull/64253 +[#64255]: https://github.com/home-assistant/core/pull/64255 +[#64257]: https://github.com/home-assistant/core/pull/64257 +[#64258]: https://github.com/home-assistant/core/pull/64258 +[#64259]: https://github.com/home-assistant/core/pull/64259 +[#64260]: https://github.com/home-assistant/core/pull/64260 +[#64261]: https://github.com/home-assistant/core/pull/64261 +[#64262]: https://github.com/home-assistant/core/pull/64262 +[#64263]: https://github.com/home-assistant/core/pull/64263 +[#64264]: https://github.com/home-assistant/core/pull/64264 +[#64265]: https://github.com/home-assistant/core/pull/64265 +[#64266]: https://github.com/home-assistant/core/pull/64266 +[#64267]: https://github.com/home-assistant/core/pull/64267 +[#64268]: https://github.com/home-assistant/core/pull/64268 +[#64269]: https://github.com/home-assistant/core/pull/64269 +[#64270]: https://github.com/home-assistant/core/pull/64270 +[#64271]: https://github.com/home-assistant/core/pull/64271 +[#64272]: https://github.com/home-assistant/core/pull/64272 +[#64273]: https://github.com/home-assistant/core/pull/64273 +[#64274]: https://github.com/home-assistant/core/pull/64274 +[#64275]: https://github.com/home-assistant/core/pull/64275 +[#64276]: https://github.com/home-assistant/core/pull/64276 +[#64278]: https://github.com/home-assistant/core/pull/64278 +[#64280]: https://github.com/home-assistant/core/pull/64280 +[#64283]: https://github.com/home-assistant/core/pull/64283 +[#64286]: https://github.com/home-assistant/core/pull/64286 +[#64287]: https://github.com/home-assistant/core/pull/64287 +[#64289]: https://github.com/home-assistant/core/pull/64289 +[#64290]: https://github.com/home-assistant/core/pull/64290 +[#64291]: https://github.com/home-assistant/core/pull/64291 +[#64293]: https://github.com/home-assistant/core/pull/64293 +[#64294]: https://github.com/home-assistant/core/pull/64294 +[#64296]: https://github.com/home-assistant/core/pull/64296 +[#64297]: https://github.com/home-assistant/core/pull/64297 +[#64301]: https://github.com/home-assistant/core/pull/64301 +[#64304]: https://github.com/home-assistant/core/pull/64304 +[#64306]: https://github.com/home-assistant/core/pull/64306 +[#64311]: https://github.com/home-assistant/core/pull/64311 +[#64312]: https://github.com/home-assistant/core/pull/64312 +[#64313]: https://github.com/home-assistant/core/pull/64313 +[#64320]: https://github.com/home-assistant/core/pull/64320 +[#64321]: https://github.com/home-assistant/core/pull/64321 +[#64322]: https://github.com/home-assistant/core/pull/64322 +[#64324]: https://github.com/home-assistant/core/pull/64324 +[#64329]: https://github.com/home-assistant/core/pull/64329 +[#64330]: https://github.com/home-assistant/core/pull/64330 +[#64333]: https://github.com/home-assistant/core/pull/64333 +[#64334]: https://github.com/home-assistant/core/pull/64334 +[#64336]: https://github.com/home-assistant/core/pull/64336 +[#64337]: https://github.com/home-assistant/core/pull/64337 +[#64339]: https://github.com/home-assistant/core/pull/64339 +[#64340]: https://github.com/home-assistant/core/pull/64340 +[#64341]: https://github.com/home-assistant/core/pull/64341 +[#64343]: https://github.com/home-assistant/core/pull/64343 +[#64344]: https://github.com/home-assistant/core/pull/64344 +[#64345]: https://github.com/home-assistant/core/pull/64345 +[#64347]: https://github.com/home-assistant/core/pull/64347 +[#64350]: https://github.com/home-assistant/core/pull/64350 +[#64351]: https://github.com/home-assistant/core/pull/64351 +[#64352]: https://github.com/home-assistant/core/pull/64352 +[#64354]: https://github.com/home-assistant/core/pull/64354 +[#64355]: https://github.com/home-assistant/core/pull/64355 +[#64358]: https://github.com/home-assistant/core/pull/64358 +[#64360]: https://github.com/home-assistant/core/pull/64360 +[#64367]: https://github.com/home-assistant/core/pull/64367 +[#64368]: https://github.com/home-assistant/core/pull/64368 +[#64374]: https://github.com/home-assistant/core/pull/64374 +[#64376]: https://github.com/home-assistant/core/pull/64376 +[#64377]: https://github.com/home-assistant/core/pull/64377 +[#64378]: https://github.com/home-assistant/core/pull/64378 +[#64379]: https://github.com/home-assistant/core/pull/64379 +[#64380]: https://github.com/home-assistant/core/pull/64380 +[#64382]: https://github.com/home-assistant/core/pull/64382 +[#64385]: https://github.com/home-assistant/core/pull/64385 +[#64386]: https://github.com/home-assistant/core/pull/64386 +[#64387]: https://github.com/home-assistant/core/pull/64387 +[#64388]: https://github.com/home-assistant/core/pull/64388 +[#64389]: https://github.com/home-assistant/core/pull/64389 +[#64391]: https://github.com/home-assistant/core/pull/64391 +[#64392]: https://github.com/home-assistant/core/pull/64392 +[#64394]: https://github.com/home-assistant/core/pull/64394 +[#64395]: https://github.com/home-assistant/core/pull/64395 +[#64397]: https://github.com/home-assistant/core/pull/64397 +[#64402]: https://github.com/home-assistant/core/pull/64402 +[#64403]: https://github.com/home-assistant/core/pull/64403 +[#64405]: https://github.com/home-assistant/core/pull/64405 +[#64407]: https://github.com/home-assistant/core/pull/64407 +[#64409]: https://github.com/home-assistant/core/pull/64409 +[#64411]: https://github.com/home-assistant/core/pull/64411 +[#64412]: https://github.com/home-assistant/core/pull/64412 +[#64413]: https://github.com/home-assistant/core/pull/64413 +[#64414]: https://github.com/home-assistant/core/pull/64414 +[#64417]: https://github.com/home-assistant/core/pull/64417 +[#64419]: https://github.com/home-assistant/core/pull/64419 +[#64420]: https://github.com/home-assistant/core/pull/64420 +[#64421]: https://github.com/home-assistant/core/pull/64421 +[#64424]: https://github.com/home-assistant/core/pull/64424 +[#64427]: https://github.com/home-assistant/core/pull/64427 +[#64428]: https://github.com/home-assistant/core/pull/64428 +[#64430]: https://github.com/home-assistant/core/pull/64430 +[#64431]: https://github.com/home-assistant/core/pull/64431 +[#64435]: https://github.com/home-assistant/core/pull/64435 +[#64437]: https://github.com/home-assistant/core/pull/64437 +[#64438]: https://github.com/home-assistant/core/pull/64438 +[#64439]: https://github.com/home-assistant/core/pull/64439 +[#64448]: https://github.com/home-assistant/core/pull/64448 +[#64449]: https://github.com/home-assistant/core/pull/64449 +[#64450]: https://github.com/home-assistant/core/pull/64450 +[#64452]: https://github.com/home-assistant/core/pull/64452 +[#64456]: https://github.com/home-assistant/core/pull/64456 +[#64457]: https://github.com/home-assistant/core/pull/64457 +[#64462]: https://github.com/home-assistant/core/pull/64462 +[#64463]: https://github.com/home-assistant/core/pull/64463 +[#64466]: https://github.com/home-assistant/core/pull/64466 +[#64467]: https://github.com/home-assistant/core/pull/64467 +[#64468]: https://github.com/home-assistant/core/pull/64468 +[#64469]: https://github.com/home-assistant/core/pull/64469 +[#64470]: https://github.com/home-assistant/core/pull/64470 +[#64471]: https://github.com/home-assistant/core/pull/64471 +[#64472]: https://github.com/home-assistant/core/pull/64472 +[#64473]: https://github.com/home-assistant/core/pull/64473 +[#64474]: https://github.com/home-assistant/core/pull/64474 +[#64475]: https://github.com/home-assistant/core/pull/64475 +[#64476]: https://github.com/home-assistant/core/pull/64476 +[#64478]: https://github.com/home-assistant/core/pull/64478 +[#64479]: https://github.com/home-assistant/core/pull/64479 +[#64480]: https://github.com/home-assistant/core/pull/64480 +[#64481]: https://github.com/home-assistant/core/pull/64481 +[#64483]: https://github.com/home-assistant/core/pull/64483 +[#64486]: https://github.com/home-assistant/core/pull/64486 +[#64489]: https://github.com/home-assistant/core/pull/64489 +[#64490]: https://github.com/home-assistant/core/pull/64490 +[#64492]: https://github.com/home-assistant/core/pull/64492 +[#64493]: https://github.com/home-assistant/core/pull/64493 +[#64495]: https://github.com/home-assistant/core/pull/64495 +[#64496]: https://github.com/home-assistant/core/pull/64496 +[#64498]: https://github.com/home-assistant/core/pull/64498 +[#64499]: https://github.com/home-assistant/core/pull/64499 +[#64500]: https://github.com/home-assistant/core/pull/64500 +[#64501]: https://github.com/home-assistant/core/pull/64501 +[#64502]: https://github.com/home-assistant/core/pull/64502 +[#64503]: https://github.com/home-assistant/core/pull/64503 +[#64504]: https://github.com/home-assistant/core/pull/64504 +[#64505]: https://github.com/home-assistant/core/pull/64505 +[#64506]: https://github.com/home-assistant/core/pull/64506 +[#64507]: https://github.com/home-assistant/core/pull/64507 +[#64508]: https://github.com/home-assistant/core/pull/64508 +[#64509]: https://github.com/home-assistant/core/pull/64509 +[#64510]: https://github.com/home-assistant/core/pull/64510 +[#64511]: https://github.com/home-assistant/core/pull/64511 +[#64512]: https://github.com/home-assistant/core/pull/64512 +[#64513]: https://github.com/home-assistant/core/pull/64513 +[#64514]: https://github.com/home-assistant/core/pull/64514 +[#64515]: https://github.com/home-assistant/core/pull/64515 +[#64516]: https://github.com/home-assistant/core/pull/64516 +[#64517]: https://github.com/home-assistant/core/pull/64517 +[#64519]: https://github.com/home-assistant/core/pull/64519 +[#64520]: https://github.com/home-assistant/core/pull/64520 +[#64521]: https://github.com/home-assistant/core/pull/64521 +[#64522]: https://github.com/home-assistant/core/pull/64522 +[#64523]: https://github.com/home-assistant/core/pull/64523 +[#64524]: https://github.com/home-assistant/core/pull/64524 +[#64525]: https://github.com/home-assistant/core/pull/64525 +[#64526]: https://github.com/home-assistant/core/pull/64526 +[#64527]: https://github.com/home-assistant/core/pull/64527 +[#64528]: https://github.com/home-assistant/core/pull/64528 +[#64529]: https://github.com/home-assistant/core/pull/64529 +[#64531]: https://github.com/home-assistant/core/pull/64531 +[#64532]: https://github.com/home-assistant/core/pull/64532 +[#64533]: https://github.com/home-assistant/core/pull/64533 +[#64534]: https://github.com/home-assistant/core/pull/64534 +[#64536]: https://github.com/home-assistant/core/pull/64536 +[#64537]: https://github.com/home-assistant/core/pull/64537 +[#64540]: https://github.com/home-assistant/core/pull/64540 +[#64541]: https://github.com/home-assistant/core/pull/64541 +[#64542]: https://github.com/home-assistant/core/pull/64542 +[#64543]: https://github.com/home-assistant/core/pull/64543 +[#64544]: https://github.com/home-assistant/core/pull/64544 +[#64546]: https://github.com/home-assistant/core/pull/64546 +[#64549]: https://github.com/home-assistant/core/pull/64549 +[#64550]: https://github.com/home-assistant/core/pull/64550 +[#64552]: https://github.com/home-assistant/core/pull/64552 +[#64553]: https://github.com/home-assistant/core/pull/64553 +[#64554]: https://github.com/home-assistant/core/pull/64554 +[#64557]: https://github.com/home-assistant/core/pull/64557 +[#64558]: https://github.com/home-assistant/core/pull/64558 +[#64559]: https://github.com/home-assistant/core/pull/64559 +[#64561]: https://github.com/home-assistant/core/pull/64561 +[#64564]: https://github.com/home-assistant/core/pull/64564 +[#64565]: https://github.com/home-assistant/core/pull/64565 +[#64567]: https://github.com/home-assistant/core/pull/64567 +[#64568]: https://github.com/home-assistant/core/pull/64568 +[#64571]: https://github.com/home-assistant/core/pull/64571 +[#64572]: https://github.com/home-assistant/core/pull/64572 +[#64573]: https://github.com/home-assistant/core/pull/64573 +[#64574]: https://github.com/home-assistant/core/pull/64574 +[#64575]: https://github.com/home-assistant/core/pull/64575 +[#64576]: https://github.com/home-assistant/core/pull/64576 +[#64577]: https://github.com/home-assistant/core/pull/64577 +[#64579]: https://github.com/home-assistant/core/pull/64579 +[#64580]: https://github.com/home-assistant/core/pull/64580 +[#64581]: https://github.com/home-assistant/core/pull/64581 +[#64582]: https://github.com/home-assistant/core/pull/64582 +[#64583]: https://github.com/home-assistant/core/pull/64583 +[#64584]: https://github.com/home-assistant/core/pull/64584 +[#64585]: https://github.com/home-assistant/core/pull/64585 +[#64586]: https://github.com/home-assistant/core/pull/64586 +[#64587]: https://github.com/home-assistant/core/pull/64587 +[#64591]: https://github.com/home-assistant/core/pull/64591 +[#64593]: https://github.com/home-assistant/core/pull/64593 +[#64596]: https://github.com/home-assistant/core/pull/64596 +[#64597]: https://github.com/home-assistant/core/pull/64597 +[#64598]: https://github.com/home-assistant/core/pull/64598 +[#64599]: https://github.com/home-assistant/core/pull/64599 +[#64600]: https://github.com/home-assistant/core/pull/64600 +[#64601]: https://github.com/home-assistant/core/pull/64601 +[#64602]: https://github.com/home-assistant/core/pull/64602 +[#64603]: https://github.com/home-assistant/core/pull/64603 +[#64605]: https://github.com/home-assistant/core/pull/64605 +[#64606]: https://github.com/home-assistant/core/pull/64606 +[#64607]: https://github.com/home-assistant/core/pull/64607 +[#64608]: https://github.com/home-assistant/core/pull/64608 +[#64610]: https://github.com/home-assistant/core/pull/64610 +[#64613]: https://github.com/home-assistant/core/pull/64613 +[#64617]: https://github.com/home-assistant/core/pull/64617 +[#64618]: https://github.com/home-assistant/core/pull/64618 +[#64619]: https://github.com/home-assistant/core/pull/64619 +[#64620]: https://github.com/home-assistant/core/pull/64620 +[#64621]: https://github.com/home-assistant/core/pull/64621 +[#64622]: https://github.com/home-assistant/core/pull/64622 +[#64624]: https://github.com/home-assistant/core/pull/64624 +[#64625]: https://github.com/home-assistant/core/pull/64625 +[#64627]: https://github.com/home-assistant/core/pull/64627 +[#64629]: https://github.com/home-assistant/core/pull/64629 +[#64630]: https://github.com/home-assistant/core/pull/64630 +[#64631]: https://github.com/home-assistant/core/pull/64631 +[#64634]: https://github.com/home-assistant/core/pull/64634 +[#64636]: https://github.com/home-assistant/core/pull/64636 +[#64637]: https://github.com/home-assistant/core/pull/64637 +[#64638]: https://github.com/home-assistant/core/pull/64638 +[#64640]: https://github.com/home-assistant/core/pull/64640 +[#64641]: https://github.com/home-assistant/core/pull/64641 +[#64642]: https://github.com/home-assistant/core/pull/64642 +[#64643]: https://github.com/home-assistant/core/pull/64643 +[#64645]: https://github.com/home-assistant/core/pull/64645 +[#64646]: https://github.com/home-assistant/core/pull/64646 +[#64647]: https://github.com/home-assistant/core/pull/64647 +[#64649]: https://github.com/home-assistant/core/pull/64649 +[#64650]: https://github.com/home-assistant/core/pull/64650 +[#64651]: https://github.com/home-assistant/core/pull/64651 +[#64652]: https://github.com/home-assistant/core/pull/64652 +[#64655]: https://github.com/home-assistant/core/pull/64655 +[#64656]: https://github.com/home-assistant/core/pull/64656 +[#64657]: https://github.com/home-assistant/core/pull/64657 +[#64658]: https://github.com/home-assistant/core/pull/64658 +[#64660]: https://github.com/home-assistant/core/pull/64660 +[#64661]: https://github.com/home-assistant/core/pull/64661 +[#64662]: https://github.com/home-assistant/core/pull/64662 +[#64663]: https://github.com/home-assistant/core/pull/64663 +[#64664]: https://github.com/home-assistant/core/pull/64664 +[#64665]: https://github.com/home-assistant/core/pull/64665 +[#64666]: https://github.com/home-assistant/core/pull/64666 +[#64667]: https://github.com/home-assistant/core/pull/64667 +[#64669]: https://github.com/home-assistant/core/pull/64669 +[#64670]: https://github.com/home-assistant/core/pull/64670 +[#64671]: https://github.com/home-assistant/core/pull/64671 +[#64672]: https://github.com/home-assistant/core/pull/64672 +[#64673]: https://github.com/home-assistant/core/pull/64673 +[#64676]: https://github.com/home-assistant/core/pull/64676 +[#64682]: https://github.com/home-assistant/core/pull/64682 +[#64683]: https://github.com/home-assistant/core/pull/64683 +[#64687]: https://github.com/home-assistant/core/pull/64687 +[#64688]: https://github.com/home-assistant/core/pull/64688 +[#64690]: https://github.com/home-assistant/core/pull/64690 +[#64693]: https://github.com/home-assistant/core/pull/64693 +[#64695]: https://github.com/home-assistant/core/pull/64695 +[#64697]: https://github.com/home-assistant/core/pull/64697 +[#64698]: https://github.com/home-assistant/core/pull/64698 +[#64701]: https://github.com/home-assistant/core/pull/64701 +[#64702]: https://github.com/home-assistant/core/pull/64702 +[#64704]: https://github.com/home-assistant/core/pull/64704 +[#64705]: https://github.com/home-assistant/core/pull/64705 +[#64707]: https://github.com/home-assistant/core/pull/64707 +[#64708]: https://github.com/home-assistant/core/pull/64708 +[#64711]: https://github.com/home-assistant/core/pull/64711 +[#64713]: https://github.com/home-assistant/core/pull/64713 +[#64714]: https://github.com/home-assistant/core/pull/64714 +[#64715]: https://github.com/home-assistant/core/pull/64715 +[#64716]: https://github.com/home-assistant/core/pull/64716 +[#64717]: https://github.com/home-assistant/core/pull/64717 +[#64719]: https://github.com/home-assistant/core/pull/64719 +[#64721]: https://github.com/home-assistant/core/pull/64721 +[#64722]: https://github.com/home-assistant/core/pull/64722 +[#64723]: https://github.com/home-assistant/core/pull/64723 +[#64725]: https://github.com/home-assistant/core/pull/64725 +[#64729]: https://github.com/home-assistant/core/pull/64729 +[#64732]: https://github.com/home-assistant/core/pull/64732 +[#64733]: https://github.com/home-assistant/core/pull/64733 +[#64734]: https://github.com/home-assistant/core/pull/64734 +[#64736]: https://github.com/home-assistant/core/pull/64736 +[#64738]: https://github.com/home-assistant/core/pull/64738 +[#64739]: https://github.com/home-assistant/core/pull/64739 +[#64740]: https://github.com/home-assistant/core/pull/64740 +[#64741]: https://github.com/home-assistant/core/pull/64741 +[#64742]: https://github.com/home-assistant/core/pull/64742 +[#64743]: https://github.com/home-assistant/core/pull/64743 +[#64744]: https://github.com/home-assistant/core/pull/64744 +[#64745]: https://github.com/home-assistant/core/pull/64745 +[#64746]: https://github.com/home-assistant/core/pull/64746 +[#64747]: https://github.com/home-assistant/core/pull/64747 +[#64748]: https://github.com/home-assistant/core/pull/64748 +[#64749]: https://github.com/home-assistant/core/pull/64749 +[#64750]: https://github.com/home-assistant/core/pull/64750 +[#64751]: https://github.com/home-assistant/core/pull/64751 +[#64752]: https://github.com/home-assistant/core/pull/64752 +[#64754]: https://github.com/home-assistant/core/pull/64754 +[#64756]: https://github.com/home-assistant/core/pull/64756 +[#64760]: https://github.com/home-assistant/core/pull/64760 +[#64761]: https://github.com/home-assistant/core/pull/64761 +[#64765]: https://github.com/home-assistant/core/pull/64765 +[#64766]: https://github.com/home-assistant/core/pull/64766 +[#64768]: https://github.com/home-assistant/core/pull/64768 +[#64769]: https://github.com/home-assistant/core/pull/64769 +[#64771]: https://github.com/home-assistant/core/pull/64771 +[#64773]: https://github.com/home-assistant/core/pull/64773 +[#64776]: https://github.com/home-assistant/core/pull/64776 +[#64779]: https://github.com/home-assistant/core/pull/64779 +[#64780]: https://github.com/home-assistant/core/pull/64780 +[#64781]: https://github.com/home-assistant/core/pull/64781 +[#64782]: https://github.com/home-assistant/core/pull/64782 +[#64783]: https://github.com/home-assistant/core/pull/64783 +[#64784]: https://github.com/home-assistant/core/pull/64784 +[#64785]: https://github.com/home-assistant/core/pull/64785 +[#64786]: https://github.com/home-assistant/core/pull/64786 +[#64787]: https://github.com/home-assistant/core/pull/64787 +[#64788]: https://github.com/home-assistant/core/pull/64788 +[#64789]: https://github.com/home-assistant/core/pull/64789 +[#64792]: https://github.com/home-assistant/core/pull/64792 +[#64793]: https://github.com/home-assistant/core/pull/64793 +[#64794]: https://github.com/home-assistant/core/pull/64794 +[#64795]: https://github.com/home-assistant/core/pull/64795 +[#64797]: https://github.com/home-assistant/core/pull/64797 +[#64798]: https://github.com/home-assistant/core/pull/64798 +[#64799]: https://github.com/home-assistant/core/pull/64799 +[#64800]: https://github.com/home-assistant/core/pull/64800 +[#64801]: https://github.com/home-assistant/core/pull/64801 +[#64804]: https://github.com/home-assistant/core/pull/64804 +[#64805]: https://github.com/home-assistant/core/pull/64805 +[#64806]: https://github.com/home-assistant/core/pull/64806 +[#64807]: https://github.com/home-assistant/core/pull/64807 +[#64808]: https://github.com/home-assistant/core/pull/64808 +[#64810]: https://github.com/home-assistant/core/pull/64810 +[#64812]: https://github.com/home-assistant/core/pull/64812 +[#64813]: https://github.com/home-assistant/core/pull/64813 +[#64814]: https://github.com/home-assistant/core/pull/64814 +[#64817]: https://github.com/home-assistant/core/pull/64817 +[#64818]: https://github.com/home-assistant/core/pull/64818 +[#64819]: https://github.com/home-assistant/core/pull/64819 +[#64821]: https://github.com/home-assistant/core/pull/64821 +[#64822]: https://github.com/home-assistant/core/pull/64822 +[#64823]: https://github.com/home-assistant/core/pull/64823 +[#64826]: https://github.com/home-assistant/core/pull/64826 +[#64827]: https://github.com/home-assistant/core/pull/64827 +[#64829]: https://github.com/home-assistant/core/pull/64829 +[#64831]: https://github.com/home-assistant/core/pull/64831 +[#64833]: https://github.com/home-assistant/core/pull/64833 +[#64835]: https://github.com/home-assistant/core/pull/64835 +[#64836]: https://github.com/home-assistant/core/pull/64836 +[#64837]: https://github.com/home-assistant/core/pull/64837 +[#64838]: https://github.com/home-assistant/core/pull/64838 +[#64841]: https://github.com/home-assistant/core/pull/64841 +[#64842]: https://github.com/home-assistant/core/pull/64842 +[#64843]: https://github.com/home-assistant/core/pull/64843 +[#64844]: https://github.com/home-assistant/core/pull/64844 +[#64845]: https://github.com/home-assistant/core/pull/64845 +[#64846]: https://github.com/home-assistant/core/pull/64846 +[#64848]: https://github.com/home-assistant/core/pull/64848 +[#64851]: https://github.com/home-assistant/core/pull/64851 +[#64853]: https://github.com/home-assistant/core/pull/64853 +[#64854]: https://github.com/home-assistant/core/pull/64854 +[#64855]: https://github.com/home-assistant/core/pull/64855 +[#64857]: https://github.com/home-assistant/core/pull/64857 +[#64858]: https://github.com/home-assistant/core/pull/64858 +[#64859]: https://github.com/home-assistant/core/pull/64859 +[#64862]: https://github.com/home-assistant/core/pull/64862 +[#64863]: https://github.com/home-assistant/core/pull/64863 +[#64864]: https://github.com/home-assistant/core/pull/64864 +[#64866]: https://github.com/home-assistant/core/pull/64866 +[#64869]: https://github.com/home-assistant/core/pull/64869 +[#64871]: https://github.com/home-assistant/core/pull/64871 +[#64872]: https://github.com/home-assistant/core/pull/64872 +[#64873]: https://github.com/home-assistant/core/pull/64873 +[#64874]: https://github.com/home-assistant/core/pull/64874 +[#64875]: https://github.com/home-assistant/core/pull/64875 +[#64876]: https://github.com/home-assistant/core/pull/64876 +[#64877]: https://github.com/home-assistant/core/pull/64877 +[#64878]: https://github.com/home-assistant/core/pull/64878 +[#64879]: https://github.com/home-assistant/core/pull/64879 +[#64881]: https://github.com/home-assistant/core/pull/64881 +[#64882]: https://github.com/home-assistant/core/pull/64882 +[#64885]: https://github.com/home-assistant/core/pull/64885 +[#64887]: https://github.com/home-assistant/core/pull/64887 +[#64889]: https://github.com/home-assistant/core/pull/64889 +[#64893]: https://github.com/home-assistant/core/pull/64893 +[#64894]: https://github.com/home-assistant/core/pull/64894 +[#64895]: https://github.com/home-assistant/core/pull/64895 +[#64896]: https://github.com/home-assistant/core/pull/64896 +[#64897]: https://github.com/home-assistant/core/pull/64897 +[#64898]: https://github.com/home-assistant/core/pull/64898 +[#64899]: https://github.com/home-assistant/core/pull/64899 +[#64900]: https://github.com/home-assistant/core/pull/64900 +[#64901]: https://github.com/home-assistant/core/pull/64901 +[#64903]: https://github.com/home-assistant/core/pull/64903 +[#64905]: https://github.com/home-assistant/core/pull/64905 +[#64906]: https://github.com/home-assistant/core/pull/64906 +[#64907]: https://github.com/home-assistant/core/pull/64907 +[#64908]: https://github.com/home-assistant/core/pull/64908 +[#64909]: https://github.com/home-assistant/core/pull/64909 +[#64910]: https://github.com/home-assistant/core/pull/64910 +[#64911]: https://github.com/home-assistant/core/pull/64911 +[#64912]: https://github.com/home-assistant/core/pull/64912 +[#64915]: https://github.com/home-assistant/core/pull/64915 +[#64917]: https://github.com/home-assistant/core/pull/64917 +[#64921]: https://github.com/home-assistant/core/pull/64921 +[#64922]: https://github.com/home-assistant/core/pull/64922 +[#64923]: https://github.com/home-assistant/core/pull/64923 +[#64924]: https://github.com/home-assistant/core/pull/64924 +[#64928]: https://github.com/home-assistant/core/pull/64928 +[#64929]: https://github.com/home-assistant/core/pull/64929 +[#64930]: https://github.com/home-assistant/core/pull/64930 +[#64931]: https://github.com/home-assistant/core/pull/64931 +[#64932]: https://github.com/home-assistant/core/pull/64932 +[#64933]: https://github.com/home-assistant/core/pull/64933 +[#64934]: https://github.com/home-assistant/core/pull/64934 +[#64935]: https://github.com/home-assistant/core/pull/64935 +[#64936]: https://github.com/home-assistant/core/pull/64936 +[#64937]: https://github.com/home-assistant/core/pull/64937 +[#64938]: https://github.com/home-assistant/core/pull/64938 +[#64939]: https://github.com/home-assistant/core/pull/64939 +[#64940]: https://github.com/home-assistant/core/pull/64940 +[#64941]: https://github.com/home-assistant/core/pull/64941 +[#64943]: https://github.com/home-assistant/core/pull/64943 +[#64946]: https://github.com/home-assistant/core/pull/64946 +[#64947]: https://github.com/home-assistant/core/pull/64947 +[#64948]: https://github.com/home-assistant/core/pull/64948 +[#64949]: https://github.com/home-assistant/core/pull/64949 +[#64951]: https://github.com/home-assistant/core/pull/64951 +[#64954]: https://github.com/home-assistant/core/pull/64954 +[#64956]: https://github.com/home-assistant/core/pull/64956 +[#64958]: https://github.com/home-assistant/core/pull/64958 +[#64961]: https://github.com/home-assistant/core/pull/64961 +[#64962]: https://github.com/home-assistant/core/pull/64962 +[#64963]: https://github.com/home-assistant/core/pull/64963 +[#64964]: https://github.com/home-assistant/core/pull/64964 +[#64965]: https://github.com/home-assistant/core/pull/64965 +[#64967]: https://github.com/home-assistant/core/pull/64967 +[#64968]: https://github.com/home-assistant/core/pull/64968 +[#64969]: https://github.com/home-assistant/core/pull/64969 +[#64970]: https://github.com/home-assistant/core/pull/64970 +[#64971]: https://github.com/home-assistant/core/pull/64971 +[#64973]: https://github.com/home-assistant/core/pull/64973 +[#64974]: https://github.com/home-assistant/core/pull/64974 +[#64975]: https://github.com/home-assistant/core/pull/64975 +[#64979]: https://github.com/home-assistant/core/pull/64979 +[#64980]: https://github.com/home-assistant/core/pull/64980 +[#64981]: https://github.com/home-assistant/core/pull/64981 +[#64982]: https://github.com/home-assistant/core/pull/64982 +[#64983]: https://github.com/home-assistant/core/pull/64983 +[#64984]: https://github.com/home-assistant/core/pull/64984 +[#64990]: https://github.com/home-assistant/core/pull/64990 +[#64991]: https://github.com/home-assistant/core/pull/64991 +[#64993]: https://github.com/home-assistant/core/pull/64993 +[#64994]: https://github.com/home-assistant/core/pull/64994 +[#64995]: https://github.com/home-assistant/core/pull/64995 +[#64999]: https://github.com/home-assistant/core/pull/64999 +[#65006]: https://github.com/home-assistant/core/pull/65006 +[#65008]: https://github.com/home-assistant/core/pull/65008 +[#65009]: https://github.com/home-assistant/core/pull/65009 +[#65011]: https://github.com/home-assistant/core/pull/65011 +[#65013]: https://github.com/home-assistant/core/pull/65013 +[#65025]: https://github.com/home-assistant/core/pull/65025 +[#65027]: https://github.com/home-assistant/core/pull/65027 +[#65030]: https://github.com/home-assistant/core/pull/65030 +[#65031]: https://github.com/home-assistant/core/pull/65031 +[#65040]: https://github.com/home-assistant/core/pull/65040 +[#65044]: https://github.com/home-assistant/core/pull/65044 +[#65045]: https://github.com/home-assistant/core/pull/65045 +[#65047]: https://github.com/home-assistant/core/pull/65047 +[#65048]: https://github.com/home-assistant/core/pull/65048 +[#65054]: https://github.com/home-assistant/core/pull/65054 +[#65055]: https://github.com/home-assistant/core/pull/65055 +[#65056]: https://github.com/home-assistant/core/pull/65056 +[#65059]: https://github.com/home-assistant/core/pull/65059 +[#65060]: https://github.com/home-assistant/core/pull/65060 +[#65061]: https://github.com/home-assistant/core/pull/65061 +[#65065]: https://github.com/home-assistant/core/pull/65065 +[#65069]: https://github.com/home-assistant/core/pull/65069 +[#65072]: https://github.com/home-assistant/core/pull/65072 +[#65073]: https://github.com/home-assistant/core/pull/65073 +[#65074]: https://github.com/home-assistant/core/pull/65074 +[#65075]: https://github.com/home-assistant/core/pull/65075 +[#65076]: https://github.com/home-assistant/core/pull/65076 +[#65082]: https://github.com/home-assistant/core/pull/65082 +[#65084]: https://github.com/home-assistant/core/pull/65084 +[#65091]: https://github.com/home-assistant/core/pull/65091 +[#65094]: https://github.com/home-assistant/core/pull/65094 +[#65095]: https://github.com/home-assistant/core/pull/65095 +[#65096]: https://github.com/home-assistant/core/pull/65096 +[#65098]: https://github.com/home-assistant/core/pull/65098 +[#65105]: https://github.com/home-assistant/core/pull/65105 +[#65115]: https://github.com/home-assistant/core/pull/65115 +[#65121]: https://github.com/home-assistant/core/pull/65121 +[#65124]: https://github.com/home-assistant/core/pull/65124 +[#65125]: https://github.com/home-assistant/core/pull/65125 +[#65128]: https://github.com/home-assistant/core/pull/65128 +[#65129]: https://github.com/home-assistant/core/pull/65129 +[#65131]: https://github.com/home-assistant/core/pull/65131 +[#65134]: https://github.com/home-assistant/core/pull/65134 +[#65135]: https://github.com/home-assistant/core/pull/65135 +[#65138]: https://github.com/home-assistant/core/pull/65138 +[#65141]: https://github.com/home-assistant/core/pull/65141 +[#65145]: https://github.com/home-assistant/core/pull/65145 +[#65149]: https://github.com/home-assistant/core/pull/65149 +[#65151]: https://github.com/home-assistant/core/pull/65151 +[#65152]: https://github.com/home-assistant/core/pull/65152 +[#65154]: https://github.com/home-assistant/core/pull/65154 +[#65155]: https://github.com/home-assistant/core/pull/65155 +[#65159]: https://github.com/home-assistant/core/pull/65159 +[#65160]: https://github.com/home-assistant/core/pull/65160 +[#65161]: https://github.com/home-assistant/core/pull/65161 +[#65162]: https://github.com/home-assistant/core/pull/65162 +[#65165]: https://github.com/home-assistant/core/pull/65165 +[#65167]: https://github.com/home-assistant/core/pull/65167 +[#65170]: https://github.com/home-assistant/core/pull/65170 +[#65171]: https://github.com/home-assistant/core/pull/65171 +[#65176]: https://github.com/home-assistant/core/pull/65176 +[#65190]: https://github.com/home-assistant/core/pull/65190 +[#65195]: https://github.com/home-assistant/core/pull/65195 +[#65207]: https://github.com/home-assistant/core/pull/65207 +[#65214]: https://github.com/home-assistant/core/pull/65214 +[#65217]: https://github.com/home-assistant/core/pull/65217 +[#65222]: https://github.com/home-assistant/core/pull/65222 +[#65225]: https://github.com/home-assistant/core/pull/65225 +[#65236]: https://github.com/home-assistant/core/pull/65236 +[#65243]: https://github.com/home-assistant/core/pull/65243 +[#65245]: https://github.com/home-assistant/core/pull/65245 +[#65250]: https://github.com/home-assistant/core/pull/65250 +[#65252]: https://github.com/home-assistant/core/pull/65252 +[#65254]: https://github.com/home-assistant/core/pull/65254 +[#65265]: https://github.com/home-assistant/core/pull/65265 +[#65267]: https://github.com/home-assistant/core/pull/65267 +[#65274]: https://github.com/home-assistant/core/pull/65274 +[#65275]: https://github.com/home-assistant/core/pull/65275 +[#65281]: https://github.com/home-assistant/core/pull/65281 +[#65285]: https://github.com/home-assistant/core/pull/65285 +[#65288]: https://github.com/home-assistant/core/pull/65288 +[#65290]: https://github.com/home-assistant/core/pull/65290 +[#65293]: https://github.com/home-assistant/core/pull/65293 +[#65296]: https://github.com/home-assistant/core/pull/65296 +[#65297]: https://github.com/home-assistant/core/pull/65297 +[#65305]: https://github.com/home-assistant/core/pull/65305 +[#65312]: https://github.com/home-assistant/core/pull/65312 +[#65313]: https://github.com/home-assistant/core/pull/65313 +[#65314]: https://github.com/home-assistant/core/pull/65314 +[#65315]: https://github.com/home-assistant/core/pull/65315 +[#65317]: https://github.com/home-assistant/core/pull/65317 +[#65318]: https://github.com/home-assistant/core/pull/65318 +[#65319]: https://github.com/home-assistant/core/pull/65319 +[#65320]: https://github.com/home-assistant/core/pull/65320 +[#65322]: https://github.com/home-assistant/core/pull/65322 +[#65324]: https://github.com/home-assistant/core/pull/65324 +[#65327]: https://github.com/home-assistant/core/pull/65327 +[#65332]: https://github.com/home-assistant/core/pull/65332 +[#65334]: https://github.com/home-assistant/core/pull/65334 +[#65335]: https://github.com/home-assistant/core/pull/65335 +[#65339]: https://github.com/home-assistant/core/pull/65339 +[#65340]: https://github.com/home-assistant/core/pull/65340 +[#65341]: https://github.com/home-assistant/core/pull/65341 +[#65342]: https://github.com/home-assistant/core/pull/65342 +[#65344]: https://github.com/home-assistant/core/pull/65344 +[#65345]: https://github.com/home-assistant/core/pull/65345 +[#65357]: https://github.com/home-assistant/core/pull/65357 +[#65359]: https://github.com/home-assistant/core/pull/65359 +[#65369]: https://github.com/home-assistant/core/pull/65369 +[#65372]: https://github.com/home-assistant/core/pull/65372 +[#65374]: https://github.com/home-assistant/core/pull/65374 +[#65378]: https://github.com/home-assistant/core/pull/65378 +[#65379]: https://github.com/home-assistant/core/pull/65379 +[#65380]: https://github.com/home-assistant/core/pull/65380 +[#65382]: https://github.com/home-assistant/core/pull/65382 +[#65385]: https://github.com/home-assistant/core/pull/65385 +[#65386]: https://github.com/home-assistant/core/pull/65386 +[#65393]: https://github.com/home-assistant/core/pull/65393 +[#65400]: https://github.com/home-assistant/core/pull/65400 +[#65406]: https://github.com/home-assistant/core/pull/65406 +[#65407]: https://github.com/home-assistant/core/pull/65407 +[#65420]: https://github.com/home-assistant/core/pull/65420 +[#65422]: https://github.com/home-assistant/core/pull/65422 +[#65429]: https://github.com/home-assistant/core/pull/65429 +[#65432]: https://github.com/home-assistant/core/pull/65432 +[@ANMalko]: https://github.com/ANMalko +[@Adminiuga]: https://github.com/Adminiuga +[@Aeroid]: https://github.com/Aeroid +[@Alex9779]: https://github.com/Alex9779 +[@AngellusMortis]: https://github.com/AngellusMortis +[@BraveChicken1]: https://github.com/BraveChicken1 +[@Bre77]: https://github.com/Bre77 +[@Cereal2nd]: https://github.com/Cereal2nd +[@Chen-IL]: https://github.com/Chen-IL +[@ColinRobbins]: https://github.com/ColinRobbins +[@DCSBL]: https://github.com/DCSBL +[@Danielhiversen]: https://github.com/Danielhiversen +[@DeerMaximum]: https://github.com/DeerMaximum +[@Djowie]: https://github.com/Djowie +[@Drafteed]: https://github.com/Drafteed +[@DurgNomis-drol]: https://github.com/DurgNomis-drol +[@Eernie]: https://github.com/Eernie +[@Ernst79]: https://github.com/Ernst79 +[@GuyKh]: https://github.com/GuyKh +[@Hedda]: https://github.com/Hedda +[@Jc2k]: https://github.com/Jc2k +[@JeffLIrion]: https://github.com/JeffLIrion +[@Kane610]: https://github.com/Kane610 +[@KapJI]: https://github.com/KapJI +[@LEJOUI]: https://github.com/LEJOUI +[@LoekSangers]: https://github.com/LoekSangers +[@Lyr3x]: https://github.com/Lyr3x +[@MZachmann]: https://github.com/MZachmann +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MirkoLenz]: https://github.com/MirkoLenz +[@MizterB]: https://github.com/MizterB +[@Noltari]: https://github.com/Noltari +[@OGKevin]: https://github.com/OGKevin +[@OnFreund]: https://github.com/OnFreund +[@OpenMyDog]: https://github.com/OpenMyDog +[@OttoWinter]: https://github.com/OttoWinter +[@Petro31]: https://github.com/Petro31 +[@RefineryX]: https://github.com/RefineryX +[@RenierM26]: https://github.com/RenierM26 +[@RobBie1221]: https://github.com/RobBie1221 +[@RogerSelwyn]: https://github.com/RogerSelwyn +[@Sdahl1234]: https://github.com/Sdahl1234 +[@Shutgun]: https://github.com/Shutgun +[@StephanU]: https://github.com/StephanU +[@StevenLooman]: https://github.com/StevenLooman +[@Swamp-Ig]: https://github.com/Swamp-Ig +[@Tathar]: https://github.com/Tathar +[@ThomDietrich]: https://github.com/ThomDietrich +[@TomBrien]: https://github.com/TomBrien +[@ZephireNZ]: https://github.com/ZephireNZ +[@ZuluWhiskey]: https://github.com/ZuluWhiskey +[@agners]: https://github.com/agners +[@ajschmidt8]: https://github.com/ajschmidt8 +[@albertogeniola]: https://github.com/albertogeniola +[@alengwenus]: https://github.com/alengwenus +[@alexanv1]: https://github.com/alexanv1 +[@alim4r]: https://github.com/alim4r +[@allenporter]: https://github.com/allenporter +[@amosyuen]: https://github.com/amosyuen +[@andre-richter]: https://github.com/andre-richter +[@aomann]: https://github.com/aomann +[@atmurray]: https://github.com/atmurray +[@austinmroczek]: https://github.com/austinmroczek +[@avee87]: https://github.com/avee87 +[@bachya]: https://github.com/bachya +[@bairnhard]: https://github.com/bairnhard +[@balloob]: https://github.com/balloob +[@bdr99]: https://github.com/bdr99 +[@bdraco]: https://github.com/bdraco +[@beele]: https://github.com/beele +[@bieniu]: https://github.com/bieniu +[@br3sc4]: https://github.com/br3sc4 +[@bramkragten]: https://github.com/bramkragten +[@brianegge]: https://github.com/brianegge +[@burnsie-la]: https://github.com/burnsie-la +[@bvweerd]: https://github.com/bvweerd +[@candreacchio]: https://github.com/candreacchio +[@cdce8p]: https://github.com/cdce8p +[@cgarwood]: https://github.com/cgarwood +[@cgtobi]: https://github.com/cgtobi +[@chemelli74]: https://github.com/chemelli74 +[@chishm]: https://github.com/chishm +[@chpego]: https://github.com/chpego +[@cmroche]: https://github.com/cmroche +[@colinodell]: https://github.com/colinodell +[@ctalkington]: https://github.com/ctalkington +[@danielperna84]: https://github.com/danielperna84 +[@davet2001]: https://github.com/davet2001 +[@decompil3d]: https://github.com/decompil3d +[@dgomes]: https://github.com/dgomes +[@dingusdk]: https://github.com/dingusdk +[@dmulcahey]: https://github.com/dmulcahey +[@dougiteixeira]: https://github.com/dougiteixeira +[@droberg]: https://github.com/droberg +[@dshokouhi]: https://github.com/dshokouhi +[@eavanvalkenburg]: https://github.com/eavanvalkenburg +[@ecoen66]: https://github.com/ecoen66 +[@egguy]: https://github.com/egguy +[@eifinger]: https://github.com/eifinger +[@elupus]: https://github.com/elupus +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@esev]: https://github.com/esev +[@fOmey]: https://github.com/fOmey +[@farmio]: https://github.com/farmio +[@filcole]: https://github.com/filcole +[@flacjacket]: https://github.com/flacjacket +[@flz]: https://github.com/flz +[@fredrike]: https://github.com/fredrike +[@frenck]: https://github.com/frenck +[@funkybunch]: https://github.com/funkybunch +[@garbled1]: https://github.com/garbled1 +[@gerard33]: https://github.com/gerard33 +[@ggravlingen]: https://github.com/ggravlingen +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@gwww]: https://github.com/gwww +[@heythisisnate]: https://github.com/heythisisnate +[@hmmbob]: https://github.com/hmmbob +[@iMicknl]: https://github.com/iMicknl +[@infeeeee]: https://github.com/infeeeee +[@j-stienstra]: https://github.com/j-stienstra +[@jacekk015]: https://github.com/jacekk015 +[@jan-loeffler]: https://github.com/jan-loeffler +[@javicalle]: https://github.com/javicalle +[@jbouwh]: https://github.com/jbouwh +[@jeeftor]: https://github.com/jeeftor +[@jesserockz]: https://github.com/jesserockz +[@jjlawren]: https://github.com/jjlawren +[@jkeljo]: https://github.com/jkeljo +[@jsoref]: https://github.com/jsoref +[@k4ds3]: https://github.com/k4ds3 +[@kbickar]: https://github.com/kbickar +[@kezziny]: https://github.com/kezziny +[@kimfrellsen]: https://github.com/kimfrellsen +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@kristjanbjarni]: https://github.com/kristjanbjarni +[@leeyuentuen]: https://github.com/leeyuentuen +[@liudger]: https://github.com/liudger +[@ludeeus]: https://github.com/ludeeus +[@lunmay]: https://github.com/lunmay +[@m4rkireland]: https://github.com/m4rkireland +[@mampfes]: https://github.com/mampfes +[@marcelveldt]: https://github.com/marcelveldt +[@marcuslonnberg]: https://github.com/marcuslonnberg +[@martin3000]: https://github.com/martin3000 +[@marvin-w]: https://github.com/marvin-w +[@maxcanna]: https://github.com/maxcanna +[@mdegat01]: https://github.com/mdegat01 +[@mdz]: https://github.com/mdz +[@mezz64]: https://github.com/mezz64 +[@mib1185]: https://github.com/mib1185 +[@micha91]: https://github.com/micha91 +[@michaelarnauts]: https://github.com/michaelarnauts +[@milanmeu]: https://github.com/milanmeu +[@mletenay]: https://github.com/mletenay +[@mtdcr]: https://github.com/mtdcr +[@natekspencer]: https://github.com/natekspencer +[@nbogojevic]: https://github.com/nbogojevic +[@ngdio]: https://github.com/ngdio +[@nickw444]: https://github.com/nickw444 +[@niecore]: https://github.com/niecore +[@nohn]: https://github.com/nohn +[@noxhirsch]: https://github.com/noxhirsch +[@oischinger]: https://github.com/oischinger +[@ol-iver]: https://github.com/ol-iver +[@ollo69]: https://github.com/ollo69 +[@orcema]: https://github.com/orcema +[@pascalwinters]: https://github.com/pascalwinters +[@petslane]: https://github.com/petslane +[@postlund]: https://github.com/postlund +[@ppetru]: https://github.com/ppetru +[@pree]: https://github.com/pree +[@pvizeli]: https://github.com/pvizeli +[@qqaatw]: https://github.com/qqaatw +[@raman325]: https://github.com/raman325 +[@rappenze]: https://github.com/rappenze +[@rautesamtr]: https://github.com/rautesamtr +[@regevbr]: https://github.com/regevbr +[@rfleming71]: https://github.com/rfleming71 +[@rforro]: https://github.com/rforro +[@rhpijnacker]: https://github.com/rhpijnacker +[@rianadon]: https://github.com/rianadon +[@rikroe]: https://github.com/rikroe +[@rklomp]: https://github.com/rklomp +[@rnurgaliyev]: https://github.com/rnurgaliyev +[@rsteckler]: https://github.com/rsteckler +[@rytilahti]: https://github.com/rytilahti +[@sagioto]: https://github.com/sagioto +[@schreyack]: https://github.com/schreyack +[@scop]: https://github.com/scop +[@sebfortier2288]: https://github.com/sebfortier2288 +[@shbatm]: https://github.com/shbatm +[@shoejosh]: https://github.com/shoejosh +[@simontegelid]: https://github.com/simontegelid +[@slovdahl]: https://github.com/slovdahl +[@slydiman]: https://github.com/slydiman +[@starkillerOG]: https://github.com/starkillerOG +[@stegm]: https://github.com/stegm +[@stephan192]: https://github.com/stephan192 +[@syssi]: https://github.com/syssi +[@tausen]: https://github.com/tausen +[@tedvdb]: https://github.com/tedvdb +[@teharris1]: https://github.com/teharris1 +[@tetienne]: https://github.com/tetienne +[@thecode]: https://github.com/thecode +[@timmo001]: https://github.com/timmo001 +[@tkdrob]: https://github.com/tkdrob +[@tofuSCHNITZEL]: https://github.com/tofuSCHNITZEL +[@tokenize47]: https://github.com/tokenize47 +[@tomhennigan]: https://github.com/tomhennigan +[@tschamm]: https://github.com/tschamm +[@tschnilo]: https://github.com/tschnilo +[@ufodone]: https://github.com/ufodone +[@uvjustin]: https://github.com/uvjustin +[@vanbalken]: https://github.com/vanbalken +[@vauriga]: https://github.com/vauriga +[@viiru-]: https://github.com/viiru- +[@yozik04]: https://github.com/yozik04 +[@zacwest]: https://github.com/zacwest +[abode docs]: /integrations/abode/ +[accuweather docs]: /integrations/accuweather/ +[acmeda docs]: /integrations/acmeda/ +[adax docs]: /integrations/adax/ +[adguard docs]: /integrations/adguard/ +[ads docs]: /integrations/ads/ +[advantage_air docs]: /integrations/advantage_air/ +[aemet docs]: /integrations/aemet/ +[aftership docs]: /integrations/aftership/ +[airly docs]: /integrations/airly/ +[airnow docs]: /integrations/airnow/ +[airthings docs]: /integrations/airthings/ +[airtouch4 docs]: /integrations/airtouch4/ +[airvisual docs]: /integrations/airvisual/ +[aladdin_connect docs]: /integrations/aladdin_connect/ +[alarmdecoder docs]: /integrations/alarmdecoder/ +[alexa docs]: /integrations/alexa/ +[almond docs]: /integrations/almond/ +[alpha_vantage docs]: /integrations/alpha_vantage/ +[amazon_polly docs]: /integrations/amazon_polly/ +[ambee docs]: /integrations/ambee/ +[amberelectric docs]: /integrations/amberelectric/ +[ambiclimate docs]: /integrations/ambiclimate/ +[ambient_station docs]: /integrations/ambient_station/ +[amcrest docs]: /integrations/amcrest/ +[analytics docs]: /integrations/analytics/ +[android_ip_webcam docs]: /integrations/android_ip_webcam/ +[androidtv docs]: /integrations/androidtv/ +[anel_pwrctrl docs]: /integrations/anel_pwrctrl/ +[apcupsd docs]: /integrations/apcupsd/ +[api docs]: /integrations/api/ +[apns docs]: /integrations/apns/ +[apple_tv docs]: /integrations/apple_tv/ +[aprs docs]: /integrations/aprs/ +[aqualogic docs]: /integrations/aqualogic/ +[aquostv docs]: /integrations/aquostv/ +[arcam_fmj docs]: /integrations/arcam_fmj/ +[arduino docs]: /integrations/arduino/ +[arest docs]: /integrations/arest/ +[arlo docs]: /integrations/arlo/ +[arris_tg2492lg docs]: /integrations/arris_tg2492lg/ +[arwn docs]: /integrations/arwn/ +[aseko_pool_live docs]: /integrations/aseko_pool_live/ +[asterisk_cdr docs]: /integrations/asterisk_cdr/ +[asterisk_mbox docs]: /integrations/asterisk_mbox/ +[asuswrt docs]: /integrations/asuswrt/ +[atag docs]: /integrations/atag/ +[aten_pe docs]: /integrations/aten_pe/ +[atome docs]: /integrations/atome/ +[august docs]: /integrations/august/ +[aurora_abb_powerone docs]: /integrations/aurora_abb_powerone/ +[aussie_broadband docs]: /integrations/aussie_broadband/ +[auth docs]: /integrations/auth/ +[automation docs]: /integrations/automation/ +[avion docs]: /integrations/avion/ +[awair docs]: /integrations/awair/ +[aws docs]: /integrations/aws/ +[axis docs]: /integrations/axis/ +[azure_event_hub docs]: /integrations/azure_event_hub/ +[balboa docs]: /integrations/balboa/ +[bbb_gpio docs]: /integrations/bbb_gpio/ +[bbox docs]: /integrations/bbox/ +[beewi_smartclim docs]: /integrations/beewi_smartclim/ +[bh1750 docs]: /integrations/bh1750/ +[binary_sensor docs]: /integrations/binary_sensor/ +[blackbird docs]: /integrations/blackbird/ +[blebox docs]: /integrations/blebox/ +[blink docs]: /integrations/blink/ +[blinkt docs]: /integrations/blinkt/ +[bloomsky docs]: /integrations/bloomsky/ +[blueprint docs]: /integrations/blueprint/ +[bluetooth_le_tracker docs]: /integrations/bluetooth_le_tracker/ +[bluetooth_tracker docs]: /integrations/bluetooth_tracker/ +[bme280 docs]: /integrations/bme280/ +[bme680 docs]: /integrations/bme680/ +[bmp280 docs]: /integrations/bmp280/ +[bmw_connected_drive docs]: /integrations/bmw_connected_drive/ +[bond docs]: /integrations/bond/ +[bosch_shc docs]: /integrations/bosch_shc/ +[braviatv docs]: /integrations/braviatv/ +[broadlink docs]: /integrations/broadlink/ +[brother docs]: /integrations/brother/ +[browser docs]: /integrations/browser/ +[brunt docs]: /integrations/brunt/ +[buienradar docs]: /integrations/buienradar/ +[caldav docs]: /integrations/caldav/ +[camera docs]: /integrations/camera/ +[canary docs]: /integrations/canary/ +[cast docs]: /integrations/cast/ +[cert_expiry docs]: /integrations/cert_expiry/ +[climacell docs]: /integrations/climacell/ +[climate docs]: /integrations/climate/ +[cloud docs]: /integrations/cloud/ +[co2signal docs]: /integrations/co2signal/ +[coinbase docs]: /integrations/coinbase/ +[comfoconnect docs]: /integrations/comfoconnect/ +[command_line docs]: /integrations/command_line/ +[compensation docs]: /integrations/compensation/ +[concord232 docs]: /integrations/concord232/ +[config docs]: /integrations/config/ +[configurator docs]: /integrations/configurator/ +[control4 docs]: /integrations/control4/ +[conversation docs]: /integrations/conversation/ +[coolmaster docs]: /integrations/coolmaster/ +[cpuspeed docs]: /integrations/cpuspeed/ +[cups docs]: /integrations/cups/ +[daikin docs]: /integrations/daikin/ +[danfoss_air docs]: /integrations/danfoss_air/ +[darksky docs]: /integrations/darksky/ +[debugpy docs]: /integrations/debugpy/ +[deconz docs]: /integrations/deconz/ +[default_config docs]: /integrations/default_config/ +[delijn docs]: /integrations/delijn/ +[demo docs]: /integrations/demo/ +[denonavr docs]: /integrations/denonavr/ +[device_automation docs]: /integrations/device_automation/ +[device_tracker docs]: /integrations/device_tracker/ +[devolo_home_control docs]: /integrations/devolo_home_control/ +[devolo_home_network docs]: /integrations/devolo_home_network/ +[dexcom docs]: /integrations/dexcom/ +[dhcp docs]: /integrations/dhcp/ +[dht docs]: /integrations/dht/ +[diagnostics docs]: /integrations/diagnostics/ +[digital_ocean docs]: /integrations/digital_ocean/ +[digitalloggers docs]: /integrations/digitalloggers/ +[directv docs]: /integrations/directv/ +[discord docs]: /integrations/discord/ +[dlna_dmr docs]: /integrations/dlna_dmr/ +[dnsip docs]: /integrations/dnsip/ +[dominos docs]: /integrations/dominos/ +[doods docs]: /integrations/doods/ +[doorbird docs]: /integrations/doorbird/ +[dsmr docs]: /integrations/dsmr/ +[dsmr_reader docs]: /integrations/dsmr_reader/ +[dte_energy_bridge docs]: /integrations/dte_energy_bridge/ +[dwd_weather_warnings docs]: /integrations/dwd_weather_warnings/ +[dynalite docs]: /integrations/dynalite/ +[eafm docs]: /integrations/eafm/ +[ebusd docs]: /integrations/ebusd/ +[ecoal_boiler docs]: /integrations/ecoal_boiler/ +[ecobee docs]: /integrations/ecobee/ +[econet docs]: /integrations/econet/ +[ecovacs docs]: /integrations/ecovacs/ +[eddystone_temperature docs]: /integrations/eddystone_temperature/ +[edl21 docs]: /integrations/edl21/ +[efergy docs]: /integrations/efergy/ +[egardia docs]: /integrations/egardia/ +[eight_sleep docs]: /integrations/eight_sleep/ +[elgato docs]: /integrations/elgato/ +[eliqonline docs]: /integrations/eliqonline/ +[elkm1 docs]: /integrations/elkm1/ +[elmax docs]: /integrations/elmax/ +[emby docs]: /integrations/emby/ +[emoncms docs]: /integrations/emoncms/ +[emonitor docs]: /integrations/emonitor/ +[emulated_hue docs]: /integrations/emulated_hue/ +[emulated_kasa docs]: /integrations/emulated_kasa/ +[energy docs]: /integrations/energy/ +[enocean docs]: /integrations/enocean/ +[enphase_envoy docs]: /integrations/enphase_envoy/ +[entur_public_transport docs]: /integrations/entur_public_transport/ +[environment_canada docs]: /integrations/environment_canada/ +[envirophat docs]: /integrations/envirophat/ +[envisalink docs]: /integrations/envisalink/ +[eq3btsmart docs]: /integrations/eq3btsmart/ +[esphome docs]: /integrations/esphome/ +[eufy docs]: /integrations/eufy/ +[evil_genius_labs docs]: /integrations/evil_genius_labs/ +[evohome docs]: /integrations/evohome/ +[ezviz docs]: /integrations/ezviz/ +[fail2ban docs]: /integrations/fail2ban/ +[fan docs]: /integrations/fan/ +[feedreader docs]: /integrations/feedreader/ +[ffmpeg docs]: /integrations/ffmpeg/ +[ffmpeg_motion docs]: /integrations/ffmpeg_motion/ +[ffmpeg_noise docs]: /integrations/ffmpeg_noise/ +[fibaro docs]: /integrations/fibaro/ +[file docs]: /integrations/file/ +[filesize docs]: /integrations/filesize/ +[filter docs]: /integrations/filter/ +[fints docs]: /integrations/fints/ +[fireservicerota docs]: /integrations/fireservicerota/ +[firmata docs]: /integrations/firmata/ +[fjaraskupan docs]: /integrations/fjaraskupan/ +[fleetgo docs]: /integrations/fleetgo/ +[flic docs]: /integrations/flic/ +[flick_electric docs]: /integrations/flick_electric/ +[flipr docs]: /integrations/flipr/ +[flo docs]: /integrations/flo/ +[flume docs]: /integrations/flume/ +[flunearyou docs]: /integrations/flunearyou/ +[flux_led docs]: /integrations/flux_led/ +[folder docs]: /integrations/folder/ +[foobot docs]: /integrations/foobot/ +[forecast_solar docs]: /integrations/forecast_solar/ +[fortios docs]: /integrations/fortios/ +[foscam docs]: /integrations/foscam/ +[foursquare docs]: /integrations/foursquare/ +[freebox docs]: /integrations/freebox/ +[freedompro docs]: /integrations/freedompro/ +[fritz docs]: /integrations/fritz/ +[fritzbox docs]: /integrations/fritzbox/ +[fritzbox_callmonitor docs]: /integrations/fritzbox_callmonitor/ +[fronius docs]: /integrations/fronius/ +[frontend docs]: /integrations/frontend/ +[garadget docs]: /integrations/garadget/ +[garages_amsterdam docs]: /integrations/garages_amsterdam/ +[gc100 docs]: /integrations/gc100/ +[gdacs docs]: /integrations/gdacs/ +[generic docs]: /integrations/generic/ +[generic_hygrostat docs]: /integrations/generic_hygrostat/ +[generic_thermostat docs]: /integrations/generic_thermostat/ +[geniushub docs]: /integrations/geniushub/ +[geo_json_events docs]: /integrations/geo_json_events/ +[geo_location docs]: /integrations/geo_location/ +[geonetnz_quakes docs]: /integrations/geonetnz_quakes/ +[gios docs]: /integrations/gios/ +[github docs]: /integrations/github/ +[glances docs]: /integrations/glances/ +[goalzero docs]: /integrations/goalzero/ +[gogogate2 docs]: /integrations/gogogate2/ +[goodwe docs]: /integrations/goodwe/ +[google docs]: /integrations/google/ +[google_assistant docs]: /integrations/google_assistant/ +[google_maps docs]: /integrations/google_maps/ +[google_pubsub docs]: /integrations/google_pubsub/ +[google_travel_time docs]: /integrations/google_travel_time/ +[gpmdp docs]: /integrations/gpmdp/ +[gpslogger docs]: /integrations/gpslogger/ +[gree docs]: /integrations/gree/ +[greeneye_monitor docs]: /integrations/greeneye_monitor/ +[greenwave docs]: /integrations/greenwave/ +[group docs]: /integrations/group/ +[growatt_server docs]: /integrations/growatt_server/ +[gtfs docs]: /integrations/gtfs/ +[guardian docs]: /integrations/guardian/ +[hangouts docs]: /integrations/hangouts/ +[harmony docs]: /integrations/harmony/ +[hassio docs]: /integrations/hassio/ +[haveibeenpwned docs]: /integrations/haveibeenpwned/ +[hddtemp docs]: /integrations/hddtemp/ +[hdmi_cec docs]: /integrations/hdmi_cec/ +[heos docs]: /integrations/heos/ +[hikvision docs]: /integrations/hikvision/ +[history docs]: /integrations/history/ +[hive docs]: /integrations/hive/ +[home_connect docs]: /integrations/home_connect/ +[home_plus_control docs]: /integrations/home_plus_control/ +[homeassistant docs]: /integrations/homeassistant/ +[homekit docs]: /integrations/homekit/ +[homekit_controller docs]: /integrations/homekit_controller/ +[homematic docs]: /integrations/homematic/ +[homematicip_cloud docs]: /integrations/homematicip_cloud/ +[homewizard docs]: /integrations/homewizard/ +[homewizard_energy docs]: /integrations/homewizard_energy/ +[homeworks docs]: /integrations/homeworks/ +[honeywell docs]: /integrations/honeywell/ +[hp_ilo docs]: /integrations/hp_ilo/ +[html5 docs]: /integrations/html5/ +[http docs]: /integrations/http/ +[htu21d docs]: /integrations/htu21d/ +[huawei_lte docs]: /integrations/huawei_lte/ +[hue docs]: /integrations/hue/ +[huisbaasje docs]: /integrations/huisbaasje/ +[humidifier docs]: /integrations/humidifier/ +[hunterdouglas_powerview docs]: /integrations/hunterdouglas_powerview/ +[hvv_departures docs]: /integrations/hvv_departures/ +[hydrawise docs]: /integrations/hydrawise/ +[hyperion docs]: /integrations/hyperion/ +[iaqualink docs]: /integrations/iaqualink/ +[icloud docs]: /integrations/icloud/ +[idteck_prox docs]: /integrations/idteck_prox/ +[ign_sismologia docs]: /integrations/ign_sismologia/ +[ihc docs]: /integrations/ihc/ +[image docs]: /integrations/image/ +[incomfort docs]: /integrations/incomfort/ +[influxdb docs]: /integrations/influxdb/ +[input_button docs]: /integrations/input_button/ +[input_select docs]: /integrations/input_select/ +[insteon docs]: /integrations/insteon/ +[integration docs]: /integrations/integration/ +[intellifire docs]: /integrations/intellifire/ +[ios docs]: /integrations/ios/ +[iotawatt docs]: /integrations/iotawatt/ +[ipma docs]: /integrations/ipma/ +[ipp docs]: /integrations/ipp/ +[iqvia docs]: /integrations/iqvia/ +[islamic_prayer_times docs]: /integrations/islamic_prayer_times/ +[isy994 docs]: /integrations/isy994/ +[itach docs]: /integrations/itach/ +[izone docs]: /integrations/izone/ +[jellyfin docs]: /integrations/jellyfin/ +[jewish_calendar docs]: /integrations/jewish_calendar/ +[juicenet docs]: /integrations/juicenet/ +[kaiterra docs]: /integrations/kaiterra/ +[keba docs]: /integrations/keba/ +[keenetic_ndms2 docs]: /integrations/keenetic_ndms2/ +[keyboard_remote docs]: /integrations/keyboard_remote/ +[knx docs]: /integrations/knx/ +[kodi docs]: /integrations/kodi/ +[konnected docs]: /integrations/konnected/ +[kostal_plenticore docs]: /integrations/kostal_plenticore/ +[kraken docs]: /integrations/kraken/ +[kulersky docs]: /integrations/kulersky/ +[lacrosse docs]: /integrations/lacrosse/ +[lametric docs]: /integrations/lametric/ +[launch_library docs]: /integrations/launch_library/ +[lcn docs]: /integrations/lcn/ +[lg_netcast docs]: /integrations/lg_netcast/ +[life360 docs]: /integrations/life360/ +[light docs]: /integrations/light/ +[lightwave docs]: /integrations/lightwave/ +[linode docs]: /integrations/linode/ +[linux_battery docs]: /integrations/linux_battery/ +[litejet docs]: /integrations/litejet/ +[litterrobot docs]: /integrations/litterrobot/ +[local_file docs]: /integrations/local_file/ +[lock docs]: /integrations/lock/ +[logbook docs]: /integrations/logbook/ +[lookin docs]: /integrations/lookin/ +[lovelace docs]: /integrations/lovelace/ +[luftdaten docs]: /integrations/luftdaten/ +[lupusec docs]: /integrations/lupusec/ +[lutron docs]: /integrations/lutron/ +[lutron_caseta docs]: /integrations/lutron_caseta/ +[lyric docs]: /integrations/lyric/ +[magicseaweed docs]: /integrations/magicseaweed/ +[mailbox docs]: /integrations/mailbox/ +[marytts docs]: /integrations/marytts/ +[maxcube docs]: /integrations/maxcube/ +[mazda docs]: /integrations/mazda/ +[mcp23017 docs]: /integrations/mcp23017/ +[media_extractor docs]: /integrations/media_extractor/ +[media_player docs]: /integrations/media_player/ +[media_source docs]: /integrations/media_source/ +[melcloud docs]: /integrations/melcloud/ +[meraki docs]: /integrations/meraki/ +[met docs]: /integrations/met/ +[met_eireann docs]: /integrations/met_eireann/ +[meteo_france docs]: /integrations/meteo_france/ +[meteoalarm docs]: /integrations/meteoalarm/ +[meteoclimatic docs]: /integrations/meteoclimatic/ +[metoffice docs]: /integrations/metoffice/ +[mfi docs]: /integrations/mfi/ +[mhz19 docs]: /integrations/mhz19/ +[microsoft_face docs]: /integrations/microsoft_face/ +[miflora docs]: /integrations/miflora/ +[mikrotik docs]: /integrations/mikrotik/ +[mill docs]: /integrations/mill/ +[minecraft_server docs]: /integrations/minecraft_server/ +[mitemp_bt docs]: /integrations/mitemp_bt/ +[mobile_app docs]: /integrations/mobile_app/ +[mochad docs]: /integrations/mochad/ +[modbus docs]: /integrations/modbus/ +[modern_forms docs]: /integrations/modern_forms/ +[motion_blinds docs]: /integrations/motion_blinds/ +[motioneye docs]: /integrations/motioneye/ +[mpchc docs]: /integrations/mpchc/ +[mqtt docs]: /integrations/mqtt/ +[mqtt_json docs]: /integrations/mqtt_json/ +[mqtt_statestream docs]: /integrations/mqtt_statestream/ +[mullvad docs]: /integrations/mullvad/ +[mvglive docs]: /integrations/mvglive/ +[myq docs]: /integrations/myq/ +[mysensors docs]: /integrations/mysensors/ +[nam docs]: /integrations/nam/ +[nanoleaf docs]: /integrations/nanoleaf/ +[neato docs]: /integrations/neato/ +[nederlandse_spoorwegen docs]: /integrations/nederlandse_spoorwegen/ +[ness_alarm docs]: /integrations/ness_alarm/ +[nest docs]: /integrations/nest/ +[netatmo docs]: /integrations/netatmo/ +[netdata docs]: /integrations/netdata/ +[netgear docs]: /integrations/netgear/ +[netgear_lte docs]: /integrations/netgear_lte/ +[netio docs]: /integrations/netio/ +[neurio_energy docs]: /integrations/neurio_energy/ +[nexia docs]: /integrations/nexia/ +[nextbus docs]: /integrations/nextbus/ +[nightscout docs]: /integrations/nightscout/ +[nilu docs]: /integrations/nilu/ +[nina docs]: /integrations/nina/ +[nissan_leaf docs]: /integrations/nissan_leaf/ +[nmap_tracker docs]: /integrations/nmap_tracker/ +[nmbs docs]: /integrations/nmbs/ +[norway_air docs]: /integrations/norway_air/ +[notify docs]: /integrations/notify/ +[notion docs]: /integrations/notion/ +[nsw_rural_fire_service_feed docs]: /integrations/nsw_rural_fire_service_feed/ +[nuki docs]: /integrations/nuki/ +[numato docs]: /integrations/numato/ +[number docs]: /integrations/number/ +[nut docs]: /integrations/nut/ +[nws docs]: /integrations/nws/ +[nx584 docs]: /integrations/nx584/ +[nzbget docs]: /integrations/nzbget/ +[oasa_telematics docs]: /integrations/oasa_telematics/ +[obihai docs]: /integrations/obihai/ +[octoprint docs]: /integrations/octoprint/ +[omnilogic docs]: /integrations/omnilogic/ +[onboarding docs]: /integrations/onboarding/ +[oncue docs]: /integrations/oncue/ +[ondilo_ico docs]: /integrations/ondilo_ico/ +[onewire docs]: /integrations/onewire/ +[onkyo docs]: /integrations/onkyo/ +[onvif docs]: /integrations/onvif/ +[open_meteo docs]: /integrations/open_meteo/ +[openalpr_cloud docs]: /integrations/openalpr_cloud/ +[openalpr_local docs]: /integrations/openalpr_local/ +[opencv docs]: /integrations/opencv/ +[openevse docs]: /integrations/openevse/ +[opengarage docs]: /integrations/opengarage/ +[opensensemap docs]: /integrations/opensensemap/ +[opentherm_gw docs]: /integrations/opentherm_gw/ +[openuv docs]: /integrations/openuv/ +[openweathermap docs]: /integrations/openweathermap/ +[orangepi_gpio docs]: /integrations/orangepi_gpio/ +[overkiz docs]: /integrations/overkiz/ +[ovo_energy docs]: /integrations/ovo_energy/ +[owntracks docs]: /integrations/owntracks/ +[ozw docs]: /integrations/ozw/ +[p1_monitor docs]: /integrations/p1_monitor/ +[panasonic_viera docs]: /integrations/panasonic_viera/ +[pcal9535a docs]: /integrations/pcal9535a/ +[philips_js docs]: /integrations/philips_js/ +[pi4ioe5v9xxxx docs]: /integrations/pi4ioe5v9xxxx/ +[pi_hole docs]: /integrations/pi_hole/ +[picnic docs]: /integrations/picnic/ +[piglow docs]: /integrations/piglow/ +[pilight docs]: /integrations/pilight/ +[ping docs]: /integrations/ping/ +[pioneer docs]: /integrations/pioneer/ +[plaato docs]: /integrations/plaato/ +[plex docs]: /integrations/plex/ +[plugwise docs]: /integrations/plugwise/ +[plum_lightpad docs]: /integrations/plum_lightpad/ +[point docs]: /integrations/point/ +[poolsense docs]: /integrations/poolsense/ +[powerwall docs]: /integrations/powerwall/ +[prometheus docs]: /integrations/prometheus/ +[proximity docs]: /integrations/proximity/ +[proxmoxve docs]: /integrations/proxmoxve/ +[proxy docs]: /integrations/proxy/ +[ps4 docs]: /integrations/ps4/ +[pulseaudio_loopback docs]: /integrations/pulseaudio_loopback/ +[pvoutput docs]: /integrations/pvoutput/ +[pvpc_hourly_pricing docs]: /integrations/pvpc_hourly_pricing/ +[pyload docs]: /integrations/pyload/ +[qld_bushfire docs]: /integrations/qld_bushfire/ +[qnap docs]: /integrations/qnap/ +[qrcode docs]: /integrations/qrcode/ +[qwikswitch docs]: /integrations/qwikswitch/ +[rachio docs]: /integrations/rachio/ +[raincloud docs]: /integrations/raincloud/ +[rainforest_eagle docs]: /integrations/rainforest_eagle/ +[rainmachine docs]: /integrations/rainmachine/ +[raspihats docs]: /integrations/raspihats/ +[rdw docs]: /integrations/rdw/ +[recollect_waste docs]: /integrations/recollect_waste/ +[recorder docs]: /integrations/recorder/ +[remember_the_milk docs]: /integrations/remember_the_milk/ +[renault docs]: /integrations/renault/ +[repetier docs]: /integrations/repetier/ +[rest docs]: /integrations/rest/ +[rflink docs]: /integrations/rflink/ +[rfxtrx docs]: /integrations/rfxtrx/ +[ridwell docs]: /integrations/ridwell/ +[ring docs]: /integrations/ring/ +[risco docs]: /integrations/risco/ +[rmvtransport docs]: /integrations/rmvtransport/ +[roku docs]: /integrations/roku/ +[roomba docs]: /integrations/roomba/ +[route53 docs]: /integrations/route53/ +[rova docs]: /integrations/rova/ +[rpi_gpio docs]: /integrations/rpi_gpio/ +[rpi_gpio_pwm docs]: /integrations/rpi_gpio_pwm/ +[rpi_pfio docs]: /integrations/rpi_pfio/ +[rpi_power docs]: /integrations/rpi_power/ +[rpi_rf docs]: /integrations/rpi_rf/ +[rtsp_to_webrtc docs]: /integrations/rtsp_to_webrtc/ +[ruckus_unleashed docs]: /integrations/ruckus_unleashed/ +[sabnzbd docs]: /integrations/sabnzbd/ +[saj docs]: /integrations/saj/ +[samsungtv docs]: /integrations/samsungtv/ +[satel_integra docs]: /integrations/satel_integra/ +[scene docs]: /integrations/scene/ +[scrape docs]: /integrations/scrape/ +[screenlogic docs]: /integrations/screenlogic/ +[script docs]: /integrations/script/ +[search docs]: /integrations/search/ +[season docs]: /integrations/season/ +[sense docs]: /integrations/sense/ +[sensehat docs]: /integrations/sensehat/ +[senseme docs]: /integrations/senseme/ +[sensibo docs]: /integrations/sensibo/ +[sensor docs]: /integrations/sensor/ +[sentry docs]: /integrations/sentry/ +[serial docs]: /integrations/serial/ +[seven_segments docs]: /integrations/seven_segments/ +[seventeentrack docs]: /integrations/seventeentrack/ +[sharkiq docs]: /integrations/sharkiq/ +[shelly docs]: /integrations/shelly/ +[shodan docs]: /integrations/shodan/ +[shopping_list docs]: /integrations/shopping_list/ +[sht31 docs]: /integrations/sht31/ +[sia docs]: /integrations/sia/ +[sighthound docs]: /integrations/sighthound/ +[signal_messenger docs]: /integrations/signal_messenger/ +[simplisafe docs]: /integrations/simplisafe/ +[sisyphus docs]: /integrations/sisyphus/ +[skybeacon docs]: /integrations/skybeacon/ +[skybell docs]: /integrations/skybell/ +[sleepiq docs]: /integrations/sleepiq/ +[slide docs]: /integrations/slide/ +[sma docs]: /integrations/sma/ +[smappee docs]: /integrations/smappee/ +[smart_meter_texas docs]: /integrations/smart_meter_texas/ +[smarthab docs]: /integrations/smarthab/ +[smartthings docs]: /integrations/smartthings/ +[smarttub docs]: /integrations/smarttub/ +[smarty docs]: /integrations/smarty/ +[smhi docs]: /integrations/smhi/ +[sms docs]: /integrations/sms/ +[solaredge docs]: /integrations/solaredge/ +[solaredge_local docs]: /integrations/solaredge_local/ +[solarlog docs]: /integrations/solarlog/ +[solax docs]: /integrations/solax/ +[soma docs]: /integrations/soma/ +[somfy docs]: /integrations/somfy/ +[somfy_mylink docs]: /integrations/somfy_mylink/ +[songpal docs]: /integrations/songpal/ +[sonos docs]: /integrations/sonos/ +[spc docs]: /integrations/spc/ +[speedtestdotnet docs]: /integrations/speedtestdotnet/ +[spider docs]: /integrations/spider/ +[spotify docs]: /integrations/spotify/ +[sql docs]: /integrations/sql/ +[squeezebox docs]: /integrations/squeezebox/ +[srp_energy docs]: /integrations/srp_energy/ +[ssdp docs]: /integrations/ssdp/ +[starline docs]: /integrations/starline/ +[statistics docs]: /integrations/statistics/ +[steamist docs]: /integrations/steamist/ +[stookalert docs]: /integrations/stookalert/ +[stream docs]: /integrations/stream/ +[stt docs]: /integrations/stt/ +[subaru docs]: /integrations/subaru/ +[supervisord docs]: /integrations/supervisord/ +[supla docs]: /integrations/supla/ +[surepetcare docs]: /integrations/surepetcare/ +[swiss_public_transport docs]: /integrations/swiss_public_transport/ +[switch docs]: /integrations/switch/ +[switchbot docs]: /integrations/switchbot/ +[switcher_kis docs]: /integrations/switcher_kis/ +[syncthru docs]: /integrations/syncthru/ +[synology_dsm docs]: /integrations/synology_dsm/ +[system_bridge docs]: /integrations/system_bridge/ +[system_log docs]: /integrations/system_log/ +[systemmonitor docs]: /integrations/systemmonitor/ +[tado docs]: /integrations/tado/ +[tahoma docs]: /integrations/tahoma/ +[tailscale docs]: /integrations/tailscale/ +[tank_utility docs]: /integrations/tank_utility/ +[tasmota docs]: /integrations/tasmota/ +[ted5000 docs]: /integrations/ted5000/ +[tellduslive docs]: /integrations/tellduslive/ +[tellstick docs]: /integrations/tellstick/ +[temper docs]: /integrations/temper/ +[template docs]: /integrations/template/ +[tensorflow docs]: /integrations/tensorflow/ +[tesla_wall_connector docs]: /integrations/tesla_wall_connector/ +[thermoworks_smoke docs]: /integrations/thermoworks_smoke/ +[thethingsnetwork docs]: /integrations/thethingsnetwork/ +[tibber docs]: /integrations/tibber/ +[tile docs]: /integrations/tile/ +[tmb docs]: /integrations/tmb/ +[todoist docs]: /integrations/todoist/ +[tof docs]: /integrations/tof/ +[tolo docs]: /integrations/tolo/ +[tomato docs]: /integrations/tomato/ +[toon docs]: /integrations/toon/ +[torque docs]: /integrations/torque/ +[totalconnect docs]: /integrations/totalconnect/ +[tplink docs]: /integrations/tplink/ +[traccar docs]: /integrations/traccar/ +[tractive docs]: /integrations/tractive/ +[tradfri docs]: /integrations/tradfri/ +[trafikverket_train docs]: /integrations/trafikverket_train/ +[trafikverket_weatherstation docs]: /integrations/trafikverket_weatherstation/ +[trend docs]: /integrations/trend/ +[tts docs]: /integrations/tts/ +[tuya docs]: /integrations/tuya/ +[twentemilieu docs]: /integrations/twentemilieu/ +[twinkly docs]: /integrations/twinkly/ +[ubus docs]: /integrations/ubus/ +[uk_transport docs]: /integrations/uk_transport/ +[unifi docs]: /integrations/unifi/ +[unifi_direct docs]: /integrations/unifi_direct/ +[unifiprotect docs]: /integrations/unifiprotect/ +[universal docs]: /integrations/universal/ +[upcloud docs]: /integrations/upcloud/ +[updater docs]: /integrations/updater/ +[upnp docs]: /integrations/upnp/ +[uptime docs]: /integrations/uptime/ +[uptimerobot docs]: /integrations/uptimerobot/ +[usb docs]: /integrations/usb/ +[usgs_earthquakes_feed docs]: /integrations/usgs_earthquakes_feed/ +[utility_meter docs]: /integrations/utility_meter/ +[vallox docs]: /integrations/vallox/ +[velbus docs]: /integrations/velbus/ +[velux docs]: /integrations/velux/ +[venstar docs]: /integrations/venstar/ +[vera docs]: /integrations/vera/ +[verisure docs]: /integrations/verisure/ +[versasense docs]: /integrations/versasense/ +[version docs]: /integrations/version/ +[vesync docs]: /integrations/vesync/ +[vicare docs]: /integrations/vicare/ +[vilfo docs]: /integrations/vilfo/ +[vizio docs]: /integrations/vizio/ +[vlc_telnet docs]: /integrations/vlc_telnet/ +[voicerss docs]: /integrations/voicerss/ +[volvooncall docs]: /integrations/volvooncall/ +[vultr docs]: /integrations/vultr/ +[wake_on_lan docs]: /integrations/wake_on_lan/ +[wallbox docs]: /integrations/wallbox/ +[waqi docs]: /integrations/waqi/ +[waterfurnace docs]: /integrations/waterfurnace/ +[watttime docs]: /integrations/watttime/ +[waze_travel_time docs]: /integrations/waze_travel_time/ +[weather docs]: /integrations/weather/ +[webhook docs]: /integrations/webhook/ +[webostv docs]: /integrations/webostv/ +[webrtc docs]: /integrations/webrtc/ +[websocket_api docs]: /integrations/websocket_api/ +[wemo docs]: /integrations/wemo/ +[whois docs]: /integrations/whois/ +[wiffi docs]: /integrations/wiffi/ +[wilight docs]: /integrations/wilight/ +[wirelesstag docs]: /integrations/wirelesstag/ +[withings docs]: /integrations/withings/ +[wled docs]: /integrations/wled/ +[wolflink docs]: /integrations/wolflink/ +[workday docs]: /integrations/workday/ +[xbee docs]: /integrations/xbee/ +[xbox docs]: /integrations/xbox/ +[xiaomi_aqara docs]: /integrations/xiaomi_aqara/ +[xiaomi_miio docs]: /integrations/xiaomi_miio/ +[yale_smart_alarm docs]: /integrations/yale_smart_alarm/ +[yamaha docs]: /integrations/yamaha/ +[yamaha_musiccast docs]: /integrations/yamaha_musiccast/ +[yandex_transport docs]: /integrations/yandex_transport/ +[yandextts docs]: /integrations/yandextts/ +[yeelight docs]: /integrations/yeelight/ +[youless docs]: /integrations/youless/ +[zabbix docs]: /integrations/zabbix/ +[zamg docs]: /integrations/zamg/ +[zeroconf docs]: /integrations/zeroconf/ +[zha docs]: /integrations/zha/ +[ziggo_mediabox_xl docs]: /integrations/ziggo_mediabox_xl/ +[zone docs]: /integrations/zone/ +[zoneminder docs]: /integrations/zoneminder/ +[zwave docs]: /integrations/zwave/ +[zwave_js docs]: /integrations/zwave_js/ diff --git a/source/_redirects b/source/_redirects index 9481809266f..2634a6cab36 100644 --- a/source/_redirects +++ b/source/_redirects @@ -333,7 +333,6 @@ /components/device_tracker.bt_smarthub /integrations/bt_smarthub /components/device_tracker.cisco_ios /integrations/cisco_ios /components/device_tracker.ddwrt /integrations/ddwrt -/components/device_tracker.ee_brightbox /integrations/ee_brightbox /components/device_tracker.freebox /integrations/freebox /components/device_tracker.fritz /integrations/fritz /components/device_tracker.geofency /integrations/geofency @@ -634,7 +633,6 @@ /components/sensor.api_stream /integrations/websocket_api /components/sensor.api_streams /integrations/websocket_api /components/sensor.aqualogic /integrations/aqualogic#sensor -/components/sensor.arduino /integrations/arduino#sensor /components/sensor.arest /integrations/arest#sensor /components/sensor.arlo /integrations/arlo#sensor /components/sensor.arwn /integrations/arwn @@ -928,7 +926,6 @@ /components/switch.android_ip_webcam /integrations/android_ip_webcam /components/switch.anel_pwrctrl /integrations/anel_pwrctrl /components/switch.aqualogic /integrations/aqualogic#switch -/components/switch.arduino /integrations/arduino#switch /components/switch.arest /integrations/arest#switch /components/switch.bbb_gpio /integrations/bbb_gpio#switch /components/switch.broadlink /integrations/broadlink#switch @@ -1110,7 +1107,6 @@ /components/aqualogic /integrations/aqualogic /components/aquostv /integrations/aquostv /components/arcam_fmj /integrations/arcam_fmj -/components/arduino /integrations/arduino /components/arest /integrations/arest /components/arlo /integrations/arlo /components/aruba /integrations/aruba @@ -1275,7 +1271,6 @@ /components/ecovacs /integrations/ecovacs /components/eddystone_temperature /integrations/eddystone_temperature /components/edimax /integrations/edimax -/components/ee_brightbox /integrations/ee_brightbox /components/efergy /integrations/efergy /components/egardia /integrations/egardia /components/eight_sleep /integrations/eight_sleep @@ -2352,4 +2347,12 @@ /integrations/loopenergy /more-info/removed-integration 301 /components/loopenergy /more-info/removed-integration 301 /components/sensor.loop_energy /more-info/removed-integration 301 -/components/sensor.loopenergy /more-info/removed-integration 301 \ No newline at end of file +/components/sensor.loopenergy /more-info/removed-integration 301 +/integrations/tahoma /more-info/removed-integration 301 +/components/arduino /more-info/removed-integration 301 +/components/sensor.arduino /more-info/removed-integration 301 +/components/switch.arduino /more-info/removed-integration 301 +/integrations/arduino /more-info/removed-integration 301 +/components/device_tracker.ee_brightbox /more-info/removed-integration 301 +/components/ee_brightbox /more-info/removed-integration 301 +/integrations/ee_brightbox /more-info/removed-integration 301 diff --git a/source/assets/integrations/google_assistant/app.js b/source/assets/integrations/google_assistant/app.js new file mode 100644 index 00000000000..7a9a7ff1a20 --- /dev/null +++ b/source/assets/integrations/google_assistant/app.js @@ -0,0 +1,189 @@ +"use strict"; +/// +/* +BASED ON: https://github.com/NabuCasa/home-assistant-google-assistant-local-sdk +Only removed the fart sound at the end. +For license information please check the repository. +*/ +var App = smarthome.App; +var Constants = smarthome.Constants; +var DataFlow = smarthome.DataFlow; +var Execute = smarthome.Execute; +var Intents = smarthome.Intents; +var IntentFlow = smarthome.IntentFlow; +const findHassCustomDeviceDataByMdnsData = (requestId, devices, mdnsScanData) => { + let device; + device = devices.find((dev) => { + const customData = dev.customData; + return (customData && + "webhookId" in customData && + (!mdnsScanData.uuid || customData.uuid === mdnsScanData.uuid) && + (!mdnsScanData.baseUrl || customData.baseUrl === mdnsScanData.baseUrl)); + }); + // backwards compatibility for HA < 0.109 + if (!device) { + device = devices.find((dev) => dev.customData && + "webhookId" in dev.customData); + } + if (!device) { + console.log(requestId, "Unable to find HASS connection info.", devices); + throw new IntentFlow.HandlerError(requestId, "invalidRequest", "Unable to find HASS connection info."); + } + return device.customData; +}; +const findHassCustomDeviceDataByDeviceId = (requestId, devices, deviceId) => { + let device; + device = devices.find((dev) => { + const customData = dev.customData; + return (customData && + "webhookId" in customData && + customData.proxyDeviceId === deviceId); + }); + if (!device) { + console.log(requestId, "Unable to find HASS connection info.", devices); + throw new IntentFlow.HandlerError(requestId, "invalidRequest", "Unable to find HASS connection info."); + } + return device.customData; +}; +const createResponse = (request, payload) => ({ + intent: request.inputs[0].intent, + requestId: request.requestId, + payload, +}); +class UnknownInstance extends Error { + constructor(requestId) { + super(); + this.requestId = requestId; + } + throwHandlerError() { + throw new IntentFlow.HandlerError(this.requestId, "invalidRequest", "Unknown Instance"); + } +} +const forwardRequest = async (hassDeviceData, targetDeviceId, request) => { + const command = new DataFlow.HttpRequestData(); + command.method = Constants.HttpOperation.POST; + command.requestId = request.requestId; + command.deviceId = targetDeviceId; + command.isSecure = hassDeviceData.httpSSL; + command.port = hassDeviceData.httpPort; + command.path = `/api/webhook/${hassDeviceData.webhookId}`; + command.data = JSON.stringify(request); + command.dataType = "application/json"; + console.log(request.requestId, "Sending", command); + const deviceManager = await app.getDeviceManager(); + let resp; + try { + resp = await new Promise((resolve, reject) => { + setTimeout(() => reject(-1), 10000); + deviceManager + .send(command) + .then((response) => resolve(response), reject); + }); + // resp = (await deviceManager.send(command)) as HttpResponseData; + console.log(request.requestId, "Raw Response", resp); + } + catch (err) { + console.error(request.requestId, "Error making request", err); + throw new IntentFlow.HandlerError(request.requestId, "invalidRequest", err === -1 ? "Timeout" : err.message); + } + // Response if the webhook is not registered. + if (resp.httpResponse.statusCode === 200 && !resp.httpResponse.body) { + throw new UnknownInstance(request.requestId); + } + try { + const response = JSON.parse(resp.httpResponse.body); + // Local SDK wants this. + response.intent = request.inputs[0].intent; + console.log(request.requestId, "Response", response); + return response; + } + catch (err) { + console.error(request.requestId, "Error parsing body", err); + throw new IntentFlow.HandlerError(request.requestId, "invalidRequest", err.message); + } +}; +const identifyHandler = async (request) => { + console.log("IDENTIFY intent:", request); + const deviceToIdentify = request.inputs[0].payload.device; + if (!deviceToIdentify.mdnsScanData) { + console.error(request.requestId, "No usable mdns scan data"); + return createResponse(request, {}); + } + if (!deviceToIdentify.mdnsScanData.serviceName.endsWith("._home-assistant._tcp.local")) { + console.error(request.requestId, "Not Home Assistant type"); + return createResponse(request, {}); + } + try { + const hassCustomData = findHassCustomDeviceDataByMdnsData(request.requestId, request.devices, deviceToIdentify.mdnsScanData.txt); + return await forwardRequest(hassCustomData, "", request); + } + catch (err) { + if (err instanceof UnknownInstance) { + return createResponse(request, {}); + } + throw err; + } +}; +const reachableDevicesHandler = async (request) => { + console.log("REACHABLE_DEVICES intent:", request); + const hassCustomData = findHassCustomDeviceDataByDeviceId(request.requestId, request.devices, request.inputs[0].payload.device.id); + try { + return forwardRequest(hassCustomData, + // Old code would sent it to the proxy ID: hassCustomData.proxyDeviceId + // But tutorial claims otherwise, but maybe it is not for hub devices?? + // https://developers.google.com/assistant/smarthome/develop/local#implement_the_execute_handler + // Sending it to the device that has to receive the command as per the tutorial + request.inputs[0].payload.device.id, request); + } + catch (err) { + if (err instanceof UnknownInstance) { + err.throwHandlerError(); + } + throw err; + } +}; +const executeHandler = async (request) => { + console.log("EXECUTE intent:", request); + const device = request.inputs[0].payload.commands[0].devices[0]; + try { + return forwardRequest(device.customData, device.id, request); + } + catch (err) { + if (err instanceof UnknownInstance) { + err.throwHandlerError(); + } + throw err; + } +}; +const app = new App("1.0.0"); +app + .onIdentify(identifyHandler) + .onReachableDevices(reachableDevicesHandler) + .onExecute(executeHandler) + // Undocumented in TypeScript + // Suggested by Googler, seems to work :shrug: + // https://github.com/actions-on-google/smart-home-local/issues/1#issuecomment-515706997 + // @ts-ignore + .onProxySelected((req) => { + console.log("ProxySelected", req); + return createResponse(req, {}); +}) + // @ts-ignore + .onIndicate((req) => console.log("Indicate", req)) + // @ts-ignore + .onParseNotification((req) => console.log("ParseNotification", req)) + // @ts-ignore + .onProvision((req) => console.log("Provision", req)) + // @ts-ignore + .onQuery((req) => console.log("Query", req)) + // @ts-ignore + .onRegister((req) => console.log("Register", req)) + // @ts-ignore + .onUnprovision((req) => console.log("Unprovision", req)) + // @ts-ignore + .onUpdate((req) => console.log("Update", req)) + .listen() + .then(() => { + console.log("Ready!"); +}) + .catch((e) => console.error(e)); diff --git a/source/images/blog/2022-02/check-for-updates.png b/source/images/blog/2022-02/check-for-updates.png new file mode 100644 index 00000000000..60235e6c6c4 Binary files /dev/null and b/source/images/blog/2022-02/check-for-updates.png differ diff --git a/source/images/blog/2022-02/configuration-search.png b/source/images/blog/2022-02/configuration-search.png new file mode 100644 index 00000000000..cc9f943b98e Binary files /dev/null and b/source/images/blog/2022-02/configuration-search.png differ diff --git a/source/images/blog/2022-02/diagnostics.png b/source/images/blog/2022-02/diagnostics.png new file mode 100644 index 00000000000..b72e54a8a9c Binary files /dev/null and b/source/images/blog/2022-02/diagnostics.png differ diff --git a/source/images/blog/2022-02/discovered-menu.png b/source/images/blog/2022-02/discovered-menu.png new file mode 100644 index 00000000000..8a923853e18 Binary files /dev/null and b/source/images/blog/2022-02/discovered-menu.png differ diff --git a/source/images/blog/2022-02/edit-trigger-id.png b/source/images/blog/2022-02/edit-trigger-id.png new file mode 100644 index 00000000000..5acea83266e Binary files /dev/null and b/source/images/blog/2022-02/edit-trigger-id.png differ diff --git a/source/images/blog/2022-02/known-issues.png b/source/images/blog/2022-02/known-issues.png new file mode 100644 index 00000000000..75c43d5a2f3 Binary files /dev/null and b/source/images/blog/2022-02/known-issues.png differ diff --git a/source/images/blog/2022-02/media-bar.png b/source/images/blog/2022-02/media-bar.png new file mode 100644 index 00000000000..19c2630c8e3 Binary files /dev/null and b/source/images/blog/2022-02/media-bar.png differ diff --git a/source/images/blog/2022-02/scenes.png b/source/images/blog/2022-02/scenes.png new file mode 100644 index 00000000000..7bd9e331980 Binary files /dev/null and b/source/images/blog/2022-02/scenes.png differ diff --git a/source/images/blog/2022-02/social.png b/source/images/blog/2022-02/social.png new file mode 100644 index 00000000000..7a8b53dfbb2 Binary files /dev/null and b/source/images/blog/2022-02/social.png differ diff --git a/source/images/integrations/unifiprotect/unifi_os_admin.png b/source/images/integrations/unifiprotect/unifi_os_admin.png new file mode 100644 index 00000000000..4b7ceac0a83 Binary files /dev/null and b/source/images/integrations/unifiprotect/unifi_os_admin.png differ