diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 140a23be5cb..3922c4e2cb0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out files from GitHub - uses: actions/checkout@v3.5.0 + uses: actions/checkout@v3.5.2 - name: Setting up Node.js uses: actions/setup-node@v3.6.0 with: @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out files from GitHub - uses: actions/checkout@v3.5.0 + uses: actions/checkout@v3.5.2 - name: Setting up Node.js uses: actions/setup-node@v3.6.0 with: diff --git a/CODEOWNERS b/CODEOWNERS index 944fc57ca1e..24be48bd8d4 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -40,6 +40,8 @@ source/_integrations/amp_motorization.markdown @starkillerOG source/_integrations/analytics.markdown @home-assistant/core @ludeeus source/_integrations/android_ip_webcam.markdown @engrbm87 source/_integrations/androidtv.markdown @JeffLIrion @ollo69 +source/_integrations/androidtv_remote.markdown @tronikos +source/_integrations/anova.markdown @Lash-L source/_integrations/anthemav.markdown @hyralex source/_integrations/anwb_energie.markdown @klaasnicolaas source/_integrations/apache_kafka.markdown @bachya @@ -53,6 +55,7 @@ source/_integrations/aranet.markdown @aschmitz source/_integrations/arcam_fmj.markdown @elupus source/_integrations/arris_tg2492lg.markdown @vanbalken source/_integrations/aseko_pool_live.markdown @milanmeu +source/_integrations/assist_pipeline.markdown @balloob @synesthesiam source/_integrations/asuswrt.markdown @kennedyshead @ollo69 source/_integrations/atag.markdown @MatsNL source/_integrations/aten_pe.markdown @mtdcr @@ -94,6 +97,7 @@ source/_integrations/braviatv.markdown @bieniu @Drafteed source/_integrations/brel_home.markdown @starkillerOG source/_integrations/broadlink.markdown @danielhiversen @felipediel @L-I-Am source/_integrations/brother.markdown @bieniu +source/_integrations/brottsplatskartan.markdown @gjohansson-ST source/_integrations/brunt.markdown @eavanvalkenburg source/_integrations/bsblan.markdown @liudger source/_integrations/bswitch.markdown @jafar-atili @@ -123,7 +127,6 @@ source/_integrations/configurator.markdown @home-assistant/core source/_integrations/control4.markdown @lawtancool source/_integrations/conversation.markdown @home-assistant/core @synesthesiam 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/cozytouch.markdown @imicknl @vlebourl @tetienne @nyroDev @@ -163,7 +166,7 @@ source/_integrations/dormakaba_dkey.markdown @emontnemery source/_integrations/dsmr.markdown @Robbie1221 @frenck source/_integrations/dsmr_reader.markdown @depl0y @glodenox source/_integrations/dunehd.markdown @bieniu -source/_integrations/dwd_weather_warnings.markdown @runningman84 @stephan192 @Hummel95 +source/_integrations/dwd_weather_warnings.markdown @runningman84 @stephan192 @Hummel95 @andarotajo source/_integrations/dynalite.markdown @ziv1234 source/_integrations/easyenergy.markdown @klaasnicolaas source/_integrations/ecobee.markdown @marthoc @marcolivierarsenault @@ -312,7 +315,7 @@ source/_integrations/icloud.markdown @Quentame @nzapponi source/_integrations/ign_sismologia.markdown @exxamalte source/_integrations/image_processing.markdown @home-assistant/core source/_integrations/image_upload.markdown @home-assistant/core -source/_integrations/imap.markdown @engrbm87 +source/_integrations/imap.markdown @engrbm87 @jbouwh source/_integrations/incomfort.markdown @zxdavb source/_integrations/influxdb.markdown @mdegat01 source/_integrations/inkbird.markdown @bdraco @@ -371,7 +374,7 @@ source/_integrations/leviton_z_wave.markdown @home-assistant/z-wave source/_integrations/lg_netcast.markdown @Drafteed source/_integrations/lidarr.markdown @tkdrob source/_integrations/life360.markdown @pnbruckner -source/_integrations/lifx.markdown @bdraco @Djelibeybi +source/_integrations/lifx.markdown @bdraco source/_integrations/light.markdown @home-assistant/core source/_integrations/linux_battery.markdown @fabaff source/_integrations/litejet.markdown @joncar @@ -421,6 +424,7 @@ source/_integrations/modbus.markdown @adamchengtkc @janiversen @vzahradnik source/_integrations/modem_callerid.markdown @tkdrob source/_integrations/modern_forms.markdown @wonderslug source/_integrations/moehlenhoff_alpha2.markdown @j-a-n +source/_integrations/monessen.markdown @jeeftor source/_integrations/monoprice.markdown @etsinko @OnFreund source/_integrations/moon.markdown @fabaff @frenck source/_integrations/mopeka.markdown @bdraco @@ -467,7 +471,7 @@ source/_integrations/nuheat.markdown @tstabrawa source/_integrations/nuki.markdown @pschmitt @pvizeli @pree source/_integrations/numato.markdown @clssn source/_integrations/number.markdown @home-assistant/core @Shulyaka -source/_integrations/nut.markdown @bdraco @ollo69 +source/_integrations/nut.markdown @bdraco @ollo69 @pestevez source/_integrations/nutrichef.markdown @bdraco source/_integrations/nws.markdown @MatthewFlamm @kamiyo source/_integrations/nzbget.markdown @chriscla @@ -508,7 +512,7 @@ source/_integrations/picnic.markdown @corneyl source/_integrations/pilight.markdown @trekky12 source/_integrations/plaato.markdown @JohNan source/_integrations/plex.markdown @jjlawren -source/_integrations/plugwise.markdown @CoMPaTech @bouwew @brefra @frenck +source/_integrations/plugwise.markdown @CoMPaTech @bouwew @frenck source/_integrations/plum_lightpad.markdown @ColinHarrington @prystupa source/_integrations/point.markdown @fredrike source/_integrations/poolsense.markdown @haemishkyd @@ -544,6 +548,7 @@ source/_integrations/raincloud.markdown @vanstinator source/_integrations/rainforest_eagle.markdown @gtdiehl @jcalbert @hastarin source/_integrations/rainmachine.markdown @bachya source/_integrations/random.markdown @fabaff +source/_integrations/rapt_ble.markdown @sairon source/_integrations/raven_rock_mfg.markdown @starkillerOG source/_integrations/rdw.markdown @frenck source/_integrations/recollect_waste.markdown @bachya @@ -554,6 +559,7 @@ source/_integrations/renault.markdown @epenet source/_integrations/reolink.markdown @starkillerOG source/_integrations/repairs.markdown @home-assistant/core source/_integrations/repetier.markdown @MTrab @ShadowBr0ther +source/_integrations/rest.markdown @epenet source/_integrations/rexel.markdown @imicknl @vlebourl @tetienne @nyroDev source/_integrations/rflink.markdown @javicalle source/_integrations/rfxtrx.markdown @danielhiversen @elupus @RobBie1221 @@ -562,7 +568,7 @@ source/_integrations/ridwell.markdown @bachya source/_integrations/risco.markdown @OnFreund source/_integrations/rituals_perfume_genie.markdown @milanmeu source/_integrations/rmvtransport.markdown @cgtobi -source/_integrations/roborock.markdown @rytilahti @syssi @starkillerOG +source/_integrations/roborock.markdown @humbertogontijo @Lash-L source/_integrations/roku.markdown @ctalkington source/_integrations/roomba.markdown @pschmitt @cyr-ius @shenxn source/_integrations/roon.markdown @pavoni @@ -648,7 +654,7 @@ source/_integrations/speedtestdotnet.markdown @rohankapoorcom @engrbm87 source/_integrations/spider.markdown @peternijssen source/_integrations/splunk.markdown @Bre77 source/_integrations/spotify.markdown @frenck -source/_integrations/sql.markdown @dgomes @gjohansson-ST +source/_integrations/sql.markdown @dgomes @gjohansson-ST @dougiteixeira source/_integrations/squeezebox.markdown @rajlaud source/_integrations/srp_energy.markdown @briglx source/_integrations/starline.markdown @anonym-tsk @@ -660,7 +666,7 @@ source/_integrations/stiebel_eltron.markdown @fucm source/_integrations/stookalert.markdown @fwestenberg @frenck source/_integrations/stookwijzer.markdown @fwestenberg source/_integrations/stream.markdown @hunterjm @uvjustin @allenporter -source/_integrations/stt.markdown @pvizeli +source/_integrations/stt.markdown @home-assistant/core @pvizeli source/_integrations/subaru.markdown @G-Two source/_integrations/suez_water.markdown @ooii source/_integrations/sun.markdown @Swamp-Ig @@ -714,7 +720,7 @@ source/_integrations/trafikverket_ferry.markdown @gjohansson-ST 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/tts.markdown @home-assistant/core @pvizeli source/_integrations/tuya.markdown @Tuya @zlinoliver @frenck source/_integrations/twentemilieu.markdown @frenck source/_integrations/twinkly.markdown @dr1rrb @Robbie1221 @@ -722,7 +728,7 @@ source/_integrations/ubiwizz.markdown @imicknl @vlebourl @tetienne @nyroDev source/_integrations/ukraine_alarm.markdown @PaulAnnekov source/_integrations/unifi.markdown @Kane610 source/_integrations/unifiled.markdown @florisvdk -source/_integrations/unifiprotect.markdown @briis @AngellusMortis @bdraco +source/_integrations/unifiprotect.markdown @AngellusMortis @bdraco source/_integrations/upb.markdown @gwww source/_integrations/upc_connect.markdown @pvizeli @fabaff source/_integrations/upcloud.markdown @scop @@ -744,12 +750,12 @@ source/_integrations/vermont_castings.markdown @jeeftor source/_integrations/versasense.markdown @flamm3blemuff1n source/_integrations/version.markdown @ludeeus source/_integrations/vesync.markdown @markperdue @webdjoe @thegardenmonkey -source/_integrations/vicare.markdown @oischinger source/_integrations/vilfo.markdown @ManneW source/_integrations/vivotek.markdown @HarlemSquirrel source/_integrations/vizio.markdown @raman325 source/_integrations/vlc_telnet.markdown @rodripf @MartinHjelmare source/_integrations/voice_assistant.markdown @balloob @synesthesiam +source/_integrations/voip.markdown @balloob @synesthesiam source/_integrations/volumio.markdown @OnFreund source/_integrations/volvooncall.markdown @molobrakos source/_integrations/vulcan.markdown @Antoni-Czaplicki @@ -777,8 +783,8 @@ source/_integrations/wolflink.markdown @adamkrol93 source/_integrations/workday.markdown @fabaff @gjohansson-ST source/_integrations/worldclock.markdown @fabaff source/_integrations/ws66i.markdown @ssaenger +source/_integrations/wyoming.markdown @balloob @synesthesiam source/_integrations/xbox.markdown @hunterjm -source/_integrations/xbox_live.markdown @MartinHjelmare source/_integrations/xiaomi_aqara.markdown @danielhiversen @syssi source/_integrations/xiaomi_ble.markdown @Jc2k @Ernst79 source/_integrations/xiaomi_miio.markdown @rytilahti @syssi @starkillerOG diff --git a/Gemfile b/Gemfile index e2b01145d78..236f73beade 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,7 @@ ruby '> 2.5.0' group :development do gem 'rake', '13.0.6' gem 'jekyll', '4.3.2' - gem 'stringex', '2.8.5' + gem 'stringex', '2.8.6' end group :jekyll_plugins do @@ -16,8 +16,8 @@ group :jekyll_plugins do gem 'jekyll-postcss', '0.5.0' end -gem 'sinatra', '3.0.5' -gem 'nokogiri', '1.14.2' +gem 'sinatra', '3.0.6' +gem 'nokogiri', '1.14.3' # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # and associated library diff --git a/Gemfile.lock b/Gemfile.lock index c5711892f14..2acb8c92837 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ GEM remote: https://rubygems.org/ specs: - addressable (2.8.3) + addressable (2.8.4) public_suffix (>= 2.0.2, < 6.0) colorator (1.1.0) commonmarker (0.23.8) @@ -17,7 +17,7 @@ GEM google-protobuf (3.22.2) google-protobuf (3.22.2-x64-mingw32) http_parser.rb (0.8.0) - i18n (1.12.0) + i18n (1.13.0) concurrent-ruby (~> 1.0) jekyll (4.3.2) addressable (~> 2.4) @@ -60,17 +60,17 @@ GEM mini_portile2 (2.8.1) mustermann (3.0.0) ruby2_keywords (~> 0.0.1) - nokogiri (1.14.2) + nokogiri (1.14.3) mini_portile2 (~> 2.8.0) racc (~> 1.4) - nokogiri (1.14.2-x64-mingw32) + nokogiri (1.14.3-x64-mingw32) racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (5.0.1) racc (1.6.2) - rack (2.2.6.4) - rack-protection (3.0.5) + rack (2.2.7) + rack-protection (3.0.6) rack rake (13.0.6) rb-fsevent (0.11.2) @@ -80,17 +80,17 @@ GEM rouge (4.1.0) ruby2_keywords (0.0.5) safe_yaml (1.0.5) - sass-embedded (1.60.0) + sass-embedded (1.62.1) google-protobuf (~> 3.21) rake (>= 10.0.0) - sass-embedded (1.60.0-x64-mingw32) + sass-embedded (1.62.1-x64-mingw32) google-protobuf (~> 3.21) - sinatra (3.0.5) + sinatra (3.0.6) mustermann (~> 3.0) rack (~> 2.2, >= 2.2.4) - rack-protection (= 3.0.5) + rack-protection (= 3.0.6) tilt (~> 2.0) - stringex (2.8.5) + stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) tilt (2.1.0) @@ -112,10 +112,10 @@ DEPENDENCIES jekyll-postcss (= 0.5.0) jekyll-sitemap (= 1.4.0) jekyll-toc (= 0.18.0) - nokogiri (= 1.14.2) + nokogiri (= 1.14.3) rake (= 13.0.6) - sinatra (= 3.0.5) - stringex (= 2.8.5) + sinatra (= 3.0.6) + stringex (= 2.8.6) tzinfo (~> 2.0) tzinfo-data diff --git a/_config.yml b/_config.yml index 1b7cda87df5..4d32a563fff 100644 --- a/_config.yml +++ b/_config.yml @@ -121,9 +121,9 @@ social: # Home Assistant release details current_major_version: 2023 -current_minor_version: 4 -current_patch_version: 0 -date_released: 2023-04-05 +current_minor_version: 5 +current_patch_version: 2 +date_released: 2023-05-05 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. @@ -214,7 +214,7 @@ installation: types: odroid: board: ODROID - installation_media: "eMMC module/SD card" + installation_media: "eMMC module or SD card" variants: - name: "ODROID-N2" key: "odroid-n2" @@ -224,8 +224,8 @@ installation: key: "odroid-c2" - name: "ODROID-C4" key: "odroid-c4" - - name: "ODROID-XU4" - key: "odroid-xu4" + - name: "ODROID-M1" + key: "odroid-m1" raspberrypi: board: Raspberry Pi @@ -238,7 +238,7 @@ installation: tinkerboard: board: ASUS Tinkerboard - installation_media: "eMMC module/SD card" + installation_media: "eMMC module or SD card" variants: - name: "ASUS Tinkerboard" key: "tinker" diff --git a/package-lock.json b/package-lock.json index 644830e2979..38321c6cdc6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1850,20 +1850,6 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", diff --git a/source/_dashboards/entities.markdown b/source/_dashboards/entities.markdown index 7efa6538ffd..cf7fb6ef867 100644 --- a/source/_dashboards/entities.markdown +++ b/source/_dashboards/entities.markdown @@ -227,7 +227,7 @@ entities: required: false description: If false, the button name is not shown. type: boolean - default: "true" + default: "false" show_icon: required: false description: If false, the icon is not shown. diff --git a/source/_dashboards/history-graph.markdown b/source/_dashboards/history-graph.markdown index 3e2c6740b60..c351f3cb30b 100644 --- a/source/_dashboards/history-graph.markdown +++ b/source/_dashboards/history-graph.markdown @@ -5,7 +5,7 @@ sidebar_label: History Graph description: "The History Graph card allows you to display a graph for each of the entities listed." --- -The History Graph card allows you to display a graph for each of the entities listed. +The History Graph card allows you to display a graph for each of up to eight entities.

Screenshot of the history graph card for entities without a unit_of_measurement diff --git a/source/_dashboards/picture-elements.markdown b/source/_dashboards/picture-elements.markdown index fa7e49903f9..d98b92152fb 100644 --- a/source/_dashboards/picture-elements.markdown +++ b/source/_dashboards/picture-elements.markdown @@ -370,7 +370,7 @@ conditions: type: string elements: required: true - description: One or more elements of any type to show when conditions are met. See below for an example. + description: One or more elements of any of the [listed types](#elements) to show when conditions are met. See below for an example. type: list {% endconfiguration %} diff --git a/source/_dashboards/tile.markdown b/source/_dashboards/tile.markdown index 72faf40b814..f05cc5c76db 100644 --- a/source/_dashboards/tile.markdown +++ b/source/_dashboards/tile.markdown @@ -8,8 +8,8 @@ description: "The tile card gives you a quick overview of your entity. The card The tile card gives you a quick overview of your entity. The card allows you to toggle the entity and show the more info dialog. A badge is shown for some entities like the [climate](/integrations/climate) or [person](/integrations/person) entities.

- Screenshot of the tile card - Screenshot of the Tile card. + Screenshot of tile cards + Screenshot of Tile cards.

To add the Tile card to your user interface, click the menu (three dots at the top right of the screen) and then **Edit Dashboard**. Click the "Add Card" button in the bottom right corner and select **Tile** from the card picker. diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index 852963b503e..bef18fe2b88 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -9,12 +9,18 @@ # - term: Action - definition: >- - An action is an command that can be fired. For example, turning on a light. - Actions used in many places, most notably in automations and scripts. + definition: |- + Actions are used in several places in Home Assistant. As part of a script or automation, actions define what is going to happen once a trigger is activated. In scripts, an action is called *sequence*. + + Actions use service calls and/or scenes to interact with entities and cause these entities to do something. Actions can also include conditions and a delay. An action can call multiple services at the same time. For example, if your presence is detected in a room, an action may call one service to turn on a light and call another service to start playing music after a delay. + + Actions are also used on the dashboard, for example as tap or hold action on a UI element. When triggered, the action calls a service. + aliases: - actions link: /docs/automation/action/ + excerpt: > + Actions are used in several places in Home Assistant. As part of a script or automation, actions define what is going to happen once a trigger is activated. In scripts, an action is called *sequence*. - term: Add-on definition: >- @@ -26,6 +32,16 @@ Add-ons are additional standalone third-party software packages that can be installed on Home Assistant OS. +- term: Area + definition: >- + Locations within your home such as living room, dance floor, etc. + Devices can be associated to an area for easier sorting and automatically + generated cards, such as the [Area card](/dashboards/area/). + excerpt: >- + Places within your home such as rooms, spaces, etc. + aliases: + - areas + - term: Automation definition: >- Automations connect one or more triggers to one or more actions in a @@ -56,6 +72,8 @@ Conditions are an optional part of an automation that will prevent an action from firing if they are not met. link: /docs/scripts/conditions/ + aliases: + - conditions - term: Cover definition: >- @@ -81,6 +99,8 @@ Devices have properties such as ID, manufacturer, name, model, hardware version, firmware version, connections, etc. excerpt: > A device is a model representing a physical or logical unit that contains entities. + aliases: + - devices - term: Device tracker definition: >- @@ -128,11 +148,15 @@ link: /docs/configuration/state_object/ excerpt: > An entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. + aliases: + - entities - term: Event definition: >- An event is when something happens. link: /docs/configuration/events/ + aliases: + - events - term: Frontend definition: >- @@ -206,6 +230,19 @@ Integrations connect and integrates Home Assistant with your devices, services, and more. link: /integrations/ + aliases: + - integrations + +- term: Intent + definition: >- + Intent is a term used with voice assistants. The intent is what Home Assistant thinks you want it to do when it extracts a command from your voice or text utterance. Currently, the following intents are supported out of the box: HassTurnOn, HassTurnOff, HassGetState, and HassLightSet. + + These intents allow you to turn things on or off, inquire about a state, or change the brightness or color of a light. + excerpt: > + Intent is a term used with voice assistants. The intent is what Home Assistant thinks you want it to do when it extracts a command from your voice or text utterance. + link: https://developers.home-assistant.io/docs/intent_builtin + aliases: + - Intents - term: Lovelace definition: >- @@ -259,12 +296,16 @@ Scripts are components that allow users to specify a sequence of actions to be executed by Home Assistant when turned on. link: /docs/scripts/ + aliases: + - scripts - term: Sensor definition: >- Sensors return information about a thing, for instance the level of water in a tank. link: /integrations/sensor/ + aliases: + - sensors - term: Selectors definition: >- @@ -296,8 +337,9 @@ A service carries out one specific task, for example: turn on the light in the living room. A service has targets and data and can be called by actions, a dashboard, or via voice command. - link: /docs/scripts/service-calls/ + aliases: + - services - term: State definition: |- @@ -351,3 +393,5 @@ definition: >- Zones are areas that can be used for presence detection. link: /integrations/zone/ + aliases: + - zones diff --git a/source/_docs/automation/basics.markdown b/source/_docs/automation/basics.markdown index e49a1655874..3d8b4e346a9 100644 --- a/source/_docs/automation/basics.markdown +++ b/source/_docs/automation/basics.markdown @@ -3,7 +3,7 @@ title: "Understanding Automations" description: "A breakdown of what an automation consists of." --- -All automations are made up of a trigger and an action. Optionally combined with a condition. Take for example the automation: +All {% term automations %} are made up of a {% term trigger %} and an {% term action %}. Optionally combined with a {% term condition %}. Take for example the automation: > When Paulus arrives home and it is after sunset: Turn the lights on in the living room. @@ -15,7 +15,7 @@ We can break up this automation into the following three parts: (action) Turn the lights on in the living room ``` -The first part is the [trigger](/docs/automation/trigger/) of the automation rule. Triggers describe events that should trigger the automation rule. In this case, it is a person arriving home, which can be observed in Home Assistant by observing the state of Paulus changing from `not_home` to `home`. +The first part is the [trigger](/docs/automation/trigger/) of the automation rule. Triggers describe {% term events %} that should trigger the automation rule. In this case, it is a person arriving home, which can be observed in Home Assistant using {% term devices %}/{% term sensors %} by observing the state of Paulus changing from `not_home` to `home`. The second part is the [condition](/docs/automation/condition/). Conditions are optional tests that can limit an automation rule to only work in your specific use cases. A condition will test against the current state of the system. This includes the current time, devices, people and other things like the sun. In this case, we only want to act when the sun has set. @@ -27,7 +27,7 @@ The difference between a condition and a trigger can be confusing as they are ve ## Exploring the internal state -Automation rules interact directly with the internal state of Home Assistant, so you'll need to familiarize yourself with it. Home Assistant exposes its current state via the developer tools. These are available at the bottom of the sidebar in the frontend. **{% my developer_states title="Developer Tools -> States" %}** will show all currently available states. An entity can be anything. A light, a switch, a person and even the sun. A state consists of the following parts: +Automation rules interact directly with the internal state of Home Assistant, so you'll need to familiarize yourself with it. Home Assistant exposes its current state via the developer tools. These are available at the bottom of the sidebar in the frontend. **{% my developer_states title="Developer Tools > States" %}** will show all currently available states. An entity can be anything. A light, a switch, a person and even the sun. A state consists of the following parts: | Name | Description | Example | | ---- | ----- | ---- | @@ -37,7 +37,7 @@ Automation rules interact directly with the internal state of Home Assistant, so State changes can be used as the source of triggers and the current state can be used in conditions. -Actions are all about calling *services*. To explore the available *services* open the **{% my developer_services title="Developer Tools -> Services" %}**. *Services* allow changing anything. For example turn on a light, run a script or enable a scene. Each *service* has a domain and a name. For example the *service* {% my developer_call_service service="light.turn_on" %} is capable of turning on any light in your system. Parameters can be passed to a *service* to indicate, for example, which device to activate or which color to use. +Actions are all about calling *services*. To explore the available *services* open the **{% my developer_services title="Developer Tools > Services" %}**. *Services* allow changing anything. For example turn on a light, run a script or enable a scene. Each *service* has a domain and a name. For example the *service* {% my developer_call_service service="light.turn_on" %} is capable of turning on any light in your system. Parameters can be passed to a *service* to indicate, for example, which device to activate or which color to use. ## Creating automations diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index 025e1b9bb85..6a7ed7b14a4 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -5,29 +5,25 @@ description: "Instructions on how to use the automation editor." The automation editor is an easy way of creating and editing automations from the UI. This page uses the [Random sensor](/integrations/random#sensor) as an example, though any other sensor with a numeric value can be used as well. -From the UI, choose **{% my config %}** which is located in the sidebar, then click on **{% my automations %}** to go to the automation editor. Press the **Create Automation** button in the lower right corner to get started. You can create an automation based on a [blueprint](/docs/automation/using_blueprints/) or start from scratch. +From the UI, choose **{% my config %}** which is located in the sidebar, then click on **{% my automations %}** to go to the automation editor. Press the **Create Automation** button in the lower right corner to get started. You can create an automation based on a [blueprint](/docs/automation/using_blueprints/) or start from scratch. Select **Create new automation**. -

- -

+![Create automation dialogue box](/images/docs/automation-editor/create-automation.png) -Select **Start with an empty automation** and choose a meaningful name for your new automation. +Click on the **Add Trigger** button and select **Nurmeric state**. -

- -

+![Add trigger](/images/docs/automation-editor/add-trigger-to-automation.png) If the value of the sensor is greater than 10, then the automation should trigger. -

- -

+![Automation trigger](/images/docs/automation-editor/new-trigger.png) + +Click on the **Add Action** button and select **Call service**. + +![Add trigger](/images/docs/automation-editor/new-action.png) The action for this automation creates a [persistent notification](/integrations/persistent_notification/). -

- -

+![Automation action](/images/docs/automation-editor/send-notification.png) As the message we want a simple text that is shown as part of the notification. @@ -35,6 +31,10 @@ As the message we want a simple text that is shown as part of the notification. message: Sensor value greater than 10 ``` + Press the **Save** button, and the save dialogue will appear. Give your automation a meaningful name and press the **Save** button again. + +![New automation editor](/images/docs/automation-editor/new-automation.png) + Automations created or edited via the user interface are activated immediately after saving the automation. Read the documentation for [Automating Home Assistant](/getting-started/automation/) to learn more about automations. ## Troubleshooting missing automations diff --git a/source/_docs/automation/templating.markdown b/source/_docs/automation/templating.markdown index a61ef722765..2c0786cee58 100644 --- a/source/_docs/automation/templating.markdown +++ b/source/_docs/automation/templating.markdown @@ -13,19 +13,25 @@ The variable `this` is the [state object](/docs/configuration/state_object) of t ## Available Trigger Data -The following tables show the available trigger data per platform. +The variable `trigger` is an object that contains details about which trigger triggered the automation. + +Templates can use the data to modify the actions performed by the automation or displayed in a message. For example, you could create an automation that multiple sensors can trigger and then use the sensor's location to specify a light to activate; or you could send a notification containing the friendly name of the sensor that triggered it. + +Each [trigger platform](/docs/automation/trigger/#event-trigger) can include additional data specific to that platform. ### All -The following describes trigger data associated with all platforms. +Triggers from all platforms will include the following data. | Template variable | Data | | ---- | ---- | -| `trigger.id` | Optional trigger `id`, or index of the trigger. +| `trigger.id` | The [`id` of the trigger](/docs/automation/trigger/#trigger-id). | `trigger.idx` | Index of the trigger. (The first trigger idx is `0`.) ### Calendar +These are the properties available for a [Calendar trigger](/docs/automation/trigger/#calendar-trigger). + | Template variable | Data | | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | | `trigger.platform` | Hardcoded: `calendar` | @@ -41,6 +47,8 @@ The following describes trigger data associated with all platforms. ### Device +These are the properties available for a [Device trigger](/docs/automation/trigger/#device-trigger). + Inherites template variables from [event](#event) or [state](#state) template based on the type of trigger selected for the device. | Template variable | Data | @@ -49,6 +57,8 @@ Inherites template variables from [event](#event) or [state](#state) template ba ### Event +These are the properties available for a [Event trigger](/docs/automation/trigger/#event-trigger). + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `event`. @@ -58,6 +68,8 @@ Inherites template variables from [event](#event) or [state](#state) template ba ### MQTT +These are the properties available for a [MQTT trigger](/docs/automation/trigger/#mqtt-trigger). + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `mqtt`. @@ -68,6 +80,8 @@ Inherites template variables from [event](#event) or [state](#state) template ba ### Numeric State +These are the properties available for a [Numeric State trigger](/docs/automation/trigger/#numeric-state-trigger). + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `numeric_state` @@ -80,6 +94,8 @@ Inherites template variables from [event](#event) or [state](#state) template ba ### State +These are the properties available for a [State trigger](/docs/automation/trigger/#state-trigger). + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `state` @@ -90,6 +106,8 @@ Inherites template variables from [event](#event) or [state](#state) template ba ### Sun +These are the properties available for a [Sun trigger](/docs/automation/trigger/#sun-trigger). + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `sun` @@ -98,6 +116,8 @@ Inherites template variables from [event](#event) or [state](#state) template ba ### Template +These are the properties available for a [Template trigger](/docs/automation/trigger/#template-trigger). + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `template` @@ -108,6 +128,8 @@ Inherites template variables from [event](#event) or [state](#state) template ba ### Time +These are the properties available for a [Time trigger](/docs/automation/trigger/#time-trigger). + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `time` @@ -115,6 +137,8 @@ Inherites template variables from [event](#event) or [state](#state) template ba ### Time Pattern +These are the properties available for a [Time Pattern trigger](/docs/automation/trigger/#time-pattern-trigger). + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `time_pattern` @@ -122,6 +146,8 @@ Inherites template variables from [event](#event) or [state](#state) template ba ### Webhook +These are the properties available for a [Webhook trigger](/docs/automation/trigger/#webhook-trigger). + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `webhook` @@ -132,6 +158,8 @@ Inherites template variables from [event](#event) or [state](#state) template ba ### Zone +These are the properties available for a [Zone trigger](/docs/automation/trigger/#zone-trigger). + | Template variable | Data | | ---- | ---- | | `trigger.platform` | Hardcoded: `zone` diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 86fe15d59db..802852f9b27 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -786,6 +786,10 @@ automation: trigger: - platform: webhook webhook_id: "some_hook_id" + allowed_methods: + - POST + - PUT + local_only: true ``` You can run this automation by sending an HTTP POST request to `http://your-home-assistant:8123/api/webhook/some_hook_id`. Here is an example using the **curl** command line program, with an example form data payload: @@ -794,7 +798,9 @@ You can run this automation by sending an HTTP POST request to `http://your-home curl -X POST -d 'key=value&key2=value2' https://your-home-assistant:8123/api/webhook/some_hook_id ``` -Webhooks support HTTP POST, PUT, and HEAD requests; POST requests are recommended. HTTP GET requests are not supported. +Webhooks support HTTP POST, PUT, HEAD, and GET requests; PUT requests are recommended. HTTP GET and HEAD requests are not enabled by default but can be enabled by adding them to the `allowed_methods` option. The request methods can also be configured in the UI by clicking the settings gear menu button beside the Webhook ID. + +By default, webhook triggers can only be accessed from devices on the same network as Home Assistant or via [Nabu Casa Cloud webhooks](https://www.nabucasa.com/config/webhooks/). The `local_only` option should be set to `false` to allow webhooks to be triggered directly via the internet. This option can also be configured in the UI by clicking the settings gear menu button beside the Webhook ID. Remember to use an HTTPS URL if you've secured your Home Assistant installation with SSL/TLS. @@ -817,6 +823,7 @@ Webhook endpoints don't require authentication, other than knowing a valid webho - Do not use webhooks to trigger automations that are destructive, or that can create safety issues. For example, do not use a webhook to unlock a lock, or open a garage door. - Treat a webhook ID like a password: use a unique, non-guessable value, and keep it secret. - Do not copy-and-paste webhook IDs from public sources, including blueprints. Always create your own. +- Keep the `local_only` option enabled for webhooks if access from the internet is not required. ## Zone trigger diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index 2c278121572..a47a614d0d7 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -19,6 +19,7 @@ The following selectors are currently available: - [Add-on selector](#add-on-selector) - [Area selector](#area-selector) - [Attribute selector](#attribute-selector) +- [Assist pipeline selector](#assist-pipeline-selector) - [Boolean selector](#boolean-selector) - [Color temperature selector](#color-temperature-selector) - [Config entry selector](#config-entry-selector) @@ -29,6 +30,7 @@ The following selectors are currently available: - [Duration selector](#duration-selector) - [Entity selector](#entity-selector) - [Icon selector](#icon-selector) +- [Language selector](#language-selector) - [Location selector](#location-selector) - [Media selector](#media-selector) - [Number selector](#number-selector) @@ -245,6 +247,18 @@ The output of this selector is the selected attribute key (not the translated or prettified name shown in the frontend). For example: `next_dawn`. +## Assist pipeline selector + +The assist pipeline selector shows all available assist pipelines (assistants) of which one can be selected. + +![Screenshot of an assist pipeline selector](/images/blueprints/selector-assist-pipeline.png) + +This selector does not have any other options; therefore, it only has its key. + +```yaml +assist_pipeline: +``` + ## Boolean selector The boolean selector shows a toggle that allows the user to turn on or off @@ -640,6 +654,38 @@ placeholder: The output of this selector is a string containing the selected icon, for example: `mdi:bell`. +## Language selector + +The language selector allows a user to pick a language from a list of languages. + +![Screenshot of an language selector](/images/blueprints/selector-language.png) + +```yaml +language: +``` + +{% configuration entity %} +languages: + description: A list of languages to pick from, this should be RFC 5646 languages codes. + type: list + default: The available languages in the Home Assistant frontend + required: false +native_name: + description: > + Should the name of the languages be shown in the language of the user, or in the language itself. + type: boolean + default: false + required: false +no_sort: + description: > + Should the options be sorted by name, if set to true, the order of the provided languages is kept. + type: boolean + default: false + required: false +{% endconfiguration %} + +The output of this selector is a RFC 5646 language code. + ## Location selector The location selector allow a user to pick a location from a map and returns diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown index 78bdbbf9153..4966d8d25a1 100644 --- a/source/_docs/configuration.markdown +++ b/source/_docs/configuration.markdown @@ -40,6 +40,6 @@ If you can't see your integration listed there, you will need to restart Home As ## Migrating to a new system -The preferred way of migrating to a new system is by {% my supervisor_backups title="making a backup" %}. +The preferred way of migrating to a new system is by {% my supervisor_backups title="making a backup" %}. Once you have created the backup on the old system, you can download it to the system that is running the Home Assistant frontend. When setting up the new system, you may use the backup. Alternatively, you can upload it to your new system using the *Upload backup* menu option of the *Backups* menu. Then, a restore of the uploaded backup on the new system concludes the migration. If you run the container or core installation methods, you will need to manually make a backup of your configuration folder. Be aware that some of the files you need start with `.`, which is hidden by default from both `ls` (in SSH), in Windows Explorer, and macOS Finder. You'll need to ensure that you're viewing all files before you copy them. diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 2e48f0bf1a0..c3bbe7874c1 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -150,6 +150,8 @@ Print out a list of all the sensor states: {% endfor %} ``` +{% endraw %} + Print out a list of all the sensor states sorted by `entity_id`: {% raw %} @@ -655,13 +657,14 @@ To fix it, enforce the ISO conversion via `isoformat()`: The `to_json` filter serializes an object to a JSON string. In some cases, it may be necessary to format a JSON string for use with a webhook, as a parameter for command-line utilities or any number of other applications. This can be complicated in a template, especially when dealing with escaping special characters. Using the `to_json` filter, this is handled automatically. -Similarly to the Python equivalent, the filter accepts an `ensure_ascii` parameter, defaulting to `True`. If `ensure_ascii` is `True`, the output is guaranteed to have all incoming non-ASCII characters escaped. If `ensure_ascii` is false, these characters will be output as-is. +`to_json` also accepts boolean arguments for `pretty_print`, which will pretty print the JSON with a 2-space indent to make it more human-readable, and `sort_keys`, which will sort the keys of the JSON object, ensuring that the resulting string is consistent for the same input. + +If you need to generate JSON that will be used by a parser that lacks support for Unicode characters, you can add `ensure_ascii=True` to have `to_json` generate Unicode escape sequences in strings. The `from_json` filter operates similarly, but in the other direction, de-serializing a JSON string back into an object. -### To/From JSON examples -In this example, the special character '°' will be automatically escaped in order to produce valid JSON. The difference between the stringified object and the actual JSON is evident. +### To/From JSON examples #### Template @@ -670,7 +673,7 @@ In this example, the special character '°' will be automatically escaped in ord ```text {% set temp = {'temperature': 25, 'unit': '°C'} %} stringified object: {{ temp }} -object|to_json: {{ temp|to_json(ensure_ascii=False) }} +object|to_json: {{ temp|to_json(sort_keys=True) }} ``` {% endraw %} @@ -681,7 +684,7 @@ object|to_json: {{ temp|to_json(ensure_ascii=False) }} ```text stringified object: {'temperature': 25, 'unit': '°C'} -object|to_json: {"temperature": 25, "unit": "\u00b0C"} +object|to_json: {"temperature": 25, "unit": "°C"} ``` {% endraw %} @@ -693,7 +696,7 @@ Conversely, `from_json` can be used to de-serialize a JSON string back into an o {% raw %} ```text -{% set temp = '{"temperature": 25, "unit": "\u00b0C"}'|from_json %} +{% set temp = '{"temperature": 25, "unit": "°C"}'|from_json %} The temperature is {{ temp.temperature }}{{ temp.unit }} ``` diff --git a/source/_docs/energy/gas.markdown b/source/_docs/energy/gas.markdown index c51ede08d61..ae0f109e834 100644 --- a/source/_docs/energy/gas.markdown +++ b/source/_docs/energy/gas.markdown @@ -29,3 +29,6 @@ We have worked with creator [Marcel Zuidwijk](https://www.zuidwijk.com) to devel ![Photo of the AI-on-the-edge-device Workflow](/images/docs/energy/ai-on-the-edge-device.jpg) +#### Read the Gas Meter using a magnetometer + +[Diaphragm gas meters](https://en.wikipedia.org/wiki/Gas_meter#Diaphragm/bellows_meters) are the most common type of gas meter, and their movement can frequently be observed with a magnetometer. The [QMC5883L](https://esphome.io/components/sensor/qmc5883l.html) is a common and inexpensive option that ESPHome supports. Many posts on the forums of users having luck with this method, such as [this one](https://community.home-assistant.io/t/water-gas-meter-monitoring-via-magnetometer-sine-wave-to-pulse-issue/245904). diff --git a/source/_docs/energy/individual-devices.markdown b/source/_docs/energy/individual-devices.markdown index 64cd33147ed..1e0f1751968 100644 --- a/source/_docs/energy/individual-devices.markdown +++ b/source/_docs/energy/individual-devices.markdown @@ -17,17 +17,8 @@ Depending on what protocols you use at home, you can use Zigbee, Z-Wave or Wi-Fi Smart relays sit behind your "normal" switches and make them smart. It allows you to control the devices via Home Assistant and via the connected buttons/switches. -{% comment %} -We recommend the Shelly brand because they have a local API that updates Home Assistant as soon as something happens and it has a high quality integration: - -- [Shelly 1PM](https://shop.shelly.cloud/shelly-1pm-wifi-smart-home-automation-1?tracking=A7FsiPIfUWsFpnfKHa8SRyUYLXjr2hPq) -- [Shelly 2.5](https://shop.shelly.cloud/shelly-2.5-ce-ul-wifi-smart-home-automation?tracking=A7FsiPIfUWsFpnfKHa8SRyUYLXjr2hPq) - {% endcomment %} - ## Devices with power (W) sensors Some smart devices, such as air conditioning, boilers, and others, may provide a power sensor, measured in Watts. You can use the [Integration (Riemann sum integral) integration](/integrations/integration/#energy) to calculate the energy your device is using. You can then use the energy sensor in the Energy Dashboard, as individual devices. Graphic showing energy flowing from the home to individual devices. - -_Disclaimer: Some links on this page are affiliate links._ diff --git a/source/_docs/scene/editor.markdown b/source/_docs/scene/editor.markdown index 06d2f3eb431..931110b9998 100644 --- a/source/_docs/scene/editor.markdown +++ b/source/_docs/scene/editor.markdown @@ -3,23 +3,27 @@ title: "Scenes Editor" description: "Instructions on how to use the scenes editor." --- -In Home Assistant 0.102 we introduced the first version of our scene editor. If you just created a new configuration with Home Assistant, then you're all set! Go to the UI and enjoy. - From the UI choose **Settings** which is located in the sidebar, then click on **Automations & Scenes** to go to the scene editor. Press the **Add Scene** button in the lower right corner to get started. Choose a meaningful name for your scene. -

- -

+![Scene editor](/images/docs/scenes/editor.png) -Select all the devices (or entities when advanced mode is enabled on your user profile) you want to include in your scene. +Select all the {% term devices %} (or {% term entities %} when advanced mode is enabled on your user profile) you want to include in your scene. The state of your devices will be saved, so it can be restored when you are finished creating your scene. Set the state of the devices to how you want them to be in your scene, this can be done by clicking on it and edit the state from the popup, or any other method that changes the state. On the moment you save the scene, all the states of your devices are stored in the scene. When you leave the editor the states of the devices are restored to the state from before you started editing. The menu on the top-right has options to **Duplicate scene** and **Delete scene**. +A scene can be called in {% term automation %} action and {% term scripts %} using a turn on scene {% term service %}: + +```yaml +service: scene.turn_on +target: + entity_id: scene.my_unique_id +``` + ## Updating your configuration to use the editor First, check that you have activated the configuration editor. diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index a6164301a14..f9f2097b039 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -761,7 +761,7 @@ on each other and order doesn't matter. For those cases, the `parallel` action can be used to run the actions in the sequence in parallel, meaning all the actions are started at the same time. -The following example shows sending messages out at the time (in parallel): +The following example shows sending messages out at the same time (in parallel): ```yaml automation: @@ -779,7 +779,7 @@ automation: message: "These messages are sent at the same time!" ``` -It is also possible to run a group of actions sequantially inside the parallel +It is also possible to run a group of actions sequentially inside the parallel actions. The example below demonstrates that: ```yaml diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown index 31811bfb287..9f3f0793a65 100644 --- a/source/_docs/z-wave/controllers.markdown +++ b/source/_docs/z-wave/controllers.markdown @@ -120,3 +120,18 @@ You should also check the README for details on the overlays. You might find it If you've installed the Z-Wave.Me Z-Way software. In order to use Z-Wave JS instead of Z-Way, you'll need to ensure you disable it before you install Home Assistant, or you won't be able to access the board. Do this with `sudo /etc/init.d/z-way-server stop; sudo update-rc.d z-way-server disable`. Alternatively, you could use the [Z-Wave.Me](/integrations/zwave_me) integration. + +#### Setting up a Raspberry Pi Z-Wave module on Home Assistant Yellow + +This procedure has been tested with the following modules: + + * Aeotec Z-Pi 7 Raspberry Pi HAT/Shield + * Z-Wave.Me RaZberry 7 + * Z-Wave.Me RaZberry 7 Pro + +1. Make sure the module is properly seated on the Home Assistant Yellow. + ![Aeotec Z-Pi 7 on Home Assistant Yellow](/images/docs/z-wave/zpi-7-yellow.jpg). +1. Carefully [close the case](https://yellow.home-assistant.io/guides/add-ssd-existing-installation/#reassembling-top-part) and power up Home Assistant Yellow. +1. Follow the procedure on [setting up a Z-Wave JS server](/integrations/zwave_js/#setting-up-a-z-wave-js-server). + 1. In step 2, follow the manual setup steps to install the Z-Wave integration. + 1. in Step 4, you will be prompted to choose a **Device path**. Choose **ttyAMA0**. \ No newline at end of file diff --git a/source/_examples/configuration_yaml_by_ntalekt.markdown b/source/_examples/configuration_yaml_by_ntalekt.markdown new file mode 100644 index 00000000000..95c4fe75962 --- /dev/null +++ b/source/_examples/configuration_yaml_by_ntalekt.markdown @@ -0,0 +1,6 @@ +--- +title: "Configuration.yaml by ntalekt" +description: "Unifi, ZHA, Pentair, Tuya, Tasmota" +ha_category: Example configuration.yaml +ha_external_link: https://github.com/ntalekt/homeassistant +--- diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index 35e06e0fd5b..487acf02ad5 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -46,6 +46,13 @@
  • {% active_link /docs/assist/apple/ Assist for Apple devices %}
  • {% active_link /docs/assist/builtin_sentences/ Built-in sentences %}
  • {% active_link /docs/assist/custom_sentences/ Custom sentences %}
  • +
  • {% active_link /docs/assist/voice_remote_expose_devices/ Exposing devices to your voice assistant %}
  • +
  • {% active_link /docs/assist/voice_remote_local_assistant/ Configuring a local assistant %}
  • +
  • {% active_link /docs/assist/troubleshooting/ Troubleshooting Assist %}
  • +
  • {% active_link /docs/assist/voice_remote_local_assistant/ Configuring a local assistant %}
  • +
  • {% active_link /projects/worlds-most-private-voice-assistant/ Tutorial: World's most private voice assistant %}
  • +
  • {% active_link /projects/thirteen-usd-voice-remote/ Tutorial: $13 voice remote %} +
  • @@ -177,6 +184,16 @@
  • {% active_link /integrations/mqtt/#logging Logging %}
  • +
  • + Hardware + +
  • diff --git a/source/_includes/asides/getting_started_navigation.html b/source/_includes/asides/getting_started_navigation.html index c7741c01864..f640dd7e062 100644 --- a/source/_includes/asides/getting_started_navigation.html +++ b/source/_includes/asides/getting_started_navigation.html @@ -5,6 +5,7 @@
  • {% active_link /installation/ Installation %}
  • {% active_link /getting-started/onboarding/ Onboarding %}
  • {% active_link /getting-started/concepts-terminology/ Concepts and terminology %}
  • +
  • {% active_link /getting-started/integration/ Integration %}
  • {% active_link /getting-started/automation/ Automation %}
  • {% active_link /getting-started/presence-detection/ Presence detection diff --git a/source/_includes/common-tasks/flashing_n2_otg.md b/source/_includes/common-tasks/flashing_n2_otg.md index f4cb0d8aa49..98c768e4a71 100644 --- a/source/_includes/common-tasks/flashing_n2_otg.md +++ b/source/_includes/common-tasks/flashing_n2_otg.md @@ -11,6 +11,7 @@ To flash your eMMC using Petitboot and OTG-USB, you will need the following item - HDMI cable and monitor - USB keyboard - USB 2.0 to micro-USB cable +- If your board came in a Home Assistant Blue: No.2 hex key to open the case #### Enabling SPI boot mode @@ -45,13 +46,13 @@ You can safely ignore this message and proceed with the installation -2. Use the following command at the console to confirm the storage device node: +1. Use the following command at the console to confirm the storage device node: ```bash ls /dev/mmc* ``` -3. Set the storage device on the ODROID-N2+ as a mass storage device using the `ums` command (USB Mass storage mode). +1. Set the storage device on the ODROID-N2+ as a mass storage device using the `ums` command (USB Mass storage mode). This will configure the ODROID-N2+ and OTG to act as a memory card reader: ```bash @@ -60,10 +61,19 @@ This will configure the ODROID-N2+ and OTG to act as a memory card reader: #### Flashing Home Assistant -Connect the ODROID-N2+ to your PC via the micro-USB port at the front of the ODROID-N2+. When the ODROID-N2 is recognized as a USB connected storage device, you can flash the eMMC with [Etcher](https://www.balena.io/etcher/) using the latest stable version of Home Assistant OS for the [ODROID-N2+](https://github.com/home-assistant/operating-system/releases/download/{{site.data.version_data.hassos['odroid-n2']}}/haos_odroid-n2-{{site.data.version_data.hassos['odroid-n2']}}.img.xz) (haos_odroid-n2-{{site.data.version_data.hassos['odroid-n2']}}.img.xz). +1. Connect the ODROID-N2+ to your PC via the micro-USB port at the front of the ODROID-N2+. +1. When the ODROID-N2 is recognized as a USB connected storage device, you can flash the eMMC with [Etcher](https://www.balena.io/etcher/). + * Use the latest stable version of Home Assistant OS for the [ODROID-N2+](https://github.com/home-assistant/operating-system/releases/download/{{site.data.version_data.hassos['odroid-n2']}}/haos_odroid-n2-{{site.data.version_data.hassos['odroid-n2']}}.img.xz) (haos_odroid-n2-{{site.data.version_data.hassos['odroid-n2']}}.img.xz). -When the flash process is complete, disconnect the ODROID-N2+ from your PC and remove the power cable. Remove the USB and HDMI cable, and make sure to toggle the boot mode switch back to MMC. +1. When the flash process is complete, disconnect the ODROID-N2+ from your PC. + * Remove the power cable. + * Remove the USB and HDMI cables. + * Make sure to toggle the boot mode switch back to MMC. -Once it is back in its case, connect your ODROID-N2+ to your network with an Ethernet cable and plug in power. +1. Put the ODROID back in its case. +1. Connect your ODROID-N2+ to your network with an Ethernet cable and plug in power. -If your router supports mDNS, you will be able to reach your installation on `http://homeassistant.local:8123`. If your network doesn’t support mDNS, you’ll have to use the IP address of your ODROID-N2+ instead of `homeassistant.local`. For example, `http://192.168.0.9:8123`. You should be able to find the IP address of your ODROID-N2+ from the admin interface of your router. +1. If your router supports mDNS, you can reach your installation at `http://homeassistant.local:8123`. + * If your network doesn’t support mDNS, you’ll have to use the IP address of your ODROID-N2+ instead of `homeassistant.local`. For example, `http://192.168.0.9:8123`. + * You should be able to find the IP address of your ODROID-N2+ from the admin interface of your router. +1. Continue with [onboarding](/getting-started/onboarding/). \ No newline at end of file diff --git a/source/_includes/installation/container.md b/source/_includes/installation/container.md index 351d45fd5ec..a8379be6a29 100644 --- a/source/_includes/installation/container.md +++ b/source/_includes/installation/container.md @@ -11,7 +11,7 @@ This guide assumes that you already have an operating system setup and a contain If you are using Docker then you need to be on at least version 19.03.9, ideally an even higher version, and `libseccomp` 2.4.2 or newer. -### Platform Installation +### Platform installation Installation with Docker is straightforward. Adjust the following command so that: @@ -32,10 +32,10 @@ Once the Home Assistant Container is running Home Assistant should be accessible ### Restart Home Assistant -If you change the configuration you have to restart the server. To do that you have 3 options. +If you change the configuration, you have to restart the server. To do that you have 3 options. -1. In your Home Assistant UI go to the **Settings** -> **System** and click the "Restart" button. -2. You can go to the **Developer Tools** -> **Services**, select the service `homeassistant.restart` and click "Call Service". +1. In your Home Assistant UI, go to the **Settings** > **System** and click the **Restart** button. +2. You can go to the **Developer Tools** > **Services**, select the service `homeassistant.restart` and select **Call Service**. 3. Restart it from a terminal. {% tabbed_block %} @@ -56,7 +56,7 @@ If you change the configuration you have to restart the server. To do that you h {% endtabbed_block %} -### Docker Compose +### Docker compose
    @@ -74,11 +74,11 @@ Start it by running: docker compose up -d ``` -Once the Home Assistant Container is running Home Assistant should be accessible using `http://:8123` (replace with the hostname or IP of the system). You can continue with onboarding. +Once the Home Assistant Container is running, Home Assistant should be accessible using `http://:8123` (replace with the hostname or IP of the system). You can continue with onboarding. {% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %} -### Exposing Devices +### Exposing devices In order to use Zigbee or other integrations that require access to devices, you need to map the appropriate device into the container. Ensure the user that is running the container has the correct privileges to access the `/dev/tty*` file, then add the device mapping to your container instructions: diff --git a/source/_includes/installation/core.md b/source/_includes/installation/core.md index 01628f40f47..a031f3f251c 100644 --- a/source/_includes/installation/core.md +++ b/source/_includes/installation/core.md @@ -99,6 +99,6 @@ If this address doesn't work you may also try `http://localhost:8123` or `http:/
    -When you run the `hass` command for the first time, it will download, install and cache the necessary libraries/dependencies. This procedure may take anywhere between 5 to 10 minutes. During that time, you may get "site cannot be reached" error when accessing the web interface. This will only happen for the first time, and subsequent restarts will be much faster. +When you run the `hass` command for the first time, it will download, install and cache the necessary libraries/dependencies. This procedure may take anywhere between 5 to 10 minutes. During that time, you may get a **site cannot be reached** error when accessing the web interface. This will only happen the first time. Subsequent restarts will be much faster.
    diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md index 4bfacd56be6..5ff4865fe19 100644 --- a/source/_includes/installation/operating_system.md +++ b/source/_includes/installation/operating_system.md @@ -6,25 +6,11 @@ Follow this guide if you want to get started with Home Assistant easily or if you have little to no Linux experience. -{% if page.installation_type == 'raspberrypi' %} - -### Suggested Hardware - -We will need a few things to get started with installing Home Assistant. Links below lead to Amazon US. If you’re not in the US, you should be able to find these items in web stores in your country. - -- [Raspberry Pi 4](https://amzn.to/2S0Gcl1) (Raspberry Pi 3 is ok too, if you have one laying around). Raspberry Pi are currently hard to come by, use [RPilocator](https://rpilocator.com/?cat=PI4) to find official distributors with stock. -- [Power Supply for Raspberry Pi 4](https://amzn.to/2ReZ2Vq) or [Power Supply for Raspberry Pi 3](https://amzn.to/2R8yG7h) -- [Micro SD Card](https://amzn.to/2X0Z2di). Ideally get one that is [Application Class 2](https://www.sdcard.org/developers/overview/application/index.html) as they handle small I/O much more consistently than cards not optimized to host applications. A 32 GB or bigger card is recommended. -- SD Card reader. This is already part of most laptops, but you can purchase a [standalone USB adapter](https://amzn.to/2WWxntY) if you don't have one. The brand doesn't matter, just pick the cheapest. -- [Ethernet cable](https://amzn.com/dp/B00N2VISLW). Required for installation. After installation, Home Assistant can work with Wi-Fi, but an Ethernet connection is more reliable and highly recommended. - -{% endif %} - {% if page.installation_type == 'odroid' %} -### Suggested Hardware +### Suggested hardware -We will need a few things to get started with installing Home Assistant. Links below lead to Ameridroid. If you’re not in the US, you should be able to find these items in web stores in your country. +We will need a few things to get started with installing Home Assistant. The links below lead to Ameridroid. If you’re not in the US, you should be able to find these items in web stores in your country. To get started we suggest the ODROID N2+, it's the most powerful ODROID. It's fast and with built-in eMMC one of the best boards to run Home Assistant. It's also the board that powers our [Home Assistant Blue](/blue/). @@ -34,15 +20,15 @@ To get started we suggest the ODROID N2+, it's the most powerful ODROID. It's fa - [eMMC Module](https://ameridroid.com/products/emmc-module-n2-linux-red-dot?ref=eeb6nfw07e) - [Case](https://ameridroid.com/products/odroid-n2-case?ref=eeb6nfw07e) -If unavailable, we also recommend the [ODROID C4](https://ameridroid.com/products/odroid-c4?ref=eeb6nfw07e) or [ODROID XU4](https://ameridroid.com/products/odroid-xu4?ref=eeb6nfw07e). +If unavailable, we also recommend the [ODROID C4](https://ameridroid.com/products/odroid-c4?ref=eeb6nfw07e) or [ODROID M1](https://ameridroid.com/products/odroid-M1?ref=eeb6nfw07e). {% endif %} {% if page.installation_type == 'tinkerboard' %} -### Suggested Hardware +### Suggested hardware -We will need a few things to get started with installing Home Assistant. Links below lead to Amazon US. If you’re not in the US, you should be able to find it in web stores in your country. +We will need a few things to get started with installing Home Assistant. The links below lead to Amazon US. If you’re not in the US, you should be able to find it in web stores in your country. - [Asus Tinkerboard S](https://amzn.to/3fFIcbI) @@ -111,13 +97,15 @@ sudo apt install libfuse2 1. Attach the Home Assistant boot medium ({{site.installation.types[page.installation_type].installation_media}}) to your computer. {% if page.installation_type == 'odroid' %} + If you are using ODROID M1, note that booting from NVMe is not supported. If you want to boot from eMMC, [update the firmware](https://github.com/home-assistant/operating-system/blob/dev/Documentation/boards/hardkernel/odroid-m1.md) before installing the image. + If you are using a [Home Assistant Blue](/blue) or ODROID N2+, you can [attach your device directly](/common-tasks/os/#flashing-an-odroid-n2). {% endif %} -2. Download and start Balena Etcher. You may need to run it with administrator privileges on Windows. -3. Select "Flash from URL". +1. Download and start Balena Etcher. You may need to run it with administrator privileges on Windows. +1. Select **Flash from URL**. ![Screenshot of the Etcher software showing flash from URL selected.](/images/installation/etcher1.png) -4. Copy the URL for the {{site.installation.types[page.installation_type].board}} image which is: +1. Copy the URL for the image. If there are multiple links below, make sure to select the correct link for your version of {{site.installation.types[page.installation_type].board}}: {% if site.installation.types[page.installation_type].variants.size > 1 %} {% tabbed_block %} {% for variant in site.installation.types[page.installation_type].variants %} @@ -148,15 +136,15 @@ sudo apt install libfuse2 _Select and copy the URL or use the "copy" button that appear when you hover it._ -1. Paste the URL for the {{site.installation.types[page.installation_type].board}} image into Balena Etcher and click "OK" +5. Paste the URL for the {{site.installation.types[page.installation_type].board}} image into Balena Etcher and select **OK**. ![Screenshot of the Etcher software showing the URL bar with a URL pasted in.](/images/installation/etcher2.png) -1. When Balena Etcher has downloaded the image, click "Select target" +1. When Balena Etcher has downloaded the image, click **Select target**. ![Screenshot of the Etcher software showing the select target button highlighted.](/images/installation/etcher3.png) -1. Select the boot medium ({{site.installation.types[page.installation_type].installation_media}}) you want to use for your installation +1. Select the boot medium ({{site.installation.types[page.installation_type].installation_media}}) you want to use for your installation. ![Screenshot of the Etcher software showing teh targets available.](/images/installation/etcher4.png) -1. Click on "Flash!" to start writing the image +1. Select **Flash!** to start writing the image. ![Screenshot of the Etcher software showing the Flash button highlighted.](/images/installation/etcher5.png) -1. When Balena Etcher has finished writing the image you will see a confirmation +1. When Balena Etcher has finished writing the image, you will see a confirmation. ![Screenshot of the Etcher software showing that the installation has completed.](/images/installation/etcher6.png) ### Start up your {{site.installation.types[page.installation_type].board}} @@ -168,7 +156,7 @@ _Select and copy the URL or use the "copy" button that appear when you hover it. - If you used a live operating system (e.g. Ubuntu), shut it down and remove the live operating system USB device. 1. Plug in an Ethernet cable that is connected to the network. -2. Power the system on. If you have a screen connected to the {{site.installation.types[page.installation_type].board}} system, after a minute or so the Home Assistant welcome banner will appear in the console. +1. Power the system on. If you have a screen connected to the {{site.installation.types[page.installation_type].board}} system, after a minute or so the Home Assistant welcome banner will appear in the console.
    @@ -223,9 +211,11 @@ If you are running an older Windows version or have a stricter network configura - [Hyper-V][vhdx] (.vhdx) {% endif %} -Follow this guide if you already are running a supported virtual machine hypervisor. If you are not familiar with virtual machines we recommend installation Home Assistant OS directly on a [Raspberry Pi](/installation/raspberrypi) or an [ODROID](/installation/odroid). +After downloading, decompress the image. If the image comes in a ZIP file, for example, unzip it. -### Create the Virtual Machine +Follow this guide if you already are running a supported virtual machine hypervisor. If you are not familiar with virtual machines, we recommend installing Home Assistant OS directly on a [Home Assistant Yellow](/installation/yellow), a [Raspberry Pi](/installation/raspberrypi), or an [ODROID](/installation/odroid). + +### Create the virtual machine Load the appliance image into your virtual machine hypervisor. (Note: You are free to assign as much resources as you wish to the VM, please assign enough based on your add-on needs). @@ -243,19 +233,19 @@ _All these can be extended if your usage calls for more resources._ - title: VirtualBox content: | - 1. Create a new virtual machine - 2. Select Type "Linux" and Version "Linux 2.6 / 3.x / 4.x (64-bit)" - 3. Select "Use an existing virtual hard disk file", select the unzipped VDI file from above - 4. Edit the "Settings" of the VM and go "System" then "Motherboard" and select "Enable EFI" - 5. Then go to "Network" "Adapter 1" choose "Bridged Adapter" and choose your Network adapter + 1. Create a new virtual machine. + 1. Select type **Linux** and version **Linux 2.6 / 3.x / 4.x (64-bit)**. + 1. Select **Use an existing virtual hard disk file**, select the unzipped VDI file from above. + 1. Edit the **Settings** of the VM and go to **System** > **Motherboard**. Select **Enable EFI**. + 1. Then go to **Network** > **Adapter 1**. Choose **Bridged Adapter** and choose your network adapter.
    Please keep in mind that the bridged adapter only functions over a hardwired Ethernet connection. Using Wi-Fi on your VirtualBox host is unsupported.
    - 6. Then go to "Audio" and choose "Intel HD Audio" as Audio Controller. + 6. Then go to **Audio** and choose **Intel HD Audio** as audio controller.
    - By default VirtualBox does not free up unused disk space. To automatically shrink the vdi disk image + By default, VirtualBox does not free up unused disk space. To automatically shrink the vdi disk image the `discard` option must be enabled: ```bash VBoxManage storageattach --storagectl "SATA" --port 0 --device 0 --nonrotational on --discard on @@ -265,16 +255,16 @@ _All these can be extended if your usage calls for more resources._ - title: KVM (virt-manager) content: | - 1. Create a new virtual machine in `virt-manager` - 2. Select "Import existing disk image", provide the path to the QCOW2 image above - 3. Choose "Generic Default" for the operating system - 4. Check the box for "Customize configuration before install" - 5. Select your bridge under "Network Selection" - 6. Under customization select "Overview" -> "Firmware" -> "UEFI x86_64: ...". Make sure to select a non-secureboot version of OVMF (does not contain the word `secure`, `secboot`, etc.), e.g., `/usr/share/edk2/ovmf/OVMF_CODE.fd`. - 7. Click "Add Hardware" (bottom left), and select "Channel" - 8. Select device type: "unix" - 9. Select name: "org.qemu.guest_agent.0" - 10. Finally select "Begin Installation" (upper left corner) + 1. Create a new virtual machine in `virt-manager`. + 1 Select **Import existing disk image**, provide the path to the QCOW2 image above. + 1. Choose **Generic Default** for the operating system. + 1. Check the box for **Customize configuration before install**. + 1. Under **Network Selection**, select your bridge. + 6. Under customization select **Overview** > **Firmware** > **UEFI x86_64: ...**. Make sure to select a non-secureboot version of OVMF (does not contain the word `secure`, `secboot`, etc.), e.g., `/usr/share/edk2/ovmf/OVMF_CODE.fd`. + 1. Click **Add Hardware** (bottom left), and select **Channel**. + 1. Select device type: **unix**. + 1. Select name: **org.qemu.guest_agent.0**. + 1. Finally, select **Begin Installation** (upper left corner). - title: KVM (virt-install) content: | @@ -309,13 +299,13 @@ _All these can be extended if your usage calls for more resources._ - title: Vmware Workstation content: | - 1. Create a new virtual machine - 2. Select “Custom”, make it compatible with the default of Workstation and ESX - 3. Choose “I will install the operating system later”, select “Linux” -> “Other Linux 5.x or later kernel 64-bit” - 4. Select “Use Bridged Networking” - 5. Select “Use an existing virtual disk” and select the VMDK file above, + 1. Create a new virtual machine. + 1. Select **Custom**, make it compatible with the default of Workstation and ESX. + 1. Choose **I will install the operating system later**, select **Linux** > **Other Linux 5.x or later kernel 64-bit**. + 1. Select **Use Bridged Networking**. + 1. Select **Use an existing virtual disk** and select the VMDK file above. - After creation of VM go to “Settings” and “Options” then “Advanced” and select “Firmware type” to “UEFI”. + After the VM has been created, go to **Settings** > **Options** > **Advanced**. Under **Firmware type** select **UEFI**. {% elsif page.installation_type == 'alternative' %} @@ -330,25 +320,25 @@ _All these can be extended if your usage calls for more resources._ Hyper-V does not have USB support
    - 1. Create a new virtual machine - 2. Select “Generation 2” - 3. Select “Connection -> “Your Virtual Switch that is bridged” - 4. Select “Use an existing virtual hard disk” and select the VHDX file from above + 1. Create a new virtual machine. + 1. Select **Generation 2**. + 1. Select **Connection** > **Your Virtual Switch that is bridged**. + 1. Select **Use an existing virtual hard disk** and select the VHDX file from above. - After creation go to “Settings” -> “Security” and deselect “Enable Secure Boot”. + After creation, go to **Settings** > **Security** and deselect **Enable Secure Boot**. {% endif %} {% endtabbed_block %} -### Start up your Virtual Machine +### Start up your virtual machine -1. Start the Virtual Machine -2. Observe the boot process of Home Assistant Operating System -3. Once completed you will be able to reach Home Assistant on homeassistant.local:8123. If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at homeassistant:8123 or `http://X.X.X.X:8123` (replace X.X.X.X with your {{site.installation.types[page.installation_type].board}}’s IP address). +1. Start the virtual machine. +1. Observe the boot process of the Home Assistant Operating System. +1. Once completed, you will be able to reach Home Assistant on homeassistant.local:8123. If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at homeassistant:8123 or `http://X.X.X.X:8123` (replace X.X.X.X with your {{site.installation.types[page.installation_type].board}}’s IP address). {% endif %} -With the Home Assistant Operating System installed and accessible you can continue with onboarding. +With the Home Assistant Operating System installed and accessible, you can continue with onboarding. {% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %} diff --git a/source/_includes/integrations/config_flow.md b/source/_includes/integrations/config_flow.md index 4eefb28af57..f37ac7d0da6 100644 --- a/source/_includes/integrations/config_flow.md +++ b/source/_includes/integrations/config_flow.md @@ -10,8 +10,7 @@ interface, by using this My button: {% if include.discovery or page.ha_dhcp or page.ha_homekit or page.ha_ssdp or page.ha_zeroconf or page.ha_mqtt %} {{ name }} can be auto-discovered by Home Assistant. If an instance was found, -it will be shown as _"Discovered"_, which you can select to set it up right -away. +it will be shown as **Discovered**. You can then set it up right away. {% endif %} {% details "Manual configuration steps" %} @@ -24,17 +23,17 @@ manually: {% endif %} - Browse to your Home Assistant instance. -- In the sidebar click on _**{% my config icon %}**_. -- From the configuration menu select: _**{% my integrations %}**_. +- In the sidebar, select **{% my config icon %}**. +- From the configuration menu, select **{% my integrations %}**. {% if page.ha_integration_type == 'helper' %} -- In top of the screen click the tab: _**{% my helpers %}**_. -- In the bottom right, click on the - _**{% my config_flow_start icon domain=domain title="Create helper" %}**_ button. +- In top of the screen, select the tab: **{% my helpers %}**. +- In the bottom right, select the + **{% my config_flow_start icon domain=domain title="Create helper" %}** button. {% else %} -- In the bottom right, click on the - _**{% my config_flow_start icon domain=domain %}**_ button. +- In the bottom right, select the + **{% my config_flow_start icon domain=domain %}** button. {% endif %} -- From the list, search and select _**"{{ name }}"**_. -- Follow the instruction on screen to complete the set up. +- From the list, search and select **{{ name }}**. +- Follow the instructions on screen to complete the setup. {% enddetails %} diff --git a/source/_includes/site/sidebar.html b/source/_includes/site/sidebar.html index 88c24aad097..4919d7a7bde 100644 --- a/source/_includes/site/sidebar.html +++ b/source/_includes/site/sidebar.html @@ -15,6 +15,8 @@ {% include asides/getting_started_navigation.html %} {% elsif root == 'docs' %} {% include asides/docs_navigation.html %} + {% elsif root == 'projects' %} + {% include asides/docs_navigation.html %} {% elsif root == 'faq' %} {% include asides/faq_navigation.html %} {% elsif root == 'hassio' or root == 'addons' %} diff --git a/source/_integrations/ads.markdown b/source/_integrations/ads.markdown index 88788fea2d2..3fe52996f48 100644 --- a/source/_integrations/ads.markdown +++ b/source/_integrations/ads.markdown @@ -20,7 +20,7 @@ ha_platforms: ha_integration_type: integration --- -The ADS (automation device specification) describes a device-independent and fieldbus independent interface for communication between [Beckhoff](https://www.beckhoff.com/) automation devices running [TwinCAT](https://www.beckhoff.hu/english.asp?twincat/default.htm) and other devices implementing this interface. +The ADS (automation device specification) describes a device-independent and fieldbus independent interface for communication between [Beckhoff](https://www.beckhoff.com/) automation devices running [TwinCAT](https://www.beckhoff.com/en-en/products/automation/twincat/) and other devices implementing this interface. There is currently support for the following device types within Home Assistant: diff --git a/source/_integrations/advantage_air.markdown b/source/_integrations/advantage_air.markdown index 28750ee90c0..d05c6e9a52b 100644 --- a/source/_integrations/advantage_air.markdown +++ b/source/_integrations/advantage_air.markdown @@ -36,11 +36,19 @@ The wall-mounted Android tablet running the [MyPlace](https://play.google.com/st ### Climate -The integration will create a climate entity for each air conditioning system found and for each zone that is temperature-controlled. +The integration will create a climate entity for each air conditioning system found and for each zone that is temperature-controlled. The main climate entity will change its supported features and modes based on the [MyComfort](https://www.advantageair.com.au/wp-content/uploads/2019/10/MyComfort.pdf) temperature mode currently set. + +- MyZone (default) - Use the MyZone select platform to pick which zone will be used for temperature control. Setting this to "Inactive" will use the return air vent temperature. e-zone systems do not support any MyComfort temperature modes, so will always be in the MyZone preset with MyZone set as "Inactive". +- MyTemp - Use the main climate entity to change between cool, heat, and off. Use the zone climate entities to set the desired temperature in each zone. +- MyAuto - Uses the average temperature of all zones for temperature control. When set to the Heat/Cool mode, you can adjust the heating and cooling target temperatures separately, and the MyAir system will automatically switch between heating and cooling as required. + +If you change MyComfort mode, you will need to restart Home Assistant or reload the integration. ### Cover -The integration will create a cover entity for each zone that is not temperature controlled, allowing you to adjust the opening level manually from 0% to 100% in 5% increments. +The integration will create a cover entity for each air conditioning zone that is not temperature controlled, allowing you to adjust the opening level manually from 0% to 100% in 5% increments. + +With MyPlace, any blinds and/or garage doors will be created as cover entities. ### Sensor @@ -53,23 +61,25 @@ The integration will create sensor entities for a variety of aspects: ### Binary Sensor -The `advantage_air` binary sensor platform will create a binary sensor for each zone that has a motion sensor. +The integration will create a binary sensor for each zone that has a motion sensor. ### Switch -The `advantage_air` switch platform will create a switch entity to toggle fresh air mode, if it is supported. +The integration will create a switch entity to toggle air conditioning fresh air mode, if it is supported. + +With MyPlace, any relays will be created as switch entities. ### Select -The `advantage_air` select platform allows you to change the zone used for the "MyZone" feature. +The MyZone select entity that allows you to change the zone used for the "MyZone" feature. Set this to "Inactive" to use the return air vent temperature. ### Update -The `advantage_air` update platform shows if the controller app requires an update. +The update platform shows if the controller app requires an update. ### Light -The `advantage_air` light platform will create a light entity for each light in MyLights tab of the MyPlace app. +With MyLights or MyPlace, light entities will be created for each light. ## Services diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown index 3c1831923fe..d76b3cccae8 100644 --- a/source/_integrations/alarm_control_panel.mqtt.markdown +++ b/source/_integrations/alarm_control_panel.mqtt.markdown @@ -98,7 +98,7 @@ code_trigger_required: command_template: description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) used for the command payload. Available variables: `action` and `code`." required: false - type: string + type: template default: action command_topic: description: The MQTT topic to publish commands to change the alarm state. diff --git a/source/_integrations/amcrest.markdown b/source/_integrations/amcrest.markdown index eb4913d7be4..457fab8a8ed 100644 --- a/source/_integrations/amcrest.markdown +++ b/source/_integrations/amcrest.markdown @@ -289,7 +289,7 @@ elements: tap_action: action: call-service service: amcrest.ptz_control - data: + service_data: entity_id: camera.lakehouse movement: up - type: icon @@ -301,7 +301,7 @@ elements: tap_action: action: call-service service: amcrest.ptz_control - data: + service_data: entity_id: camera.lakehouse movement: down - type: icon @@ -313,7 +313,7 @@ elements: tap_action: action: call-service service: amcrest.ptz_control - data: + service_data: entity_id: camera.lakehouse movement: left - type: icon @@ -325,7 +325,7 @@ elements: tap_action: action: call-service service: amcrest.ptz_control - data: + service_data: entity_id: camera.lakehouse movement: right - type: icon @@ -337,7 +337,7 @@ elements: tap_action: action: call-service service: amcrest.ptz_control - data: + service_data: entity_id: camera.lakehouse movement: left_up - type: icon @@ -349,7 +349,7 @@ elements: tap_action: action: call-service service: amcrest.ptz_control - data: + service_data: entity_id: camera.lakehouse movement: right_up - type: icon @@ -361,7 +361,7 @@ elements: tap_action: action: call-service service: amcrest.ptz_control - data: + service_data: entity_id: camera.lakehouse movement: left_down - type: icon @@ -373,7 +373,7 @@ elements: tap_action: action: call-service service: amcrest.ptz_control - data: + service_data: entity_id: camera.lakehouse movement: right_down - type: icon @@ -385,7 +385,7 @@ elements: tap_action: action: call-service service: amcrest.ptz_control - data: + service_data: entity_id: camera.lakehouse movement: zoom_in hold_action: diff --git a/source/_integrations/androidtv.markdown b/source/_integrations/androidtv.markdown index 2e79570a076..a24c394984d 100644 --- a/source/_integrations/androidtv.markdown +++ b/source/_integrations/androidtv.markdown @@ -1,6 +1,6 @@ --- -title: Android TV -description: Instructions on how to integrate Android TV and Fire TV devices into Home Assistant. +title: Android Debug Bridge +description: Instructions on how to integrate Android and Fire TV devices into Home Assistant. ha_category: - Media Player ha_release: 0.7.6 @@ -16,7 +16,7 @@ ha_platforms: ha_integration_type: device --- -The `androidtv` platform allows you to control an Android TV device or [Amazon Fire TV](https://www.amazon.com/b/?node=8521791011) device. +The Android Debug Bridge integration allows you to control an Android device or [Amazon Fire TV](https://www.amazon.com/b/?node=8521791011) device.
    @@ -26,7 +26,7 @@ When setting up this integration, it is recommended that you do NOT use an ADB s ## Device preparation -To set up your device, you will need to find its IP address and enable ADB debugging. For Android TV devices, please consult the documentation for your device. +To set up your device, you will need to find its IP address and enable ADB debugging. For Android devices, please consult the documentation for your device. For Fire TV devices, the instructions are as follows: @@ -62,11 +62,11 @@ Configure State Detection Rules: ## ADB Setup -This integration works by sending ADB commands to your Android TV / Fire TV device. There are two ways to accomplish this. +This integration works by sending ADB commands to your Android / 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. +When connecting to your device for the first time, a dialog will appear on your Android / Fire TV asking you to approve the connection. Check the box that says "always allow connections from this device" and hit OK.
    @@ -84,7 +84,7 @@ Prior to Home Assistant 0.101, this approach did not work well for newer devices ### 2. ADB Server -The second option is to use an ADB server to connect to your Android TV and Fire TV devices. +The second option is to use an ADB server to connect to your Android and Fire TV devices.
    @@ -92,21 +92,21 @@ To configure ADB server on integration setup, you need to enable [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. +Using this approach, Home Assistant will send the ADB commands to the server, which will then send them to the Android / 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 -If the setup for your Android TV or Fire TV device fails, then there is probably an issue with your ADB connection. Here are some possible causes. +If the setup for your Android or Fire TV device fails, then there is probably an issue with your ADB connection. Here are some possible causes. 1. You have the wrong IP address for the device. 2. ADB is not enabled on your device. -3. You are already connected to the Android TV / Fire TV via ADB from another device. Only one device can be connected, so disconnect the other device, restart the Android TV / Fire TV (for good measure), and then restart Home Assistant. +3. You are already connected to the Android / Fire TV via ADB from another device. Only one device can be connected, so disconnect the other device, restart the Android / Fire TV (for good measure), and then restart Home Assistant. 4. You need to approve the ADB connection; see the note in the [ADB Setup](#adb-setup) section above. -5. Some Android TV devices (e.g., Philips TVs running Android TV) only accept the initial ADB connection request over their Wi-Fi interface. If you have the TV wired, you need to connect it to Wi-Fi and try the initial connection again. Once the authentication has been granted via Wi-Fi, you can connect to the TV over the wired interface as well. +5. Some Android devices (e.g., Philips TVs running Android TV) only accept the initial ADB connection request over their Wi-Fi interface. If you have the TV wired, you need to connect it to Wi-Fi and try the initial connection again. Once the authentication has been granted via Wi-Fi, you can connect to the TV over the wired interface as well. 6. If your device drops off WiFi, breaking the ADB connection and causing the entity to become unavailable in Home Assistant, you could install a wake lock utility (such as [Wakelock](https://github.com/d4rken/wakelock-revamp)) to prevent this from happening. Some users have reported this problem with Xiaomi Mi Box devices. @@ -138,11 +138,11 @@ stop_netflix: ### `androidtv.adb_command` -The service `androidtv.adb_command` allows you to send either keys or ADB shell commands to your Android TV / Fire TV device. If there is any output, it will be stored in the `'adb_response'` attribute (i.e., `state_attr('media_player.android_tv_living_room', 'adb_response')` in a template) and logged at the INFO level. +The service `androidtv.adb_command` allows you to send either keys or ADB shell commands to your Android / Fire TV device. If there is any output, it will be stored in the `'adb_response'` attribute (i.e., `state_attr('media_player.android_tv_living_room', 'adb_response')` in a template) and logged at the INFO level. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of Android TV / Fire TV entities. +| `entity_id` | no | Name(s) of Android / Fire TV entities. | `command` | no | Either a key command or an ADB shell command. In an [action](/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this: @@ -177,14 +177,14 @@ A list of various intents can be found [here](https://gist.github.com/mcfrojd/9e ### `androidtv.learn_sendevent` (for faster ADB commands) -When sending commands like UP, DOWN, HOME, etc. via ADB, the device can be slow to respond. The problem isn't ADB, but rather the Android command `input` that is used to perform those actions. A faster way to send these commands is using the Android `sendevent` command. The challenge is that these commands are device-specific. To assist users in learning commands for their device, the Android TV integration provides the `androidtv.learn_sendevent` service. Its usage is as follows: +When sending commands like UP, DOWN, HOME, etc. via ADB, the device can be slow to respond. The problem isn't ADB, but rather the Android command `input` that is used to perform those actions. A faster way to send these commands is using the Android `sendevent` command. The challenge is that these commands are device-specific. To assist users in learning commands for their device, the Android debug bridge integration provides the `androidtv.learn_sendevent` service. Its usage is as follows: | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of Android TV / Fire TV entities. +| `entity_id` | no | Name(s) of Android / Fire TV entities. 1. Call the `androidtv.learn_sendevent` service. -2. Within 8 seconds, hit a single button on your Android TV / Fire TV remote. +2. Within 8 seconds, hit a single button on your Android / Fire TV remote. 3. After 8 seconds, a persistent notification will appear that contains the equivalent command that can be sent via the `androidtv.adb_command` service. This command can also be found in the `adb_response` attribute of the media player in Home Assistant, and it will be logged at the INFO level. As an example, a service call in a [script](/docs/scripts) could be changed from this: @@ -211,25 +211,25 @@ to this: ### `androidtv.download` and `androidtv.upload` -You can use the `androidtv.download` service to download a file from your Android TV / Fire TV device to your Home Assistant instance. +You can use the `androidtv.download` service to download a file from your Android / Fire TV device to your Home Assistant instance. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | no | Name of Android TV / Fire TV entity. -| `device_path` | no | The filepath on the Android TV / Fire TV device. +| `entity_id` | no | Name of Android / Fire TV entity. +| `device_path` | no | The filepath on the Android / Fire TV device. | `local_path` | no | The filepath on your Home Assistant instance. -Similarly, you can use the `androidtv.upload` service to upload a file from Home Assistant instance to Android TV / Fire TV devices. +Similarly, you can use the `androidtv.upload` service to upload a file from Home Assistant instance to Android / Fire TV devices. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of Android TV / Fire TV entities. -| `device_path` | no | The filepath on the Android TV / Fire TV device. +| `entity_id` | no | Name(s) of Android / Fire TV entities. +| `device_path` | no | The filepath on the Android / Fire TV device. | `local_path` | no | The filepath on your Home Assistant instance. ## Custom State Detection -The Android TV integration works by polling the Android TV / Fire TV device at a regular interval and collecting a handful of properties. Unfortunately, there is no standard API for determining the state of the device to which all apps adhere. Instead, the backend `androidtv` package uses three of the properties that it collects to determine the state: `audio_state`, `media_session_state`, and `wake_lock_size`. The correct logic for determining the state differs depending on the current app, and the backend `androidtv` package implements app-specific state detection logic for a handful of apps. Of course, it is not feasible to implement custom logic for each and every app in the `androidtv` package. Moreover, the correct state detection logic may differ across devices and device configurations. +The Android Debug Bridge integration works by polling the Android / Fire TV device at a regular interval and collecting a handful of properties. Unfortunately, there is no standard API for determining the state of the device to which all apps adhere. Instead, the backend `androidtv` package uses three of the properties that it collects to determine the state: `audio_state`, `media_session_state`, and `wake_lock_size`. The correct logic for determining the state differs depending on the current app, and the backend `androidtv` package implements app-specific state detection logic for a handful of apps. Of course, it is not feasible to implement custom logic for each and every app in the `androidtv` package. Moreover, the correct state detection logic may differ across devices and device configurations. The solution to this problem is the `state_detection_rules` configuration parameter, which allows you to provide your own rules for state detection. The keys are app IDs, and the values are lists of rules that are evaluated in order. Valid rules are: diff --git a/source/_integrations/androidtv_remote.markdown b/source/_integrations/androidtv_remote.markdown new file mode 100644 index 00000000000..259b6c5b35b --- /dev/null +++ b/source/_integrations/androidtv_remote.markdown @@ -0,0 +1,361 @@ +--- +title: Android TV Remote +description: Instructions on how to integrate Android TV remotes into Home Assistant. +ha_category: + - Remote +ha_release: 2023.5 +ha_iot_class: Local Push +ha_config_flow: true +ha_codeowners: + - '@tronikos' +ha_quality_scale: platinum +ha_domain: androidtv_remote +ha_zeroconf: true +ha_platforms: + - diagnostics + - remote +ha_integration_type: device +--- + +The Android TV Remote integration allows you to control an Android TV device by sending [commands](https://github.com/tronikos/androidtvremote2/blob/main/TvKeys.txt) and launching apps. For this to work, the Android TV device needs to have [Android TV Remote Service](https://play.google.com/store/apps/details?id=com.google.android.tv.remote.service) which is pre-installed on most devices. + +For a quick introduction on how to get started with Android TV Remote, check out this video: + + + +{% include integrations/config_flow.md %} + +## Entity + +This integration adds a `remote` entity which turns on/off the Android TV device. +The entity has the `current_activity` attribute that shows the current foreground app on the Android TV. + +## Services + +You can use the `remote.turn_off`, `remote.turn_on`, `remote.toggle`, and `remote.send_command` services from the [remote](/integrations/remote/) platform. + +For a list of the most common commands that you can send to the Android TV via `remote.send_command`, see: [TvKeys](https://github.com/tronikos/androidtvremote2/blob/main/TvKeys.txt). +For a full list, see [here](https://github.com/tronikos/androidtvremote2/blob/main/src/androidtvremote2/remotemessage.proto#L90). + +If `activity` is specified in `remote.turn_on`, it will open the specified URL in the associated app. + +Examples of URLs to pass as activity for some popular apps: + +| App | URL | +| --- | --- | +| YouTube | https://www.youtube.com +| Netflix | https://www.netflix.com/title +| Prime Video | https://app.primevideo.com +| Disney+ | https://www.disneyplus.com + +Examples of service calls: + +```yaml +# Open the currently selected item on the Android TV +service: remote.send_command +data: + command: DPAD_CENTER +target: + entity_id: remote.living_room_tv +``` + +```yaml +# Long press on the currently selected item on the Android TV +service: remote.send_command +data: + command: DPAD_CENTER + hold_secs: 0.5 +target: + entity_id: remote.living_room_tv +``` + +```yaml +# Launch YouTube +service: remote.turn_on +data: + activity: https://www.youtube.com +target: + entity_id: remote.living_room_tv +``` + +```yaml +# Open a specific YouTube video: +service: remote.turn_on +data: + activity: https://www.youtube.com/watch?v=dQw4w9WgXcQ +target: + entity_id: remote.living_room_tv +``` + +## Dashboard example + +You have to manually create buttons in Lovelace to send commands to the Android TV device or launch apps on it. + +Below is an example for you to start with. Many of the buttons support long press. + +![Screenshot Android TV Remote example](/images/integrations/androidtv_remote/lovelace_example.png) + +{% details "Lovelace example" %} + +Replace all instances of `living_room_tv` with your entity ID. + +```yaml +type: vertical-stack +cards: + - type: entities + entities: + - entity: remote.living_room_tv + - square: true + columns: 3 + type: grid + cards: + - type: button + show_icon: false + tap_action: + action: none + hold_action: + action: none + - type: button + icon: mdi:arrow-up-bold + tap_action: + action: call-service + service: remote.send_command + data: + command: DPAD_UP + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + show_icon: false + tap_action: + action: none + hold_action: + action: none + - type: button + icon: mdi:arrow-left-bold + tap_action: + action: call-service + service: remote.send_command + data: + command: DPAD_LEFT + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:circle + tap_action: + action: call-service + service: remote.send_command + data: + command: DPAD_CENTER + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: DPAD_CENTER + hold_secs: 0.5 + target: + entity_id: remote.living_room_tv + - type: button + icon: mdi:arrow-right-bold + tap_action: + action: call-service + service: remote.send_command + data: + command: DPAD_RIGHT + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:arrow-left + tap_action: + action: call-service + service: remote.send_command + data: + command: BACK + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: BACK + hold_secs: 0.5 + target: + entity_id: remote.living_room_tv + - type: button + icon: mdi:arrow-down-bold + tap_action: + action: call-service + service: remote.send_command + data: + command: DPAD_DOWN + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:home-outline + tap_action: + action: call-service + service: remote.send_command + data: + command: HOME + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: HOME + hold_secs: 0.5 + target: + entity_id: remote.living_room_tv + - square: false + columns: 3 + type: grid + cards: + - type: button + icon: mdi:skip-previous + tap_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_PREVIOUS + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_REWIND + target: + entity_id: remote.living_room_tv + - type: button + icon: mdi:play-pause + tap_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_PLAY_PAUSE + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_STOP + target: + entity_id: remote.living_room_tv + - type: button + icon: mdi:skip-next + tap_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_NEXT + target: + entity_id: remote.living_room_tv + hold_action: + action: call-service + service: remote.send_command + data: + command: MEDIA_FAST_FORWARD + target: + entity_id: remote.living_room_tv + - type: button + icon: mdi:volume-off + tap_action: + action: call-service + service: remote.send_command + data: + command: MUTE + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:volume-medium + tap_action: + action: call-service + service: remote.send_command + data: + command: VOLUME_DOWN + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:volume-high + tap_action: + action: call-service + service: remote.send_command + data: + command: VOLUME_UP + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - square: false + columns: 4 + type: grid + cards: + - type: button + icon: mdi:youtube + tap_action: + action: call-service + service: remote.turn_on + data: + activity: https://www.youtube.com + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: button + icon: mdi:netflix + tap_action: + action: call-service + service: remote.turn_on + data: + activity: https://www.netflix.com/title + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: picture + image: >- + https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Amazon_Prime_Video_logo.svg/450px-Amazon_Prime_Video_logo.svg.png + tap_action: + action: call-service + service: remote.turn_on + data: + activity: https://app.primevideo.com + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: picture + image: >- + https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Disney%2B_logo.svg/440px-Disney%2B_logo.svg.png + tap_action: + action: call-service + service: remote.turn_on + data: + activity: https://www.disneyplus.com + target: + entity_id: remote.living_room_tv + hold_action: + action: none + - type: entity + entity: remote.living_room_tv + attribute: current_activity + - type: media-control + entity: media_player.living_room_tv +``` + +{% enddetails %} diff --git a/source/_integrations/anova.markdown b/source/_integrations/anova.markdown new file mode 100644 index 00000000000..bd0e72d8425 --- /dev/null +++ b/source/_integrations/anova.markdown @@ -0,0 +1,40 @@ +--- +title: Anova +description: Instructions on how to integrate Anova Wi-Fi Sous Vide into home assistant. +ha_category: + - Sensor +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_release: 2023.5 +ha_codeowners: + - '@Lash-L' +ha_domain: anova +ha_integration_type: integration +ha_platforms: + - sensor +--- + +The Anova sensor platform allows you to control [Anova](https://anovaculinary.com/pages/find-your-anova-precision-cooker) sous vides with Wi-Fi capability. + +Supported devices (tested): +- AN500-10 (Anova Precision Cooker) +- AN500-US00 (Anova Precision Cooker) +- AN600-10 (Anova Precision Cooker Pro) + + +The 'nano' versions of the sous vide are not supported, but as long as your app is connected to the sous vide, the data should update. They would be better served using BLE instead of API calls. + +To add this platform to your installation, You will need your Anova username and password, and you need to have at least one sous vide connected to your account. + +{% include integrations/config_flow.md %} + +## Sensor + +- Cook Time - How long the sous vide has been cooking in seconds +- Mode - The current mode of the sous vide ("Idle", "Cook", "Low water"). +- State - The current state of the sous vide ("Preheating", "Cooking", "Maintaining"). +- Target Temperature - The temperature the sous vide is set to heat to. +- Cook Time Remaining - How long is left in the cook in seconds. +- Heater Temperature - The current temperature of the heater. +- Triac Temperature - The current temperature of the triac. +- Water Temperature - The current temperature of the water. diff --git a/source/_integrations/arcam_fmj.markdown b/source/_integrations/arcam_fmj.markdown index 2ef55077dd7..f3f9d70dcc0 100644 --- a/source/_integrations/arcam_fmj.markdown +++ b/source/_integrations/arcam_fmj.markdown @@ -15,7 +15,7 @@ ha_platforms: ha_integration_type: integration --- -The `arcam_fmj` integration allows you to control [Arcam FMJ Receivers](https://www.arcam.co.uk/range/fmj.htm) from Home Assistant. +The `arcam_fmj` integration allows you to control [Arcam Receivers and Processors](https://www.arcam.co.uk/range/fmj.htm) from Home Assistant. Supported devices: @@ -41,11 +41,19 @@ Supported devices: - SA 30 - SR 250 +This integration may also work with [JBL](https://www.jblsynthesis.com/products/electronics/) and [AudioControl](https://www.audiocontrol.com/home-audio/) receivers and processors as they share the same firmware as Arcam. + +- SDP-55/58 + {% include integrations/config_flow.md %} ## Power state -Arcam FMJ receivers turn off their network port when in standby, the component will try to reconnect to the receiver every 5 seconds. This means powering on the first zone is not possible over the built-in network connection. Two options for complete power control exists: IR or Serial gateway. +Arcam receivers turn off their network port when in standby, the component will try to reconnect to the receiver every 5 seconds. This means powering on the first zone is not possible over the built-in network connection. + +Note: Some newer models offer the ability to configure the device to keep the network port active when in standby mode. This can be found under **HDMI Settings** > **HDMI Bypass & IP**. Enabling **HDMI & IP On** will allow full power control from Home Assistant. + +Two other options for complete power control exists: IR or Serial gateway. ### IR command diff --git a/source/_integrations/assist_pipeline.markdown b/source/_integrations/assist_pipeline.markdown new file mode 100644 index 00000000000..080fda04907 --- /dev/null +++ b/source/_integrations/assist_pipeline.markdown @@ -0,0 +1,28 @@ +--- +title: Assist pipeline +description: Assist pipeline integration. +ha_category: + - Voice +ha_iot_class: Local Push +ha_release: '2023.5' +ha_codeowners: + - '@balloob' + - '@synesthesiam' +ha_domain: assist_pipeline +ha_integration_type: integration +ha_quality_scale: internal +ha_platforms: + - select +--- + +The Assist pipeline integration provides the foundation for the [Assist](/docs/assist/) voice assistant in Home Assistant. + +For most users, there is no need to install this integration manually. The Assist pipeline integration is part of the default configuration and is set up automatically if needed by other integrations. +If you are not using the default integration, you need to add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +assist_pipeline: +``` + +For more information, refer to the procedure on [configuring a pipeline](/docs/assist/voice_remote_local_assistant/). diff --git a/source/_integrations/binary_sensor.markdown b/source/_integrations/binary_sensor.markdown index 6ff50c7b6ef..493d7f2777e 100644 --- a/source/_integrations/binary_sensor.markdown +++ b/source/_integrations/binary_sensor.markdown @@ -36,12 +36,10 @@ state over the other. This is set by the binary sensor's device class. Here are a few examples of this representation in the UI: -

    - +![List of binary sensors](/images/screenshots/binary_sensor_classes_icons.png) Example of various device classes icons in `on` and `off` state. The on image in this example has `state_color: true` specified in the Entities card configuration to receive the icon coloring. -

    The full list of supported binary sensor device classes is below *(note: these may also be modified in the [customizing section](/docs/configuration/customizing-devices)).* diff --git a/source/_integrations/binary_sensor.mqtt.markdown b/source/_integrations/binary_sensor.mqtt.markdown index e4a13a4cea5..e7a4757ea19 100644 --- a/source/_integrations/binary_sensor.mqtt.markdown +++ b/source/_integrations/binary_sensor.mqtt.markdown @@ -114,7 +114,8 @@ device: required: false type: string device_class: - description: Sets the [class of the device](/integrations/binary_sensor/#device-class), changing the device state and icon that is displayed on the frontend. + description: Sets the [class of the device](/integrations/binary_sensor/#device-class), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`. + default: None required: false type: string enabled_by_default: @@ -202,7 +203,7 @@ unique_id: value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a string to be compared to `payload_on`/`payload_off` or an empty string, in which case the MQTT message will be removed. Remove this option when `payload_on` and `payload_off` are sufficient to match your payloads (i.e no pre-processing of original message is required)." required: false - type: string + type: template {% endconfiguration %} ## Examples diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown index 4084721f11e..d90d65d119f 100644 --- a/source/_integrations/bluetooth.markdown +++ b/source/_integrations/bluetooth.markdown @@ -86,6 +86,7 @@ If you experience an unreliable Bluetooth connection, installing a short USB ext - DIGITUS DN-30210-1 (CSR8510A10) - Enbiawit BT403 (CSR8510A10) - Feasycom FSC-BP119 (CSR8510A10) 📶 +- Gold Touch E-USB-BT4 (CSR8510A10) - HIDEEZ BT0015-01 (CSR8510A10) - Maxesla CSR 4.0 (CSR8510A10) - Nuu You BT40 (CSR8510A10) diff --git a/source/_integrations/bmw_connected_drive.markdown b/source/_integrations/bmw_connected_drive.markdown index 200d5ef6d5c..a79cf8cf53e 100644 --- a/source/_integrations/bmw_connected_drive.markdown +++ b/source/_integrations/bmw_connected_drive.markdown @@ -7,7 +7,9 @@ ha_category: - Car - Lock - Notifications + - Number - Presence Detection + - Select - Sensor ha_release: 0.64 ha_iot_class: Cloud Polling @@ -23,6 +25,8 @@ ha_platforms: - diagnostics - lock - notify + - number + - select - sensor ha_integration_type: integration --- @@ -45,6 +49,8 @@ This integration provides the following platforms: - Sensors: Mileage, remaining range, remaining fuel, charging time remaining (electric cars), charging status (electric cars), remaining range electric (electric cars). - [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. +- [Selects](/integrations/bmw_connected_drive/#selects): Display and control charging related settings for (PH)EVs. +- [Numbers](/integrations/bmw_connected_drive/#numbers): Display and control numeric charging related settings for (PH)EVs. ## Configuration @@ -134,6 +140,23 @@ The `button._find_vehicle` button requests the vehicle to update t The `button._refresh_from_cloud` 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. +## Selects + +If you have a (PH)EV, you can control the charging process through Home Assistant. The selects are created automatically depending on your vehicle's capabilities and can be pressed/executed from the UI or using the `select.select_option` service. For more information, please see the [select documentation](/integrations/select/). + +Using these selects will impact the state of your vehicle. Use them with care! + +- **Charging Mode**: Vehicle can be set to `IMMEDIATE_CHARGING` (charge as soon as plugged in) or `DELAYED_CHARGING` (charge only if within charging window). It can be used to start/stop charging if the charging window is set accordingly. +- **AC Charging Limit**: The maximum current a vehicle will charge with. Not available on all EVs. + +## Numbers + +If you have a (PH)EV, you can control the charging process through Home Assistant. The number entities are created automatically depending on your vehicle's capabilities and can be changed from the UI or using the `number.set_value` service. For more information, please see the [number documentation](/integrations/number/). + +Using these selects will impact the state of your vehicle, use them with care! + +- **Target SoC**: Vehicle will charge until this battery level is reached. Not available on all EVs. + ## Disclaimer This software is not affiliated with or endorsed by BMW Group. diff --git a/source/_integrations/brottsplatskartan.markdown b/source/_integrations/brottsplatskartan.markdown index 23bc564cd7f..9dff345cbf1 100644 --- a/source/_integrations/brottsplatskartan.markdown +++ b/source/_integrations/brottsplatskartan.markdown @@ -2,9 +2,13 @@ title: Brottsplatskartan description: Instructions on how to integrate brottsplatskartan.se into Home Assistant. ha_category: + - Sensor - Social ha_release: 0.85 ha_iot_class: Cloud Polling +ha_config_flow: true +ha_codeowners: + - '@gjohansson-ST' ha_domain: brottsplatskartan ha_platforms: - sensor @@ -13,36 +17,7 @@ ha_integration_type: integration The `brottsplatskartan` sensor allows one to track reported incidents occurring in a given area. Incidents include anything reported to [Brottsplatskartan](https://brottsplatskartan.se). The sensor only counts incidents from the current day. -## Configuration - -To enable this sensor, add the following lines to your `configuration.yaml`. - -```yaml -sensor: - - platform: brottsplatskartan -``` - -{% configuration %} -name: - description: Custom name for the sensor. - required: false - type: string - default: Brottsplatskartan -area: - description: Area for sensor to monitor - required: false - type: string -latitude: - description: Latitude for sensor. - required: false - type: float - default: Your home zone latitude defined in your configuration. -longitude: - description: Longitude for sensor. - required: false - type: float - default: Your home zone longitude defined in your configuration. -{% endconfiguration %} +{% include integrations/config_flow.md %} ## Notes diff --git a/source/_integrations/button.mqtt.markdown b/source/_integrations/button.mqtt.markdown index f4dbf214ff3..ef9d737cc68 100644 --- a/source/_integrations/button.mqtt.markdown +++ b/source/_integrations/button.mqtt.markdown @@ -112,8 +112,9 @@ device: required: false type: string device_class: - description: The [type/class](/integrations/button/#device-class) of the button to set the icon in the frontend. + description: The [type/class](/integrations/button/#device-class) of the button to set the icon in the frontend. The `device_class` can be `null`. required: false + default: None type: device_class default: None enabled_by_default: diff --git a/source/_integrations/calendar.markdown b/source/_integrations/calendar.markdown index 6bbbbdbead9..ff4d272f3a5 100644 --- a/source/_integrations/calendar.markdown +++ b/source/_integrations/calendar.markdown @@ -180,3 +180,17 @@ data: start_date: "2022-10-01" end_date: "2022-10-02" ``` + +Home Assistant Calendars do not allow zero duration Calendar events. The following would create a one minute long event starting "now". This could be used to record an external event in a Calendar. + +{% raw %} +```yaml +service: calendar.create_event +target: + entity_id: calendar.device_automation_schedules +data: + summary: "Example" + start_date_time: "{{ now() }}" + end_date_time: "{{ now() + timedelta(minutes=1) }}" +``` +{% endraw %} diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown index d8596ffd62a..4039b5e0688 100644 --- a/source/_integrations/climate.mqtt.markdown +++ b/source/_integrations/climate.mqtt.markdown @@ -290,7 +290,7 @@ preset_mode_state_topic: preset_mode_value_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`. required: false - type: string + type: template preset_modes: description: List of preset modes this climate is supporting. Common examples include `eco`, `away`, `boost`, `comfort`, `home`, `sleep` and `activity`. required: false @@ -342,7 +342,7 @@ target_humidity_state_topic: target_humidity_state_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the climate `target_humidity` state. required: false - type: string + type: template temperature_command_template: description: A template to render the value sent to the `temperature_command_topic` with. required: false diff --git a/source/_integrations/command_line.markdown b/source/_integrations/command_line.markdown index 842f8584bc0..b740e2e1160 100644 --- a/source/_integrations/command_line.markdown +++ b/source/_integrations/command_line.markdown @@ -1,8 +1,11 @@ --- title: Command Line -description: Instructions on how to integrate Command binary sensors within Home Assistant. +description: Instructions on how to integrate the Command Line utility within Home Assistant. ha_category: - Binary Sensor + - Cover + - Notifications + - Sensor - Utility ha_release: 0.12 ha_iot_class: Local Polling @@ -16,9 +19,9 @@ ha_platforms: ha_integration_type: integration --- -The `command_line` binary sensor platform issues specific commands to get data. +The `command_line` offers functionality that issues specific commands to get data or to control a device. -## Configuration +## Binary sensor To use your Command binary sensor in your installation, add the following to your `configuration.yaml` file: @@ -40,45 +43,282 @@ command: description: The action to take to get the value. required: true type: string -name: - description: Let you overwrite the name of the device. - required: false - type: string - default: "*name* from the device" -device_class: - description: Sets the [class of the device](/integrations/binary_sensor/), changing the device state and icon that is displayed on the frontend. - required: false - type: string -payload_on: - description: The payload that represents enabled state. - required: false - type: string - default: 'ON' -payload_off: - description: The payload that represents disabled state. - required: false - type: string - default: 'OFF' -value_template: - description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. - required: false - type: string -scan_interval: - description: Defines number of seconds for polling interval. - required: false - type: integer - default: 60 command_timeout: description: Defines number of seconds for command timeout. required: false type: integer default: 15 +device_class: + description: Sets the [class of the device](/integrations/binary_sensor/), changing the device state and icon that is displayed on the frontend. + required: false + type: string +name: + description: Let you overwrite the name of the device. + required: false + type: string + default: "*name* from the device" +payload_on: + description: The payload that represents enabled state. + required: false + type: string + default: 'ON' 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 +payload_off: + description: The payload that represents disabled state. + required: false + type: string + default: 'OFF' +scan_interval: + description: Defines number of seconds for polling interval. + required: false + type: integer + default: 60 +value_template: + description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. + required: false + type: string {% endconfiguration %} +## Cover + +A `command_line`cover platform that issues specific commands when it is moved up, down and stopped. It allows anyone to integrate any type of cover into Home Assistant that can be controlled from the command line. + +To enable a command line cover in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + - platform: command_line + covers: + garage_door: + command_open: move_command up garage + command_close: move_command down garage + command_stop: move_command stop garage +``` + +{% configuration %} +covers: + description: The array that contains all command line covers. + required: true + type: list + keys: + identifier: + description: Name of the command line cover as slug. Multiple entries are possible. + required: true + type: list + keys: + command_close: + description: The action to close the cover. + required: true + default: true + type: string + command_open: + description: The command to open the cover. + required: true + default: true + type: string + command_state: + description: If given, this will act as a sensor that runs in the background and updates the state of the cover. If the command returns a `0` the indicates the cover is fully closed, whereas a 100 indicates the cover is fully open. + required: false + type: string + command_stop: + description: The action to stop the cover. + required: true + default: true + type: string + command_timeout: + description: Defines number of seconds for command timeout. + required: false + type: integer + default: 15 + friendly_name: + description: The name used to display the cover in the frontend. + required: false + type: string + scan_interval: + description: Defines number of seconds for polling interval. + required: false + type: integer + default: 60 + 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 + value_template: + description: if specified, `command_state` will ignore the result code of the command but the template evaluating will indicate the position of the cover. For example, if your `command_state` returns a string "open", using `value_template` as in the example configuration above will allow you to translate that into the valid state `100`. + required: false + default: "'{% raw %}{{ value }}{% endraw%}'" + type: template +{% endconfiguration %} + +## Notify + +The `command_line` platform allows you to use external tools for notifications from Home Assistant. The message will be passed in as STDIN. + +To enable those notifications in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - name: NOTIFIER_NAME + platform: command_line + command: "espeak -vmb/mb-us1" +``` + +{% configuration %} +name: + description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. + required: false + default: notify + type: string +command: + description: The action to take. + required: true + type: string +command_timeout: + description: Defines number of seconds for command timeout. + required: false + type: integer + default: 15 +{% endconfiguration %} + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). + +## Sensor + +To enable it, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: command_line + command: SENSOR_COMMAND +``` + +{% configuration %} +command: + description: The action to take to get the value. + required: true + type: string +command_timeout: + description: Defines number of seconds for command timeout + required: false + type: integer + default: 15 +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] +name: + description: Name of the command sensor. + required: false + type: string +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 +scan_interval: + description: Defines number of seconds for polling interval. + required: false + type: integer + default: 60 +unit_of_measurement: + description: Defines the unit of measurement of the sensor, if any. + required: false + type: string +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." + required: false + type: string +{% endconfiguration %} + +## Switch + +The `command_line` switch platform issues specific commands when it is turned on +and off. This might very well become our most powerful platform as it allows +anyone to integrate any type of switch into Home Assistant that can be +controlled from the command line, including calling other scripts! + +To enable it, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +switch: + - platform: command_line + switches: + kitchen_light: + command_on: switch_command on kitchen + command_off: switch_command off kitchen +``` + +{% configuration %} +switches: + description: The array that contains all command switches. + required: true + type: map + keys: + identifier: + description: Name of the command switch as slug. Multiple entries are possible. + required: true + type: map + keys: + command_on: + description: The action to take for on. + required: true + type: string + command_off: + description: The action to take for off. + required: true + type: string + command_state: + description: "If given, this command will be run. Returning a result code `0` will indicate that the switch is on." + required: false + type: string + command_timeout: + description: Defines number of seconds for command timeout. + required: false + type: integer + default: 15 + friendly_name: + description: The name used to display the switch in the frontend. + required: false + type: string + icon_template: + description: Defines a template for the icon of the entity. + required: false + type: template + scan_interval: + description: Defines number of seconds for polling interval. + required: false + type: integer + default: 60 + 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 + value_template: + description: "If specified, `command_state` will ignore the result code of the command but the template evaluating to `true` will indicate the switch is on." + required: false + type: string +{% endconfiguration %} + +A note on `friendly_name`: + +When set, the `friendly_name` had been previously used for API calls and backend +configuration instead of the `object_id` ("identifier"), but +[this behavior is changing](https://github.com/home-assistant/home-assistant/pull/4343) +to make the `friendly_name` for display purposes only. This allows users to set +an `identifier` that emphasizes uniqueness and predictability for API and configuration +purposes but have a prettier `friendly_name` still show up in the UI. As an +additional benefit, if a user wanted to change the `friendly_name` / display +name (e.g., from "Kitchen Lightswitch" to "Kitchen Switch" or +"Living Room Light", or remove the `friendly_name` altogether), they could +do so without needing to change existing automations or API calls. +See aREST device below for an example. + ## Execution The `command` is executed within the [configuration directory](/docs/configuration/). @@ -91,9 +331,9 @@ If you are using [Home Assistant Operating System](https://github.com/home-assis With a `0` exit code, the output (stdout) of the command is used as `value`. In case a command results in a non `0` exit code or is terminated by the `command_timeout`, the result is only logged to Home Assistant log and the sensors value is not updated. -## Examples +## Examples binary sensor platform -In this section you find some real-life examples of how to use this sensor. +In this section you find some real-life examples of how to use the command_line sensor. ### SickRage @@ -160,6 +400,279 @@ binary_sensor: payload_off: "inactive" ``` +## Example cover platform + +{% raw %} + +```yaml +# Example configuration.yaml entry +cover: + - platform: command_line + covers: + garage_door: + command_open: move_command up garage + command_close: move_command down garage + command_stop: move_command stop garage + command_state: state_command garage + value_template: > + {% if value == 'open' %} + 100 + {% elif value == 'closed' %} + 0 + {% endif %} +``` + +## Examples sensor platform + +In this section you find some real-life examples of how to use this sensor. + +### CPU temperature + +Thanks to the [`proc`](https://en.wikipedia.org/wiki/Procfs) file system, various details about a system can be retrieved. Here the CPU temperature is of interest. Add something similar to your `configuration.yaml` file: + +{% raw %} + +```yaml +# Example configuration.yaml entry +sensor: + - platform: command_line + name: CPU Temperature + command: "cat /sys/class/thermal/thermal_zone0/temp" + # If errors occur, make sure configuration file is encoded as UTF-8 + unit_of_measurement: "°C" + value_template: "{{ value | multiply(0.001) | round(1) }}" +``` + +{% endraw %} + +### Monitoring failed login attempts on Home Assistant + +If you'd like to know how many failed login attempts are made to Home Assistant, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: command_line + name: badlogin + command: "grep -c 'Login attempt' /home/hass/.homeassistant/home-assistant.log" +``` + +Make sure to configure the [Logger integration](/integrations/logger) to monitor the [HTTP integration](/integrations/http/) at least the `warning` level. + +```yaml +# Example working logger settings that works +logger: + default: critical + logs: + homeassistant.components.http: warning +``` + +### Details about the upstream Home Assistant release + +You can see directly in the frontend (**Developer tools** -> **About**) what release of Home Assistant you are running. The Home Assistant releases are available on the [Python Package Index](https://pypi.python.org/pypi). This makes it possible to get the current release. + +```yaml +sensor: + - platform: command_line + command: python3 -c "import requests; print(requests.get('https://pypi.python.org/pypi/homeassistant/json').json()['info']['version'])" + name: HA release +``` + +### Read value out of a remote text file + +If you own devices which are storing values in text files which are accessible over HTTP then you can use the same approach as shown in the previous section. Instead of looking at the JSON response we directly grab the sensor's value. + +```yaml +sensor: + - platform: command_line + command: python3 -c "import requests; print(requests.get('http://remote-host/sensor_data.txt').text)" + name: File value +``` + +### Use an external script + +The example is doing the same as the [aREST sensor](/integrations/arest#sensor) but with an external Python script. It should give you an idea about interfacing with devices which are exposing a RESTful API. + +The one-line script to retrieve a value is shown below. Of course it would be possible to use this directly in the `configuration.yaml` file but need extra care about the quotation marks. + +```bash +python3 -c "import requests; print(requests.get('http://10.0.0.48/analog/2').json()['return_value'])" +``` + +The script (saved as `arest-value.py`) that is used looks like the example below. + +```python +#!/usr/bin/python3 +from requests import get + +response = get("http://10.0.0.48/analog/2") +print(response.json()["return_value"]) +``` + +To use the script you need to add something like the following to your `configuration.yaml` file. + +```yaml +# Example configuration.yaml entry +sensor: + - platform: command_line + name: Brightness + command: "python3 /path/to/script/arest-value.py" +``` + +### Usage of templating in `command:` + +[Templates](/docs/configuration/templating/) are supported in the `command` configuration variable. This could be used if you want to include the state of a specific sensor as an argument to your external script. + +{% raw %} + +```yaml +# Example configuration.yaml entry +sensor: + - platform: command_line + name: wind direction + command: "sh /home/pi/.homeassistant/scripts/wind_direction.sh {{ states('sensor.wind_direction') }}" + unit_of_measurement: "Direction" +``` + +{% endraw %} + +### Usage of JSON attributes in command output + +The example shows how you can retrieve multiple values with one sensor (where the additional values are attributes) by using `value_json` and `json_attributes`. + +{% raw %} + +```yaml +# Example configuration.yaml entry +sensor: + - platform: command_line + name: JSON time + json_attributes: + - date + - milliseconds_since_epoch + command: "python3 /home/pi/.homeassistant/scripts/datetime.py" + value_template: "{{ value_json.time }}" +``` + +{% endraw %} + +## Example switch platform + +### Change the icon when a state changes + +This example demonstrates how to use template to change the icon as its state changes. This icon is referencing its own state. + +{% raw %} + +```yaml +switch: + - platform: command_line + switches: + + driveway_sensor_motion: + friendly_name: Driveway outside sensor + command_on: > + curl -X PUT -d '{"on":true}' "http://ip_address/api/sensors/27/config/" + command_off: > + curl -X PUT -d '{"on":false}' "http://ip_address/api/sensors/27/config/" + command_state: curl http://ip_address/api/sensors/27/ + value_template: > + {{value_json.config.on}} + icon_template: > + {% if value_json.config.on == true %} mdi:toggle-switch + {% else %} mdi:toggle-switch-off + {% endif %} +``` + +{% endraw %} + +### aREST device + +The example below is doing the same as the +[aREST switch](/integrations/arest#switch). +The command line tool [`curl`](https://curl.haxx.se/) is used to toggle a pin +which is controllable through REST. + +{% raw %} + +```yaml +# Example configuration.yaml entry +switch: + - platform: command_line + switches: + arest_pin_four: + command_on: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/1" + command_off: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/0" + command_state: "/usr/bin/curl -X GET http://192.168.1.10/digital/4" + value_template: '{{ value == "1" }}' + friendly_name: Kitchen Lightswitch +``` + +{% endraw %} + +Given this example, in the UI one would see the `friendly_name` of +"Kitchen Light". However, the `identifier` is `arest_pin_four`, making the +`entity_id` `switch.arest_pin_four`, which is what one would use in +[`automation`](/integrations/automation/) or in [API calls](/developers/). + +### Shutdown your local host + +This switch will shutdown your system that is hosting Home Assistant. + +
    +This switch will shutdown your host immediately, there will be no confirmation. +
    + +```yaml +# Example configuration.yaml entry +switch: + - platform: command_line + switches: + home_assistant_system_shutdown: + command_off: "/usr/sbin/poweroff" +``` + +### Control your VLC player + +This switch will control a local VLC media player +([Source](https://community.home-assistant.io/t/vlc-player/106)). + +```yaml +# Example configuration.yaml entry +switch: + - platform: command_line + switches: + vlc: + command_on: "cvlc 1.mp3 vlc://quit &" + command_off: "pkill vlc" +``` + +### Control Foscam Motion Sensor + +This switch will control the motion sensor of Foscam Webcams which Support CGI +Commands ([Source](https://www.iltucci.com/blog/wp-content/uploads/2018/12/Foscam-IPCamera-CGI-User-Guide-V1.0.4.pdf)). +This switch supports statecmd, +which checks the current state of motion detection. + +{% raw %} + +```yaml +# Example configuration.yaml entry +switch: + - platform: command_line + switches: + foscam_motion: + command_on: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=1&usr=admin&pwd=password"' + command_off: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=0&usr=admin&pwd=password"' + command_state: 'curl -k --silent "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=admin&pwd=password" | grep -oP "(?<=isEnable>).*?(?=)"' + value_template: '{{ value == "1" }}' +``` + +{% endraw %} + +- Replace admin and password with an "Admin" privileged Foscam user +- Replace ipaddress with the local IP address of your Foscam + ## Services Available services: `reload`. diff --git a/source/_integrations/compensation.markdown b/source/_integrations/compensation.markdown index 547674301c0..569f948443a 100644 --- a/source/_integrations/compensation.markdown +++ b/source/_integrations/compensation.markdown @@ -14,7 +14,7 @@ ha_platforms: ha_integration_type: integration --- -The Compensation integration consumes the state from other sensors. It exports the compensated value as state and the following values as attributes: `entity_id` and `coefficients`. A single polynomial, linear by default, is fit to all data points provided. +The Compensation {% term integration %} consumes the {% term state %} from other {% term sensors %}. It exports the compensated value as state in a separate {% term entity %} and the following values as attributes: `entity_id` and `coefficients`. A single polynomial, linear by default, is fit to all data points provided. ## Configuration diff --git a/source/_integrations/conversation.markdown b/source/_integrations/conversation.markdown index 0e8e6b1f80f..64b0a4264f5 100644 --- a/source/_integrations/conversation.markdown +++ b/source/_integrations/conversation.markdown @@ -33,7 +33,7 @@ In English, you can say things like "turn on kitchen lights" or "turn off lights ## Adding custom sentences -You can add your own [sentence templates](https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax) to teach Home Assistant about new sentences. These sentences can work with the [built-in intents](https://developers.home-assistant.io/docs/intent_builtin/) or trigger a custom action by defining custom intents with the [intent script integration](/integrations/intent_script/). +You can add your own [sentence templates](https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax) to teach Home Assistant about new sentences. These sentences can work with the [built-in intents](https://developers.home-assistant.io/docs/intent_builtin/) or trigger a custom action by defining custom {% term intents %} with the [intent script integration](/integrations/intent_script/). To get started, create a `custom_sentences/` directory in your Home Assistant `config` directory where `` is the [language code](https://developers.home-assistant.io/docs/voice/intent-recognition/supported-languages) of your language, such as `en` for English. These YAML files are automatically merged, and may contain intents, lists, or expansion rules. @@ -53,7 +53,7 @@ intents: {% endraw %} -To teach Home Assistant how to handle the custom `CustomOutsideHumidity` intent, create an `intent_script` entry in your `configuration.yaml` file: +To teach Home Assistant how to handle the custom `CustomOutsideHumidity` {% term intent %}, create an `intent_script` entry in your `configuration.yaml` file: {% raw %} @@ -72,7 +72,7 @@ More complex [actions](/docs/scripts/) can be done in `intent_script`, such as c ## Extending built-in intents -Extending the built-in intents, such as `HassTurnOn` and `HassTurnOff`, can be done as well. +Extending the built-in {% term intents %}, such as `HassTurnOn` and `HassTurnOff`, can be done as well. For example, create the file `config/custom_sentences/en/on_off.yaml` and add: diff --git a/source/_integrations/coronavirus.markdown b/source/_integrations/coronavirus.markdown deleted file mode 100644 index 890cb1fc424..00000000000 --- a/source/_integrations/coronavirus.markdown +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Coronavirus (COVID-19) -description: Instructions on how to integrate the Coronavirus sensors within Home Assistant. -ha_category: - - Health -ha_release: 0.106 -ha_iot_class: Cloud Polling -ha_config_flow: true -ha_codeowners: - - '@home-assistant/core' -ha_domain: coronavirus -ha_platforms: - - sensor -ha_integration_type: integration ---- - -In December 2019, an outbreak of a novel Coronavirus, also called severe acute -respiratory syndrome coronavirus-2 (SARS-CoV-2), began in the Wuhan region of -China. This virus can cause the COVID-19 disease. - -This novel Coronavirus is spreading globally at a disturbing rate, which keeps -everybody on top of the news. The media worldwide is covering the spread of -the virus constantly, and a lot of people are tracking the number of cases -in their country. - -The Coronavirus integration tracks the number of people that are confirmed with, -recovered from, and deceased caused by the virus in your country, or worldwide. - -The data is sourced from the [Johns Hopkins University](https://www.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6). - -{% include integrations/config_flow.md %} diff --git a/source/_integrations/counter.markdown b/source/_integrations/counter.markdown index 7c43cfadb1e..76921188162 100644 --- a/source/_integrations/counter.markdown +++ b/source/_integrations/counter.markdown @@ -18,7 +18,7 @@ The `counter` integration allows one to count occurrences fired by automations. The preferred way to configure counter helpers is via the user interface. To add one, go to **{% my helpers title="Settings -> Devices & Services -> Helpers" %}** and click the add button; -next choose the "**Counter**" option. +next choose the **{% my config_flow_start domain=counter title="Counter" %}** 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 diff --git a/source/_integrations/cover.command_line.markdown b/source/_integrations/cover.command_line.markdown deleted file mode 100644 index d5210523a2b..00000000000 --- a/source/_integrations/cover.command_line.markdown +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: "Command Line Cover" -description: "How to control a cover with the command line." -ha_category: - - Cover -ha_release: 0.14 -ha_iot_class: Local Polling -ha_domain: command_line ---- - -A `command_line`cover platform that issues specific commands when it is moved up, down and stopped. It allows anyone to integrate any type of cover into Home Assistant that can be controlled from the command line. - -To enable a command line cover in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -cover: - - platform: command_line - covers: - garage_door: - command_open: move_command up garage - command_close: move_command down garage - command_stop: move_command stop garage -``` - -{% configuration %} -covers: - description: The array that contains all command line covers. - required: true - type: list - keys: - identifier: - description: Name of the command line cover as slug. Multiple entries are possible. - required: true - type: list - keys: - command_open: - description: The command to open the cover. - required: true - default: true - type: string - command_close: - description: The action to close the cover. - required: true - default: true - type: string - command_stop: - description: The action to stop the cover. - required: true - default: true - type: string - command_state: - description: If given, this will act as a sensor that runs in the background and updates the state of the cover. If the command returns a `0` the indicates the cover is fully closed, whereas a 100 indicates the cover is fully open. - required: false - type: string - value_template: - description: if specified, `command_state` will ignore the result code of the command but the template evaluating will indicate the position of the cover. For example, if your `command_state` returns a string "open", using `value_template` as in the example configuration above will allow you to translate that into the valid state `100`. - required: false - default: "'{% raw %}{{ value }}{% endraw%}'" - type: template - friendly_name: - description: The name used to display the cover in the frontend. - required: false - type: string - command_timeout: - description: Defines number of seconds for command timeout. - 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 - -In this section you find some real-life examples of how to use this sensor. - -### Full configuration - -{% raw %} - -```yaml -# Example configuration.yaml entry -cover: - - platform: command_line - covers: - garage_door: - command_open: move_command up garage - command_close: move_command down garage - command_stop: move_command stop garage - command_state: state_command garage - value_template: > - {% if value == 'open' %} - 100 - {% elif value == 'closed' %} - 0 - {% endif %} -``` - -{% endraw %} diff --git a/source/_integrations/cover.markdown b/source/_integrations/cover.markdown index 57a5cba4ee1..9e7ed821706 100644 --- a/source/_integrations/cover.markdown +++ b/source/_integrations/cover.markdown @@ -15,7 +15,7 @@ Home Assistant can give you an interface to control covers such as rollershutter ## Device Class -The way these sensors are displayed in the frontend can be modified in the [customize section](/docs/configuration/customizing-devices/). The following device classes are supported for covers: +The way these {% term sensors %} are displayed in the {% term frontend %} can be modified in the [customize section](/docs/configuration/customizing-devices/). The following device classes are supported for covers: - **None**: Generic cover. This is the default and doesn't need to be set. - **awning**: Control of an awning, such as an exterior retractable window, door, or patio cover. @@ -31,7 +31,8 @@ The way these sensors are displayed in the frontend can be modified in the [cust Here are a few examples of this representation in the UI: -

    Example of various device classes icons in `open` and `closed` state. The open image in this example has `state_color: true` specified in the Entities card configuration to receive the icon coloring.

    +![List of cover examples](/images/screenshots/cover_classes_icons.png) +Example of various device classes icons in `open` and `closed` state. The open image in this example has `state_color: true` specified in the Entities card configuration to receive the icon coloring. ## Services @@ -43,6 +44,19 @@ Available services: `cover.open_cover`, `cover.close_cover`, `cover.stop_cover`, | ---------------------- | -------- | ----------- | | `entity_id` | yes | String or list of strings that point at `entity_id`'s of covers. Use `entity_id: all` to target all. +#### Automation example + +```yaml +automation: + trigger: + platform: time + at: "07:15:00" + action: + - service: cover.open_cover + target: + entity_id: cover.demo +``` + ### Service `cover.set_cover_position` Set cover position of one or multiple covers. diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown index c5a2d5d4039..1b3779192d9 100644 --- a/source/_integrations/cover.mqtt.markdown +++ b/source/_integrations/cover.mqtt.markdown @@ -125,7 +125,8 @@ device: required: false type: string device_class: - description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend. + description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`. + default: None required: false type: string enabled_by_default: @@ -207,7 +208,7 @@ position_open: position_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `position_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false - type: string + type: template position_topic: description: The MQTT topic subscribed to receive cover position messages. required: false @@ -225,7 +226,7 @@ retain: set_position_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{% raw %}{{ position }}{% endraw %}`. Within the template the following variables are available: `entity_id`, `position`, the target position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false - type: string + type: template set_position_topic: description: "The MQTT topic to publish position commands to. You need to set position_topic as well if you want to use position topic. Use template if position topic wants different values than within range `position_closed` - `position_open`. If template is not defined and `position_closed != 100` and `position_open != 0` then proper position value is calculated from percentage position." required: false @@ -267,7 +268,7 @@ tilt_closed_value: tilt_command_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `tilt_command_topic` topic. Within the template the following variables are available: `entity_id`, `tilt_position`, the target tilt position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false - type: string + type: template tilt_command_topic: description: The MQTT topic to publish commands to control the cover tilt. required: false @@ -295,7 +296,7 @@ tilt_optimistic: tilt_status_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `tilt_status_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false - type: string + type: template tilt_status_topic: description: The MQTT topic subscribed to receive tilt status update values. required: false @@ -307,7 +308,7 @@ unique_id: value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `state_topic` topic." required: false - type: string + type: template {% endconfiguration %}
    diff --git a/source/_integrations/cover.template.markdown b/source/_integrations/cover.template.markdown index ae69a4a980d..5291ecccaad 100644 --- a/source/_integrations/cover.template.markdown +++ b/source/_integrations/cover.template.markdown @@ -54,11 +54,11 @@ cover: required: false type: string value_template: - description: Defines a template to get the state of the cover. Valid output values from the template are `open`, `opening`, `closing` and `closed` which are directly mapped to the corresponding states. In addition, `true` is valid as a synonym to `open` and `false` as a synonym to `closed`. If [both a `value_template` and a `position_template`](#combining_value_template_and_position_template) are specified, only `opening` and `closing` are set from the `value_template`. + description: Defines a template to get the state of the cover. Valid output values from the template are `open`, `opening`, `closing` and `closed` which are directly mapped to the corresponding states. In addition, `true` is valid as a synonym to `open` and `false` as a synonym to `closed`. If [both a `value_template` and a `position_template`](#combining_value_template_and_position_template) are specified, only `opening` and `closing` are set from the `value_template`. If the template produces a `None` value the state will be set to `unknown`. required: false type: template position_template: - description: Defines a template to get the position of the cover. Legal values are numbers between `0` (closed) and `100` (open). + description: Defines a template to get the position of the cover. Legal values are numbers between `0` (closed) and `100` (open). If the template produces a `None` value the current position will be set to `unknown`. required: false type: template icon_template: @@ -109,7 +109,7 @@ cover: type: boolean default: false tilt_template: - description: Defines a template to get the tilt state of the cover. Legal values are numbers between `0` (closed) and `100` (open). + description: Defines a template to get the tilt state of the cover. Legal values are numbers between `0` (closed) and `100` (open). If the template produces a `None` value the current tilt state will be set to `unknown`. required: false type: template {% endconfiguration %} diff --git a/source/_integrations/default_config.markdown b/source/_integrations/default_config.markdown index 6fa42544748..1d4042a4081 100644 --- a/source/_integrations/default_config.markdown +++ b/source/_integrations/default_config.markdown @@ -14,6 +14,7 @@ ha_integration_type: system This integration is a meta-component and configures a default set of integrations for Home Assistant to load. The integrations that will be loaded are: - [Automation](/integrations/automation/) (`automation`) +- [Assist pipeline](/integrations/assist_pipeline/) (`assist_pipeline`) - [Backup](/integrations/backup/) (`backup`) - [Bluetooth](/integrations/bluetooth/) (`bluetooth`) - [Configuration](/integrations/config/) (`config`) diff --git a/source/_integrations/denonavr.markdown b/source/_integrations/denonavr.markdown index 516f694b853..9147a40327f 100644 --- a/source/_integrations/denonavr.markdown +++ b/source/_integrations/denonavr.markdown @@ -73,6 +73,7 @@ Known supported devices: - Marantz AV7703 - Marantz AV7704 - Marantz CINEMA 50 +- Marantz CINEMA 70s - Marantz M-CR510 - Marantz M-CR511 - Marantz M-CR603 @@ -80,6 +81,7 @@ Known supported devices: - Marantz M-CR611 - Marantz SR5006 - Marantz SR5008 +- Marantz SR5010 - Marantz SR5011 - Marantz SR5015 - Marantz SR6007 - SR6012 diff --git a/source/_integrations/discord.markdown b/source/_integrations/discord.markdown index 5568fd51d6c..75cf7929861 100644 --- a/source/_integrations/discord.markdown +++ b/source/_integrations/discord.markdown @@ -35,27 +35,25 @@ The name you give your application on the [Discord My Apps page](https://discord ### Setting up the bot -Bots can send messages to servers and users or attach locally available images. To add the bot to a server you are an admin on use the **Application ID** you noted above, found on the [Discord My Apps page](https://discordapp.com/developers/applications/me). +Bots can send messages to servers and users or attach locally available images. To add the bot to a server you are an admin on, use the **Application ID** you noted above, found on the [Discord My Apps page](https://discordapp.com/developers/applications/me). -

    - -

    +![Screenshot of Discord bot config](/images/screenshots/discord-bot.png) -Now use the Discord Authorization page with the **Application ID** of your [application](https://discordapp.com/developers/docs/topics/oauth2#bots). +Next, decide what permissions your bot will have within your server. Under the 'Bot' section, select the permissions you want to grant and copy the permissions integer from the bottom field. -`https://discordapp.com/api/oauth2/authorize?client_id=[APPLICATION_ID]&scope=bot&permissions=0` +![Screenshot of Discord bot permissions](/images/screenshots/discord-bot-permissions.png) -

    - -

    +Now use the Discord Authorization page with the **Application ID** of your [application](https://discordapp.com/developers/docs/topics/oauth2#bots) and the **Permissions Integer**. + +`https://discordapp.com/api/oauth2/authorize?client_id=[APPLICATION_ID]&scope=bot&permissions=[PERMISSIONS_INTEGER]` + +![Screenshot of Discord bot auth](/images/screenshots/discord-auth.png) Wait for the confirmation which should say "Authorized". Once the bot has been added to your server, get the channel ID of the channel you want the bot to operate in. In The Discord application go to **Settings** > **Advanced** > **Enable Developer Mode**. -

    - -

    +![Screenshot of Discord bot create prompt](/images/screenshots/discord-api.png) Right click channel name and copy the channel ID (**Copy ID**). diff --git a/source/_integrations/dwd_weather_warnings.markdown b/source/_integrations/dwd_weather_warnings.markdown index e3d39f6b4ec..686559e32ce 100644 --- a/source/_integrations/dwd_weather_warnings.markdown +++ b/source/_integrations/dwd_weather_warnings.markdown @@ -10,6 +10,7 @@ ha_codeowners: - '@runningman84' - '@stephan192' - '@Hummel95' + - '@andarotajo' ha_platforms: - sensor ha_integration_type: integration diff --git a/source/_integrations/easyenergy.markdown b/source/_integrations/easyenergy.markdown index f01451832b3..c3e9b464afc 100644 --- a/source/_integrations/easyenergy.markdown +++ b/source/_integrations/easyenergy.markdown @@ -47,6 +47,18 @@ prices for electricity that you use (buy) or return (sell). Every day around - Time of day when the price is highest - Time of day when the price is at its lowest - Percentage of the current price compared to the maximum price +- Number of hours with the current price higher or lower + +Entities with the number of hours indicate how many hours there are with a price +**above** or **below** the current hourly price. If we take the graph below as an example +and it is 00:30, then there are 8 hours below the current price and 4 hours above the +current price. With this information, you could switch devices at the X cheapest number +of hours during the day. + +

    + Screenshot showing energy price graph. + Example showing the energy price graph. +

    ### Gas market price diff --git a/source/_integrations/ecowitt.markdown b/source/_integrations/ecowitt.markdown index 571c21925dc..474ea3045d1 100644 --- a/source/_integrations/ecowitt.markdown +++ b/source/_integrations/ecowitt.markdown @@ -27,7 +27,7 @@ The following steps must be performed to set up this integration. For security r 2. Pick your station -> Menu Others -> DIY Upload Servers. 3. Hit next and select 'Customized' 4. Pick the protocol Ecowitt, and put in the ip/hostname of your Home Assistant server. -5. Path have to match! +5. Path has to match! If using the Ecowitt App, remove the first forward slash from the API token, as the app will prepend one. 6. Save configuration. Ecowitt doesn't support TLS/SSL, you can use the NGINX TLS Proxy Add-on to support HTTPS and HTTP at the same time. diff --git a/source/_integrations/emulated_hue.markdown b/source/_integrations/emulated_hue.markdown index 8eba0b47a87..4e71e45bb56 100644 --- a/source/_integrations/emulated_hue.markdown +++ b/source/_integrations/emulated_hue.markdown @@ -15,7 +15,7 @@ ha_codeowners:
    -Be aware that `emulated_hue` doesn't work for new users of **Google Home** with `emulated_hue`. If you've not previously set this up and had it working, use the [Google Assistant component](/integrations/google_assistant/) or [Nabu Casa cloud](/integrations/cloud) component. +Be aware that `emulated_hue` doesn't work for new users of **Google Home** with `emulated_hue`. If you've not previously set this up and had it working, use the [Google Assistant](/integrations/google_assistant/) integration or [Nabu Casa cloud](/integrations/cloud) integration.
    @@ -41,13 +41,13 @@ If you added or upgraded to a newer Alexa device and devices are not found, you
    -[Sleep Cycle](https://www.sleepcycle.com) and [Sleep as Android](https://sleep.urbandroid.org): smart alarm clock app can use emulated_hue to turn on and off entities. Sleep Cycle only has it implemented in the iOS app, see [Sleep Cycle support](https://support.sleepcycle.com/hc/en-us/articles/207670385-Does-Sleep-Cycle-integrates-with-Phillips-Hue-). The app requires the same configuration as Google Home and does not work if the type is defined as Alexa in the configuration. +[Sleep Cycle](https://www.sleepcycle.com) and [Sleep as Android](https://sleep.urbandroid.org): smart alarm clock app can use emulated_hue to turn on and off entities. Sleep Cycle only has it implemented in the iOS app, see [Sleep Cycle support](https://support.sleepcycle.com/hc/articles/207670385-Does-Sleep-Cycle-integrates-with-Phillips-Hue-). The app requires the same configuration as Google Home and does not work if the type is defined as Alexa in the configuration.
    -Logitech Harmony remotes cannot connect to this emulator via Android and iOS mobile applications because they require the physical button on the hub to be pressed. The [MyHarmony desktop software](https://support.myharmony.com/en-us/download) must be used with the original cable to connect it, then "Scan for Devices". +Logitech Harmony remotes cannot connect to this emulator via Android and iOS mobile applications because they require the physical button on the hub to be pressed. The [MyHarmony desktop software](https://support.myharmony.com/download) must be used with the original cable to connect it, then "Scan for Devices".
    @@ -174,7 +174,7 @@ On Linux systems (Ubuntu, Debian, etc) execute the following command to allow `e sudo setcap 'cap_net_bind_service=+ep' /srv/homeassistant/homeassistant_venv/bin/python3 ``` -Please note that your path may be different depending on your installation method. For example, if you followed the [Virtualenv instructions](/docs/installation/virtualenv/), your path will be `/srv/homeassistant/bin/python3`. +Please note that your path may be different depending on your installation method. For example, if you followed the [Virtualenv instructions](/installation/linux/), your path will be `/srv/homeassistant/bin/python3`. ### License diff --git a/source/_integrations/enocean.markdown b/source/_integrations/enocean.markdown index 4759fecf7f7..16b1d0a8cbe 100644 --- a/source/_integrations/enocean.markdown +++ b/source/_integrations/enocean.markdown @@ -24,7 +24,7 @@ ha_integration_type: integration The [EnOcean](https://en.wikipedia.org/wiki/EnOcean) standard is supported by many different vendors. There are switches and sensors of many different kinds, and typically they employ energy harvesting to get power such that no batteries are necessary. -The EnOcean integration adds support for some of these devices. You will need a controller like the [USB300](https://www.enocean.com/en/enocean_modules/usb-300/) in order for it to work. +The EnOcean integration adds support for some of these devices. You will need a controller like the [USB300](https://www.enocean.com/product/usb-300/) in order for it to work. There is currently support for the following device types within Home Assistant: @@ -44,7 +44,7 @@ The following devices have been confirmed to work out of the box: - EnOcean STM-330 temperature sensor - Hoppe SecuSignal window handle from Somfy -If you own a device not listed here, please check whether your device can talk in one of the listed [EnOcean Equipment Profiles](https://www.enocean-alliance.org/what-is-enocean/specifications/) (EEP). If it does, it will most likely work. The available profiles are usually listed somewhere in the device manual. +If you own a device not listed here, please check whether your device can talk in one of the listed [EnOcean Equipment Profiles](https://www.enocean-alliance.org/specifications/) (EEP). If it does, it will most likely work. The available profiles are usually listed somewhere in the device manual. Support for tech-in messages is not implemented. @@ -58,10 +58,10 @@ This can typically be one of those batteryless wall switches. Tested with: - Eltako FT55 which uses the EnOcean PTM 215 module -- [TRIO2SYS Wall switches](https://www.trio2sys.fr/index.php/fr/produits-enocean-sans-fil-sans-pile-interoperable/emetteur-sans-fils-sans-pile-interoperable-enocean) which uses the EnOcean PTM210 DB module +- [TRIO2SYS Wall switches](https://www.trio2sys.fr/index.php/produits-enocean-sans-fil-sans-pile-interoperable/emetteur-sans-fils-sans-pile-interoperable-enocean) which uses the EnOcean PTM210 DB module - Omnio WS-CH-102 -The following [EnOcean Equipment Profiles](https://www.enocean-alliance.org/what-is-enocean/specifications/) are supported: +The following [EnOcean Equipment Profiles](https://www.enocean-alliance.org/specifications/) are supported: - F6-02-01 (Light and Blind Control - Application Style 2) - F6-02-02 (Light and Blind Control - Application Style 1) @@ -107,7 +107,7 @@ Sample automation to switch lights on and off: ```yaml # Example automation to turn lights on/off on button release automation: - - alias: "hall light switches" + - alias: "Hall light switches" trigger: platform: event event_type: button_pressed @@ -122,7 +122,7 @@ automation: {% endraw %} -You can find the `event_data` `id` by going to "Developer Tools" -> "Events" and listening to “button_pressed” events. Then hit a button on the device and you should see an event. +You can find the `event_data` `id` by going to {% my developer_events title="Developer Tools -> Events" %} and listening to “button_pressed” events. Then hit a button on the device and you should see an event. ## Light @@ -207,7 +207,7 @@ sensor: ### Humidity sensor -The following [EnOcean Equipment Profiles](https://www.enocean-alliance.org/what-is-enocean/specifications/) are supported: +The following [EnOcean Equipment Profiles](https://www.enocean-alliance.org/specifications/) are supported: - Any profile that contains the humidity value at position **DB2.7** to **DB2.0** - **A5-04-01** - Temp. and Humidity Sensor, Range 0°C to +40°C and 0% to 100% @@ -229,7 +229,7 @@ sensor: This sensor has been tested with a generic STM-330 sensor, which is used in most indoor temperature sensor devices. -The following [EnOcean Equipment Profiles](https://www.enocean-alliance.org/what-is-enocean/specifications/) are supported: +The following [EnOcean Equipment Profiles](https://www.enocean-alliance.org/specifications/) are supported: - Any profile that contains an 8-bit temperature at position DB1.7 to DB1.0. 10-bit is not supported. - **A5-02-01** to **A5-02-1B** - Temperature Sensor with various temperature ranges diff --git a/source/_integrations/epsonworkforce.markdown b/source/_integrations/epsonworkforce.markdown index c1122ffc6fd..e47b5f4682b 100644 --- a/source/_integrations/epsonworkforce.markdown +++ b/source/_integrations/epsonworkforce.markdown @@ -72,6 +72,7 @@ Tested devices: - Epson ET-2650 - Epson ET-4750 - Epson EcoTank ET-5150 (51x0) +- Epson Expression Home XP-2100 - Epson Expression Home XP-2105 To make this module work you need to connect your printer to your LAN. diff --git a/source/_integrations/fan.markdown b/source/_integrations/fan.markdown index 8e0380ca187..90de9c35d79 100644 --- a/source/_integrations/fan.markdown +++ b/source/_integrations/fan.markdown @@ -20,9 +20,6 @@ The Fan integration allows you to control and monitor Fan devices. Available services: `fan.set_percentage`, `fan.set_preset_mode`, `fan.set_direction`, `fan.oscillate`, `fan.turn_on`, `fan.turn_off`, `fan.toggle`, `fan.increase_speed`, `fan.decrease_speed` -Deprecated services: -`fan.set_speed` -
    Not all fan services may be available for your platform. You can check which services are available for your fan(s) under **Developer Tools** -> **Services**. @@ -144,15 +141,6 @@ Turn fan device off. This is only supported if the fan device supports being tur | `entity_id` | yes | String or list of strings that define the entity ID(s) of fan device(s) to control. To target all fan devices, use `all`. -### Deprecated Service `fan.set_speed` - -Sets the speed for fan device. - -| Service data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `entity_id` | yes | String or list of strings that define the entity ID(s) of fan device(s) to control. To target all fan devices, use `all`. -| `speed` | no | Speed setting - #### Automation example ```yaml diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown index e827fcae75c..96ac5f31431 100644 --- a/source/_integrations/fan.mqtt.markdown +++ b/source/_integrations/fan.mqtt.markdown @@ -160,6 +160,22 @@ optimistic: required: false type: boolean default: "`true` if no state topic defined, else `false`." +direction_command_template: + description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `direction_command_topic`. + required: false + type: template +direction_command_topic: + description: The MQTT topic to publish commands to change the direction state. + required: false + type: string +direction_state_topic: + description: The MQTT topic subscribed to receive direction state updates. + required: false + type: string +direction_value_template: + description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the direction." + required: false + type: template oscillation_command_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `oscillation_command_topic`. required: false @@ -175,7 +191,7 @@ oscillation_state_topic: oscillation_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the oscillation." required: false - type: string + type: template payload_available: description: The payload that represents the available state. required: false @@ -231,7 +247,7 @@ percentage_state_topic: percentage_value_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `percentage` value from the payload received on `percentage_state_topic`. required: false - type: string + type: template preset_mode_command_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `preset_mode_command_topic`. required: false @@ -247,7 +263,7 @@ preset_mode_state_topic: preset_mode_value_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`. required: false - type: string + type: template preset_modes: description: List of preset modes this fan is capable of running at. Common examples include `auto`, `smart`, `whoosh`, `eco` and `breeze`. required: false @@ -280,7 +296,7 @@ state_topic: state_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the state." required: false - type: string + type: template unique_id: description: An ID that uniquely identifies this fan. If two fans have the same unique ID, Home Assistant will raise an exception. required: false @@ -309,6 +325,9 @@ mqtt: - name: "Bedroom Fan" state_topic: "bedroom_fan/on/state" command_topic: "bedroom_fan/on/set" + direction_state_topic: "bedroom_fan/direction/state" + direction_command_topic: "bedroom_fan/direction/set" + oscillation_command_topic: "bedroom_fan/oscillation/set" oscillation_state_topic: "bedroom_fan/oscillation/state" oscillation_command_topic: "bedroom_fan/oscillation/set" percentage_state_topic: "bedroom_fan/speed/percentage_state" @@ -343,6 +362,8 @@ mqtt: - name: "Bedroom Fan" command_topic: "bedroom_fan/on/set" command_template: "{ state: '{{ value }}'}" + direction_command_template: "{{ iif(value == 'forward', 'fwd', 'rev') }}" + direction_value_template: "{{ iif(value == 'fwd', 'forward', 'reverse') }}" oscillation_command_topic: "bedroom_fan/oscillation/set" oscillation_command_template: "{ oscillation: '{{ value }}'}" percentage_command_topic: "bedroom_fan/speed/percentage" @@ -358,3 +379,18 @@ mqtt: ``` {% endraw %} + +This example shows how to configure a fan that doesn't use `forward` and `backward` as directions. + +{% raw %} + +```yaml +# Example configuration.yaml with direction templates +mqtt: + fan: + - name: "Bedroom Fan" + direction_command_template: "{{ iif(value == 'forward', 'fwd', 'rev') }}" + direction_value_template: "{{ iif(value == 'fwd', 'forward', 'reverse') }}" +``` + +{% endraw %} diff --git a/source/_integrations/fire_tv.markdown b/source/_integrations/fire_tv.markdown index 9243c6a73ca..0cf63f26c65 100644 --- a/source/_integrations/fire_tv.markdown +++ b/source/_integrations/fire_tv.markdown @@ -1,12 +1,12 @@ --- title: Amazon Fire TV -description: Connect and control your Amazon Fire TV devices using the Android TV integration +description: Connect and control your Amazon Fire TV devices using the Android Debug Bridge integration ha_category: - Media Player ha_domain: fire_tv ha_integration_type: virtual ha_supporting_domain: androidtv -ha_supporting_integration: Android TV +ha_supporting_integration: Android Debug Bridge ha_release: 0.7.6 ha_codeowners: - '@JeffLIrion' diff --git a/source/_integrations/fixer.markdown b/source/_integrations/fixer.markdown index db1c3cbd77c..8d499198c33 100644 --- a/source/_integrations/fixer.markdown +++ b/source/_integrations/fixer.markdown @@ -17,7 +17,7 @@ To get an overview about the available [currencies](https://fixer.io/symbols). ## Setup -You need to create an [API key](https://fixer.io/product). The free account is limited to only EUR as a base currency, allows 250 requests per month, and updates every hour. +You need to create an [API key](https://apilayer.com/marketplace/fixer-api#pricing). The free account is limited to only EUR as a base currency, allows 100 requests per month, and updates every hour. ## Configuration diff --git a/source/_integrations/flux_led.markdown b/source/_integrations/flux_led.markdown index e29e3204ab0..afb9a83edb5 100644 --- a/source/_integrations/flux_led.markdown +++ b/source/_integrations/flux_led.markdown @@ -83,7 +83,7 @@ These devices have been sold under at least the following brands: - [Diode Dynamics](https://www.diodedynamics.com/) - [Flux LED](https://www.fluxsmartlighting.com/) - [FVTLED](https://fvtled.com/) -- [GEV LIG](https://www.gev.de/) +- GEV LIG - GEYUEYA Home - GIDEALED - [GIDERWEL](https://giderwel.com/) @@ -98,7 +98,7 @@ These devices have been sold under at least the following brands: - INDARUN - iNextStation - [Koopower](https://www.koopower.com/) -- [Lallumer](https://www.lapuretes.cn/) +- Lallumer - LEDENET - [LiteWRX](https://litewrx.com/) - Lytworx diff --git a/source/_integrations/forecast_solar.markdown b/source/_integrations/forecast_solar.markdown index 7ed1ae0581d..b94fce5346d 100644 --- a/source/_integrations/forecast_solar.markdown +++ b/source/_integrations/forecast_solar.markdown @@ -71,6 +71,7 @@ The Forecast.Solar integration mainly provides sensors that you can use in your automations. - Estimated Energy Production - Today (in kWh) +- Estimated Energy Production - Remaining Today (in kWh) - Estimated Energy Production - Tomorrow (in kWh) - Estimated Energy Production - This Hour (in kWh) - Estimated Energy Production - Next Hour (in kWh) diff --git a/source/_integrations/freebox.markdown b/source/_integrations/freebox.markdown index f7c6530cba1..2cbe8bc77e9 100644 --- a/source/_integrations/freebox.markdown +++ b/source/_integrations/freebox.markdown @@ -2,6 +2,7 @@ title: Freebox description: Instructions on how to integrate Freebox routers into Home Assistant. ha_category: + - Camera - Network - Presence Detection - Sensor @@ -15,6 +16,7 @@ ha_config_flow: true ha_domain: freebox ha_platforms: - button + - camera - device_tracker - sensor - switch @@ -29,6 +31,7 @@ There is currently support for the following device types within Home Assistant: * [Sensor](#sensor) with metrics for connection speed, internal temperature, free partition space and missed calls * [Device tracker](#presence-detection) for connected devices * [Switch](#switch) to control Wi-Fi +* [Camera](#camera) {% include integrations/config_flow.md %} @@ -79,6 +82,8 @@ The first time Home Assistant will connect to your Freebox, you will need to aut To make the Wi-Fi switch and the reboot service working you will have to add "Modification des réglages de la Freebox" permission to Home Assistant application in "Paramètres de la Freebox" > "Gestion des accès" > "Applications". +To use cameras from the Freebox Delta, you will have to add "Gestion de l'alarme et maison connectée" permission to Home Assistant application in "Paramètres de la Freebox" > "Gestion des accès" > "Applications". + ### Supported routers Only the routers with Freebox OS are supported: @@ -112,6 +117,9 @@ The monitored metrics are: * Free partition space of used disks * Number of missed calls +## Camera +Cameras are only available in Freebox V7 (also known as Freebox Delta). + ## Service ### Service `freebox.reboot` diff --git a/source/_integrations/gc100.markdown b/source/_integrations/gc100.markdown index ebec8af46cc..23f46fe0b23 100644 --- a/source/_integrations/gc100.markdown +++ b/source/_integrations/gc100.markdown @@ -14,7 +14,7 @@ ha_platforms: ha_integration_type: integration --- -The Global Caché [GC-100](https://www.globalcache.com/products/gc-100/) can be integrated into Home Assistant. GC-100 is a TCP-controllable +The Global Caché GC-100 can be integrated into Home Assistant. GC-100 is a TCP-controllable hardware device which has an array of relays, RS232 serial ports, and flexible ports which can be programmed to be either digital inputs or IR blaster outputs. There are a variety of submodels of the GC-100 which have different amounts of each I/O type. There is currently support for the following device types within Home Assistant: diff --git a/source/_integrations/google_assistant_sdk.markdown b/source/_integrations/google_assistant_sdk.markdown index c8c55f42f62..ae9018f73ea 100644 --- a/source/_integrations/google_assistant_sdk.markdown +++ b/source/_integrations/google_assistant_sdk.markdown @@ -78,13 +78,15 @@ The integration setup will next give you instructions to enter the [Application 1. Continue through the steps of selecting the account you want to authorize. -2. **NOTE**: You may get a message telling you that the app has not been verified and you will need to acknowledge that in order to proceed. +2. If your Google account settings are set to a language not supported by the SDK -- which can be noticed by the authentication screen of Google being localized in that language -- the authorization will fail without a clear error. Changing the language at the bottom of the error page to one that is [supported](https://developers.google.com/assistant/sdk/reference/rpc/languages) by the SDK will allow you to continue to the link page of Home Assistant. -3. You can now see the details of what you are authorizing Home Assistant to access with two options at the bottom. Click **Continue**. +3. **NOTE**: You may get a message telling you that the app has not been verified and you will need to acknowledge that in order to proceed. -4. The page will now display _Link account to Home Assistant?_, note _Your instance URL_. If this is not correct, please refer to [My Home Assistant](/integrations/my). If everything looks good, click **Link Account**. +4. You can now see the details of what you are authorizing Home Assistant to access with two options at the bottom. Click **Continue**. -5. You may close the window, and return back to Home Assistant where you should see a _Success!_ message from Home Assistant. +5. The page will now display _Link account to Home Assistant?_, note _Your instance URL_. If this is not correct, please refer to [My Home Assistant](/integrations/my). If everything looks good, click **Link Account**. + +6. You may close the window, and return back to Home Assistant where you should see a _Success!_ message from Home Assistant. {% enddetails %} diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index e23be034ffb..cd76006c36b 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -145,3 +145,19 @@ Also an event `habitica_api_call_success` will be fired with the following data: "id": "NEW_TASK_UUID"} } ``` + +## Templating + +`sensor.habitica_USER_dailys`, `sensor.habitica_USER_habits`, `sensor.habitica_USER_rewards`, and `sensor.habitica_USER_todos` have state attributes listing the user's respective tasks. For example, you can see this information in **Developer Tools** -> **States** -> `sensor.habitica_USER_dailys` -> **Attributes**, or by adding a [Markdown card](/dashboards/markdown/) to a dashboard with the following code: + +{% raw %} + +```jinja +{% for key, value in states.sensor.habitica_USER_dailys.attributes.items() %} + {% if 'text' in value | string %} + {{ loop.index }}. {{ value.text }} + {% endif %} +{% endfor %} +``` + +{% endraw %} diff --git a/source/_integrations/hassio.markdown b/source/_integrations/hassio.markdown index 3442b8c7021..f863115f5e9 100644 --- a/source/_integrations/hassio.markdown +++ b/source/_integrations/hassio.markdown @@ -68,6 +68,8 @@ For Home Assistant Host, the following sensors are available: For each installed add-on Supervisor provides following binary sensors: +(These entities are disabled by default and must be reenabled to appear) + | Sensor | Enabled by default | Description | | ------- | ------------------ | ----------- | | Update Available | no | Whether there is an update available for this add-on (This is deprecated, use the Update entities instead.) diff --git a/source/_integrations/history.markdown b/source/_integrations/history.markdown index efffd6a9c5f..7b9a5f10cb4 100644 --- a/source/_integrations/history.markdown +++ b/source/_integrations/history.markdown @@ -24,148 +24,7 @@ This integration is by default enabled, unless you've disabled or removed the [` history: ``` -

    - - - -

    - -
    -Events are saved in a local database. Google Graphs is used to draw the graph. -Drawing is happening 100% in your browser. No data is transferred to anyone at any time. -
    - -{% configuration %} -exclude: - description: Configure which integrations should **not** be displayed. - required: false - type: map - keys: - entities: - description: The list of entity ids to be excluded from the history. - required: false - type: list - entity_globs: - description: Include all entities matching a listed pattern when creating logbook entries (e.g., `sensor.weather_*`). - required: false - type: list - domains: - description: The list of domains to be excluded from the history. - required: false - type: list -include: - description: Configure which integrations should be displayed. - required: false - type: map - keys: - entities: - description: The list of entity ids to be included in the history. - required: false - type: list - entity_globs: - description: Include all entities matching a listed pattern when creating logbook entries (e.g., `sensor.weather_*`). - required: false - type: list - domains: - description: The list of domains to be included in the history. - required: false - type: list -{% endconfiguration %} - -Without any `include` or `exclude` configuration the history displays graphs for - every entity (well that's not exactly true - - `scenes` are never shown) on a given date. If you are only interested in some - of the entities you have several options: - -Define domains and entities to `exclude` (aka. blocklist). This is convenient -when you are basically happy with the information displayed, but just want to -remove some entities or domains. Usually these are entities/domains which do not -change or rarely change (like `updater` or `automation`). - -```yaml -# Example configuration.yaml entry with exclude -history: - exclude: - domains: - - automation - - updater - entities: - - sensor.last_boot - - sensor.date - entity_globs: - - binary_sensor.*_occupancy -``` - -Define domains and entities to display by using the `include` configuration -(aka. allowlist). If you have a lot of entities in your system and your -`exclude` list is getting too large, it might be better just to define the -entities or domains to `include`. - -```yaml -# Example configuration.yaml entry with include -history: - include: - domains: - - sensor - - switch - - media_player -``` - -Use the `include` list to define the domains/entities to display, and exclude -some of them within the `exclude` list. This makes sense if you, for instance, -include the `sensor` domain, but want to exclude some specific sensors. Instead -of adding every sensor entity to the `include` `entities` list just include the -`sensor` domain and exclude the sensor entities you are not interested in. -Note that the order of any `include` `entities` will be displayed as listed in -the configuration, otherwise, the display order is arbitrary. - -```yaml -# Example configuration.yaml entry with include and exclude -history: - include: - domains: - - sensor - - switch - - media_player - exclude: - entities: - - sensor.last_boot - - sensor.date -``` - -{% include common-tasks/filters.md %} - -#### Implementation details - -The history is stored in a SQLite database `home-assistant_v2.db` within your -configuration directory unless the `recorder` integration is set up differently. - -- events table is all that happened while recorder integration was running. -- states table contains all the `new_state` values of `state_changed` events. -- Inside the states table you have: - - `entity_id`: the entity_id of the entity - - `state`: the state of the entity - - `attributes`: JSON of the state attributes - - `last_changed`: timestamp last time the state has changed. - - `last_updated`: timestamp anything has changed (state, attributes) - - `created`: timestamp this entry was inserted into the database - -When the `history` integration queries the states table it only selects states -where the state has changed: `WHERE last_changed=last_updated` - -#### On dates - -SQLite databases do not support native dates. That's why all the dates are saved -in seconds since the UNIX epoch. Convert them manually using -[this site](https://www.epochconverter.com/) or in Python: - -```python -from datetime import datetime - -datetime.fromtimestamp(1422830502) -``` - -#### API +## API The history information is also available through the [RESTful API](/developers/rest_api/#get-apihistory). diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown index cf8c3fff578..51de46fc1e9 100644 --- a/source/_integrations/history_stats.markdown +++ b/source/_integrations/history_stats.markdown @@ -129,6 +129,11 @@ duration:
    +### Video Tutorial +This video tutorial explains how you can use history stats. It also shows how you can create a daily bar chart graph to visualize things such as occupancy, or how long the lights are on in a particular room. + + + ### Examples Here are some examples of periods you could work with, and what to write in your `configuration.yaml`: diff --git a/source/_integrations/home_connect.markdown b/source/_integrations/home_connect.markdown index 457726e17ec..21cc2ee5d53 100644 --- a/source/_integrations/home_connect.markdown +++ b/source/_integrations/home_connect.markdown @@ -43,7 +43,9 @@ Note that it depends on the appliance and on API permissions which of the featur - OAuth Flow: Authorization Code Grant Flow - Redirect URI: `https://my.home-assistant.io/redirect/oauth` -*Important*: +*Important*: + - **Power on** all your appliances during the integration configuration process; otherwise appliance programs list will be empty. + - To update the appliance programs list, you can reload the Home Connect integration when an appliance is turned on. If the re-initialization process is not triggered by reload, restart the Home Assistant when an appliance is turned on. - After performing the steps above **log out** of your Home Connect Developer account. If you don't do this, the configuration steps below will fail during OAuth authentication with the message `“error”: “unauthorized_client”`. - The provided Home Connect User Account email address **must** be all lowercase otherwise it will result in authentication failures. - All changes in the developer portal take 15 minutes before the change is implemented. diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index e1c631b5af1..e210a13274b 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -1,5 +1,5 @@ --- -title: HomeKit +title: HomeKit Bridge description: Instructions on how to set up the HomeKit Bridge integration in Home Assistant. featured: true ha_category: @@ -253,13 +253,18 @@ homekit: type: integer default: 1316 video_codec: - description: Only for `camera` entities. FFmpeg video codec for transcoding. `copy` option reduces CPU load when video source already encoded with `H264` (MPEG4). `h264_omx` option is only available with custom FFmpeg builds and enables GPU Hardware acceleration on Raspberry Pi. + description: Only for `camera` entities. FFmpeg video codec for transcoding. `copy` option reduces CPU load when video source is already encoded with `H264` (MPEG4). `h264_v4l2m2m` can be used with supported hardware, e.g., the Raspberry Pi, to offload encoding to hardware. The `h264_omx` option is only available with custom FFmpeg builds and enables GPU Hardware acceleration on Raspberry Pi. required: false type: string default: libx264 - available options: copy, libx264, h264_omx + available options: copy, libx264, h264_v4l2m2m, h264_omx + video_profile_names: + description: Only for `camera` entities. FFmpeg video profile names for transcoding, only relevant if `video_codec` isn't `copy`. Some encoders, e.g., the Raspberry Pi's `h264_v4l2m2m`, don't use the standard `["baseline", "main", "high"]` profile names but expects `["0", "2", "4"]` instead. Use this option to override the default names, if needed. + required: false + type: list + default: ["baseline", "main", "high"] audio_codec: - description: Only for `camera` entities. FFmpeg audio codec for transcoding. `copy` option reduces CPU load when audio source already encoded with `libopus`. + description: Only for `camera` entities. FFmpeg audio codec for transcoding. `copy` option reduces CPU load when audio source is already encoded with `libopus`. required: false type: string default: libopus diff --git a/source/_integrations/honeywell.markdown b/source/_integrations/honeywell.markdown index 62d59cea602..be125853c1b 100644 --- a/source/_integrations/honeywell.markdown +++ b/source/_integrations/honeywell.markdown @@ -33,11 +33,11 @@ Home Assistant is integrated with the following devices through [https://mytotal - Thermostats - Every thermostat is exposed as a climate entity - - Known working devices: TH6320R1004, RTH9585WF1004 + - Known working devices: [TH6320R1004](https://customer.resideo.com/en-US/Pages/Product.aspx?cat=HonECC%2520Catalog&pid=TH6320R1004/U), [RTH9585WF1004](https://www.honeywellhome.com/us/en/products/air/thermostats/wifi-thermostats/wifi-color-touchscreen-thermostat-rth9585wf1004-u/) - Sensors - A Temperature sensor entity. - A Humidity sensor entity. - - Known working devices: C7089R1013 + - Known working devices: [C7089R1013](https://customer.resideo.com/en-US/Pages/Product.aspx?cat=HonECC%20Catalog&pid=C7089R1013/U) Others devices like Security systems are not currently supported by this integration @@ -45,7 +45,7 @@ Others devices like Security systems are not currently supported by this integra The climate platform integrates Honeywell US-based thermostats into Home Assistant, allowing control of the thermostat through the user interface. The current inside temperature, operating mode, and fan state are also displayed on the thermostat card. -All [climate services](/integrations/climate) are supported except set_swing_mode +All [climate services](/integrations/climate) are supported except set_swing_mode. ## Sensor diff --git a/source/_integrations/http.markdown b/source/_integrations/http.markdown index 2f93c232f61..f32045222e7 100644 --- a/source/_integrations/http.markdown +++ b/source/_integrations/http.markdown @@ -42,7 +42,7 @@ server_port: type: integer default: 8123 ssl_certificate: - description: Path to your TLS/SSL certificate to serve Home Assistant over a secure connection. If using the [Let's Encrypt add-on](https://github.com/home-assistant/hassio-addons/tree/master/letsencrypt) this will be at `/ssl/fullchain.pem`. We recommend to use the [NGINX add-on](https://github.com/home-assistant/addons/tree/master/nginx_proxy) instead of using this option. + description: Path to your TLS/SSL certificate to serve Home Assistant over a secure connection. If using the [Let's Encrypt add-on](https://github.com/home-assistant/addons/tree/master/letsencrypt) this will be at `/ssl/fullchain.pem`. We recommend to use the [NGINX add-on](https://github.com/home-assistant/addons/tree/master/nginx_proxy) instead of using this option. required: false type: string ssl_peer_certificate: @@ -50,7 +50,7 @@ ssl_peer_certificate: required: false type: string ssl_key: - description: Path to your TLS/SSL key to serve Home Assistant over a secure connection. If using the [Let's Encrypt add-on](https://github.com/home-assistant/hassio-addons/tree/master/letsencrypt) this will be at `/ssl/privkey.pem`. + description: Path to your TLS/SSL key to serve Home Assistant over a secure connection. If using the [Let's Encrypt add-on](https://github.com/home-assistant/addons/tree/master/letsencrypt) this will be at `/ssl/privkey.pem`. required: false type: string cors_allowed_origins: @@ -118,7 +118,7 @@ http: ## APIs -On top of the `http` integration is a [REST API](https://developers.home-assistant.io/docs/api/rest), [Python API](https://developers.home-assistant.io/docs/api_lib_index) and [WebSocket API](https://developers.home-assistant.io/docs/api/websocket) available. +On top of the `http` integration is a [REST API](https://developers.home-assistant.io/docs/api/rest/), [Python API](https://developers.home-assistant.io/docs/api_lib_index/) and [WebSocket API](https://developers.home-assistant.io/docs/api/websocket/) available. The `http` platforms are not real platforms within the meaning of the terminology used around Home Assistant. Home Assistant's [REST API](/developers/rest_api/) sends and receives messages over HTTP. @@ -188,7 +188,7 @@ $ curl -X POST -H "Authorization: Bearer LONG_LIVED_ACCESS_TOKEN" \ http://localhost:8123/api/states/binary_sensor.radio ``` -To check if the sensor is working, use again `curl` to retrieve the [current state](/developers/rest_api/#get-apistatesltentity_id). +To check if the sensor is working, use again `curl` to retrieve the [current state](https://developers.home-assistant.io/docs/api/rest/). ```bash $ curl -X GET -H "Authorization: Bearer LONG_LIVED_ACCESS_TOKEN" \ @@ -227,7 +227,7 @@ print(response.text) #### Using `httpie` -[`httpie`](https://github.com/jkbrzt/httpie) is a user-friendly CLI HTTP client. +[`httpie`](https://github.com/httpie/httpie) is a user-friendly CLI HTTP client. ```bash $ http -v POST http://localhost:8123/api/states/binary_sensor.radio \ @@ -266,7 +266,7 @@ $ curl -X POST -H "Authorization: Bearer LONG_LIVED_ACCESS_TOKEN" \ http://localhost:8123/api/states/sensor.bathroom_temperature ``` -You can then use `curl` again to retrieve the [current sensor state](/developers/rest_api/#get-apistatesltentity_id) and verify the sensor is working. +You can then use `curl` again to retrieve the [current sensor state](https://developers.home-assistant.io/docs/api/rest/) and verify the sensor is working. ```bash $ curl -X GET -H "Authorization: Bearer LONG_LIVED_ACCESS_TOKEN" \ diff --git a/source/_integrations/humidifier.mqtt.markdown b/source/_integrations/humidifier.mqtt.markdown index 8921ff1f731..5a6e8600c60 100644 --- a/source/_integrations/humidifier.mqtt.markdown +++ b/source/_integrations/humidifier.mqtt.markdown @@ -121,7 +121,7 @@ device: required: false type: string device_class: - description: The device class of the MQTT device. Must be either `humidifier` or `dehumidifier`. + description: The device class of the MQTT device. Must be either `humidifier`, `dehumidifier` or `null`. required: false type: string default: humidifier @@ -221,7 +221,7 @@ target_humidity_state_topic: target_humidity_state_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the humidifier `target_humidity` state. required: false - type: string + type: template mode_command_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `mode_command_topic`. required: false @@ -237,7 +237,7 @@ mode_state_topic: mode_state_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the humidifier `mode` state. required: false - type: string + type: template modes: description: List of available modes this humidifier is capable of running at. Common examples include `normal`, `eco`, `away`, `boost`, `comfort`, `home`, `sleep`, `auto` and `baby`. These examples offer built-in translations but other custom modes are allowed as well. This attribute ust be configured together with the `mode_command_topic` attribute. required: false @@ -260,7 +260,7 @@ state_topic: state_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the state." required: false - type: string + type: template unique_id: description: An ID that uniquely identifies this humidifier. If two humidifiers have the same unique ID, Home Assistant will raise an exception. required: false diff --git a/source/_integrations/hunterdouglas_powerview.markdown b/source/_integrations/hunterdouglas_powerview.markdown index b23853631b8..2c9291ef121 100644 --- a/source/_integrations/hunterdouglas_powerview.markdown +++ b/source/_integrations/hunterdouglas_powerview.markdown @@ -178,7 +178,7 @@ Set the type for connected power source. Available options are Hardwired Power S ### Calling a Powerview Scene ``` yaml -alias: "blinds closed at night" +alias: "Blinds closed at night" trigger: platform: time at: "18:00:00" diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown index bab39c40ff0..dd75a3c182b 100644 --- a/source/_integrations/imap.markdown +++ b/source/_integrations/imap.markdown @@ -11,6 +11,7 @@ ha_platforms: ha_integration_type: integration ha_codeowners: - '@engrbm87' + - '@jbouwh' ha_config_flow: true --- @@ -49,6 +50,21 @@ Below is an example for setting up the integration to connect to your Microsoft - Password: Your password - Charset: `US-ASCII` +### Selecting an alternate SSL cipher list (advanced mode) + +If the default IMAP server settings do not work, you might try to set an alternate SLL cipher list. +The SSL cipher list option allows to select the list of SSL ciphers to be accepted from this endpoint. `default` (_system default_), `modern` or `intermediate` (_inspired by [Mozilla Security/Server Side TLS](https://wiki.mozilla.org/Security/Server_Side_TLS)_) + +
    + +The SSL cipher list is an advanced setting. The option is available only when advanced mode is enabled (see user settings). + +
    + +### Troubleshooting + +Email providers may limit the number of reported emails. The number may be less than the limit (10,000 at least for Yahoo) even if you set the `IMAP search` to reduce the number of results. If you are not getting expected events and cleaning your Inbox or the configured folder is not desired, set up an email filter for the specific sender to go into a new folder. Then create a new config entry or modify the existing one with the desired folder. + ### Using events When a new message arrives that meets the search criteria the `imap` integration will send a custom [event](/docs/automation/trigger/#event-trigger) that can be used to trigger an automation. @@ -66,7 +82,7 @@ search: folder: description: The IMAP folder configuration text: - description: The email body `text` of the the message + description: The email body `text` of the the message (only the first 2048 bytes will be available) sender: description: The `sender` of the message subject: diff --git a/source/_integrations/imap_email_content.markdown b/source/_integrations/imap_email_content.markdown deleted file mode 100644 index f045047edeb..00000000000 --- a/source/_integrations/imap_email_content.markdown +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: IMAP Email Content -description: Instructions on how to integrate IMAP email content sensor into Home Assistant. -ha_category: - - Mailbox -ha_iot_class: Cloud Push -ha_release: 0.25 -ha_domain: imap_email_content -ha_platforms: - - sensor -ha_integration_type: integration ---- - -The `imap_email_content` integration will read emails from an IMAP email server and report them as a state change within Home Assistant. This is useful if you have a device that only reports its state via email. - -## Configuration - -To enable this sensor, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: imap_email_content - server: imap.gmail.com - port: 993 - username: YOUR_USERNAME - password: YOUR_PASSWORD - folder: YOUR_FOLDER - senders: - - example@gmail.com -``` - -{% configuration %} -server: - description: The IP address or hostname of the IMAP server. - required: true - type: string -port: - description: The port where the server is accessible. - required: false - default: 993 - type: integer -name: - description: Name of the IMAP sensor. - required: false - type: string -username: - description: Username for the IMAP server. - required: true - type: string -password: - description: Password for the IMAP server. - required: true - type: string -folder: - description: Folder to get mails from. - required: false - default: INBOX - type: string -senders: - description: A list of sender email addresses that are allowed to report state via email. Only emails received from these addresses will be processed. - required: true - type: string -value_template: - description: If specified this template will be used to render the state of the sensor. If a template is not supplied the message subject will be used for the sensor value. The following attributes will be supplied to the template. - required: false - type: template - keys: - from: - description: The from address of the email. - body: - description: The body of the email. - subject: - description: The subject of the email. - date: - description: The date and time the email was sent. -verify_ssl: - description: If the SSL certificate of the server needs to be verified. - required: false - type: boolean - default: true -{% endconfiguration %} - -## Example - keyword spotting - -The following example shows the usage of the IMAP email content sensor to scan the subject of an email for text, in this case, an email from the APC SmartConnect service which tells whether the UPS is running on battery or not. - -{% raw %} - -```yaml -sensor: - - platform: imap_email_content - server: imap.gmail.com - name: house_electricity - port: 993 - username: MY_EMAIL_USERNAME - password: MY_EMAIL_PASSWORD - senders: - - no-reply@smartconnect.apc.com - value_template: >- - {% if 'UPS On Battery' in subject %} - power_out - {% elif 'Power Restored' in subject %} - power_on - {% endif %} -``` - -{% endraw %} - -The same template structure can scan the date, body or sender for matching text before setting the state of the sensor. - -## Example - extracting formatted text from an email using template sensors - -This example shows how to extract numbers or other formatted data from an email to change the value of a template sensor to a value extracted from the email. In this example, we will be extracting energy use, cost, and billed amount from an email (from Georgia Power) and putting it into sensor values using a template sensor that runs against our IMAP email sensor already set up. A sample of the body of the email used is below: - -```text -Yesterday's Energy Use: 76 kWh -Yesterday's estimated energy cost: $8 -Monthly Energy use-to-date for 23 days: 1860 kWh -Monthly estimated energy cost-to-date for 23 days: $198 - -To view your account for details about your energy use, please click here. -``` - -Below is the template sensor which extracts the information from the body of the email in our IMAP email sensor (named sensor.energy_email) into 3 sensors for the energy use, daily cost, and billing cycle total. - -{% raw %} - -```yaml -template: - - sensor: - - name: "Previous Day Energy Use" - unit_of_measurement: "kWh" - state: > - {{ state_attr('sensor.energy_email','body') - | regex_findall_index("\*Yesterday's Energy Use:\* ([0-9]+) kWh") }} - - name: "Previous Day Cost" - unit_of_measurement: "$" - state: > - {{ state_attr('sensor.energy_email', 'body') - | regex_findall_index("\*Yesterday's estimated energy cost:\* \$([0-9.]+)") }} - - name: "Billing Cycle Total" - unit_of_measurement: "$" - state: > - {{ state_attr('sensor.energy_email', 'body') - | regex_findall_index("\ days:\* \$([0-9.]+)") }} -``` - -{% endraw %} - -By making small changes to the regular expressions defined above, a similar structure can parse other types of data out of the body of other emails. diff --git a/source/_integrations/input_boolean.markdown b/source/_integrations/input_boolean.markdown index 06c58a8f244..c5bf4bb55da 100644 --- a/source/_integrations/input_boolean.markdown +++ b/source/_integrations/input_boolean.markdown @@ -14,15 +14,15 @@ ha_integration_type: helper The Input Boolean helper integration allows you to define boolean values that can be controlled via the user interface and can be used within conditions of -an automation. This can for example be used to disable or enable certain -automations by using them in their conditions. +an {% term automation %}. This can for example be used to disable or enable certain +automations by using them in their {% term conditions %}. ## Configuration The preferred way to configure input boolean helpers is via the user interface, in which they are known as Toggle Helpers. To add one, go to -**{% my helpers title="Settings -> Devices & Services -> Helpers" %}** and click the add button; -next choose the "**Toggle**" option. +**{% my helpers title="Settings > Devices & Services > Helpers" %}** and click the add button; +next choose the **{% my config_flow_start domain=input_boolean title="Toggle" %}** 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 @@ -32,14 +32,6 @@ then you can use the UI. Input booleans can also be configured via `configuration.yaml`: -```yaml -# Example configuration.yaml entry -input_boolean: - notify_home: - name: Notify when someone arrives home - icon: mdi:car -``` - {% configuration %} input_boolean: description: Alias for the input. Multiple entries are allowed. @@ -61,9 +53,17 @@ input_boolean: type: icon {% endconfiguration %} +```yaml +# Example configuration.yaml entry +input_boolean: + notify_home: + name: Notify when someone arrives home + icon: mdi:car +``` + ## Services -This integration provides the following services to modify the state of the +This integration provides the following {% term services %} to modify the state of the `input_boolean` and a service to reload the configuration without restarting Home Assistant itself. @@ -105,7 +105,7 @@ automation: You can also set or change the status of an `input_boolean` by using `input_boolean.turn_on`, `input_boolean.turn_off` or `input_boolean.toggle` in -your automations. +your automation action. ```yaml service: input_boolean.turn_on diff --git a/source/_integrations/input_button.markdown b/source/_integrations/input_button.markdown index e118a67f2fd..2c1582a4e7d 100644 --- a/source/_integrations/input_button.markdown +++ b/source/_integrations/input_button.markdown @@ -20,7 +20,7 @@ like an automation. The preferred way to configure button helpers is via the user interface. To add one, go to **{% my helpers title="Settings -> Devices & Services -> Helpers" %}** -and click the add button; next choose the "**Button**" option. +and click the add button; next choose the **{% my config_flow_start domain=input_button title="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 diff --git a/source/_integrations/input_datetime.markdown b/source/_integrations/input_datetime.markdown index 4241c099b67..acadba486b3 100644 --- a/source/_integrations/input_datetime.markdown +++ b/source/_integrations/input_datetime.markdown @@ -16,9 +16,9 @@ The `input_datetime` integration allows the user to define date and time values that can be controlled via the frontend and can be used within automations and templates. -The preferred way to configure input datetime is via the user interface at **Settings** -> **Devices & Services** -> **Helpers**. Click the add button and then choose the **Date and/or time** option. +The preferred way to configure input datetime is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain=input_datetime title="Date and/or time" %}** 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. +To be able to add **{% my helpers title="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_datetime:` to your `configuration.yaml` first, then you can use the UI. `input_datetime` can also be configured via YAML. To add three datetime inputs to your installation, diff --git a/source/_integrations/input_number.markdown b/source/_integrations/input_number.markdown index ef0011ea2a7..7992d51b596 100644 --- a/source/_integrations/input_number.markdown +++ b/source/_integrations/input_number.markdown @@ -14,7 +14,7 @@ ha_integration_type: helper The `input_number` integration allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. The frontend can display a slider, or a numeric input box. Changes to the slider or numeric input box generate state events. These state events can be utilized as `automation` triggers as well. -The preferred way to configure an input number is via the user interface at **Settings** -> **Devices & Services** -> **Helpers**. Click the add button and then choose the **Number** option. +The preferred way to configure an input number is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain=input_number title="Number" %}** 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 you configuration, you must add `input_number:` to your `configuration.yaml` first, then you can use the UI. diff --git a/source/_integrations/input_select.markdown b/source/_integrations/input_select.markdown index 838e64596be..45dea5f333a 100644 --- a/source/_integrations/input_select.markdown +++ b/source/_integrations/input_select.markdown @@ -14,7 +14,7 @@ ha_integration_type: helper The `input_select` integration allows the user to define a list of values that can be selected via the frontend and can be used within conditions of an automation. When a user selects a new item, a state transition event is generated. This state event can be used in an `automation` trigger. -The preferred way to configure an input select is via the user interface at **Settings** -> **Devices & Services** -> **Helpers**. Click the add button and then choose the **Dropdown** option. +The preferred way to configure an input select is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain=input_select title="Dropdown" %}** 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 you configuration, you must add `input_select:` to your `configuration.yaml` first, then you can use the UI. diff --git a/source/_integrations/input_text.markdown b/source/_integrations/input_text.markdown index a78dd86a278..8062b4931a5 100644 --- a/source/_integrations/input_text.markdown +++ b/source/_integrations/input_text.markdown @@ -14,10 +14,10 @@ ha_integration_type: helper The `input_text` integration allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. Changes to the value stored in the text box generate state events. These state events can be utilized as `automation` triggers as well. It can also be configured in password mode (obscured text). -The preferred way to configure an input text is via the user interface at **Settings** -> **Devices & Services** -> **Helpers**. Click the add button and then choose the **Text** option. +The preferred way to configure an input text is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}**. Click the add button and then choose the **{% my config_flow_start domain=input_text title="Text" %}** 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 you configuration, you must add `input_text:` to your `configuration.yaml` first, then you can use the UI. +If you removed `default_config:` from your configuration, you must add `input_text:` to your `configuration.yaml` first, then you can use the UI. It can also be configured via `configuration.yaml`: diff --git a/source/_integrations/insteon.markdown b/source/_integrations/insteon.markdown index f25292806a8..ce459b1eea8 100644 --- a/source/_integrations/insteon.markdown +++ b/source/_integrations/insteon.markdown @@ -186,6 +186,6 @@ Many users tried to factory reset their Insteon Hub when the Insteon app stopped - If you have a Hub v2 you will need the default username and password which are printed on the bottom of the Hub -3. Add devices to the Hub using the instructions for adding devices to the INSTEON integration using the [Insteon Panel]](#insteon-panel) +3. Add devices to the Hub using the instructions for adding devices to the Insteon integration using the [Insteon Panel](#insteon-panel) Once your devices are linked to the Hub again they will appear in Home Assistant automatically. diff --git a/source/_integrations/itach.markdown b/source/_integrations/itach.markdown index 623ed125b62..8d2f5648877 100644 --- a/source/_integrations/itach.markdown +++ b/source/_integrations/itach.markdown @@ -11,9 +11,9 @@ ha_platforms: ha_integration_type: integration --- -The `itach` remote platform allows you to control IR devices with a [Global Caché iTach Device](https://www.globalcache.com/products/itach/ip2irspecs) and GC-100 devices. The Global Cache IR API are similar across their product line. See API documentation links at the end of this page. +The `itach` remote platform allows you to control IR devices with a Global Caché iTach Device and GC-100 devices. The Global Cache IR API are similar across their product line. See API documentation links at the end of this page. -In order to utilize the digital input (binary sensor) and relay (switch) features of your Global Cache device you will need to use the [gc100 component](/integrations/gc100) and associated platforms. +In order to utilize the digital input (binary sensor) and relay (switch) features of your Global Cache device you will need to use the [gc100 integration](/integrations/gc100) and associated platforms. To use your iTach remote in your installation, you will need to know the IR commands for your devices in Pronto hex format and add the following to your `configuration.yaml` file: diff --git a/source/_integrations/joaoapps_join.markdown b/source/_integrations/joaoapps_join.markdown index 8f8e48379e9..b0d498782af 100644 --- a/source/_integrations/joaoapps_join.markdown +++ b/source/_integrations/joaoapps_join.markdown @@ -57,7 +57,7 @@ device_names: required: false type: string name: - description: The name parameter is optional but needed if you want to use multiple notification platforms. The platform will be exposed as service `notify.`. The name will default to `notify` if not supplied. See the [Notifications Component](/integrations/notify) for more details. + description: The name parameter is optional but needed if you want to use multiple notification platforms. The platform will be exposed as service `notify.`. The name will default to `notify` if not supplied. See the [Notifications integration](/integrations/notify) for more details. required: false type: string {% endconfiguration %} diff --git a/source/_integrations/kraken.markdown b/source/_integrations/kraken.markdown index 5c17b3457f9..557293f4a8b 100644 --- a/source/_integrations/kraken.markdown +++ b/source/_integrations/kraken.markdown @@ -16,7 +16,7 @@ ha_integration_type: integration --- The Kraken integration allows you to monitor exchange rates on [kraken.com](https://www.kraken.com/). -For a list of tradable asset pairs check [this kraken support article](https://support.kraken.com/hc/en-us/articles/201893658-Currency-pairs-available-for-trading-on-Kraken). +For a list of tradable asset pairs check [this kraken support article](https://support.kraken.com/hc/articles/201893658-Currency-pairs-available-for-trading-on-Kraken). {% include integrations/config_flow.md %} diff --git a/source/_integrations/lifx.markdown b/source/_integrations/lifx.markdown index d53819d42d4..5371bc535ce 100644 --- a/source/_integrations/lifx.markdown +++ b/source/_integrations/lifx.markdown @@ -19,7 +19,6 @@ ha_platforms: ha_integration_type: integration ha_codeowners: - '@bdraco' - - '@Djelibeybi' ha_quality_scale: platinum ha_dhcp: true --- @@ -126,7 +125,7 @@ script: ### Hardware effects -The Flame (`lifx_effect_flame`), Morph (`lifx.effect_morph`) and Move (`lifx.effect_move`) effects are hardware-based and only work on specific LIFX devices. Flame and Morph are available on the LIFX Tile and Candle, while the Move effect requires a LIFX Z, Lightstrip, or Beam. +The Flame (`lifx.effect_flame`), Morph (`lifx.effect_morph`) and Move (`lifx.effect_move`) effects are hardware-based and only work on specific LIFX devices. Flame and Morph are available on the LIFX Tile and Candle, while the Move effect requires a LIFX Z, Lightstrip, or Beam. All hardware-based effects can be stopped and started regardless of the device's power state, but the default behavior for each service is to turn the device on when starting an effect. Set the `power_on` attribute of the service to `false` to override this default. diff --git a/source/_integrations/light.markdown b/source/_integrations/light.markdown index fe52fa30ff4..ded61b41d64 100644 --- a/source/_integrations/light.markdown +++ b/source/_integrations/light.markdown @@ -20,7 +20,7 @@ To set the default color, brightness and transition values when the light is tur The `light_profiles.csv` has to have a header. The format of the header is: ```txt -profile,color_x,color_y,brightness,transition +id,x,y,brightness,transition ``` The field transition is optional and can be omitted. @@ -49,8 +49,9 @@ Most lights do not support all attributes. You can check the integration documen | `rgb_color` | yes | A list containing three integers between 0 and 255 representing the RGB color you want the light to be. Three comma-separated integers that represent the color in RGB, within square brackets. | `rgbw_color` | yes | A list containing four integers between 0 and 255 representing the RGBW color you want the light to be. Four comma-separated integers that represent the color in RGBW (red, green, blue, white), within square brackets. This attribute will be ignored by lights which do not support RGBW colors. | `rgbww_color` | yes | A list containing five integers between 0 and 255 representing the RGBWW color you want the light to be. Five comma-separated integers that represent the color in RGBWW (red, green, blue, cold white, warm white), within square brackets. This attribute will be ignored by lights which do not support RGBWW colors. -| `kelvin` | yes | An integer in Kelvin representing the color temperature you want the light to be. -| `color_temp` | yes | Alternatively, you can specify the color temperature in Mireds. +| `color_temp_kelvin` | yes | An integer in Kelvin representing the color temperature you want the light to be. +| `kelvin` | yes | (Deprecated) Use `color_temp_kelvin` instead. +| `color_temp` | yes | (Deprecated) Alternatively, you can specify the color temperature in Mireds. | `color_name` | yes | A human-readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/css-color-3/#svg-color) are supported. | `brightness` | yes | Integer between 0 and 255 for how bright the light should be, where 0 means the light is off, 1 is the minimum brightness and 255 is the maximum brightness supported by the light. | `brightness_pct`| yes | Alternatively, you can specify brightness in percent (a number between 0 and 100), where 0 means the light is off, 1 is the minimum brightness and 100 is the maximum brightness supported by the light. diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index 1d853dcd1ba..408e577d9c6 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -95,7 +95,7 @@ brightness_command_topic: brightness_command_template: description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `brightness_command_topic`. Available variables: `value`." required: false - type: string + type: template brightness_scale: description: "Defines the maximum brightness value (i.e., 100%) of the MQTT device." required: false @@ -108,7 +108,7 @@ brightness_state_topic: brightness_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the brightness value." required: false - type: string + type: template color_mode_state_topic: description: "The MQTT topic subscribed to receive color mode updates. If this is not configured, `color_mode` will be automatically set according to the last received valid color or color temperature" required: false @@ -116,11 +116,11 @@ color_mode_state_topic: color_mode_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the color mode." required: false - type: string + type: template color_temp_command_template: description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `color_temp_command_topic`. Available variables: `value`." required: false - type: string + type: template color_temp_command_topic: description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 153 to 500 mireds (micro reciprocal degrees). required: false @@ -132,7 +132,7 @@ color_temp_state_topic: color_temp_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the color temperature value." required: false - type: string + type: template command_topic: description: The MQTT topic to publish commands to change the switch state. required: true @@ -204,7 +204,7 @@ effect_command_topic: effect_command_template: description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `effect_command_topic`. Available variables: `value`." required: false - type: string + type: template effect_list: description: The list of effects the light supports. required: false @@ -216,11 +216,11 @@ effect_state_topic: effect_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the effect value." required: false - type: string + type: template hs_command_template: description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `hs_command_topic`. Available variables: `hue` and `sat`." required: false - type: string + type: template hs_command_topic: description: "The MQTT topic to publish commands to change the light's color state in HS format (Hue Saturation). Range for Hue: 0° .. 360°, Range of Saturation: 0..100. @@ -235,7 +235,7 @@ hs_state_topic: hs_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the HS value." required: false - type: string + type: template icon: description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." required: false @@ -307,7 +307,7 @@ retain: rgb_command_template: description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`." required: false - type: string + type: template rgb_command_topic: description: "The MQTT topic to publish commands to change the light's RGB state." required: false @@ -319,11 +319,11 @@ rgb_state_topic: rgb_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGB value." required: false - type: string + type: template rgbw_command_template: description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgbw_command_topic`. Available variables: `red`, `green`, `blue` and `white`." required: false - type: string + type: template rgbw_command_topic: description: "The MQTT topic to publish commands to change the light's RGBW state." required: false @@ -335,11 +335,11 @@ rgbw_state_topic: rgbw_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGBW value." required: false - type: string + type: template rgbww_command_template: description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgbww_command_topic`. Available variables: `red`, `green`, `blue`, `cold_white` and `warm_white`." required: false - type: string + type: template rgbww_command_topic: description: "The MQTT topic to publish commands to change the light's RGBWW state." required: false @@ -351,7 +351,7 @@ rgbww_state_topic: rgbww_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGBWW value." required: false - type: string + type: template schema: description: The schema to use. Must be `default` or omitted to select the default schema. required: false @@ -364,7 +364,7 @@ state_topic: state_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the state value. The template should match the payload `on` and `off` values, so if your light uses `power on` to turn on, your `state_value_template` string should return `power on` when the switch is on. For example if the message is just `on`, your `state_value_template` should be `power {{ value }}`." required: false - type: string + type: template unique_id: description: An ID that uniquely identifies this light. If two lights have the same unique ID, Home Assistant will raise an exception. required: false @@ -381,7 +381,7 @@ white_scale: xy_command_template: description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `xy_command_topic`. Available variables: `x` and `y`." required: false - type: string + type: template xy_command_topic: description: "The MQTT topic to publish commands to change the light's XY state." required: false @@ -393,7 +393,7 @@ xy_state_topic: xy_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the XY value." required: false - type: string + type: template {% endconfiguration %}
    @@ -928,23 +928,23 @@ availability_topic: blue_template: description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract blue color from the state payload value. Expected result of the template is an integer from 0-255 range." required: false - type: string + type: template brightness_template: description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract brightness from the state payload value. Expected result of the template is an integer from 0-255 range." required: false - type: string + type: template color_temp_template: description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract color temperature from the state payload value. Expected result of the template is an integer representing mired units." required: false - type: string + type: template command_off_template: description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) for *off* state changes. Available variables: `state` and `transition`." required: true - type: string + type: template command_on_template: description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) for *on* state changes. Available variables: `state`, `brightness`, `color_temp`, `red`, `green`, `blue`, `flash`, `transition` and `effect`. Values `red`, `green`, `blue`, `brightness` are provided as integers from range 0-255. Value of `color_temp` is provided as integer representing mired units." required: true - type: string + type: template command_topic: description: The MQTT topic to publish commands to change the light’s state. required: true @@ -1004,11 +1004,11 @@ effect_list: effect_template: description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract effect from the state payload value." required: false - type: string + type: template green_template: description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract green color from the state payload value. Expected result of the template is an integer from 0-255 range." required: false - type: string + type: template icon: description: "[Icon](/docs/configuration/customizing-devices/#icon) for the entity." required: false @@ -1061,7 +1061,7 @@ qos: red_template: description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract red color from the state payload value. Expected result of the template is an integer from 0-255 range." required: false - type: string + type: template schema: description: The schema to use. Must be `template` to select the template schema. required: false @@ -1070,7 +1070,7 @@ schema: state_template: description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract state from the state payload value." required: false - type: string + type: template state_topic: description: The MQTT topic subscribed to receive state updates. required: false diff --git a/source/_integrations/lirc.markdown b/source/_integrations/lirc.markdown index 01bce63a6aa..12bec615c0e 100644 --- a/source/_integrations/lirc.markdown +++ b/source/_integrations/lirc.markdown @@ -9,9 +9,9 @@ ha_domain: lirc ha_integration_type: integration --- -[LIRC](http://www.lirc.org/) integration for Home Assistant allows you to receive signals from an infrared remote control and control actions based on the buttons you press. You can use them to set scenes or trigger any other [automation](/integrations/automation/). +[LIRC](https://www.lirc.org/) integration for Home Assistant allows you to receive signals from an infrared remote control and control actions based on the buttons you press. You can use them to set scenes or trigger any other [automation](/docs/automation/). -Sending IR commands is not supported in this integration (yet), but can be accomplished using the [shell_command component](/integrations/shell_command/) in conjunction with the `irsend` command. +Sending IR commands is not supported in this integration (yet), but can be accomplished using the [shell_command integration](/integrations/shell_command/) in conjunction with the `irsend` command. ## Installation @@ -36,9 +36,9 @@ For more information have a look at `/usr/share/doc/lirc/README.Debian.gz` where ## Configuring LIRC -Now teach LIRC about your particular remote control by preparing a lircd configuration file (`/etc/lirc/lircd.conf`). Search the [LIRC remote database](http://lirc.sourceforge.net/remotes/) for your model. If you can't find it, then you can always use the `irrecord` program to learn your remote. This will create a valid configuration file. Add as many remotes as you want by pasting them into the file. If `irrecord` doesn't work (e.g., for some air conditioner remotes), then the `mode2` program is capable of reading the codes in raw mode, followed by `irrecord -a` to extract hex codes. +Now teach LIRC about your particular remote control by preparing a lircd configuration file (`/etc/lirc/lircd.conf`). Search the [LIRC remote database](https://lirc.sourceforge.net/remotes/) for your model. If you can't find it, then you can always use the `irrecord` program to learn your remote. This will create a valid configuration file. Add as many remotes as you want by pasting them into the file. If `irrecord` doesn't work (e.g., for some air conditioner remotes), then the `mode2` program is capable of reading the codes in raw mode, followed by `irrecord -a` to extract hex codes. -Next, you have to make a `~/.lircrc` file that maps keypresses to system actions. The file has to be in the home dir of the user running Home Assistant, e.g., in `/home/homeassistant/.lircrc` if you're running in a virtual env. [The configuration](http://www.lirc.org/html/configure.html) is a bit tedious but it must be done. Use the `prog = home-assistant` for all keys you want to be recognized by Home Assistant. The values you set for `button` must be the same as in the `lircd.conf` file and the values you put for `config` entry will be the sensor value in Home Assistant when you press the button. An example may look like this: +Next, you have to make a `~/.lircrc` file that maps keypresses to system actions. The file has to be in the home dir of the user running Home Assistant, e.g., in `/home/homeassistant/.lircrc` if you're running in a virtual env. [The configuration](https://www.lirc.org/html/configure.html) is a bit tedious but it must be done. Use the `prog = home-assistant` for all keys you want to be recognized by Home Assistant. The values you set for `button` must be the same as in the `lircd.conf` file and the values you put for `config` entry will be the sensor value in Home Assistant when you press the button. An example may look like this: ```bash begin diff --git a/source/_integrations/lock.mqtt.markdown b/source/_integrations/lock.mqtt.markdown index 7a494761678..34126f945c8 100644 --- a/source/_integrations/lock.mqtt.markdown +++ b/source/_integrations/lock.mqtt.markdown @@ -238,7 +238,7 @@ unique_id: value_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a state value from the payload. required: false - type: string + type: template {% endconfiguration %}
    diff --git a/source/_integrations/london_air.markdown b/source/_integrations/london_air.markdown index 5385ea9c77f..8e34851c4a0 100644 --- a/source/_integrations/london_air.markdown +++ b/source/_integrations/london_air.markdown @@ -13,7 +13,7 @@ ha_integration_type: integration The `london_air` integration [queries](https://api.erg.kcl.ac.uk/AirQuality/Hourly/MonitoringIndex/GroupName=London/Json) the London air quality [data feed](https://www.londonair.org.uk/LondonAir/API/) provided by Kings College London. A single sensor will be added for each `location` ([local authority district or borough](https://en.wikipedia.org/wiki/List_of_London_boroughs)) specified in the configuration file. The state of each sensor is the overall air quality in that borough. Note that only 28 of the 32 boroughs have data available. -Boroughs can have multiple monitoring sites at different geographical positions within the borough, and each of those sites can monitor up to six different kinds of pollutant. The pollutants are described [here](https://api.erg.kcl.ac.uk/AirQuality/Information/Species/Json) and are Carbon Monoxide ([CO2](https://www.londonair.org.uk/LondonAir/guide/WhatIsCO.aspx)), Nitrogen Dioxide ([NO2](https://www.londonair.org.uk/LondonAir/guide/WhatIsNO2.aspx)), Ozone ([O3](https://www.londonair.org.uk/LondonAir/guide/WhatIsO3.aspx)), Sulfur Dioxide ([SO2](https://www.londonair.org.uk/LondonAir/guide/WhatIsSO2.aspx)), PM2.5 & PM10 [particulates](https://www.londonair.org.uk/LondonAir/guide/WhatIsPM.aspx). The `latitude` and `longitude` of each site is accessible through a `data` attribute of the sensor, as are details about the pollutants monitored at that site. The `sites` attribute of a sensor displays how many monitoring sites that sensor covers. The `updated` attribute of a sensor states when the data was last published. Nominally data is published hourly, but in my experience this can vary. To limit the number of requests made by the sensor, a single API request is made every 30 minutes. +Boroughs can have multiple monitoring sites at different geographical positions within the borough, and each of those sites can monitor up to six different kinds of pollutant. The pollutants are described [here](https://api.erg.kcl.ac.uk/AirQuality/Information/Species/Json) and are Carbon Monoxide ([CO](https://www.londonair.org.uk/LondonAir/guide/WhatIsCO.aspx)), Nitrogen Dioxide ([NO2](https://www.londonair.org.uk/LondonAir/guide/WhatIsNO2.aspx)), Ozone ([O3](https://www.londonair.org.uk/LondonAir/guide/WhatIsO3.aspx)), Sulfur Dioxide ([SO2](https://www.londonair.org.uk/LondonAir/guide/WhatIsSO2.aspx)), PM2.5 & PM10 [particulates](https://www.londonair.org.uk/LondonAir/guide/WhatIsPM.aspx). The `latitude` and `longitude` of each site is accessible through a `data` attribute of the sensor, as are details about the pollutants monitored at that site. The `sites` attribute of a sensor displays how many monitoring sites that sensor covers. The `updated` attribute of a sensor states when the data was last published. Nominally data is published hourly, but in my experience this can vary. To limit the number of requests made by the sensor, a single API request is made every 30 minutes. To add sensors to Home Assistant for all possible areas/boroughs add the following to your `configuration.yaml` file: diff --git a/source/_integrations/mailgun.markdown b/source/_integrations/mailgun.markdown index be485a7bfe2..654fd8562a2 100644 --- a/source/_integrations/mailgun.markdown +++ b/source/_integrations/mailgun.markdown @@ -12,7 +12,7 @@ ha_platforms: ha_integration_type: integration --- -To be able to receive webhooks from Mailgun, your Home Assistant instance needs to be accessible from the web and you need to have the extern URL [configured](/docs/configuration/basic)). +To be able to receive webhooks from Mailgun, your Home Assistant instance needs to be accessible from the web and you need to have the external URL [configured](/docs/configuration/basic)). To set it up, go to the integrations page in the configuration screen and find Mailgun. Click on configure. Follow the instructions on the screen to configure Mailgun. diff --git a/source/_integrations/matrix.markdown b/source/_integrations/matrix.markdown index fbe30367f05..5ced1b42f3d 100644 --- a/source/_integrations/matrix.markdown +++ b/source/_integrations/matrix.markdown @@ -100,7 +100,7 @@ This example also uses the [matrix `notify` platform](#notifications). {% raw %} ```yaml -# The Matrix component +# The Matrix integration matrix: homeserver: https://matrix.org username: "@my_matrix_user:matrix.org" @@ -155,7 +155,7 @@ This configuration will: The `matrix` platform allows you to deliver notifications from Home Assistant to a [Matrix](https://matrix.org/) room. Rooms can be both direct as well as group chats. -To enable Matrix notifications in your installation, you first need to configure the [Matrix component](#configuration). Then, add the following to your `configuration.yaml` file: +To enable Matrix notifications in your installation, you first need to configure the [Matrix integration](#configuration). Then, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown index df427facef1..c3e66f29019 100644 --- a/source/_integrations/matter.markdown +++ b/source/_integrations/matter.markdown @@ -3,6 +3,7 @@ title: Matter (BETA) description: Instructions on how to integrate Matter with Home Assistant. ha_category: - Binary Sensor + - Cover - Light - Lock - Sensor @@ -15,6 +16,7 @@ ha_codeowners: ha_domain: matter ha_platforms: - binary_sensor + - cover - diagnostics - light - lock @@ -23,62 +25,101 @@ ha_platforms: ha_integration_type: integration --- -The Matter integration allows you to control Matter devices on your local WiFi or Thread network. +The Matter integration allows you to control Matter devices on your local Wi-Fi or {% term Thread %} network. -Matter is [the new standard for home automation](https://en.wikipedia.org/wiki/Matter_(standard)) which has just been released. It is in the process of being adopted by the tech industry. Matter is a local protocol, device control is done without the need of any cloud. You can use a Matter compatible device with Home Assistant without having to connect to a vendor specific cloud. +
    +The integration is marked BETA: Both the Matter standard itself and its implementation within Home Assistant are in a early stage. You may run into compatibility issues and/or other bugs. +
    -Matter devices are available using either WiFi based communication or [Thread](/integrations/thread/), both are supported by Home Assistant. Bluetooth is used for adding new devices to your Matter network. +# What is Matter? -Home Assistant only supports control of Matter devices. Home Assistant is not a bridge itself and it cannot turn devices within Home Assistant into Matter compatible devices. +Matter is [the new standard for home automation](), which has been released recently. It is in the process of being adopted by the tech industry. Matter is a local protocol. Device control is done without the need of any cloud. From a technical perspective, you can use a Matter-compatible device with Home Assistant without connecting to a vendor-specific cloud. However, some vendors may require you to set up an account before you can enable Matter. -At this time there are only a few devices available that are compatible with the standard and some of them require you to join a beta/developer program. It is to be expected that more devices will hit the market during the 2nd quarter of 2023 and beyond. +Unlike the radio based protocols we're already familiar with in the IoT landscape, like Zigbee and Z-Wave, Matter uses standard IP-based communication. Matter is not a radio protocol, but a control protocol that runs on top of the existing network infrastructure, using your existing Wi-Fi/Ethernet routers and Thread. -

    -Both the Matter standard itself and its implementation within Home Assistant are in a very early stage where only the basics are working and/or breaking changes can still happen. Using it in production is not recommended yet until it matures a bit more. -

    +Home Assistant is a so-called _controller_, it can control Matter based devices. Other examples of Matter controllers are the Google Nest speakers, Apple HomePods, and a SmartThings Station. -One of the great features of Matter is the so called _Multi Fabric_ feature: you can join the same device to multiple controllers. For example: add it to Google Home, Apple Home, and Home Assistant at the same time. +## Bridge devices -For devices where Home Assistant provides a native integration (with local API), Matter may not be the best option. Matter, being a universal standard, might not have the nitty-gritty features that come with a product specific protocol. A good example is Philips Hue: the communication over Matter only provides the basic controls over lights, the official integration brings all Hue unique features like (dynamic) scenes, entertainment mode, etc. +One of the great things about Matter is that you can have both Wi-Fi and Thread based devices on the same controller. +Next to actual devices (like actors or sensors), you will also see bridges. The bridge connects the network over Ethernet or Wi-Fi and bridges multiple devices into a Matter network. A great example is the Philips Hue V2 bridge, which is a Zigbee hub and a Matter bridge. This bridge exposes all Zigbee devices already connected to the bridge as Matter devices on the network. Also, Aqara, SwitchBot, and IKEA have launched such Hub devices. -

    -The Matter protocol relies on (local) IPv6 and mDNS (multicast traffic) which should be able to travel freely in your network. Matter devices (and any Thread Border routers) must be on the same LAN/VLAN as Home Assistant. Implementations like mDNS reflectors usually do more harm than good. -

    +
    +Home Assistant, as a Matter controller, only supports **control** of Matter devices. Home Assistant is not a bridge itself and it cannot turn existing devices within Home Assistant into Matter compatible devices. +
    + +## Thread + +Matter goes hand-in-hand with (but is not the same as) [Thread](), which is a low power Radio mesh networking techology. Much like Zigbee, but with the key difference that it is _IP-addressable_, making it the perfect companion transport for Matter. + +Thread devices become directly addressable by Matter controllers (such as Home Assistant) thanks to the use of so-called Thread Border Routers, which are in fact just devices that are both within your network and have a Thread chip builtin and thus act as a "router" between the Thread radio signal and your local network. These border routers (you will probably end up having multiple of them in your house) make sure that your Thread-based devices are reachable on your regular network and thus can be controlled with Matter. Examples of Thread Borders routers are the Apple TV 4K, HomePod (gen 2 or Mini), and the Google Nest Hub V2, so devices that you may already own. Besides that, all kind of other border routers are available, built-in to hardware appliances or software solutions based on OpenThread Border Router, such as the add-on we provide to use with the built-in Zigbee/Thread chip of the [Home Assistant Yellow](/yellow/) or the [Home Assistant SkyConnect](/skyconnect/) dongle. + +To use any Thread-based devices on a Matter controller, you need to have at least one Thread Border router device within range of the device. +More info about Thread and diagnosing Thread networks and Border routers, see the [Thread](/integrations/thread/) integration. + +
    +Many devices that (will) hit the market will use Thread for radio communication and Matter as a control protocol, but this is not guaranteed. For example, Thread-based devices are available that only support Apple HomeKit or some vendor-specific communication protocol. There are also a few cases where you need to apply for a (beta) firmware update on the device to enable Matter as a communication protocol. Therefore, do not assume Matter support when you see a Thread logo when looking for devices. Please be sure to look for the *Matter* logo itself (on either Wi-Fi/Ethernet-based devices or Thread) or any other confirmation by the manufacturer that the device supports Matter. +
    + +## Bluetooth + +Most (if not all) Matter-compliant devices will also have a Bluetooth chip onboard, this is to ease commissioning (a somewhat technical term for adding a device to your controller). Bluetooth will not be used to control a device but only to pair it after unboxing or factory resetting. The Home Assistant controller uses the Home Assistant Companion app to do commissioning, so you can bring your phone close to the device you want to commission. The controller will then send your network credentials to your device over Bluetooth in the commissioning process. If that succeeds, the device will communicate over its native interface, meaning Wi-Fi, Ethernet, or Thread. + +
    +Although your Home Assistant server might have a Bluetooth adapter on board that the controller can use to commission devices, we choose not to utilize that adapter. Mainly to prevent issues with the built-in Bluetooth integration but also because it makes more sense to bring your mobile devices close to the Matter device you'd like to commission. +
    + +## Multi fabric: join to multiple controllers + +One of the great features of Matter is the so-called _Multi Fabric_ feature: you can join the same device to multiple controllers. For example, simultaneously add it to Google Home, Apple Home, and Home Assistant. The standard describes that each device should be able to at least support 5 different fabrics simultaneously. + +For devices where Home Assistant provides a native integration (with local API), Matter may not be the best option. Matter, being a universal standard, might not have the nitty-gritty features that come with a product-specific protocol. A good example is Philips Hue: the communication over Matter only provides the basic controls over lights, while the official [Hue integration](/integrations/hue) brings all Hue unique features like (dynamic) scenes, entertainment mode, etc. + +![image](/images/integrations/matter/matter_thread_infographic.webp) + +Image taken from [this excellent article by The Verge](https://www.theverge.com/23165855/thread-smart-home-protocol-matter-apple-google-interview) about Matter that shows the landcape of Matter, Thread, Border routers and bridges in a nice visualized way. {% include integrations/config_flow.md %} -_If you run Home Assistant Container, Home Assistant Core, or you don’t want to use the built-in Matter Server add-on, please see the [advanced installation instructions](#advanced-installation-instructions)._ +For communicating with Matter devices, the Home Assistant integration runs its own "Matter controller" in a separate process which will be launched as an add-on. This add-on runs the controller software and connects your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a WebSocket connection. + +The only supported configuration (for now) for the Matter integration is by running the officially provided Home Assistant Matter add-on. Running the [Matter server](https://github.com/home-assistant-libs/python-matter-server) by any other means is at your own risk and is currently not officially supported. ## Current state of the integration -While the support for Matter is evolving, we will regularly update the Matter integration with new features or device support. Because it might be hard to track what's supported and what not, we list the current state here and try to update this information as often as possible. +While the support for Matter is evolving, we will regularly update the Matter integration with new features or device support. Because it might be hard to track what's supported and what's not, we list the current state here and try to update this information regularly. -Platform support in Home Assistant is currently limited to switches, lights, and (binary) sensors. The light platform is limited to _on/off_ and _brightness_ control only, support for _color_ and _color temperature_ control will be added soon. +Supported platforms (device types): -### Known issues +- Binary sensor: We have so far tested door/window sensors and motion sensors, but others will probably work too. +- Climate: Support for thermostat devices is in development now. +- Cover: Has been implemented, but support for a tilt feature is still missing. +- Lights: All features (in the Matter specification) should be supported, including color control, etc. +- Locks: Basic lock control has been implemented, but not all devices and features are supported yet. +- Sensor: We have tested Illuminance and temperature sensors, but others will probably work too. +- Switch: Powerplugs should work (note: no support for energy metering yet in Matter). -- Support for bridges (e.g. Hue bridge) is NOT working yet. Please do not try to add a bridge as it will break the integration. -- Door/window sensors show up reversed (closed instead of open) +Note that a single Matter device can exist on multiple platforms. For example, a Motion sensor also has a temperature sensor and an illuminance sensor on board. -_Both issues will be fixed in Home Assistant 2023.3._ +If you own a (bridged) Matter device and you are missing controls for this device, create an issue on [GitHub](https://github.com/home-assistant/home-assistant.io) and make sure to post your Integration diagnostics there. In some cases, we can easily extend the existing platform support based on your diagnostics dump. ## Adding Matter devices to Home Assistant -Each Matter network is called a fabric. Each home automation controller that controls Matter devices has its own fabric. You can add devices directly to the fabric of your Home Assistant instance, or share them from another fabric (ie Google, Apple) to Home Assistant's fabric. We're going to explore all these options below. +Each Matter network is called a fabric. Each home automation controller that controls Matter devices has its own "fabric". You can add devices directly to the fabric of your Home Assistant instance, or share them from another fabric (ie Google, Apple) to Home Assistant's fabric. We're going to explore all these options below. ### Add a device using the iOS Companion app This will use the Bluetooth connection of your phone to add the device. -1) Open The Home Assistant app on your phone. -2) Go to Settings, Devices & Services. -3) On the Devices tab, press the `Add device` button. -4) Choose `Add Matter device` as the top of the list. -5) Scan the QR-code of the Matter device with your phone camera or press `More options...` to manually enter the Commission code. -6) Press the `Add to Home Assistant` button which will start the commissioning process which may take up to a few minutes. -7) If you're adding a test board or beta device you might get a prompt about an Uncertified Accessory". In this dialog press `Add Anyway`. -8) Once prompted you can enter a custom Accessory Name, this is just an internal reference and not visible in Home Assistant so you can type whatever you like here. -9) Once the process is complete and you pressed the `Done` button, you are redirected to the Device within Home Assistant and its ready for use. +1. Open The Home Assistant app on your phone. +2. Go to {% my integrations title="**Settings** > **Devices & Services**" %}. +3. On the **Devices** tab, press the **Add device** button. +4. Choose **Add Matter device** at the top of the list. +5. Scan the QR-code of the Matter device with your phone camera or press **More options...** to manually enter the Commission code. +6. Select the **Add to Home Assistant** button which will start the commissioning process which may take up to a few minutes. +7. If you're adding a test board or beta device, you might get a prompt about an "Uncertified Accessory". In this dialog, select **Add Anyway**. +8. Once prompted, you can enter a custom **Accessory Name**, this is just an internal reference and not visible in Home Assistant. You can type whatever you like here. +9. Once the process is complete and you pressed the **Done** button, you are redirected to the device within Home Assistant. It is ready for use. @@ -86,14 +127,14 @@ This will use the Bluetooth connection of your phone to add the device. This will use the Bluetooth connection of your phone to add the device. -1) Open The Home Assistant app on your phone. -2) Go to Settings, Devices & Services. -3) On the Devices tab, press the `Add device` button. -4) Choose `Add Matter device` as the top of the list. -5) Scan the QR-code of the Matter device with your phones camera or press the `Setup without QR-code` button to manually enter the Commission code. -6) The process will start adding the device which takes up to a few minutes. -7) If you're adding a test board (e.g. ESP32 running the example apps) and commissioning fails, you might need to take some actions in the Google Developer console, have a look at any instructions for your test device. -8) Once the process is complete and you pressed the `Done` button, you are redirected to the Device within Home Assistant and its ready for use. +1. Open The Home Assistant app on your phone. +2. Go to {% my integrations title="**Settings** > **Devices & Services**" %}. +3. On the **Devices** tab, press the **Add device** button. +4. Choose **Add Matter device** as the top of the list. +5. Scan the QR-code of the Matter device with your phones camera or select the **Setup without QR-code** button to manually enter the commission code. +6. The process will start adding the device which takes up to a few minutes. +7. If you're adding a test board (e.g. ESP32 running the example apps) and commissioning fails, you might need to take some actions in the Google Developer console, have a look at any instructions for your test device. +8. Once the process is complete and you pressed the **Done** button, you are redirected to the device within Home Assistant. It is ready for use. @@ -101,9 +142,9 @@ This will use the Bluetooth connection of your phone to add the device. This method will allow you to select a Matter device from Apple Home and share it to Home Assistant. The result is that the device can be controlled from both Apple Home and Home Assistant at the same time. -1) Find your device in Apple Home and press the jogwheel to edit it. In the page with detailed descriptions and settings for the device, scroll all the way down and press the button `Turn On Pairing Mode`. -2) You are now given a Setup code, copy this to the clipboard. -3) Follow the [Add a device using the iOS Companion app](#add-a-device-using-the-ios-companion-app) directions above to add the device to Home Assistant where you paste the code you just received from Apple Home. +1. Find your device in Apple Home and press the jogwheel to edit it. In the page with detailed descriptions and settings for the device, scroll all the way down and press the button **Turn On Pairing Mode**. +2. You are now given a Setup code, copy this to the clipboard. +3. Follow the [Add a device using the iOS Companion app](#add-a-device-using-the-ios-companion-app) directions above to add the device to Home Assistant where you paste the code you just received from Apple Home. @@ -111,94 +152,114 @@ This method will allow you to select a Matter device from Apple Home and share i This method will allow you to share a device that was added to Google Home to Home Assistant. The result is that the device can be controlled from both Google Home and Home Assistant at the same time. -1) Open the device in Google Home and press the settings button (jog wheel) in the top right. -2) Click `Linked Matter apps and services`. -3) Press the button `Link apps and services` to link the device to Home Assistant. -4) Choose Home Assistant from the list, you are redirected to the Home Assistant Companion app now. Press `Add device`. -5) Your device will now be added to Home Assistant. When the process finishes, you're redirected to the device page in Home Assistant. +1. Open the device in Google Home and press the settings button (jog wheel) in the top right. +2. Click **Linked Matter apps and services**. +3. Press the button **Link apps and services** to link the device to Home Assistant. +4. Choose Home Assistant from the list, you are redirected to the Home Assistant Companion app now. Press **Add device**. +5. Your device will now be added to Home Assistant. When the process finishes, you're redirected to the device page in Home Assistant. -## Device specific instructions +

    +At this time it is not yet possible to share a device from Home Assistant to another platform. This feature should be added after the Matter SDK 1.1 is released. +

    -Because availability of actual Matter devices is sparse and proper HOWTO documentation even more, we provide a few step by step instructions for devices we have currently tested. +## Experiment with Matter using a ESP32 dev board -### TP-Link Tapo P125M (power plug) - -This device runs Matter out of the box, so you can add it directly to the controller(s) of your choice! - -Look for the M addition in the model name, a device without the M (regular P125) is not Matter compliant. This device is available in the US only. - -[TP-Link Tapo P125M on Amazon](https://amzn.to/3RILJah) - -### ESP32 dev board running Matter example app - -This is the most convenient and easy way to start playing with Matter. We have [prepared a page for you](https://nabucasa.github.io/matter-example-apps/) where you can easily flash Matter firmware to a supported ESP32 development board. We actually recommend the M5 Stamp C3 device running the Lightning app. +You do not yet have any Matter-compatible hardware but you do like to try it out or maybe create your own DIY Matter device? We have [prepared a page for you](https://nabucasa.github.io/matter-example-apps/) where you can easily flash Matter firmware to a supported ESP32 development board. We recommend the M5 Stamp C3 device running the Lightning app. NOTE for Android users: You need to follow the instructions at the bottom of the page to add the test device to the Google developer console, otherwise commissioning will fail. iOS users will not have this issue but they will get a prompt during commissioning asking if you trust the development device. -1) Make sure you are using the Google Chrome or Microsoft Edge browser. -2) Open https://nabucasa.github.io/matter-example-apps/ -3) Attach the ESP32 device using an USB cable. -4) Click the radiobutton next to the example you like to setup, in case of an M5 Stamp, click `Lightning app for M5STAMP C3`. -5) Press `Connect`. -6) In the popup dialog that appears choose the correct serial device, in most cases this will be something like "cu-usbserial" or alike. -7) Click `Install Matter Lightning app example` and let it install the firmware on the device, this will take a few minutes. -8) Once the device is flashed with the Matter firmware, connect to the device again but this time choose `Logs & console`. -9) You are presented with a console interface where you see live logging of events. This is actually an interactive shell where you can type commands. For a list of all commands, type `matter help` and press enter. -10) To add the device, we need the QR code. In the console type in `matter onboardingcodes ble` and copy/paste the URL in your browser. -11) Use the QR code to add the device using one of the above instructions on your phone, e.g. using the Home Assistant Companion app. +1. Make sure you use Google Chrome or Microsoft Edge browser. +2. Open https://nabucasa.github.io/matter-example-apps/ +3. Attach the ESP32 device using a USB cable. +4. Select the radio button next to the example you like to set up, in case of an M5 Stamp, click **Lightning app for M5STAMP C3**. +5. Select **Connect**. +6. In the popup dialog that appears, choose the correct serial device. This will usually be something like "cu-usbserial" or alike. +7. Click **Install Matter Lightning app example** and let it install the firmware on the device. This will take a few minutes. +8. Once the device is flashed with the Matter firmware, connect to the device again but this time choose **Logs & console**. +9. You are presented with a console interface where you see live logging of events. This is an interactive shell where you can type commands. For a list of all commands, type **matter help** and press enter. +10. To add the device, we need the QR code. In the console, type in `matter onboardingcodes ble` and copy/paste the URL into your browser. +11. Use the QR code to add the device using one of the above instructions on your phone, e.g. using the Home Assistant Companion app. + +## Known working devices + +Because the availability of actual Matter devices (and their documentation) is sparse, we provide a list of all known working devices that are tested by the Home Assistant Matter developers and/or the community to help you find the device you need. Note: The list below is ordered alphabetically, and some links contain affiliate links. + +Did you test a device that is not listed below? It would be greatly appreciated if you share your experience either on the Matter discord channel or contribute a PR (or suggestion) to this documentation page so you can help others, thanks in advance! + +### Aqara M2 Hub + +- Bridges Aqara (Zigbee) devices connected to the hub to Matter. +- You need to enable Matter support/firmware in the Aqara app. +- You will need an Aqara (cloud) account and the app before you can use Matter. +- See [this Aqara landingpage](https://www.aqara.com/en/article-1583275073188196352.html) for more information, including what devices are bridged. +- Thermostat devices (climate platform) are not supported yet (but are currently in development). +- Device events, for example for the wall rockers and Cube, are not supported. ### Eve Energy (power plug), Eve Door & Window (contact sensor), Eve Motion (motion sensor) -1) Look for the Thread logo on the box to ensure you have the new device which is compatible with Matter. -2) The Eve device runs on HomeKit by default, you will need an iOS device to set it up out of the box. -3) The Eve device uses Thread for communication, therefore you will need to have a Thread Border Router configured in your network setup, such as the Apple TV 4K (2021/2022), Homepod Mini, or Homepod V2. -4) You need to join the [Eve Beta program here](https://www.evehome.com/en/meet-matter) and wait for instructions per email. -5) Update the firmware of your Eve device using the Eve beta app to Matter. -6) During the update process the Eve app will create a new QR code for you to save somewhere safe. This QR code is required when you want to add the device to a Matter controller. The normal QR code attached to the device will no longer work! -7) During the upgrade process, the Eve app will join the device to Apple Home using Matter. -8) Confirm that the device is working properly within Apple Home. -9) Follow our instructions above to share the device from Apple Home to Home Assistant. +- If you see a Matter logo on the box, the device runs Matter already and you can add it to HA immediately. +- If there is a Thread logo, you need to install the Matter firmware using the Eve app. +- No Matter logo and no Thread logo on the box? The device is not Matter compatible. +- The energy metering feature of the Eve plug will not work in Home Assistant (Apple only feature). +- Eve has just released official Matter support so ignore any documentation about the beta program. -Once the initial firmware upgrade to Matter is complete, the device can also be paired to non-Apple based Thread networks, like Google Home or later Home Assistant's own Thread implementation based on OTBR but you do need an Apple ecosystem running (iOS phone + Border router) for the first time setup. +[Eve Energy on Amazon](https://amzn.to/3YuO62P) +[Eve Door & Window on Amazon](https://amzn.to/3RIU6ml) +[Eve Motion on Amazon](https://amzn.to/3jDujiP) -- [Eve Energy on Amazon](https://amzn.to/3YuO62P) -- [Eve Door & Window on Amazon](https://amzn.to/3RIU6ml) -- [Eve Motion on Amazon](https://amzn.to/3jDujiP) +### Nanoleaf Matter bulbs and Lightstrips + +- Although the products work great once commissioned, multiple users have reported that commissioning them can be a bit difficult and requires some patience and multiple resets or optimizations to your home network. +- Check the [Nanoleaf Matter infopage](https://nanoleaf.me/en-EU/integration/matter/) for all supported products and instructions. + +### Philips Hue (V2) Bridge + +The Philips Hue V2 bridge supports Matter since a recent update (the beta program closed, it is now officially available). You can enable Matter support from the Hue app after which you can commission it to Home Assistant and other fabrics. + +- Binding the Hue bridge to Home Assistant does not make sense because you will lose functionality over the default Hue integration in Home Assistant, such as button press events and (dynamic) scenes. +- You will need a Hue/Signify (cloud) account and the app before you can use Matter. +- Device events for example for dimmer remotes are not supported. +- Only basic control of lights is supported, no scenes, events, effects etc. + +### TP-Link Tapo P125M (power plug) + +- Look for the M addition in the model name, a device without the M (regular P125) is not Matter compliant. +- This device is available in the US only. + +[TP-Link Tapo P125M on Amazon](https://amzn.to/3RILJah) ## Troubleshooting -### I do not see the option to add a Matter device in the settings -We've added the option to **Add a Matter device** from the **Settings**>**Devices** in a recent version of the Home Assistant frontend, available from version 2023.3 and upwards or if you're running the Home Assistant nightly channel. If you are on a previous version of Home Assistant, you should see a button **Configure** on the Matter integration card within **Settings**>**Devices & Services**>**Integrations**. Click that **Configure** button and you should be able to see the **Commission** button on the Companion app. +### General recommendations + +- Using Thread-based Matter devices in Home Assistant requires Home Assistant OS (version 10 and above) because of kernel patches to solve routing issues. Not using HAOS (and thus the official Matter add-on) is at your own risk. + +- To use Thread devices you will need a Thread Network with at least one Thread Border Router in your network nearby the Thread device(s). Apple users need for example the Apple TV 4K or the HomePod Mini, while Google users need a Nest Hub V2. Use the Thread integration in Home Assistant to diagnose your Thread network(s). + +- Start simple and work from there, keep your network easy and add for example an ESP32 test device. Once that works, move on to the next step or more devices. + +- Realize that you are an early adopter, both on the hardware side and on the software (controller) side so you may run into compatibility issues or features that are still missing. Report any issues you may find and help out others if you find a workaround or tested a device. + +- Make sure IPv6 (multicast) traffic travels freely from your network to the Home Assistant host. There is no requirement to have an IPv6-enabled internet connection or DHCPv6 server. However, IPv6 support has to be enabled (it's enabled by default on Home Assistant OS). ### I do not see the button "Commission using the Companion app" + This button will only be visible within the Home Assistant Companion App (so not in the browser) and your device meets all requirements for Matter support. + - For iOS, minimum version is iOS 16 (minimal 16.3 is preferred) and the most recent version of the HA companion app. - For Android, minimum version is 8.1 and the most recent version of both the Google Home app and the (full) HA Companion app, downloaded from the app store. ### When I'm trying to commission using the Android app, I get an error stating "Matter is currently unavailable" -See above, make sure your device meets all requirements to support Matter. Update Android to the latest version and the Google Home and Home Assistant Companion app. To quickly verify if your device meets all requirements to support Matter, on your Android device go to **Settings**>**Google**>**Devices & Sharing**. There should be an entry there for **Matter devices**. + +See above, make sure your device meets all requirements to support Matter. Update Android to the latest version and the Google Home and Home Assistant Companion app. To quickly verify if your device meets all requirements to support Matter, on your Android device, go to **Settings** > **Google** > **Devices & Sharing**. There should be an entry there for **Matter devices**. + +Some users have reported that uninstalling and reinstalling the Google Home app fixed this issue for them. +Also see this [extended troubleshooting guide](https://developers.home.google.com/matter/verify-services) from Google. ### Unable to commission devices, it keeps giving errors or stops working randomly -We've seen cases (e.g. on UniFi hardware) where IPv6 derived from the Internet Provider causes issues with the discovery of Matter devices. Keep this in mind when you experience issues trying to add or control Matter devices. Protocols like Matter are designed for regular residential network setups and do not play nice with enterprise solutions like VLAN's, Multicast filtering, and IGMP snooping. To avoid issues, try to keep your network as simple and flat as possible. -## Advanced installation instructions +The Matter protocol relies on (local) IPv6 and mDNS (multicast traffic) which should be able to travel freely in your network. Matter devices that use Wi-Fi (including Thread Border routers) must be on the same LAN/VLAN as Home Assistant. Matter devices that only use Thread must be joined to Thread networks for which there is at least one border router connected to the Home Assistant LAN. -If you are using Home Assistant Container, Home Assistant Core, or you don't want to use the built-in Matter Server add-on, you will need to run the Matter Server yourself, to which the Matter integration will connect. - -### Running Matter Server - -This application provides the connection between your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a websocket connection. You need to run the Matter Server before you can use the integration. - -There are multiple ways to run the server: - -**Option 1: The official Matter Server add-on, as described above** - -_This option is only available for Home Assistant OS (the recommended installation type) and Home Assistant Supervised installations._ - -**Option 2: Run the Matter server yourself** - -This option is considered a very advanced setup and only for experienced users. You can find instructions on how to run the Matter Server in the [project repository](https://github.com/home-assistant-libs/python-matter-server). - -_Disclaimer: Some links on this page are affiliate links._ +Investigate your network topology if you experience any issues with discovering devices (like the initial commission keeps failing) or if devices become unavailable randomly. For instance, a setting on your router or Wi-Fi access point to "optimize" multicast traffic can harm the (discovery) traffic from Matter devices. Keep this in mind when you experience issues trying to add or control Matter devices. Protocols like Matter are designed for regular residential network setups and do not play nicely with enterprise networking solutions like VLANs, Multicast filtering, and IGMP snooping. Try to keep your network as simple and flat as possible to avoid issues. diff --git a/source/_integrations/meteoalarm.markdown b/source/_integrations/meteoalarm.markdown index d2056f76a1b..5cdb852c5f6 100644 --- a/source/_integrations/meteoalarm.markdown +++ b/source/_integrations/meteoalarm.markdown @@ -13,9 +13,9 @@ ha_platforms: ha_integration_type: integration --- -The `MeteoAlarm` platform allows one to watch for weather alerts in europe from [MeteoAlarm](https://www.meteoalarm.org) (EUMETNET). To use this binary sensor, you need the name of your country and the province name from [MeteoAlarm](https://feeds.meteoalarm.org). Please note that you need to write the exact country name (with hyphens) as at the end of the URL starting with: `https://feeds.meteoalarm.org/feeds/meteoalarm-legacy-atom-`. +The `MeteoAlarm` platform allows one to watch for weather alerts in Europe from [MeteoAlarm](https://www.meteoalarm.org) (EUMETNET). To use this binary sensor, you need the country and the province name from [MeteoAlarm](https://feeds.meteoalarm.org). Please note that it is crucial to write the country name exactly as it appears in the URL starting with https://feeds.meteoalarm.org/feeds/meteoalarm-legacy-atom-, including any hyphens used in the name. Failure to do so may result in errors or incorrect data. -The binary sensor state shows if applicable the warning message. The details are available as attribute. +The binary sensor state shows the warning message if applicable. The details are available as attribute. ## Configuration @@ -86,8 +86,6 @@ There are a few awareness levels: Example automation -Below you find an example of an automation. - {% raw %} ```yaml diff --git a/source/_integrations/monessen.markdown b/source/_integrations/monessen.markdown new file mode 100644 index 00000000000..943c3424635 --- /dev/null +++ b/source/_integrations/monessen.markdown @@ -0,0 +1,32 @@ +--- +title: Monessen +description: Connect and control your Monessen devices using the IntelliFire integration +ha_category: + - Binary Sensor + - Climate + - Fan + - Light + - Number + - Sensor + - Switch +ha_domain: monessen +ha_integration_type: virtual +ha_supporting_domain: intellifire +ha_supporting_integration: IntelliFire +ha_release: 2022.2 +ha_codeowners: + - '@jeeftor' +ha_config_flow: true +ha_platforms: + - binary_sensor + - climate + - fan + - light + - number + - sensor + - switch +ha_iot_class: Local Polling +ha_dhcp: true +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index 1be4b913630..ab89f6c9866 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -80,6 +80,12 @@ If you experience an error message like `Failed to connect due to exception: [SS Advanced broker configuration options include setting a custom client ID, setting a client certificate and key for authentication and enabling TLS validation of the brokers certificate for. To access the advanced settings, open the MQTT broker settings, switch on `Advanced options` and click `Next`. The advanced options will be shown by default if there are advanced settings active already. +
    + +Advanced broker options are accessible only when advanced mode is enabled (see user settings), or when advanced broker settings are configured already. + +
    + #### Alternative client ID You can set a custom MQTT client ID, this can help when debugging. Mind that the client ID must be unique. Leave this settings default if you want Home Assistant to generate a unique ID. @@ -280,6 +286,10 @@ Configuration variable names in the discovery payload may be abbreviated to cons 'curr_temp_tpl': 'current_temperature_template', 'dev': 'device', 'dev_cla': 'device_class', + 'dir_cmd_t': 'direction_command_topic', + 'dir_cmd_tpl': 'direction_command_template', + 'dir_stat_t': 'direction_state_topic', + 'dir_val_tpl': 'direction_value_template', 'dock_t': 'docked_topic', 'dock_tpl': 'docked_template', 'e': 'encoding', @@ -369,6 +379,8 @@ Configuration variable names in the discovery payload may be abbreviated to cons 'pl_cln_sp': 'payload_clean_spot', 'pl_cls': 'payload_close', 'pl_disarm': 'payload_disarm', + 'pl_dir_fwd': 'payload_direction_forward', + 'pl_dir_rev': 'payload_direction_reverse', 'pl_home': 'payload_home', 'pl_inst': 'payload_install', 'pl_lock': 'payload_lock', @@ -523,6 +535,8 @@ The following software has built-in support for MQTT discovery: - [HASS.Agent](https://github.com/LAB02-Research/HASS.Agent) - [IOTLink](https://iotlink.gitlab.io) (starting with 2.0.0) - [MiFlora MQTT Daemon](https://github.com/ThomDietrich/miflora-mqtt-daemon) +- [Nuki Hub](https://github.com/technyon/nuki_hub) +- [Nuki Smart Lock 3.0 Pro](https://support.nuki.io/hc/en-us/articles/12947926779409-MQTT-support) - [OpenMQTTGateway](https://github.com/1technophile/OpenMQTTGateway) - [room-assistant](https://github.com/mKeRix/room-assistant) (starting with 1.1.0) - [SmartHome](https://github.com/roncoa/SmartHome) diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown index af56bcda814..9d30d4b2173 100644 --- a/source/_integrations/nest.markdown +++ b/source/_integrations/nest.markdown @@ -26,15 +26,6 @@ ha_platforms: ha_integration_type: integration --- - - -
    Existing users: Nest authentication is changing.
    -
    LEARN MORE
    -
    - - The `nest` integration allows you to integrate a few [supported](https://developers.google.com/nest/device-access/supported-devices) Google [Nest](https://store.google.com/us/category/connected_home?) devices in Home Assistant. This integration uses the [Smart Device Management](https://developers.google.com/nest/device-access/api) API and Google's Cloud Pubsub to efficiently listen for changes in device state or other events. See [Supported Devices](https://developers.google.com/nest/device-access/supported-devices) for all devices supported by the SDM API. There is currently support for the following device types within Home Assistant: @@ -259,7 +250,7 @@ This feature is enabled by the following permissions:
    -Additional Nest Temperature Sensors are not supported by the SDM API. +Additional Nest Temperature Sensors are not supported by the SDM API. The Temperature reported by the API will be pulled from whichever device is currently configured as the Active Sensor, which can be adjusted via manual selection or the schedule offered in the Nest App.
    diff --git a/source/_integrations/netatmo.markdown b/source/_integrations/netatmo.markdown index 16d159cee2d..0d7d25fdd14 100644 --- a/source/_integrations/netatmo.markdown +++ b/source/_integrations/netatmo.markdown @@ -55,13 +55,13 @@ To edit an existing area, enter its name and follow the dialog. ## Camera -The `netatmo` camera platform is consuming the information provided by a [Netatmo Smart Indoor](https://www.netatmo.com/en-gb/security/cam-indoor), [Outdoor](https://www.netatmo.com/en-gb/security/cam-outdoor) and [Netatmo Smart Video Doorbell](https://www.netatmo.com/en-gb/security/doorbell) camera. This integration allows you to view the current live stream created by the camera (exception: video doorbell). +The `netatmo` camera platform is consuming the information provided by a [Netatmo Smart Indoor](https://www.netatmo.com/smart-indoor-camera), [Outdoor](https://www.netatmo.com/smart-outdoor-camera) and [Netatmo Smart Video Doorbell](https://www.netatmo.com/smart-video-doorbell) camera. This integration allows you to view the current live stream created by the camera (exception: video doorbell). The doorbell is currently not supported with the Home Assistant Cloud link mode (configured in the integration). Please use a [Netatmo dev account](#development--testing-with-your-own-client-id). Note that: if you have already created the Netatmo integration, you must remove it and configure it with the Netatmo dev account as explained in the previous link. Then you will see a Smart Doorbell device with a camera sensor. ## Climate -The `netatmo` thermostat platform is consuming the information provided by a [Netatmo Smart Thermostat](https://www.netatmo.com/product/energy/thermostat), [Smart Modulating Thermostat](https://www.netatmo.com/en-gb/energy/modulating-thermostat) and [Netatmo Smart Radiator Valve](https://www.netatmo.com/en-gb/energy/additional-valve). This integration allows you to view the current temperature and control the setpoint. +The `netatmo` thermostat platform is consuming the information provided by a [Netatmo Smart Thermostat](https://www.netatmo.com/product/energy/thermostat), [Smart Modulating Thermostat](https://www.netatmo.com/smart-modulating-thermostat) and [Netatmo Smart Radiator Valve](https://www.netatmo.com/additional-smart-radiator-valve). This integration allows you to view the current temperature and control the setpoint. ## Cover @@ -69,13 +69,13 @@ The `netatmo` cover platform provides support for Bubendorff shutters. ## Light -The `netatmo` light platform is consuming information provided by a [Netatmo Smart Outdoor](https://www.netatmo.com/en-gb/security/cam-outdoor) camera and requires an active webhook. This integration allows you to turn on/off the flood lights. +The `netatmo` light platform is consuming information provided by a [Netatmo Smart Outdoor](https://www.netatmo.com/smart-outdoor-camera) camera and requires an active webhook. This integration allows you to turn on/off the flood lights. It further provides support for Legrand/BTicino dimmers. ## Sensor -The `netatmo` sensor platform is consuming the information provided by a [Netatmo Smart Home Weather Station](https://www.netatmo.com/en-us/weather/weatherstation) a -[Netatmo Smart Indoor Air Quality Monitor](https://www.netatmo.com/en-us/aircare/homecoach) device or [Netatmo Public Weather Stations](https://weathermap.netatmo.com/). +The `netatmo` sensor platform is consuming the information provided by a [Netatmo Smart Home Weather Station](https://www.netatmo.com/smart-weather-station) a +[Netatmo Smart Indoor Air Quality Monitor](https://www.netatmo.com/smart-indoor-air-quality-monitor) device or [Netatmo Public Weather Stations](https://weathermap.netatmo.com/). ## Switch @@ -115,8 +115,8 @@ Service to manually register and unregister the webhook. ## Webhook Events -The Netatmo backend sends instant events to Home Assistant by using webhooks which unlocks improved responsiveness of most devices with the exception of [Netatmo Smart Home Weather Station](https://www.netatmo.com/en-us/weather/weatherstation), -[Netatmo Smart Indoor Air Quality Monitor](https://www.netatmo.com/en-us/aircare/homecoach) or [Netatmo Public Weather Stations](https://weathermap.netatmo.com/). +The Netatmo backend sends instant events to Home Assistant by using webhooks which unlocks improved responsiveness of most devices with the exception of [Netatmo Smart Home Weather Station](https://www.netatmo.com/smart-weather-station), +[Netatmo Smart Indoor Air Quality Monitor](https://www.netatmo.com/smart-indoor-air-quality-monitor) or [Netatmo Public Weather Stations](https://weathermap.netatmo.com/).
    @@ -125,7 +125,7 @@ It is therefore recommended to use [an individual development account](#developm
    -To be able to receive events from [Netatmo](https://www.netatmo.com/en-gb/), your Home Assistant instance needs to be accessible from the web over port `443`. To achieve this you can either use your Nabu Casa account or for example Duck DNS ([Home Assistant instructions](/addons/duckdns/)). You also need to have the external URL configured in the Home Assistant [configuration](/docs/configuration/basic). +To be able to receive events from [Netatmo](https://www.netatmo.com/), your Home Assistant instance needs to be accessible from the web over port `443`. To achieve this you can either use your Nabu Casa account or for example Duck DNS ([Home Assistant instructions](/addons/duckdns/)). You also need to have the external URL configured in the Home Assistant [configuration](/docs/configuration/basic). Events coming in from Netatmo will be available as an event in Home Assistant and are fired as `netatmo_event`, along with their data. You can use these events to trigger automations. @@ -201,7 +201,7 @@ Example: ```yaml # Example automation -- alias: "door or window open or movement" +- alias: "Door or window open or movement" description: "Notifies which door or window is open or was moved" trigger: - event_type: netatmo_event diff --git a/source/_integrations/notify.command_line.markdown b/source/_integrations/notify.command_line.markdown deleted file mode 100644 index b1d6b5e32ab..00000000000 --- a/source/_integrations/notify.command_line.markdown +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: "Command line Notify" -description: "Instructions on how to add command line notifications to Home Assistant." -ha_category: - - Notifications -ha_release: 0.14 -ha_domain: command_line ---- - -The `command_line` platform allows you to use external tools for notifications from Home Assistant. The message will be passed in as STDIN. - -To enable those notifications in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -notify: - - name: NOTIFIER_NAME - platform: command_line - command: "espeak -vmb/mb-us1" -``` - -{% configuration %} -name: - description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. - required: false - default: notify - type: string -command: - description: The action to take. - required: true - type: string -command_timeout: - description: Defines number of seconds for command timeout. - required: false - type: integer - default: 15 -{% endconfiguration %} - -To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_integrations/number.mqtt.markdown b/source/_integrations/number.mqtt.markdown index 5dbcb101c92..81f2a883c96 100644 --- a/source/_integrations/number.mqtt.markdown +++ b/source/_integrations/number.mqtt.markdown @@ -106,7 +106,8 @@ device: required: false type: string device_class: - description: The [type/class](/integrations/number/#device-class) of the number. + description: The [type/class](/integrations/number/#device-class) of the number. The `device_class` can be `null`. + default: None required: false type: device_class default: None @@ -194,7 +195,8 @@ unique_id: required: false type: string unit_of_measurement: - description: Defines the unit of measurement of the sensor, if any. + description: Defines the unit of measurement of the sensor, if any. The `unit_of_measurement` can be `null`. + Default: None required: false type: string value_template: diff --git a/source/_integrations/nut.markdown b/source/_integrations/nut.markdown index 0adcee441df..fbf9b3d6460 100644 --- a/source/_integrations/nut.markdown +++ b/source/_integrations/nut.markdown @@ -10,6 +10,7 @@ ha_config_flow: true ha_codeowners: - '@bdraco' - '@ollo69' + - '@pestevez' ha_zeroconf: true ha_platforms: - diagnostics @@ -17,9 +18,7 @@ ha_platforms: ha_integration_type: device --- -The Network UPS Tools (NUT) integration allows you to monitor a UPS -(battery backup) by using data from a [NUT](https://networkupstools.org/) -server. +The Network UPS Tools (NUT) integration allows you to monitor and manage a UPS (battery backup) using a [NUT](https://networkupstools.org/) server. It lets you view their status, receives notifications about important events, and execute commands as device actions. {% include integrations/config_flow.md %} @@ -72,3 +71,38 @@ values with `ups`, `battery`, `input` and `output` prefixes. An additional virtual sensor type `ups.status.display` is available translating the UPS status value retrieved from `ups.status` into a human-readable version. + +## Device Actions + +A device action is available for each parameterless NUT [command](https://networkupstools.org/docs/user-manual.chunked/apcs03.html) supported by the device. To find the list of supported commands for +your specific UPS device, you can use the `upscmd -l` command followed by the UPS name: + +```bash +$ upscmd -l my_ups +Instant commands supported on UPS [my_ups]: +beeper.disable - Disable the UPS beeper +beeper.enable - Enable the UPS beeper +test.battery.start.quick - Start a quick battery test +test.battery.stop - Stop the battery test +``` + +These commands will be available as device actions in Home Assistant, allowing you to interact with your UPS. + +### User Credentials and Permissions + +To execute device actions through the NUT integration, you must specify user credentials in the configuration. These credentials are stored in the `upsd.users` file, part of the NUT server configuration. This file defines the usernames, passwords, and permissions for users accessing the UPS devices. + +No actions will be available if no user credentials are specified for a given device. + +Ensure the user you specify has the required permissions to execute the desired commands. Here's an example of a user with command permissions in the `upsd.users` file: + +```text +[my_user] + password = my_password + actions = SET + instcmds = ALL +``` + +In this example, the user `my_user` has permission to execute all commands (`instcmds = ALL`). + +Please note that Home Assistant cannot determine whether a user can access a specific action without executing it. If you attempt to perform an action for which the user does not have permission, an exception will be thrown at runtime. diff --git a/source/_integrations/obihai.markdown b/source/_integrations/obihai.markdown index a7bd5328d3e..3443ccd28f7 100644 --- a/source/_integrations/obihai.markdown +++ b/source/_integrations/obihai.markdown @@ -14,6 +14,7 @@ ha_platforms: - button - sensor ha_integration_type: integration +ha_dhcp: true --- The `obihai` integration allows you to view the call status for your [Obihai devices](https://www.obitalk.com/info/products#home_section). diff --git a/source/_integrations/onkyo.markdown b/source/_integrations/onkyo.markdown index 543425f8952..0993e07d25f 100644 --- a/source/_integrations/onkyo.markdown +++ b/source/_integrations/onkyo.markdown @@ -91,6 +91,8 @@ If your source is not listed above, and you want to figure out how to format tha onkyo --host 192.168.0.100 source=query ``` +If this returns multiple, comma-separated values, use the first one. For example, if `dvd,bd,dvd` is returned, use `dvd`. + To find your receivers max volume use the onkyo-eiscp Python module set the receiver to its maximum volume (don't do this whilst playing something!) and run: diff --git a/source/_integrations/onvif.markdown b/source/_integrations/onvif.markdown index 6cd20bd9769..794f01e3a98 100644 --- a/source/_integrations/onvif.markdown +++ b/source/_integrations/onvif.markdown @@ -17,6 +17,7 @@ ha_platforms: - sensor - switch ha_integration_type: integration +ha_dhcp: true --- The `onvif` camera platform allows you to use an [ONVIF](https://www.onvif.org/) Profile S conformant device in Home Assistant. This requires the [`ffmpeg` integration](/integrations/ffmpeg/) to be already configured. diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown index 044815ac082..da7769e5508 100644 --- a/source/_integrations/openai_conversation.markdown +++ b/source/_integrations/openai_conversation.markdown @@ -47,3 +47,7 @@ Top P: description: An alternative to temperature, top_p determines the proportion of the most likely word choices the model should consider when generating text. A higher top_p means the model will only consider the most likely words, while a lower top_p means a wider range of words, including less likely ones, will be considered. For more information, see the [OpenAI Completion API Reference](https://platform.openai.com/docs/api-reference/completions/create#completions/create-top_p). {% endconfiguration_basic %} + +### Talking to Super Mario over the phone + +You can use an OpenAI Conversation integration to [talk to Super Mario over a classic landline phone](/projects/worlds-most-private-voice-assistant/). diff --git a/source/_integrations/pi_hole.markdown b/source/_integrations/pi_hole.markdown index 32eeccc7ce1..67c2e9c0b6a 100644 --- a/source/_integrations/pi_hole.markdown +++ b/source/_integrations/pi_hole.markdown @@ -15,6 +15,7 @@ ha_codeowners: ha_domain: pi_hole ha_platforms: - binary_sensor + - diagnostics - sensor - switch - update @@ -22,10 +23,23 @@ ha_integration_type: integration --- The Pi-hole integration allows you to retrieve statistics and interact with a -[Pi-hole](https://pi-hole.net/) system. If your Pi-hole web interface is password protected, an API key is needed for the setup (_from Settings -> API / Web interface_). +[Pi-hole](https://pi-hole.net/) system. {% include integrations/config_flow.md %} +During the setup, it will ask for the following: + +| Item | Description | Example | +| ---- | ----------- | ------- | +| `Host` | The IP or domain name to Pi-Hole | 192.168.1.1 | +| `Port` | Port used to get to the admin page | 80 | +| `Name` | Name to for this Pi-Hole. | Pi-Hole | +| `Location` | the path to the admin page. | /admin | + +The combined host, port and location should take you to the login page of Pi-Hole. Using the example above, it would be `http://192.168.1.1:80/admin`. + +If your Pi-hole web interface is password protected, an API key will be requested by Home Assistant after submitting the initial details above. You can get the API key by logging into your Pi-Hole and going to _from Settings > API_ and then the **Show API token** button. + ## Services The platform provides the following services to interact with your Pi-hole. Use switch entities when calling the services. diff --git a/source/_integrations/plugwise.markdown b/source/_integrations/plugwise.markdown index 79037cd677a..87fa8870d7d 100644 --- a/source/_integrations/plugwise.markdown +++ b/source/_integrations/plugwise.markdown @@ -13,7 +13,6 @@ ha_release: 0.98 ha_codeowners: - '@CoMPaTech' - '@bouwew' - - '@brefra' - '@frenck' ha_config_flow: true ha_domain: plugwise diff --git a/source/_integrations/python_script.markdown b/source/_integrations/python_script.markdown index cf764e30cbf..8b7de9877f9 100644 --- a/source/_integrations/python_script.markdown +++ b/source/_integrations/python_script.markdown @@ -23,7 +23,7 @@ This integration allows you to write Python scripts that are exposed as services Other imports like `min`, `max` are available as builtins. See the [python_script](https://github.com/home-assistant/core/blob/dev/homeassistant/components/python_script/__init__.py) source code for up-to-date information on the available objects inside the script. -[hass-api]: /developers/development_hass_object/ +[hass-api]: https://developers.home-assistant.io/docs/dev_101_hass/ [logger-api]: https://docs.python.org/3.7/library/logging.html#logger-objects
    diff --git a/source/_integrations/qbittorrent.markdown b/source/_integrations/qbittorrent.markdown index ee99df8adc5..60010a3df09 100644 --- a/source/_integrations/qbittorrent.markdown +++ b/source/_integrations/qbittorrent.markdown @@ -4,6 +4,7 @@ description: Instructions on how to integrate qBittorrent sensors within Home As ha_category: - Downloading ha_release: 0.84 +ha_config_flow: true ha_iot_class: Local Polling ha_domain: qbittorrent ha_codeowners: @@ -19,37 +20,7 @@ The `qbittorrent` platform allows you to monitor your downloads with [qBittorren This sensor requires the qBittorrent Web UI enabled. The [official reference](https://github.com/qbittorrent/qBittorrent/wiki#webui-related) describes how to set up the Web UI. -## Configuration - -To enable this sensor, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: qbittorrent - url: "http://:" - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -{% configuration %} -url: - description: The URL of the Web UI of qBittorrent. - required: true - type: string -name: - description: The name to use when displaying this qBittorrent instance. - required: false - type: string -username: - description: The username of the Web UI of qBittorrent. - required: true - type: string -password: - description: The password of the Web UI of qBittorrent. - required: true - type: string -{% endconfiguration %} +{% include integrations/config_flow.md %} ## Sensors diff --git a/source/_integrations/qld_bushfire.markdown b/source/_integrations/qld_bushfire.markdown index 5a09571a8d6..392337c7fa3 100644 --- a/source/_integrations/qld_bushfire.markdown +++ b/source/_integrations/qld_bushfire.markdown @@ -34,7 +34,7 @@ The data is updated every 5 minutes. The material used by this integration is provided under the [Creative Commons Attribution 4.0 license](https://creativecommons.org/licenses/by/4.0/legalcode). It has only been modified for the purpose of presenting the material in Home Assistant. -Please refer to the [creator's copyright notice](https://www.qfes.qld.gov.au/Pages/copyright.aspx) for more information. +Please refer to the [creator's copyright notice](https://www.qfes.qld.gov.au/copyright) for more information.
    diff --git a/source/_integrations/rapt_ble.markdown b/source/_integrations/rapt_ble.markdown new file mode 100644 index 00000000000..0b9121ee579 --- /dev/null +++ b/source/_integrations/rapt_ble.markdown @@ -0,0 +1,26 @@ +--- +title: RAPT Bluetooth +description: Instructions on how to integrate RAPT Pill Hydrometers configured in Bluetooth mode into Home Assistant. +ha_category: + - Sensor +ha_bluetooth: true +ha_release: 2023.5 +ha_iot_class: Local Push +ha_codeowners: + - '@sairon' +ha_domain: rapt_ble +ha_config_flow: true +ha_platforms: + - sensor +ha_integration_type: integration +--- + +Integrates [RAPT Pill](https://www.kegland.com.au/rapt-pill-hydrometer-thermometer-wifi-bluetooth.html) hydrometers into Home Assistant. + +{% include integrations/config_flow.md %} + +The RAPT Pill BLE integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. RAPT Pill must be switched to the Bluetooth mode in Settings - Telemetry method. See the [user manual](https://cdn.shopify.com/s/files/1/0667/3019/7248/files/KL20596_-_RAPT_Pill_Hydrometer_and_Thermometer_Quick_Start_Guide.pdf) for detailed instructions. + +## Supported devices + +- [RAPT Pill Hydrometer & Thermometer](https://www.kegland.com.au/rapt-pill-hydrometer-thermometer-wifi-bluetooth.html) diff --git a/source/_integrations/recorder.markdown b/source/_integrations/recorder.markdown index 0b2d88442c6..9df854590ff 100644 --- a/source/_integrations/recorder.markdown +++ b/source/_integrations/recorder.markdown @@ -12,7 +12,7 @@ ha_codeowners: ha_integration_type: system --- -The `recorder` integration is responsible for storing details in a database, which then are handled by the [`history`](/integrations/history/) integration. +This integration is by default enabled as dependency of the [`history`](/integrations/history/) integration.
    @@ -153,13 +153,14 @@ recorder: exclude: domains: - automation - - updater + - update entity_globs: - - sensor.weather_* + - sensor.sun* + - weather.* entities: - - sun.sun # Don't record sun data - - sensor.last_boot # Comes from 'systemmonitor' sensor platform - sensor.date + - sensor.last_boot # Comes from 'systemmonitor' sensor platform + - sun.sun # Don't record sun data event_types: - call_service # Don't record service calls ``` diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown index e403324f7a6..d51271de3fa 100644 --- a/source/_integrations/reolink.markdown +++ b/source/_integrations/reolink.markdown @@ -111,6 +111,7 @@ Depending on the supported features of the camera, select entities are added for - PTZ preset - Auto quick reply message - Auto track method (Digital, Digital first, Pan/Tilt first) +- Status LED (Doorbell only: Stay off, Auto, Auto & always on at night) PTZ preset positions can be set in the Reolink app/windows/web client, the names of the presets will be loaded into Home Assistant at the start of the integration. When adding new preset positions, please restart the Reolink integration. @@ -132,6 +133,7 @@ Depending on the supported features of the camera, switch entities are added for - Auto tracking - Auto focus - Guard return +- Doorbell button sound Depending on the supported features of the NVR/host, global switch entities are added for: @@ -180,6 +182,7 @@ The following models have been tested and confirmed to work: - RLC-522 - RLC-810A - RLC-811A +- RLC-81PA - RLC-820A - RLC-822A - RLC-823A @@ -187,13 +190,15 @@ The following models have been tested and confirmed to work: - RLC-1224A - RLN8-410 NVR - RLN16-410 NVR +- RLN36 NVR - Reolink Duo Floodlight PoE - Reolink TrackMix PoE - Reolink Video Doorbell (PoE and Wi-Fi) Battery-powered cameras are not yet supported. -The following models are lacking the HTTP webserver API and can therfore not work with this integration: +The following models are lacking the HTTP web server API and can, therefore, not work directly with this integration. +However, these cameras can work with this integration through an NVR in which the NVR is connected to Home Assistant. - E1 Pro - E1 @@ -203,3 +208,4 @@ The following models are lacking the HTTP webserver API and can therfore not wor - Older firmware versions do not expose the necessary information the integration needs to function. Ensure the camera is updated to the [latest firmware](https://reolink.com/download-center/) prior to setting up the integration. Note that Reolink auto update and check for update functions in the app/windows/web client often do not show the latest available firmware version. Therefore check the version in the [Reolink download center](https://reolink.com/download-center/) online. - Ensure at least one of the HTTP/HTTPS ports is enabled in the [windows](https://reolink.com/software-and-manual/)/web client under `Settings`->`Network`->`Advanced`->`Port Settings`, see [additional instructions](https://support.reolink.com/hc/en-us/articles/900004435763-How-to-Set-up-Reolink-Ports-Settings-via-Reolink-Client-New-Client-) on the Reolink site. - On some camera models, the RTMP port needs to be enabled in order for the HTTP(S) port to function properly. Make sure this port is also enabled if you get a `Cannot connect to host` error while one of the HTTP/HTTPS ports is already enabled. +- Setting a static IP address for Reolink cameras/NVRs in your router is advisable to prevent (temporal) connectivity issues when the IP address changes. diff --git a/source/_integrations/rest.markdown b/source/_integrations/rest.markdown index c776fc8fc7f..e025d641cff 100644 --- a/source/_integrations/rest.markdown +++ b/source/_integrations/rest.markdown @@ -13,6 +13,8 @@ ha_platforms: - sensor - switch ha_integration_type: integration +ha_codeowners: + - '@epenet' --- The `rest` sensor platform is consuming a given endpoint which is exposed by a [RESTful API](https://en.wikipedia.org/wiki/Representational_state_transfer) of a device, an application, or a web service. The sensor has support for GET and POST requests. @@ -132,6 +134,11 @@ verify_ssl: required: false type: boolean default: True +ssl_cipher_list: + description: Define the list of SSL ciphers to be accepted from this endpoint. `python_default` (_default_), `modern` or `intermediate` (_inspired by [Mozilla Security/Server Side TLS](https://wiki.mozilla.org/Security/Server_Side_TLS)_). + required: false + type: string + default: default timeout: description: Defines max time to wait data from the endpoint. required: false diff --git a/source/_integrations/rfxtrx.markdown b/source/_integrations/rfxtrx.markdown index e2cb946bfec..95a96048e10 100644 --- a/source/_integrations/rfxtrx.markdown +++ b/source/_integrations/rfxtrx.markdown @@ -57,7 +57,7 @@ logger: ## Supported protocols -Not all protocols as advertised are enabled on the initial setup of your transceiver. Enabling all protocols is not recommended either. +Not all protocols as advertised are enabled on the initial setup of your transceiver. Enabling all protocols is not recommended either. The RFXcom transceiver loses significant sensitivity when more protocols are enabled. **Warning**: enabling the "BlindsT0" protocol blocks receiving any other protocol. If your 433.92 product is not showing in the logs, you may need to enable additional protocols. You can do this by configuring the device itself using [RFXmgmr](http://www.rfxcom.com/epages/78165469.sf/en_GB/?ViewObjectPath=%2FShops%2F78165469%2FCategories%2FDownloads) to enable the required protocol, or you can configure the device in Home Assistant by configuring the [Protocols](#protocols). diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown index 9de58cdc5c6..cd4be01b708 100644 --- a/source/_integrations/roborock.markdown +++ b/source/_integrations/roborock.markdown @@ -1,43 +1,46 @@ --- title: Roborock -description: Connect and control your Roborock devices using the Xiaomi Miio integration +description: Instructions on how to integrate Roborock vacuums into Home Assistant ha_category: - - Alarm - - Fan - - Health - - Hub - - Light - - Presence Detection - - Remote + - Select - Vacuum -ha_domain: roborock -ha_integration_type: virtual -ha_supporting_domain: xiaomi_miio -ha_supporting_integration: Xiaomi Miio -ha_release: 0.51 -ha_codeowners: - - '@rytilahti' - - '@syssi' - - '@starkillerOG' -ha_config_flow: true -ha_platforms: - - air_quality - - alarm_control_panel - - binary_sensor - - button - - device_tracker - - diagnostics - - fan - - humidifier - - light - - number - - remote - - select - - sensor - - switch - - vacuum ha_iot_class: Local Polling -ha_zeroconf: true +ha_release: 2023.5 +ha_config_flow: true +ha_codeowners: + - '@humbertogontijo' + - '@Lash-L' +ha_domain: roborock +ha_platforms: + - select + - vacuum +ha_integration_type: integration --- -{% include integrations/supported_brand.md %} +The Roborock integration allows you to control your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) vacuum while using the Roborock app. + +This integration requires a cloud connection to set up the device, but it communicates with the device entirely over your home network. + +Once you log in with your Roborock account, the integration will automatically discover your Roborock devices and get the needed information to communicate locally with them. Please ensure your Home Assistant instance can communicate with the local IP of your device. We recommend setting a static IP for your Roborock Vacuum to help prevent future issues. + +{% include integrations/config_flow.md %} + +## FAQ + +### Can I use the Mi home app with this integration? +No. This integration requires information from your Roborock app to set up and uses Roborock's protocols to communicate with your device. You must have your vacuum synced to the Roborock app. + +### Can I block internet access for this device? +As of right now - no. When the vacuum is disconnected from the internet, it will attempt to disconnect itself from Wi-Fi and reconnect itself until it can reach the Roborock servers. We are looking for the best way to handle this and see what can be blocked while still allowing the vacuum to function. + +### What devices are supported? +If you can add your device to the Roborock app - it is supported. However, some older vacuums like the Roborock S5 must be connected using the Mi Home app and can be set up in Home Assistant through the [Xiaomi Miio](/integrations/xiaomi_miio/) integration. + +### What features will you support? +We are working on adding a lot of features to the core integration. We have reverse-engineered over 100 commands. The following are some of the functionalities we plan to add to Home Assistant Core. We ask that you are patient with us as we add them. +- Selective room cleaning +- Dock controls +- Manual vacuum remote control +- Status information such as errors, clean time, consumables, etc. +- Viewing the camera +- Viewing the map diff --git a/source/_integrations/scene.markdown b/source/_integrations/scene.markdown index 0dd2331ad6d..4104459e36e 100644 --- a/source/_integrations/scene.markdown +++ b/source/_integrations/scene.markdown @@ -147,6 +147,11 @@ You need to pass a `scene_id` in lowercase and with underscores instead of space If the scene was previously created by `scene.create`, it will be overwritten. If the scene was created by YAML, nothing happens but a warning in your log files. +### Video Tutorial +This video tutorial explains how scenes work and how you can utilize scenes on the fly. + + + ```yaml # Example automation using entities automation: @@ -205,3 +210,4 @@ The following example turns off some entities as soon as a window opens. The sta target: entity_id: scene.before ``` + diff --git a/source/_integrations/schedule.markdown b/source/_integrations/schedule.markdown index b8fc078ccac..1ad04a09f4b 100644 --- a/source/_integrations/schedule.markdown +++ b/source/_integrations/schedule.markdown @@ -17,12 +17,12 @@ Home Assistant that can be used to trigger or make decisions in your automations and scripts. The preferred way to configure a schedule is via the user interface at -**Settings** -> **Devices & Services** -> **Helpers**. Click the add button -and then choose the **Schedule** option, or click the My button below. +**{% my helpers title="Settings > Devices & Services > Helpers." %}** Click the add button +and then choose the **{% my config_flow_start domain=schedule title="Schedule" %}** option, or click the My button below. {% include integrations/config_flow.md %} -To be able to add **Helpers** via the user interface you should +To be able to add **{% my helpers title="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. diff --git a/source/_integrations/sensor.command_line.markdown b/source/_integrations/sensor.command_line.markdown deleted file mode 100644 index 011c5b4446d..00000000000 --- a/source/_integrations/sensor.command_line.markdown +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: "Command line Sensor" -description: "Instructions on how to integrate command line sensors into Home Assistant." -ha_category: - - Utility - - Sensor -ha_release: pre 0.7 -ha_iot_class: Local Polling -ha_domain: command_line ---- - - -The `command_line` sensor platform simply issues specific commands to get its data. This makes it a very powerful platform as it allows anyone to integrate any type of sensor into Home Assistant that can get data from the command line. - -## Configuration - -To enable it, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: command_line - command: SENSOR_COMMAND -``` - -{% configuration %} -command: - description: The action to take to get the value. - required: true - type: string -name: - description: Name of the command sensor. - required: false - type: string -unit_of_measurement: - description: Defines the unit of measurement of the sensor, if any. - required: false - type: string -value_template: - description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." - required: false - type: string -scan_interval: - description: Defines number of seconds for polling interval. - required: false - type: integer - default: 60 -command_timeout: - description: Defines number of seconds for command timeout - required: false - type: integer - default: 15 -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 - -The `command` is executed within the [configuration directory](/docs/configuration/). - -
    - -If you are using [Home Assistant Operating System](https://github.com/home-assistant/operating-system), the commands are executed in the `homeassistant` container context. So if you test or debug your script, it might make sense to do this in the context of this container to get the same runtime environment. - -
    - -With a `0` exit code, the output (stdout) of the command is used as `value`. In case a command results in a non `0` exit code or is terminated by the `command_timeout`, the result is only logged to Home Assistant log and the value of the sensor is not updated. - -## Examples - -In this section you find some real-life examples of how to use this sensor. - -### CPU temperature - -Thanks to the [`proc`](https://en.wikipedia.org/wiki/Procfs) file system, various details about a system can be retrieved. Here the CPU temperature is of interest. Add something similar to your `configuration.yaml` file: - -{% raw %} - -```yaml -# Example configuration.yaml entry -sensor: - - platform: command_line - name: CPU Temperature - command: "cat /sys/class/thermal/thermal_zone0/temp" - # If errors occur, make sure configuration file is encoded as UTF-8 - unit_of_measurement: "°C" - value_template: "{{ value | multiply(0.001) | round(1) }}" -``` - -{% endraw %} - -### Monitoring failed login attempts on Home Assistant - -If you'd like to know how many failed login attempts are made to Home Assistant, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: command_line - name: badlogin - command: "grep -c 'Login attempt' /home/hass/.homeassistant/home-assistant.log" -``` - -Make sure to configure the [Logger integration](/integrations/logger) to monitor the [HTTP integration](/integrations/http/) at least the `warning` level. - -```yaml -# Example working logger settings that works -logger: - default: critical - logs: - homeassistant.components.http: warning -``` - -### Details about the upstream Home Assistant release - -You can see directly in the frontend (**Developer tools** -> **About**) what release of Home Assistant you are running. The Home Assistant releases are available on the [Python Package Index](https://pypi.python.org/pypi). This makes it possible to get the current release. - -```yaml -sensor: - - platform: command_line - command: python3 -c "import requests; print(requests.get('https://pypi.python.org/pypi/homeassistant/json').json()['info']['version'])" - name: HA release -``` - -### Read value out of a remote text file - -If you own devices which are storing values in text files which are accessible over HTTP then you can use the same approach as shown in the previous section. Instead of looking at the JSON response we directly grab the sensor's value. - -```yaml -sensor: - - platform: command_line - command: python3 -c "import requests; print(requests.get('http://remote-host/sensor_data.txt').text)" - name: File value -``` - -### Use an external script - -The example is doing the same as the [aREST sensor](/integrations/arest#sensor) but with an external Python script. It should give you an idea about interfacing with devices which are exposing a RESTful API. - -The one-line script to retrieve a value is shown below. Of course it would be possible to use this directly in the `configuration.yaml` file but need extra care about the quotation marks. - -```bash -python3 -c "import requests; print(requests.get('http://10.0.0.48/analog/2').json()['return_value'])" -``` - -The script (saved as `arest-value.py`) that is used looks like the example below. - -```python -#!/usr/bin/python3 -from requests import get - -response = get("http://10.0.0.48/analog/2") -print(response.json()["return_value"]) -``` - -To use the script you need to add something like the following to your `configuration.yaml` file. - -```yaml -# Example configuration.yaml entry -sensor: - - platform: command_line - name: Brightness - command: "python3 /path/to/script/arest-value.py" -``` - -### Usage of templating in `command:` - -[Templates](/docs/configuration/templating/) are supported in the `command` configuration variable. This could be used if you want to include the state of a specific sensor as an argument to your external script. - -{% raw %} - -```yaml -# Example configuration.yaml entry -sensor: - - platform: command_line - name: wind direction - command: "sh /home/pi/.homeassistant/scripts/wind_direction.sh {{ states('sensor.wind_direction') }}" - unit_of_measurement: "Direction" -``` - -{% endraw %} - -### Usage of JSON attributes in command output - -The example shows how you can retrieve multiple values with one sensor (where the additional values are attributes) by using `value_json` and `json_attributes`. - -{% raw %} - -```yaml -# Example configuration.yaml entry -sensor: - - platform: command_line - name: JSON time - json_attributes: - - date - - milliseconds_since_epoch - command: "python3 /home/pi/.homeassistant/scripts/datetime.py" - value_template: "{{ value_json.time }}" -``` - -{% endraw %} - diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown index 0d7d55ddefc..1b4a21e5935 100644 --- a/source/_integrations/sensor.mqtt.markdown +++ b/source/_integrations/sensor.mqtt.markdown @@ -61,7 +61,7 @@ availability_topic: required: false type: string device: - description: "Information about the device this sensor is a part of to tie it into the [device registry](https://developers.home-assistant.io/docs/en/device_registry_index.html). Only works through [MQTT discovery](/integrations/mqtt/#mqtt-discovery) and when [`unique_id`](#unique_id) is set. At least one of identifiers or connections must be present to identify the device." + description: "Information about the device this sensor is a part of to tie it into the [device registry](https://developers.home-assistant.io/docs/device_registry_index/). Only works through [MQTT discovery](/integrations/mqtt/#mqtt-discovery) and when [`unique_id`](#unique_id) is set. At least one of identifiers or connections must be present to identify the device." required: false type: map keys: @@ -106,7 +106,8 @@ device: required: false type: string device_class: - description: The [type/class](/integrations/sensor/#device-class) of the sensor to set the icon in the frontend. + description: The [type/class](/integrations/sensor/#device-class) of the sensor to set the icon in the frontend. The `device_class` can be `null`. + default: None required: false type: device_class default: None @@ -150,7 +151,7 @@ json_attributes_topic: last_reset_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the last_reset. Available variables: `entity_id`. The `entity_id` can be used to reference the entity's attributes." required: false - type: string + type: template name: description: The name of the MQTT sensor. required: false @@ -185,7 +186,8 @@ state_class: type: string default: None state_topic: - description: The MQTT topic subscribed to receive sensor values. If `device_class`, `state_class`, `unit_of_measurement` or `suggested_display_precision` is set, and a numeric value is expected, an empty value `''` will be ignored and will not update the state, a `'None'` value will set the sensor to an `unknown` state. + description: The MQTT topic subscribed to receive sensor values. If `device_class`, `state_class`, `unit_of_measurement` or `suggested_display_precision` is set, and a numeric value is expected, an empty value `''` will be ignored and will not update the state, a `'null'` value will set the sensor to an `unknown` state. The `device_class` can be `null`. + default: None required: true type: string unique_id: @@ -193,7 +195,8 @@ unique_id: required: false type: string unit_of_measurement: - description: Defines the units of measurement of the sensor, if any. + description: Defines the units of measurement of the sensor, if any. The `unit_of_measurement` can be `null`. + default: None required: false type: string value_template: diff --git a/source/_integrations/shopping_list.markdown b/source/_integrations/shopping_list.markdown index 0873762b872..f5e2926cc89 100644 --- a/source/_integrations/shopping_list.markdown +++ b/source/_integrations/shopping_list.markdown @@ -65,6 +65,14 @@ Mark all items as incomplete in the shopping list. Clear completed items from the shopping list. +### Service `shopping_list.sort` + +Sort all items by name in the shopping list. + +| Service data attribute | Optional | Description | +|------------------------|----------|---------------------------------------------------------------------| +| `reverse` | yes | Whether to sort in reverse (_descending_) order. (default: `False`) | + ## Using in Automations A `shopping_list_updated` event is triggered when items in the list are modified, with the following data payload attached to it. This can be used to trigger automations such as sending a push notification when someone adds an item to the shopping list, which when clicked, will open the list. diff --git a/source/_integrations/simplepush.markdown b/source/_integrations/simplepush.markdown index da61e4275d2..8b31502e854 100644 --- a/source/_integrations/simplepush.markdown +++ b/source/_integrations/simplepush.markdown @@ -14,17 +14,55 @@ ha_codeowners: - '@engrbm87' --- -The `simplepush` platform uses [Simplepush](https://simplepush.io/) to deliver notifications from Home Assistant to your Android device. Unlike similar apps the Simplepush app requires no registration. +The `simplepush` platform uses [Simplepush](https://simplepush.io/) to deliver notifications from Home Assistant to your Android and iOS device. Unlike similar apps the Simplepush app requires no registration and supports end-to-end encryption. {% include integrations/config_flow.md %} To test if the service works, just send a message with `curl` from the command-line. ```bash -curl 'https://api.simplepush.io/send/device_key/title/message' +curl 'https://simplepu.sh/YOUR_SIMPLEPUSH_KEY/message' ``` + +If you enter your password and salt (as defined in the Simplepush app settings) during the configuration of this integration, all notifications sent from this integration will be end-to-end encrypted. + ## Notifications -Simplepush can send a notification by calling the [`notify` service](/integrations/notify/). You can specify the `event` under the `data` key. This will override the event configured in YAML when imported. +Simplepush can send a notification by calling the [`notify` service](/integrations/notify/). + +You can specify the `event` under the `data` key. +Events can be used to customize the notification behavior. + +It is also possible to specify `attachments` under the `data` key. +Attachments can be images, GIFs or video files that are accessible by a URL. To use notifications, please see the [getting started with automation page](/getting-started/automation/). + +## Examples + +Send a notification with a title and event. + +```yml +- service: notify.simplepush + data: + title: "This is the title" + message: "This is the message" + data: + event: "event" +``` + +Send a notification with four attachments defined by their URL. +Attachments can be images, GIFs or video files. + +```yml +- service: notify.simplepush + data: + message: "This is the message" + data: + attachments: + - image: "https://upload.wikimedia.org/wikipedia/commons/e/ee/Sample_abc.jpg" + - image: "https://upload.wikimedia.org/wikipedia/commons/d/d3/Newtons_cradle_animation_book_2.gif" + - video: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" + - video: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4" + thumbnail: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/ForBiggerEscapes.jpg" +``` diff --git a/source/_integrations/siren.mqtt.markdown b/source/_integrations/siren.mqtt.markdown index 75f42cf8e5a..fcb7f9515a5 100644 --- a/source/_integrations/siren.mqtt.markdown +++ b/source/_integrations/siren.mqtt.markdown @@ -216,7 +216,7 @@ state_topic: state_value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's state from the `state_topic`. To determine the siren's state result of this template will be compared to `state_on` and `state_off`. Alternatively `value_template` can be used to render to a valid JSON payload." required: false - type: string + type: template support_duration: description: Set to `true` if the MQTT siren supports the `duration` service turn on parameter and enables the `duration` state attribute. required: false diff --git a/source/_integrations/slack.markdown b/source/_integrations/slack.markdown index b780dfcc72a..899b32b4d1a 100644 --- a/source/_integrations/slack.markdown +++ b/source/_integrations/slack.markdown @@ -18,39 +18,113 @@ ha_integration_type: service The `slack` platform allows you to deliver notifications from Home Assistant to [Slack](https://slack.com/). +![](/images/integrations/slack/slack-message.png) + + ## Setup -### Bot posting as you +### Slack App 1. Create a [new app](https://api.slack.com/apps) under your Slack.com account. 2. Click the `OAuth & Permissions` link in the sidebar, under the Features heading. -3. In the Scopes section, add the `chat:write` and `dnd:read` scopes and select `Send messages as user`. Many errors can occur if these options are not set correctly. + +Find `Features/OAuth and Permissions/Scopes/Bot Token Scopes` + +3. Add the `chat:write` and `dnd:read` scopes + - To modify your Slack bot's username and icon, additionally add the `chat:write.customize` OAuth scope + +![](/images/integrations/slack/bot-token-scopes.png) + 4. Scroll up to `OAuth Tokens & Redirect URLs` and click `Install to Workspace`. -5. Copy your `OAuth Access Token` and put that key into the config flow. -
    +In `Features/OAuth and Permissions/OAuth Tokens for Your Workspace`: -There is an app credential Verification Token on the Basic Settings of your app. This is **not** the API key you want. +5. Copy the Bot User OAuth Token. Use this as 'API Key' when setting up in Home Assistant -
    +![](/images/integrations/slack/oauth-tokens-for-workspace.png) -### Bot posting as its own user -It is also possible to use Slack bots as users. Just create a new bot at https://[YOUR_TEAM].slack.com/apps/build/custom-integration and use the provided token for that. You can add an icon from the frontend for Home Assistant and give the bot a meaningful name. +Ensure that the bot user is added to the channel in which you want it to post. +In Slack, tag the bot user in a message, then add it to the channel. -Don't forget to invite the bot to the room where you want to get the notifications. + +#### Sample App Manifest + +You can easily create a bot with all the permissions needed from an App Manifest. + +```yaml +display_information: + name: Home Notifications +features: + bot_user: + display_name: Home Notifications + always_online: false +oauth_config: + scopes: + bot: + - incoming-webhook + - chat:write + - dnd:read + - chat:write.customize +settings: + org_deploy_enabled: false + socket_mode_enabled: false + token_rotation_enabled: false +``` + +### Integration Setup + +When installing the integration, use these settings: + +API Key: `xoxb-abc-def` +- Bot User OAuth Token (from step 5 above) + +Default Channel: `#channel` +- Channel name that bot will post to if a channel is not supplied when called + +Icon/Username: +- optional - if you want to have a custom name/icon for the bot user not already set in Slack + +![](/images/integrations/slack/slack-integration-setup.png) + +## Usage + +### Sending Messages + +One of the easiest ways to send a message, is to create a script. You can paste in YAML and make changes in the GUI. + +You can call this script as a service. + +1. Go to Home Assistant Settings > Automations and Scenes > Scripts > Add Script +2. Click the three dots in the top right, and pick 'Edit in YAML'. Paste in the contents below. +3. Change `YOUR_SLACK_TEAM` to the team name `(*.slack.com)` + +```yaml +alias: "Notify: Slack Notification Template" +sequence: + - service: notify.YOUR_SLACK_TEAM + data: + message: Fallback Text + target: "#test-channel" + title: Reminder + data: + blocks: + - type: section + text: + type: mrkdwn + text: >- + This is a mrkdwn section block *this is bold*, and ~this is + crossed out~, and +mode: single +``` + +Update the blocks array with valid Slack blocks. The easiest way to create this is using [Slack Block Kit Builder](https://app.slack.com/block-kit-builder) + +Create a duplicate of this script to use for different messages, and different channels (the door was opened in #security, the light was left on on #lights, etc). ### Icons -Slack uses the standard emoji sets used [here](https://www.webpagefx.com/tools/emoji-cheat-sheet/). Alternatively a publicly accessible URL may be used. - -
    - -In order to modify your Slack bot's username and icon, you must ensure your Slack app has the `chat:write.customize` OAuth scope. See [the Slack API documentation](https://api.slack.com/methods/chat.postMessage#authorship) for more information. - -The added `notify` service will be named after the chat server the app is installed on. For example, a server named "Slack Chat" wil display as `notify.slack_chat`. - -
    +Slack uses the standard emoji sets used [here](https://slack.com/intl/en-gb/help/articles/202931348-Use-emoji-and-reactions#add-emoji-to-your-messages). Alternatively a publicly accessible URL may be used. {% include integrations/config_flow.md %} diff --git a/source/_integrations/smtp.markdown b/source/_integrations/smtp.markdown index 53c9abcd126..8b66b0d899c 100644 --- a/source/_integrations/smtp.markdown +++ b/source/_integrations/smtp.markdown @@ -205,6 +205,6 @@ notify: sender_name: "SENDER_NAME" ``` -Keep in mind that Google has some extra layers of protection that need special attention. By default, the usage by external applications is limited so you will need to visit the [less secure apps](https://www.google.com/settings/security/lesssecureapps) page and enable it to be able to send e-mails. Be aware that Google will periodically turn it off if it is not used (no e-mail is sent). +Keep in mind that Google has some extra layers of protection that need special attention. By default, the usage by external applications is limited so you will need to visit the [less secure apps](https://myaccount.google.com/lesssecureapps) page and enable it to be able to send e-mails. Be aware that Google will periodically turn it off if it is not used (no e-mail is sent). -To avoid having your e-mail notifications broken due to the less secure app's behavior, it is recommended that you enable 2-step verification on your Google account, and use [an application-specific password](https://support.google.com/mail/answer/185833?hl=en) in your notification configuration. +To avoid having your e-mail notifications broken due to the less secure app's behavior, it is recommended that you enable 2-step verification on your Google account, and use [an application-specific password](https://support.google.com/mail/answer/185833) in your notification configuration. diff --git a/source/_integrations/snapcast.markdown b/source/_integrations/snapcast.markdown index fe1f9a49d1f..5fac754680c 100644 --- a/source/_integrations/snapcast.markdown +++ b/source/_integrations/snapcast.markdown @@ -6,6 +6,7 @@ ha_category: ha_release: 0.13 ha_iot_class: Local Polling ha_domain: snapcast +ha_config_flow: true ha_platforms: - media_player ha_integration_type: integration @@ -13,28 +14,9 @@ ha_codeowners: - '@luar123' --- -The `snapcast` platform allows you to control [Snapcast](https://github.com/badaix/snapcast) from Home Assistant. +The Snapcast integration allows you to control [Snapcast](https://github.com/badaix/snapcast) from Home Assistant. -To add Snapcast to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -media_player: - - platform: snapcast - host: YOUR_IP_ADDRESS -``` - -{% configuration %} -host: - description: The IP address of the device, e.g., `192.168.0.10`. - required: true - type: string -port: - description: The port number. - required: false - default: 1705 - type: integer -{% endconfiguration %} +{% include integrations/config_flow.md %} ## Services diff --git a/source/_integrations/solaredge.markdown b/source/_integrations/solaredge.markdown index 6818f8548a0..6ed953b1202 100644 --- a/source/_integrations/solaredge.markdown +++ b/source/_integrations/solaredge.markdown @@ -16,12 +16,14 @@ ha_codeowners: ha_integration_type: device --- -The `solaredge` platform uses the [SolarEdge Monitoring API](https://www.solaredge.com/sites/default/files/se_monitoring_api.pdf) to allow you to get details from your SolarEdge solar power setup and integrate these in your Home Assistant installation. +The SolarEdge integration allows you to get details from your SolarEdge solar power setup and integrate these in your Home Assistant installation. -
    +To integrate it, you need your installation ID and an API key. You can get these by logging in to your [SolarEdge web portal](https://www.solaredge.com). Note: if your portal is not in English, the labels will be different. -The SolarEdge Monitoring API has a daily rate limit of 300 requests. In order to stay under this limit, and allow for some additional requests, the `solaredge` platform will update the site overview every 15 minutes. +- Click on Admin and scroll down to API Access +- Click on "Generate key" +- Click on Save -
    +Data is updated every 15 minutes to stay within the daily rate limit of 300 requests per day. {% include integrations/config_flow.md %} diff --git a/source/_integrations/sonos.markdown b/source/_integrations/sonos.markdown index f7d3ff2988e..a5c8ac13267 100644 --- a/source/_integrations/sonos.markdown +++ b/source/_integrations/sonos.markdown @@ -117,19 +117,38 @@ Sonos accepts a variety of `media_content_id` formats in the `media_player.play_ Music services which require an account (e.g., Spotify) must first be configured using the Sonos app. +Playing TTS (text to speech) or audio files as alerts (e.g., a doorbell or alarm) is possible by setting the `announce` argument to `true`. Using `announce` will play the provided media URL as an overlay, gently lowering the current music volume and automatically restoring to the original level when finished. An optional `volume` argument can also be provided in the `extra` dictionary to play the alert at a specific volume level. Note that older Sonos hardware or legacy firmware versions ("S1") may not fully support these features. Additionally, see [Network Requirements](#network-requirements) for use in restricted networking environments. + An optional `enqueue` argument can be added to the service call. If `true`, the media will be appended to the end of the playback queue. If not provided or `false` then the queue will be replaced. ### Examples: -This is an example service call that plays an audio file from a web server on the local network (like the Home Assistant built-in webserver): +Below is an example service call that plays an audio file from a web server on the local network (like the Home Assistant built-in webserver) using the `announce` feature and its associated (optional) `volume` parameter: ```yaml service: media_player.play_media target: entity_id: media_player.sonos data: + announce: true media_content_type: "music" media_content_id: "http://192.168.1.50:8123/local/sound_files/doorbell-front.mp3" + extra: + volume: 20 +``` + +The standard `tts._say` services do not accept the `volume` parameter directly. To set the `volume` for a TTS announcement, you can use a TTS Media Source URL with the standard `media_player.play_media` service: +```yaml +service: media_player.play_media +target: + entity_id: media_player.sonos +data: + announce: true + media_content_id: > + media-source://tts/cloud?message="I am very loud" + media_content_type: "music" + extra: + volume: 80 ``` Sonos can also play music or playlists from Spotify. Both Spotify URIs and URLs can be used directly. An example service call using a playlist URI: @@ -163,7 +182,8 @@ target: entity_id: media_player.sonos data: media_content_type: "music" - media_content_id: 'plex://{ "library_name": "Music", "artist_name": "M83", "album_name": "Hurry Up, We're Dreaming" }' + media_content_id: > + plex://{ "library_name": "Music", "artist_name": "M83", "album_name": "Hurry Up, We're Dreaming" } ``` ## Services @@ -297,6 +317,8 @@ action: To work optimally, the Sonos devices must be able to connect back to the Home Assistant host on TCP port 1400. This will allow the push-based updates to work properly. If this port is blocked or otherwise unreachable from the Sonos devices, the integration will fall back to a polling mode which is slower to update and much less efficient. The integration will alert the user if this problem is detected. +Playing audio using the `announce` option or TTS requires TCP port 1443 on each Sonos device to be reachable from the Home Assistant host. + See [Advanced use](#advanced-use) below for additional configuration options which may be needed to address this issue in setups with more complex network topologies. ## Advanced use diff --git a/source/_integrations/sql.markdown b/source/_integrations/sql.markdown index 7b88c29e33e..043d920a58e 100644 --- a/source/_integrations/sql.markdown +++ b/source/_integrations/sql.markdown @@ -10,6 +10,7 @@ ha_config_flow: true ha_codeowners: - '@dgomes' - '@gjohansson-ST' + - '@dougiteixeira' ha_domain: sql ha_platforms: - sensor @@ -68,7 +69,7 @@ sql: db_url: description: The URL which points to your database. See [supported engines](/integrations/recorder/#custom-database-engines). required: false - default: "Defaults to the default recorder `db_url` (not the current `db_url` of recorder)." + default: "Defaults to the recorder `db_url`." type: string name: description: The name of the sensor. diff --git a/source/_integrations/starlink.markdown b/source/_integrations/starlink.markdown index cc27a0d9570..d107e0521b5 100644 --- a/source/_integrations/starlink.markdown +++ b/source/_integrations/starlink.markdown @@ -32,20 +32,23 @@ The Starlink integration allows you to integrate your [Starlink](https://www.sta ### Sensor - Ping - The ping that Starlink has measured, in ms +- Ping drop rate - The percentage of failed ping requests (aka "dropped"). This is the inverse of "Uptime" in the Starlink app. - Azimuth - The direction Dishy is facing in degrees - Elevation - Dishy's current elevation in degrees -- Uplink throughput - The amount of data being uploaded through Starlink in Bit/s -- Downlink throughput - The amount of data being downloaded through Starlink in Bit/s +- Uplink throughput - The amount of data being uploaded through Starlink +- Downlink throughput - The amount of data being downloaded through Starlink - Last boot time - The time Starlink was last turned on ### Binary Sensor +- Update available - Whether there is an update pending install - Obstructed - Whether Dishy is currently obstructed -- Roaming - Whether Starlink is "roaming". Roaming is an optional upgrade that allows you to use your Starlink outside of your home address. It is also known as "portability" +- Roaming mode - Whether Starlink is "roaming". Roaming is an optional upgrade that allows you to use your Starlink outside of your home address. It is also known as "portability mode" - Heating - Whether Dishy is currently heating. This may be due to cold temperatures, or an attempt to thaw snow and ice -- Idle - Whether Starlink is in an "idle" state to save power +- Idle - Whether Starlink is "sleeping", as per the schedule defined in the Starlink app - Mast near vertical - Whether Dishy is mounted straight - Motors stuck - Whether Dishy is unable to move +- Slow ethernet - Whether the Ethernet link is at max (gigabit) speed - Thermal throttle - Whether Starlink has reduced performance to avoid overheating - Unexpected location - Whether Starlink has detected operation outside of its designated area diff --git a/source/_integrations/statistics.markdown b/source/_integrations/statistics.markdown index 70d67be9df9..a2e548eaa5a 100644 --- a/source/_integrations/statistics.markdown +++ b/source/_integrations/statistics.markdown @@ -119,7 +119,7 @@ sensor: {% configuration %} entity_id: - description: The source sensor to observe and compute statistical characteristics for. Only [sensors](/integrations/sensor/) and [binary sensor](/integrations/binary_sensor/) are supported. + description: The source sensor to observe and compute statistical characteristics for. Only [sensors](/integrations/sensor/) and [binary sensors](/integrations/binary_sensor/) are supported. required: true type: string name: @@ -157,4 +157,6 @@ unique_id: ### An important note on `max_age` and `sampling_size` -The `max_age` option is only valid within the measured samples specified by `sampling_size` (default 20). Specify a wide-enough `sampling_size` if using an extended max-age (e.g., when looking for `max_age` 1 hour, a sensor that produces one measurement a minute should have at least a `sampling_size` of 60. +If both `max_age` and `sampling_size` are given, the considered samples are those within the `max_age` time window but limited to the number of `sample_size` newest samples. Specify a wide-enough `sampling_size` if using an extended `max_age` (e.g., when looking for `max_age` 1 hour, a sensor that produces one measurement per minute should have at least a `sampling_size` of 60 to use all samples within the `max_age` timeframe.) + +If only `sample_size` is given there is no time limit. If only `max_age` is given the considered number of samples is unlimited. diff --git a/source/_integrations/stt.markdown b/source/_integrations/stt.markdown index 46ec6c89241..0fb1f959f82 100644 --- a/source/_integrations/stt.markdown +++ b/source/_integrations/stt.markdown @@ -3,6 +3,7 @@ title: Speech-to-Text (STT) description: Instructions on how to set up Speech-to-Text (STT) with Home Assistant. ha_release: '0.102' ha_codeowners: + - '@home-assistant/core' - '@pvizeli' ha_domain: stt ha_quality_scale: internal @@ -10,6 +11,11 @@ ha_category: [] ha_integration_type: entity --- -Speech-to-Text (STT) allows you to stream speech data to the STT API and get text back. +A speech to text (STT) entity allows other integrations or applications to stream speech data to the STT API and get text back. -This is an integration that is a building block for other integrations or apps building on top of Home Assistant, like [Ada](https://github.com/home-assistant/ada). +The speech to text entities cannot be implemented manually, but can be provided by integrations. + +## The state of a speech to text entity + +Every speech to text entity keeps track of the timestamp of when the last time +the speech to text entity was used to process speech. diff --git a/source/_integrations/subaru.markdown b/source/_integrations/subaru.markdown index 3f60a70e588..2061d966d12 100644 --- a/source/_integrations/subaru.markdown +++ b/source/_integrations/subaru.markdown @@ -18,7 +18,7 @@ ha_platforms: ha_integration_type: integration --- -This integration retrieves vehicle information and actuates remote services provided by [Subaru STARLINK](https://www.subaru.com/engineering/starlink/safety-security.html) (currently only available in USA and Canada). +This integration retrieves vehicle information and actuates remote services provided by [Subaru STARLINK](https://www.subaru.com/subaru-starlink/starlink-safety-and-security.html) (currently only available in USA and Canada). This integration requires a telematics equipped Subaru and an active vehicle subscription to the Subaru STARLINK service. Before using this integration, you must first register and have login credentials to [MySubaru](https://www.mysubaru.com). diff --git a/source/_integrations/sun.markdown b/source/_integrations/sun.markdown index 1029f8e1d83..874f3e622eb 100644 --- a/source/_integrations/sun.markdown +++ b/source/_integrations/sun.markdown @@ -51,23 +51,25 @@ sun:

    -## Implementation Details +## Automation trigger The sun's event listener will call the service when the sun rises or sets with an offset. -The sun event need to have the type 'sun', which service to call, -which event (sunset or sunrise) and the offset. +The sun trigger need to have the type 'sun', which event (sunset or sunrise) and an optional offset. -```json -{ - "type": "sun", - "service": "switch.turn_on", - "event": "sunset", - "offset": "-01:00:00" -} +```yaml +trigger: + - platform: sun + event: sunrise + offset: "-01:00:01" ``` +| Key name | Description | +| --------- | ----------- | +| `event` | Possible values: `sunset` or `sunrise` +| `offset` | An optional offset for the sun event trigger, in a positive or negative number of seconds, or specified in `HH:MM:SS` (after sun event trigger) or `-HH:MM:SS` (before sun event trigger). + ### Maintains entity `sun.sun` | Possible state | Description | diff --git a/source/_integrations/supla.markdown b/source/_integrations/supla.markdown index a354cdcca23..97a478b98de 100644 --- a/source/_integrations/supla.markdown +++ b/source/_integrations/supla.markdown @@ -17,7 +17,7 @@ ha_integration_type: integration The [Supla](https://supla.org/) is an Open Source home automation system for ESP8266 based devices. It has its own set of protocols, its own firmware and commercially available devices (produced for example by [Zamel](https://zamel.pl/pl-PL/produkty/supla-sterowanie-wi-fi)) -Currently only covers (shutters in Supla's lingo), gates and switches are supported, but, thanks to comprehensive and universal REST API, it's pretty easy to add more. +Currently only covers (shutters in Supla's lingo), gates, garage doors and switches are supported, but, thanks to comprehensive and universal REST API, it's pretty easy to add more. Right now it's impossible to add a device -- all of them are discovered from Supla Cloud's servers or yours. Devices disabled on Supla Cloud will not be loaded into Home Assistant. diff --git a/source/_integrations/switch.command_line.markdown b/source/_integrations/switch.command_line.markdown deleted file mode 100644 index 7edafef40ec..00000000000 --- a/source/_integrations/switch.command_line.markdown +++ /dev/null @@ -1,205 +0,0 @@ ---- -title: "Command line Switch" -description: "Instructions on how to have switches call command line commands." -ha_category: - - Switch -ha_release: pre 0.7 -ha_iot_class: Local Polling -ha_domain: command_line ---- - -The `command_line` switch platform issues specific commands when it is turned on -and off. This might very well become our most powerful platform as it allows -anyone to integrate any type of switch into Home Assistant that can be -controlled from the command line, including calling other scripts! - -To enable it, add the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -switch: - - platform: command_line - switches: - kitchen_light: - command_on: switch_command on kitchen - command_off: switch_command off kitchen -``` - -{% configuration %} -switches: - description: The array that contains all command switches. - required: true - type: map - keys: - identifier: - description: Name of the command switch as slug. Multiple entries are possible. - required: true - type: map - keys: - command_on: - description: The action to take for on. - required: true - type: string - command_off: - description: The action to take for off. - required: true - type: string - command_state: - description: "If given, this command will be run. Returning a result code `0` will indicate that the switch is on." - required: false - type: string - value_template: - description: "If specified, `command_state` will ignore the result code of the command but the template evaluating to `true` will indicate the switch is on." - required: false - type: string - friendly_name: - description: The name used to display the switch in the frontend. - required: false - type: string - icon_template: - description: Defines a template for the icon of the entity. - required: false - type: template - command_timeout: - description: Defines number of seconds for command timeout. - 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`: - -When set, the `friendly_name` had been previously used for API calls and backend -configuration instead of the `object_id` ("identifier"), but -[this behavior is changing](https://github.com/home-assistant/home-assistant/pull/4343) -to make the `friendly_name` for display purposes only. This allows users to set -an `identifier` that emphasizes uniqueness and predictability for API and configuration -purposes but have a prettier `friendly_name` still show up in the UI. As an -additional benefit, if a user wanted to change the `friendly_name` / display -name (e.g., from "Kitchen Lightswitch" to "Kitchen Switch" or -"Living Room Light", or remove the `friendly_name` altogether), they could -do so without needing to change existing automations or API calls. -See aREST device below for an example. - -## Examples - -In this section you find some real-life examples of how to use this switch. - -### Change the icon when a state changes - -This example demonstrates how to use template to change the icon as its state changes. This icon is referencing its own state. - -{% raw %} - -```yaml -switch: - - platform: command_line - switches: - - driveway_sensor_motion: - friendly_name: Driveway buiten sensor - command_on: > - curl -X PUT -d '{"on":true}' "http://ip_address/api/sensors/27/config/" - command_off: > - curl -X PUT -d '{"on":false}' "http://ip_address/api/sensors/27/config/" - command_state: curl http://ip_address/api/sensors/27/ - value_template: > - {{value_json.config.on}} - icon_template: > - {% if value_json.config.on == true %} mdi:toggle-switch - {% else %} mdi:toggle-switch-off - {% endif %} -``` - -{% endraw %} - -### aREST device - -The example below is doing the same as the -[aREST switch](/integrations/arest#switch). -The command line tool [`curl`](https://curl.haxx.se/) is used to toggle a pin -which is controllable through REST. - -{% raw %} - -```yaml -# Example configuration.yaml entry -switch: - - platform: command_line - switches: - arest_pin_four: - command_on: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/1" - command_off: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/0" - command_state: "/usr/bin/curl -X GET http://192.168.1.10/digital/4" - value_template: '{{ value == "1" }}' - friendly_name: Kitchen Lightswitch -``` - -{% endraw %} - -Given this example, in the UI one would see the `friendly_name` of -"Kitchen Light". However, the `identifier` is `arest_pin_four`, making the -`entity_id` `switch.arest_pin_four`, which is what one would use in -[`automation`](/integrations/automation/) or in [API calls](/developers/). - -### Shutdown your local host - -This switch will shutdown your system that is hosting Home Assistant. - -
    -This switch will shutdown your host immediately, there will be no confirmation. -
    - -```yaml -# Example configuration.yaml entry -switch: - - platform: command_line - switches: - home_assistant_system_shutdown: - command_off: "/usr/sbin/poweroff" -``` - -### Control your VLC player - -This switch will control a local VLC media player -([Source](https://community.home-assistant.io/t/vlc-player/106)). - -```yaml -# Example configuration.yaml entry -switch: - - platform: command_line - switches: - vlc: - command_on: "cvlc 1.mp3 vlc://quit &" - command_off: "pkill vlc" -``` - -### Control Foscam Motion Sensor - -This switch will control the motion sensor of Foscam Webcams which Support CGI -Commands ([Source](https://www.iltucci.com/blog/wp-content/uploads/2018/12/Foscam-IPCamera-CGI-User-Guide-V1.0.4.pdf)). -This switch supports statecmd, -which checks the current state of motion detection. - -{% raw %} - -```yaml -# Example configuration.yaml entry -switch: - - platform: command_line - switches: - foscam_motion: - command_on: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=1&usr=admin&pwd=password"' - command_off: 'curl -k "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=setMotionDetectConfig&isEnable=0&usr=admin&pwd=password"' - command_state: 'curl -k --silent "https://ipaddress:443/cgi-bin/CGIProxy.fcgi?cmd=getMotionDetectConfig&usr=admin&pwd=password" | grep -oP "(?<=isEnable>).*?(?=)"' - value_template: '{{ value == "1" }}' -``` - -{% endraw %} - -- Replace admin and password with an "Admin" privileged Foscam user -- Replace ipaddress with the local IP address of your Foscam diff --git a/source/_integrations/switch.mqtt.markdown b/source/_integrations/switch.mqtt.markdown index 9df9c142283..d1cf316b185 100644 --- a/source/_integrations/switch.mqtt.markdown +++ b/source/_integrations/switch.mqtt.markdown @@ -116,7 +116,7 @@ device: required: false type: string device_class: - description: The [type/class](/integrations/switch/#device-class) of the switch to set the icon in the frontend. + description: The [type/class](/integrations/switch/#device-class) of the switch to set the icon in the frontend. The `device_class` can be `null`. required: false type: device_class default: None @@ -212,7 +212,7 @@ unique_id: value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's state from the `state_topic`. To determine the switches's state result of this template will be compared to `state_on` and `state_off`." required: false - type: string + type: template {% endconfiguration %}
    diff --git a/source/_integrations/switch_as_x.markdown b/source/_integrations/switch_as_x.markdown index ee55bb0cc0a..7d9f0ca600f 100644 --- a/source/_integrations/switch_as_x.markdown +++ b/source/_integrations/switch_as_x.markdown @@ -36,7 +36,7 @@ things like locks or garage doors. Using the Switch as X integration, you can convert those switches into the entity types that best matches your use case. -{% include integrations/config_flow.md name="Change device type of a switch" %} +{% include integrations/config_flow.md name="Switch as X" %} {% configuration_basic %} Switch entity: description: The switch entity you want to convert into something else. diff --git a/source/_integrations/switcher_kis.markdown b/source/_integrations/switcher_kis.markdown index e070d568a6a..8f6040710f7 100644 --- a/source/_integrations/switcher_kis.markdown +++ b/source/_integrations/switcher_kis.markdown @@ -88,5 +88,5 @@ Note: This does not affect the auto off timer. ## Notes -Make sure that Home Assistant host's firewall allows incoming traffic on UDP ports 20002 & 20003 and outgoing connections to Switcher device(s) on TCP ports 9957 & 10000. +Make sure that Home Assistant host's firewall allows incoming traffic on UDP ports 10002, 20002 & 20003 and outgoing connections to Switcher device(s) on TCP ports 9957 & 10000. If Home Assistant and the Switcher device(s) are not on the same network, you will also need to have their traffic properly forwarded between the two networks. diff --git a/source/_integrations/synology_dsm.markdown b/source/_integrations/synology_dsm.markdown index 0f1625639dd..27ecca514a2 100644 --- a/source/_integrations/synology_dsm.markdown +++ b/source/_integrations/synology_dsm.markdown @@ -3,6 +3,7 @@ title: Synology DSM description: Instructions on how to integrate the Synology DSM sensor within Home Assistant. ha_category: - Camera + - Media Source - System Monitor - Update ha_release: 0.32 @@ -126,3 +127,15 @@ Reboot the NAS. ### Button `shutdown` Shutdown the NAS. + +## Media Source + +A media source is provided for your [Synology Photos](https://www.synology.com/en-global/dsm/feature/photos). + +The media source URIs will look like `media-source://synology_dsm///`. + +This media browser supports multiple Synology Photos instances. `` is the Home Assistant ID for the NAS (_usually the serial number of the NAS_). You can find this id when using the media browser, when you hover over the NAS name, you get shown the simple name followed by the unique id ex: `192.168.0.100:5001 - 18C0PEN253705`. + +To find the `` you need to go to the album in your photos instance, and the id will be in the URL ex: `https://192.168.0.100:5001/#/album/19`, where 19 is the album id. An `` of 0 will contain all images. + +For performance reasons, a maximum of 1000 images will be shown in the Media Browser. diff --git a/source/_integrations/system_log.markdown b/source/_integrations/system_log.markdown index a4e0d578c07..558c64c85ac 100644 --- a/source/_integrations/system_log.markdown +++ b/source/_integrations/system_log.markdown @@ -72,7 +72,7 @@ Traceback (most recent call last): [...] ``` -The message ("Unable to find integration system_healt"), name (`homeassistant.loader`) and level (`ERROR`) can easily be extracted from the log. The exact timestamp and if there is a stack trace that's shown as well. Here is another error caused by the `google_map` integration with additional output present. +The message ("Unable to find integration system_healt"), name (`homeassistant.loader`) and level (`ERROR`) can easily be extracted from the log. The exact timestamp and if there is a stack trace that's shown as well. ## Examples diff --git a/source/_integrations/tado.markdown b/source/_integrations/tado.markdown index 7cdbc322fe2..8e090b6b570 100644 --- a/source/_integrations/tado.markdown +++ b/source/_integrations/tado.markdown @@ -134,7 +134,7 @@ You can use the service `tado.set_water_heater_timer` to set your water heater t | Service data attribute | Optional | Description | | ---------------------- | -------- | ---------------------------------------------------------------------- | -| `entity_id` | yes | String, Name of entity e.g., `climate.heating` | +| `entity_id` | yes | String, Name of entity e.g., `water_heater.hot_water` | | `time_period` | no | Time Period, Period of time the boost should last for e.g., `01:30:00` | | `temperature` | yes | String, The required target temperature e.g., `20.5` | diff --git a/source/_integrations/tag.mqtt.markdown b/source/_integrations/tag.mqtt.markdown index d5eae095c2e..d5ef7a003de 100644 --- a/source/_integrations/tag.mqtt.markdown +++ b/source/_integrations/tag.mqtt.markdown @@ -23,7 +23,7 @@ topic: value_template: description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a tag ID." required: false - type: string + type: template device: description: "Information about the device this device trigger is a part of to tie it into the [device registry](https://developers.home-assistant.io/docs/en/device_registry_index.html). At least one of identifiers or connections must be present to identify the device." required: true diff --git a/source/_integrations/tellduslive.markdown b/source/_integrations/tellduslive.markdown index b6d980bda60..260d0c25b83 100644 --- a/source/_integrations/tellduslive.markdown +++ b/source/_integrations/tellduslive.markdown @@ -24,7 +24,13 @@ ha_platforms: ha_integration_type: integration --- -The `tellduslive` integration let you connect to [Telldus Live](https://live.telldus.com). It's cloud platform that connects to your Tellstick Net or Tellstick ZNet connected gear at home. +The `tellduslive` integration let you connect to the [Telldus Live](https://live.telldus.com) API. It's cloud platform that connects to your Tellstick Net or Tellstick ZNet connected gear at home. + +
    + +Note that you need a [Telldus Premium](https://telldus.com/en/telldus-premium/) subscription to access the Cloud API (https://telldus.com/en/important-announcement-english/). + +
    Local API supports only one device at this stage. Local API is only supported with the Znet Lite products, the older hardware (such as Tellstick Net) does not support local API. diff --git a/source/_integrations/thethingsnetwork.markdown b/source/_integrations/thethingsnetwork.markdown index 6a980dca027..8935f20a248 100644 --- a/source/_integrations/thethingsnetwork.markdown +++ b/source/_integrations/thethingsnetwork.markdown @@ -15,7 +15,7 @@ ha_integration_type: integration ---
    - This integration only supports TTNv2. + This integration only supports TTNv2 that has been definitively switched off in 2022 (deprecated).
    The `thethingsnetwork` integration allows one to interact with the [The Things Network](https://www.thethingsnetwork.org). This community-driven and open network supports [LoRaWAN](https://www.lora-alliance.org/) for long range (~5 to 15 km) communication with a low bandwidth (51 bytes/message). [Gateways](https://www.thethingsnetwork.org/docs/gateways/) transfers the received data from the sensors to the The Things Network. diff --git a/source/_integrations/timer.markdown b/source/_integrations/timer.markdown index dcec1331815..0510cc73331 100644 --- a/source/_integrations/timer.markdown +++ b/source/_integrations/timer.markdown @@ -23,7 +23,7 @@ However, automations using the `timer.finished` event **will not** trigger if th
    ## Configuration -The preferred way to configure timer helpers is via the user interface at **Settings** -> **Devices & Services** -> **Helpers** and click the add button; next choose the **Timer** option. +The preferred way to configure timer helpers is via the user interface at **{% my helpers title="Settings > Devices & Services > Helpers" %}** and click the add button; next choose the {% my config_flow_start domain=timer title="Timer" %} option. You can also click the following button to be redirected to the Helpers page of your Home Assistant instance. diff --git a/source/_integrations/torque.markdown b/source/_integrations/torque.markdown index 5015d4c64ff..0315b754782 100644 --- a/source/_integrations/torque.markdown +++ b/source/_integrations/torque.markdown @@ -29,7 +29,7 @@ Under the **Logging Preferences** header: Under the **Realtime Web Upload** header: - Check **Upload to web-server**. -- Enter `https://HOST/api/torque` or `https://@/HOST:PORT/api/torque` as the **Web-server URL**, where `HOST` and `PORT` are your externally accessible Home Assistant HTTP host. To use a Bearer Token, this has to be [SSL/TSL](/docs/ecosystem/certificates/). +- Enter `https://HOST/api/torque` or `https://@/HOST:PORT/api/torque` as the **Web-server URL**, where `HOST` and `PORT` are your externally accessible Home Assistant HTTP host. To use a Bearer Token, this has to be [SSL/TLS](/docs/ecosystem/certificates/). - Enable **Send https: Bearer Token** (available since Torque Pro 1.12.46) - Paste a Long-Lived Access Token from any Home Assistant user in **Set Bearer Token** field. - Enter an email address in **User Email Address** (this can be any non empty string you like). diff --git a/source/_integrations/tplink_omada.markdown b/source/_integrations/tplink_omada.markdown index e4970b47859..a860c42b595 100644 --- a/source/_integrations/tplink_omada.markdown +++ b/source/_integrations/tplink_omada.markdown @@ -38,7 +38,7 @@ TP-Link Omada Controller: - OC300 - Software Controller. -Controller versions 5.0.0 and later are supported. +Controller versions 5.1.0 and later are supported. ## Supported Omada devices diff --git a/source/_integrations/traccar.markdown b/source/_integrations/traccar.markdown index f93bb96cd3f..f09b7b78931 100644 --- a/source/_integrations/traccar.markdown +++ b/source/_integrations/traccar.markdown @@ -80,7 +80,7 @@ monitored_conditions: required: false type: list event: - description: "Traccar events to include in the scan and fire within Home Assistant. *NOTE* For more info regarding Traccar events please refer to Traccar's documentation: https://www.traccar.org/documentation/events/." + description: "Traccar events to include in the scan and fire within Home Assistant. *NOTE* For more info regarding Traccar events please refer to [Traccar's documentation](https://www.traccar.org/events/)." required: false type: list keys: @@ -163,7 +163,7 @@ device_tracker: monitored_conditions: ['alarm', 'mycomputedattribute'] ``` -The parameter `event` allows you to import events from the traccar platform (https://www.traccar.org/documentation/events/) and fire them in your Home Assistant. It accepts a list of events to be monitored and imported and each event must be listed in lowercase snakecase. The events will be fired with the same event name defined in the aforementioned list preceded by the prefix `traccar_`. For example if you need to import the Traccar events `deviceOverspeed` and `deviceFuelDrop` in Home Assistant, you need to fill the `event` parameter with: +The parameter `event` allows you to import [events](https://www.traccar.org/events/) from the traccar platform and fire them in your Home Assistant. It accepts a list of events to be monitored and imported and each event must be listed in lowercase snakecase. The events will be fired with the same event name defined in the aforementioned list preceded by the prefix `traccar_`. For example if you need to import the Traccar events `deviceOverspeed` and `deviceFuelDrop` in Home Assistant, you need to fill the `event` parameter with: ```yaml device_tracker: diff --git a/source/_integrations/transmission.markdown b/source/_integrations/transmission.markdown index 4883034705e..9d24b856d80 100644 --- a/source/_integrations/transmission.markdown +++ b/source/_integrations/transmission.markdown @@ -72,7 +72,7 @@ Example of an automation that notifies on successful download and removes the to message: "{{trigger.event.data.name}}" - service: transmission.remove_torrent data: - name: "Transmission" + entry_id: eeb52bc78e11d813a1e6bc68c8ff93c8 id: "{{trigger.event.data.id}}" ``` @@ -80,6 +80,8 @@ Example of an automation that notifies on successful download and removes the to ## Services +All Transmission services require integration `entry_id`. To find it, go to Developer Tools -> Services. Choose the desired service and select your integration from dropdown. Then switch to YAML mode to see `entry_id`. + ### Service `add_torrent` Adds a new torrent to download. It can either be a URL (HTTP, HTTPS or FTP), magnet link or a local file (make sure that the path is [white listed](/docs/configuration/basic/#allowlist_external_dirs)). diff --git a/source/_integrations/tts.markdown b/source/_integrations/tts.markdown index ac1f099411a..5285769032f 100644 --- a/source/_integrations/tts.markdown +++ b/source/_integrations/tts.markdown @@ -6,6 +6,7 @@ ha_category: - Text-to-speech ha_release: 0.35 ha_codeowners: + - '@home-assistant/core' - '@pvizeli' ha_domain: tts ha_quality_scale: internal @@ -16,83 +17,27 @@ ha_integration_type: entity Text-to-Speech (TTS) enables Home Assistant to speak to you. -## Configuring a `tts` platform +## Services -To get started, add the following lines to your `configuration.yaml` (example for Google): +### Service speak + +Modern platforms will create entities under the `tts` domain, where each entity represents one text-to-speech service provider. These entities may be used as targets for the `tts.speak` service. + +The `tts.speak` service supports `language` and on some platforms also `options` for settings, e.g., *voice, motion, speed, etc*. The text that should be spoken is set with `message`, and the media player that should output the sound is selected with `media_player_entity_id`. ```yaml -# Example configuration.yaml entry for Google TTS service -tts: - - platform: google_translate +service: tts.speak +target: tts.example +data: + media_player_entity_id: media_player.kitchen + message: "May the force be with you." ``` -
    +### Service say (legacy) -Depending on your setup, you might need to set an external URL (`external_url`) inside the [configuration](/docs/configuration/basic/) or in the parameters of this component. +The `say` service supports `language` and on some platforms also `options` for settings, e.g., *voice, motion, speed, etc*. The text that should be spoken is set with `message`. Since release 0.92, service name can be defined in configuration `service_name` option. -
    - -The following optional parameters can be used with any platform. However, the TTS integration will only look for global settings under the configuration of the first configured platform: - -{% configuration %} -cache: - description: Allow TTS to cache voice file to local storage. - required: false - type: boolean - default: true -cache_dir: - description: Folder name or path to a folder for caching files. - required: false - type: string - default: tts -time_memory: - description: Time to hold the voice data inside memory for fast play on a media player. Minimum is 60 s and the maximum 57600 s (16 hours). - required: false - type: integer - default: 300 -service_name: - description: Define the service name. - required: false - type: string - default: The service name default set to _say. For example, for google_translate TTS, its service name default is `google_translate_say`. -{% endconfiguration %} - -The extended example from above would look like the following sample: - -```yaml -# Example configuration.yaml entry for Google Translate TTS service -tts: - - platform: google_translate - cache: true - cache_dir: /tmp/tts - time_memory: 300 - service_name: google_say -``` - - -The following sections describe some of the problems encountered with media devices. - -### Self-signed certificates - -This problem occurs when your Home Assistant instance is configured to be accessed through SSL, and you are using a self-signed certificate on your internal URL. - -The `tts` service will send an `https://` URL to the media device, which will check the certificate, and reject it. So it won't play your file. If you could make the device accept your certificate, it would play the file. However, many media devices do not allow changing settings to accept self-signed certificates. Ultimately, your option may be to serve files to local devices as `http://` rather than `https://`. - -### Google cast devices - -The Google cast devices (Google Home, Chromecast, etc.) present the following problems: - -* They [reject self-signed certificates](#self-signed-certificates). - -* They do not work with URLs that contain hostnames established by local naming means. Let's say your Home Assistant instance is running on a machine made known locally as `ha`. All your machines on your local network are able to access it as `ha`. However, try as you may, your cast device won't download the media files from your `ha` machine. That's because your cast device ignores your local naming setup. In this example, the `say` service creates a URL like `http://ha/path/to/media.mp3` (or `https://...` if you are using SSL). If you are _not_ using SSL then setting an internal URL that contains the IP address of your server works around this issue. By using an IP address, the cast device does not have to resolve the hostname. - -* If you are using an SSL (e.g., `https://yourhost.example.org/...`) then you _must_ use the hostname in the certificate (e.g., `external_url: https://yourhost.example.org`). You cannot use an IP address since the certificate won't be valid for the IP address, and the cast device will refuse the connection. - -## Service say - -The `say` service support `language` and on some platforms also `options` for set, i.e., *voice, motion, speed, etc*. The text for speech is set with `message`. Since release 0.92, service name can be defined in configuration `service_name` option. - -Say to all `media_player` device entities: +Say to all `media_player` entities: ```yaml # Replace google_translate_say with _say when you use a different platform. @@ -102,7 +47,7 @@ data: message: "May the force be with you." ``` -Say to the `media_player.floor` device entity: +Say to the `media_player.floor` entity: ```yaml service: tts.google_translate_say @@ -111,7 +56,7 @@ data: message: "May the force be with you." ``` -Say to the `media_player.floor` device entity in French: +Say to the `media_player.floor` entity in French: ```yaml service: tts.google_translate_say @@ -136,17 +81,17 @@ data: ## Cache -The integration has two caches. Both caches can be controlled with the `cache` option in the platform configuration or the service call `say`. A long time cache will be located on the file system. The in-memory cache for fast responses to media players will be auto-cleaned after a short period. +The integration cache can be controlled with the `cache` option in the service call to `speak` or `say`. A long time cache will be located on the file system. The in-memory cache for fast responses to media players will be auto-cleaned after a short period. ## REST API ### POST `/api/tts_get_url` -Returns a URL to the generated TTS file. Platform and message are required. +Returns a URL to the generated TTS file. The `engine_id` or `platform` parameter together with `message` are required. ```json { - "platform": "amazon_polly", + "engine_id": "tts.amazon_polly", "message": "I am speaking now" } ``` @@ -155,8 +100,8 @@ The return code is 200 if the file is generated. The message body will contain a ```json { - "path": "/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3", - "url": "http://127.0.0.1:8123/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3" + "path": "/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_tts.demo.mp3", + "url": "http://127.0.0.1:8123/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_tts.demo.mp3" } ``` @@ -165,6 +110,32 @@ Sample `curl` command: ```bash $ curl -X POST -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ - -d '{"message": "I am speaking now", "platform": "amazon_polly"}' \ + -d '{"message": "I am speaking now", "engine_id": "amazon_polly"}' \ http://localhost:8123/api/tts_get_url ``` + +## Troubleshooting + +
    + +Depending on your setup, you might need to set an external URL (`external_url`) inside the [configuration](/docs/configuration/basic/). + +
    + +The following sections describe some of the problems encountered with media devices. + +### Self-signed certificates + +This problem occurs when your Home Assistant instance is configured to be accessed through SSL, and you are using a self-signed certificate on your internal URL. + +The `tts` service will send an `https://` URL to the media device, which will check the certificate, and reject it. So it won't play your file. If you could make the device accept your certificate, it would play the file. However, many media devices do not allow changing settings to accept self-signed certificates. Ultimately, your option may be to serve files to local devices as `http://` rather than `https://`. + +### Google cast devices + +The Google cast devices (Google Home, Chromecast, etc.) present the following problems: + +* They [reject self-signed certificates](#self-signed-certificates). + +* They do not work with URLs that contain hostnames established by local naming means. Let's say your Home Assistant instance is running on a machine made known locally as `ha`. All your machines on your local network are able to access it as `ha`. However, try as you may, your cast device won't download the media files from your `ha` machine. That's because your cast device ignores your local naming setup. In this example, the `say` service creates a URL like `http://ha/path/to/media.mp3` (or `https://...` if you are using SSL). If you are _not_ using SSL then setting an internal URL that contains the IP address of your server works around this issue. By using an IP address, the cast device does not have to resolve the hostname. + +* If you are using SSL (e.g., `https://yourhost.example.org/...`) then you _must_ use the hostname in the certificate (e.g., `external_url: https://yourhost.example.org`). You cannot use an IP address since the certificate won't be valid for the IP address, and the cast device will refuse the connection. diff --git a/source/_integrations/tuya.markdown b/source/_integrations/tuya.markdown index 1a31677f9cc..1172f01af69 100644 --- a/source/_integrations/tuya.markdown +++ b/source/_integrations/tuya.markdown @@ -75,7 +75,7 @@ This is a separate account from the one you made for the app. You cannot log in 1. Navigate to the `Devices` tab. 2. Click `Link Tuya App Account` > `Add App Account`. ![](/images/integrations/tuya/image_003.png) -3. Scan the QR code that appears using the `Tuya Smart` app or `Smart Life` app. +3. Scan the QR code that appears using the `Tuya Smart` app or `Smart Life` app using the 'Me' section of the app. ![](/images/integrations/tuya/image_004.png) 4. Click `Confirm` in the app. 5. To confirm that everything worked, navigate to the `All Devices` tab. Here you should be able to find the devices from the app. diff --git a/source/_integrations/ukraine_alarm.markdown b/source/_integrations/ukraine_alarm.markdown index 2412ee85dba..e0300b5398b 100644 --- a/source/_integrations/ukraine_alarm.markdown +++ b/source/_integrations/ukraine_alarm.markdown @@ -25,10 +25,8 @@ The Ukraine Alarm integration uses the siren.pp.ua API - public wrapper for [Ukr Siren check interval is set to 10 seconds to avoid overloading the API and still be able to react fast enough. -## Setup - {% include integrations/config_flow.md %} ## Limitations -You can add up to 5 regions for monitoring to don't hit API rate limit. +You can monitor up to 5 regions to not hit the API rate limit. diff --git a/source/_integrations/ultraloq.markdown b/source/_integrations/ultraloq.markdown index 11c2a37a5cb..e2bdff1ebb0 100644 --- a/source/_integrations/ultraloq.markdown +++ b/source/_integrations/ultraloq.markdown @@ -11,6 +11,11 @@ works_with: ha_iot_standard: zwave --- +
    +There is a bug in the firmware of Ultraloq devices that causes the door state sensor to not be updated and the latch to always be reported as "OPEN".
    +We are fully aware that this is not what you expect from a Works With Home Assistant brand and we are in contact Ultraloq to get this resolved! +
    + Ultraloq smart locks allow users to enter their homes without a key. The lock can be controlled remotely using the Ultraloq app or by using Home Assistant. U-tec, their parent company, is a member of the Works with Home Assistant partner program. This means they are committed to making sure the Ultraloq Z-Wave products are up-to-date and ready to use with Home Assistant. Ultraloq Z-Wave Series smart locks work locally and integrate seamlessly with the Z-Wave integration in Home Assistant (Z-Wave stick required). diff --git a/source/_integrations/unifiprotect.markdown b/source/_integrations/unifiprotect.markdown index 22d05043ac6..12140a85f1c 100644 --- a/source/_integrations/unifiprotect.markdown +++ b/source/_integrations/unifiprotect.markdown @@ -22,7 +22,6 @@ ha_iot_class: Local Push ha_config_flow: true ha_quality_scale: platinum ha_codeowners: - - '@briis' - '@AngellusMortis' - '@bdraco' ha_domain: unifiprotect @@ -50,15 +49,15 @@ The UniFi Protect integration adds support for retrieving Camera feeds and Senso 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 (**UDMPRO**, **UDR**, or **UDMSE**), _except the base UniFi Dream Machine/UDM_ -* UniFi Cloud Key Gen2 Plus (**UCKP**) firmware version v2.0.24+ +* Any UniFi Protect Network Video Recorder (**[UNVR](https://store.ui.com/collections/unifi-protect-nvr/products/unvr)** or **[UNVRPRO](https://store.ui.com/collections/unifi-protect-nvr/products/unvr-pro)**) +* Any UniFi "Dream" device (**[UDMPRO](https://store.ui.com/collections/unifi-network-unifi-os-consoles/products/udm-pro)**, **[UDR](https://store.ui.com/collections/unifi-network-unifi-os-consoles/products/dream-router)**, or **[UDMSE](https://store.ui.com/collections/unifi-network-unifi-os-consoles/products/dream-machine-se)**), _except the base UniFi Dream Machine/UDM_ +* UniFi Cloud Key Gen2 Plus (**[UCKP](https://store.ui.com/collections/unifi-protect-nvr/products/unifi-cloudkey-plus)**) 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. +UCKP with Firmware v1.x **do NOT run UniFi OS**, you must upgrade to firmware `[v2.0.24](https://community.ui.com/releases/UniFi-Cloud-Key-Firmware-2-0-24/b6684f1e-8542-4660-bc0b-74e0634448e8)` or newer. ### Software Support -The absolute **minimal** software version is `v1.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. +The absolute **minimal** software version is `[v1.20.0](https://community.ui.com/releases/UniFi-Protect-Application-1-20-0/d43c0905-3fb4-456b-a7ca-73aa830cb011)` 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. #### About UniFi Early Access @@ -71,18 +70,18 @@ Using Early Access versions will likely cause your UniFi Protect integration to #### Downgrading UniFi Protect -In the event you accidentally upgrade to an Early Access version of UniFi Protect you can downgrade to a stable version by either [restoring a backup](https://help.ui.com/hc/en-us/articles/360008976393-UniFi-Backups-and-Migration) or by manually downgrading your UniFi Protect. +In the event you accidentally upgrade to an Early Access version of UniFi Protect you can downgrade to a stable version by either [restoring a backup](https://help.ui.com/hc/articles/360008976393) or by manually downgrading your UniFi Protect. ##### Manually Downgrade -Manually downgrading comes with its own risks and it is not recommended unless you do not have a backup available. Some Protect versions cannot be downgraded from (like `v2.0` to `v1.21`). To downgrade, you can access your [UniFi OS Console via SSH](https://help.ui.com/hc/en-us/articles/204909374#h_01F8G1NSFWE9GWXMT977VQEP8V) and then do the following: +Manually downgrading comes with its own risks and it is not recommended unless you do not have a backup available. Some Protect versions cannot be downgraded from (like `v2.0` to `v1.21`). To downgrade, you can access your [UniFi OS Console via SSH](https://help.ui.com/hc/articles/204909374) and then do the following: ```bash -# run this command first _only_ if you are on a 1.x firmware of the UDM Pro -# it is not needed for the UDM SE, UNVR, etc. +# Run this command first _only_ if you are on a 1.x firmware of the UDM Pro. +# It is not needed for the UDM SE, UNVR, etc. unifi-os shell -# downgrade UniFi Protect +# Downgrade UniFi Protect. apt-get update apt-get install --reinstall --allow-downgrades unifi-protect=2.0.0~beta.5 -y ``` @@ -91,7 +90,7 @@ You can replace `2.0.0~beta.5` with whatever version of UniFi Protect you want t
    -If you want to downgrade to another Early Access version, you must have [Remote Access enabled](https://help.ui.com/hc/en-us/articles/115012240067-UniFi-How-to-enable-remote-access) and have the Early Access release channel enabled. +If you want to downgrade to another Early Access version, you must have [Remote Access enabled](https://help.ui.com/hc/articles/115012240067) and have the Early Access release channel enabled.
    @@ -108,13 +107,13 @@ use has. 2. In the upper right corner, click on _Add User_. 3. Fill out the fields for your user. Be sure the role you assign to the user grants them access to at least one or more UniFi Protect devices. -4. Click _Add_ in the bottom Right. +4. Click _Add_ in the bottom right. ![UniFi OS User Creation](/images/integrations/unifiprotect/user.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 +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: @@ -145,8 +144,8 @@ and in many cases, get a read-only sensor instead of an editable switch/select/n **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. This includes the G4 Doorbell, G4 Bullet, G4 Pro and G4 Instant. +* All "AI" series cameras. This includes the [AI 360](https://store.ui.com/collections/unifi-protect/products/unifi-protect-ai-360) and the [AI Bullet](https://store.ui.com/collections/unifi-protect/products/uvc-ai-bullet). +* All "G4" series cameras. This includes the [G4 Doorbell](https://store.ui.com/collections/unifi-protect/products/uvc-g4-doorbell), [G4 Bullet](https://store.ui.com/collections/unifi-protect/products/uvc-g4-bullet), [G4 Pro](https://store.ui.com/collections/unifi-protect/products/uvc-g4-pro) and [G4 Instant](https://store.ui.com/collections/unifi-protect/products/camera-g4-instant). G3 Series cameras do _not_ have Smart detections. diff --git a/source/_integrations/update.mqtt.markdown b/source/_integrations/update.mqtt.markdown index b444cc210f4..62ce2a0fc90 100644 --- a/source/_integrations/update.mqtt.markdown +++ b/source/_integrations/update.mqtt.markdown @@ -109,7 +109,8 @@ device: required: false type: string device_class: - description: The [type/class](/integrations/update/#device-classes) of the update to set the icon in the frontend. + description: The [type/class](/integrations/update/#device-classes) of the update to set the icon in the frontend. The `device_class` can be `null`. + default: None required: false type: device_class default: None diff --git a/source/_integrations/utility_meter.markdown b/source/_integrations/utility_meter.markdown index 8588ae9d39d..0853b40ffae 100644 --- a/source/_integrations/utility_meter.markdown +++ b/source/_integrations/utility_meter.markdown @@ -243,7 +243,7 @@ utility_meter: ## Advanced Configuration for DSMR users -When using the [DSMR component](/integrations/dsmr) to get data from the utility meter, each tariff (peak and off-peak) has a separate sensor. Additionally, there is a separate sensor for gas consumption. The meter switches automatically between tariffs, so an automation is not necessary in this case. But, you do have to setup a few more instances of the `utility_meter` component. +When using the [DSMR integration](/integrations/dsmr) to get data from the utility meter, each tariff (peak and off-peak) has a separate sensor. Additionally, there is a separate sensor for gas consumption. The meter switches automatically between tariffs, so an automation is not necessary in this case. But, you do have to setup a few more instances of the `utility_meter` integration. If you want to create a daily and monthly sensor for each tariff, you have to track separate sensors: @@ -251,7 +251,7 @@ If you want to create a daily and monthly sensor for each tariff, you have to tr - `sensor.energy_consumption_tarif_2` for tarif 2 power (for example peak) - `sensor.gas_consumption` for gas consumption -So, tracking daily and monthly consumption for each sensor, will require setting up 6 entries under the `utility_meter` component. +So, tracking daily and monthly consumption for each sensor, will require setting up 6 entries under the `utility_meter` integration. ```yaml utility_meter: diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown index c6af67994ed..a141b9b6f62 100644 --- a/source/_integrations/vacuum.mqtt.markdown +++ b/source/_integrations/vacuum.mqtt.markdown @@ -72,7 +72,7 @@ availability_topic: battery_level_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the battery level of the vacuum. This is required if `battery_level_topic` is set. required: false - type: string + type: template battery_level_topic: description: The MQTT topic subscribed to receive battery level values from the vacuum. required: false @@ -80,7 +80,7 @@ battery_level_topic: charging_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the charging state of the vacuum. This is required if `charging_topic` is set. required: false - type: string + type: template charging_topic: description: The MQTT topic subscribed to receive charging state values from the vacuum. required: false @@ -88,7 +88,7 @@ charging_topic: cleaning_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the cleaning state of the vacuum. This is required if `cleaning_topic` is set. required: false - type: string + type: template cleaning_topic: description: The MQTT topic subscribed to receive cleaning state values from the vacuum. required: false @@ -100,7 +100,7 @@ command_topic: docked_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the docked state of the vacuum. This is required if `docked_topic` is set. required: false - type: string + type: template docked_topic: description: The MQTT topic subscribed to receive docked state values from the vacuum. required: false @@ -123,7 +123,7 @@ entity_category: error_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define potential error messages emitted by the vacuum. This is required if `error_topic` is set. required: false - type: string + type: template error_topic: description: The MQTT topic subscribed to receive error messages from the vacuum. required: false @@ -135,7 +135,7 @@ fan_speed_list: fan_speed_template: description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the fan speed of the vacuum. This is required if `fan_speed_topic` is set. required: false - type: string + type: template fan_speed_topic: description: The MQTT topic subscribed to receive fan speed values from the vacuum. required: false diff --git a/source/_integrations/venstar.markdown b/source/_integrations/venstar.markdown index 28a1935d284..d42f794c171 100644 --- a/source/_integrations/venstar.markdown +++ b/source/_integrations/venstar.markdown @@ -49,7 +49,29 @@ The following values are supported for the preset_mode state attribute: Note - Please ensure that you update your thermostat to the latest firmware. Initially tested on firmware 5.10 and currently VH6.79. -Local API mode needs to be enabled via the thermostat's *Menu > WiFi > Local API Options > Local API - ON* +### Enabling Local API +Local API mode needs to be enabled on the thermostat itself. It cannot be enabled using the Venstar mobile apps or Skyport cloud service. Exact steps vary across different [series](https://venstar.com/thermostats/) of thermostats: + +- [ColorTouch](https://venstar.com/thermostats/colortouch/) + - **Menu** > **WiFi** > **Local API Option** > **[Local API - ON](https://www.youtube.com/watch?v=kB_HcJ3kqCg&t=51s)**. + +- [EXPLORER](https://venstar.com/thermostats/explorer/) / [EXPLORER IAQ](https://venstar.com/thermostats/explorer-iaq/) + - Press **SETUP**. + - Press **MODE** repeatedly until you see [LOCAL API](https://www.youtube.com/watch?v=HRmWFwfQAhU&t=276s). + - Press **WARMER** to toggle "ON". + - Press **SETUP** to exit. + +- [EXPLORER Mini](https://venstar.com/thermostats/explorermini/) + - Press and hold **MODE** + **FAN** together for 5 seconds. + - Press **MODE** repeatedly until you see "API". + - Press **WARMER** to toggle "ON". + - Press **MODE** + **FAN** together to exit. + +If the local API is successfully enabled on the thermostat, you should see some basic API info when you navigate to its IP address in a web browser: + +```json +{"api_ver":7,"type":"commercial","model":"VYG-4800","firmware":"2.22.19"} +``` {% include integrations/config_flow.md %} diff --git a/source/_integrations/vicare.markdown b/source/_integrations/vicare.markdown index 833c761848d..54ad909e4fa 100644 --- a/source/_integrations/vicare.markdown +++ b/source/_integrations/vicare.markdown @@ -5,8 +5,6 @@ ha_category: - Climate ha_release: 0.99 ha_iot_class: Cloud Polling -ha_codeowners: - - '@oischinger' ha_config_flow: true ha_domain: vicare ha_platforms: diff --git a/source/_integrations/vizio.markdown b/source/_integrations/vizio.markdown index ed77ebe403b..85006324140 100644 --- a/source/_integrations/vizio.markdown +++ b/source/_integrations/vizio.markdown @@ -13,7 +13,7 @@ ha_domain: vizio ha_zeroconf: true ha_platforms: - media_player -ha_integration_type: hub +ha_integration_type: device --- The `vizio` integration allows you to control [SmartCast](https://www.vizio.com/smartcast-app)-compatible TVs and sound bars (2016+ models). diff --git a/source/_integrations/voip.markdown b/source/_integrations/voip.markdown new file mode 100644 index 00000000000..5fed67787f9 --- /dev/null +++ b/source/_integrations/voip.markdown @@ -0,0 +1,30 @@ +--- +title: Voice over IP +description: Voice over IP +ha_category: + - Voice +ha_iot_class: Local Push +ha_release: '2023.5' +ha_codeowners: + - '@balloob' + - '@synesthesiam' +ha_domain: voip +ha_integration_type: integration +ha_quality_scale: internal +ha_platforms: + - binary_sensor + - select + - switch +ha_config_flow: true +--- + +The VoIP integration enables users to talk to [Assist](/docs/assist) using an analog phone and a VoIP adapter. Currently, the system works with the [Grandstream HT801](https://amzn.to/40k7mRa). See [the tutorial](/projects/worlds-most-private-voice-assistant) for detailed instructions. + +As an alternative, the [Grandstream HT802](https://www.amazon.com/Grandstream-GS-HT802-Analog-Telephone-Adapter/dp/B01JH7MYKA/) can be used, which is basically the same as the previously mentioned HT801, but has two phone ports, of which Home Assistant currently support using only one of them. + +

    + + Connecting a phone to Home Assistant requires an adapter. +

    + +{% include integrations/config_flow.md %} diff --git a/source/_integrations/waze_travel_time.markdown b/source/_integrations/waze_travel_time.markdown index 61456ad8e91..226c3f8842d 100644 --- a/source/_integrations/waze_travel_time.markdown +++ b/source/_integrations/waze_travel_time.markdown @@ -1,6 +1,6 @@ --- title: Waze Travel Time -description: Instructions on how to add Waze travel time to Home Assistant. +description: Instructions on how to add Waze Travel Time to Home Assistant. ha_category: - Transport ha_iot_class: Cloud Polling @@ -21,19 +21,19 @@ The `waze_travel_time` sensor provides travel time from the [Waze](https://www.w Notes: - If a unit system is not specified, the integration will use the unit system configured on your Home Assistant instance. -- Origin and Destination can be the address or the GPS coordinates of the location (GPS coordinates have to be separated by a comma). You can also enter an entity id which provides this information in its state, an entity id with latitude and longitude attributes, or zone friendly name (case sensitive). -- The string inputs for `Substring *` allow you to force the integration to use a particular route or avoid a particular route in its time travel calculation. These inputs are case insensitive matched against the description of the route. -- When using the `Avoid Toll Roads?`, `Avoid Subscription Roads?` and `Avoid Ferries?` options be aware that Waze will sometimes still route you over toll roads or ferries if a valid vignette/subscription is assumed. Default behavior is that Waze will route you over roads having subscription options, so best is to set both `Avoid Toll Roads?` and `Avoid Subscription Roads?` or `Avoid Ferries?` if needed and experiment to ensure the desired outcome. +- **Origin** and **Destination** can be the address or the GPS coordinates of the location. For coordinates, use the following format: `52.5200, 13.4050`. Make sure the coordinates are separated by a comma. They must not include letters. You can also enter an entity id which provides this information in its state, an entity id with latitude and longitude attributes, or zone friendly name (case sensitive). +- The string inputs for `Substring *` allow you to force the integration to use a particular route or avoid a particular route in its time travel calculation. These inputs are case insensitive and matched against the description of the route. +- When using the `Avoid Toll Roads?`, `Avoid Subscription Roads?` and `Avoid Ferries?` options, be aware that Waze will sometimes still route you over toll roads or ferries if a valid vignette/subscription is assumed. Default behavior is that Waze will route you over roads having subscription options. It is therefor best is to set both `Avoid Toll Roads?` and `Avoid Subscription Roads?` or `Avoid Ferries?` if needed and experiment to ensure the desired outcome. ## Manual Polling -Some users want more control over polling intervals. To use more granular polling, you can disable automated polling from the entry on the Integration page. Go to the Integrtaion page, select the entry, click on the vertical 3 dots, and then select System Options to turn off or on polling. Afterwards to manually trigger a polling request, call the [`homeassistant.update_entity` service](/integrations/homeassistant/#service-homeassistantupdate_entity) as needed, either manually or via automations. +Some users want more control over polling intervals. To use more granular polling, you can disable automated polling. Go to {% my integrations title="**Settings** > **Devices & Services**" %}, and on the **Waze Travel Time** integration, select the 3 dots. Then, select **System options** and toggle the button to disable polling. To manually trigger a polling request, call the [`homeassistant.update_entity` service](/integrations/homeassistant/#service-homeassistantupdate_entity) as needed, either manually or via automations. ## Example using dynamic destination Using the flexible option to set a sensor value to the `Destination`, you can setup a single Waze integration that will calculate travel time to multiple optional locations on demand. -In the following example, the `Input Select` is converted into an address which is used to modify the destination for Waze route calculation from `device_tracker.myphone` location (It takes a few minutes for the value to update due to the interval of Waze data fetching). +In the following example, the `Input Select` is converted into an address which is used to modify the destination for the Waze route calculation from the `device_tracker.myphone` location. It takes a few minutes for the value to update due to the interval of Waze data fetching. {% raw %} @@ -68,7 +68,7 @@ template: #### Tracking entity to entity -In this example we use a device_tracker entity ID as the origin and the sensor created above as the destination. +In this example, we use a device_tracker entity ID as the origin and the sensor created above as the destination. - Name: "Me to some destination" - Origin: `device_tracker.myphone` @@ -105,5 +105,5 @@ In this example we are using the entity ID of a zone as the origin and the frien ## Using the live map in an iFrame If you plan to use [Waze's live map](https://developers.google.com/waze/iframe/) -in a dashboard [iframe](/dashboards/iframe/) then use +in a dashboard [iframe](/dashboards/iframe/), then use [https://embed.waze.com/iframe](https://embed.waze.com/iframe) and not the live map URL itself. diff --git a/source/_integrations/websocket_api.markdown b/source/_integrations/websocket_api.markdown index b204001c40d..1a54d1faec5 100644 --- a/source/_integrations/websocket_api.markdown +++ b/source/_integrations/websocket_api.markdown @@ -13,7 +13,7 @@ ha_platforms: ha_integration_type: system --- -The `websocket_api` integration set up a WebSocket API and allows one to interact with a Home Assistant instance that is running headless. This integration depends on the [`http` component](/integrations/http/). +The `websocket_api` integration set up a WebSocket API and allows one to interact with a Home Assistant instance that is running headless. This integration depends on the [`http` integration](/integrations/http/). ## Configuration diff --git a/source/_integrations/workday.markdown b/source/_integrations/workday.markdown index f8f1a12b3ed..db41fed3a51 100644 --- a/source/_integrations/workday.markdown +++ b/source/_integrations/workday.markdown @@ -7,6 +7,7 @@ ha_category: ha_iot_class: Local Polling ha_release: 0.41 ha_quality_scale: internal +ha_config_flow: true ha_codeowners: - '@fabaff' - '@gjohansson-ST' @@ -25,127 +26,26 @@ This can be used to make automations that act differently on weekdays vs weekend Check the [country list](https://github.com/dr-prodigy/python-holidays#available-countries) for available provinces (and other subdivisions, like states and territories) for each country. -## Configuration -To enable the `workday` sensor in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -binary_sensor: - - platform: workday - country: DE -``` - -{% configuration %} -name: - description: A name for this sensor. - required: false - type: string - default: Workday Sensor -country: - description: > - Country code according to [holidays](https://pypi.org/project/holidays/) notation. - required: true - type: string -province: - description: Subdivision code according to [holidays](https://pypi.org/project/holidays/) notation. - required: false - type: string -workdays: - description: List of workdays. - required: false - type: list - default: "[mon, tue, wed, thu, fri]" -excludes: - description: List of workday excludes. - required: false - type: list - default: "[sat, sun, holiday]" -days_offset: - description: Set days offset (e.g., -1 for yesterday, 1 for tomorrow). - required: false - type: integer - default: 0 -add_holidays: - description: "Add custom holidays (such as company, personal holidays or vacations). Needs to formatted as `YYYY-MM-DD`." - required: false - type: list -remove_holidays: - description: "Remove holidays (treat holiday as workday). Can be formatted as `YYYY-MM-DD` or by name for a partial string match (e.g. Thanksgiving)." - required: false - type: list -{% endconfiguration %} +{% include integrations/config_flow.md %} Days are specified as follows: `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, `sun`. The keyword `holiday` is used for public holidays identified by the holidays module.
    -If you use the sensor for Norway (`NO`) you need to wrap `NO` in quotes or write the name in full. -Otherwise, the value is evaluated as `false`. -If you use the sensor for Canada (`CA`) with Ontario (`ON`) as `province:` then you need to wrap `ON` in quotes. -Otherwise, the value is evaluated as `true` (check the YAML documentation for further details) and the sensor will not work. - -One other thing to watch is how the `holiday` keyword is used. Your first instinct might be to add it to the `exclude` configuration, thinking that it means to skip the holidays. Actually it means to exclude the days in the holidays list from the workdays. So, when you exclude `holiday` and a workday falls on that day, then that workday is excluded, and the sensor will be **off**. If you want every workday flagged with no regard to holidays, make sure that there is something in your `Excludes` configuration _other_ than `holiday`. +Watch how the `holiday` keyword is used. Your first instinct might be adding it to the `exclude` configuration, thinking it means skipping the holidays. It means to exclude the days in the holiday list from the workdays. So, when you exclude `holiday` and a workday falls on that day, that workday is excluded, and the sensor will be **off**. If you want every workday flagged with no regard to holidays, ensure that there is something in your `Excludes` configuration _other_ than `holiday`.
    -## Full examples +## Specific field information -This example excludes Saturdays and Sundays but not pre-configured holidays. Two custom holidays are added. +Country code must be given according to [holidays](https://pypi.org/project/holidays/) notation. -```yaml -# Example 1 configuration.yaml entry -binary_sensor: - - platform: workday - country: US - workdays: [mon, tue, wed, thu, fri] - excludes: [sat, sun] - add_holidays: - - "2020-02-24" - - "2020-04-25" -``` +Subdivision code must be given according to [holidays](https://pypi.org/project/holidays/) notation. -This example excludes Saturdays, Sundays and holidays. One custom holiday is added. -The date February 24th, 2020 is a Monday, but will be excluded (the sensor will be **off**) because it was added to the `add_holidays` configuration. +Add holidays will only take dates formatted with `YYYY-MM-DD`. -```yaml -# Example 2 configuration.yaml entry -binary_sensor: - - platform: workday - country: DE - workdays: [mon, tue, wed, thu, fri] - excludes: [sat, sun, holiday] - add_holidays: - - '2020-02-24' -``` - -This example excludes Saturdays, Sundays and holidays. Two holidays are removed: November 26, 2020 and December 25, 2020. - -```yaml -# Example 3 configuration.yaml entry -binary_sensor: - - platform: workday - country: US - workdays: [mon, tue, wed, thu, fri] - excludes: [sat, sun, holiday] - remove_holidays: - - '2020-11-26' - - '2020-12-25' -``` - -This example excludes Saturdays, Sundays and holidays. Two holidays are removed by name: Thanksgiving and Christmas Day. - -```yaml -# Example 4 configuration.yaml entry -binary_sensor: - - platform: workday - country: US - workdays: [mon, tue, wed, thu, fri] - excludes: [sat, sun, holiday] - remove_holidays: - - 'Thanksgiving' - - 'Christmas Day' -``` +Remove holidays will take dates formatted with `YYYY-MM-DD` or partial of name, for example, `christmas` will exclude `Christmas Day`. ## Automation example diff --git a/source/_integrations/wyoming.markdown b/source/_integrations/wyoming.markdown new file mode 100644 index 00000000000..6ea6b53f066 --- /dev/null +++ b/source/_integrations/wyoming.markdown @@ -0,0 +1,24 @@ +--- +title: Wyoming Protocol +description: Connect remote voice services to Home Assistant. +ha_category: + - Voice +ha_iot_class: Local Push +ha_release: '2023.5' +ha_codeowners: + - '@balloob' + - '@synesthesiam' +ha_domain: wyoming +ha_integration_type: integration +ha_platforms: + - stt + - tts +ha_config_flow: true +--- + +The Wyoming integration connects external voice services to Home Assistant using a [small protocol](https://github.com/rhasspy/rhasspy3/blob/master/docs/wyoming.md). This enables [Assist](/docs/assist) to use a variety of local [speech-to-text](/integrations/stt/) and [text-to-speech](/integrations/tts/) systems, such as: + +* Whisper {% my supervisor_addon badge addon="core_whisper" %} +* Piper {% my supervisor_addon badge addon="core_piper" %} + +{% include integrations/config_flow.md %} diff --git a/source/_integrations/xbox_live.markdown b/source/_integrations/xbox_live.markdown deleted file mode 100644 index 2125fdbbe9d..00000000000 --- a/source/_integrations/xbox_live.markdown +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Xbox Live -description: Instructions on how to set up Xbox Live sensors in Home Assistant. -ha_category: - - Social -ha_iot_class: Cloud Polling -ha_release: 0.28 -ha_codeowners: - - '@MartinHjelmare' -ha_domain: xbox_live -ha_platforms: - - sensor -ha_integration_type: integration ---- - -
    - This integration is pending removal from Home Assistant and will be no longer available as of Home Assistant 2023.2. -
    - -The Xbox Live integration is able to track [Xbox](https://xbox.com/) profiles. - -To use this sensor you need a free API key from -[xapi.us](https://xapi.us/). -Please also make sure to connect your Xbox account on that site. - -The configuration requires you to specify XUIDs which are the unique identifiers -for profiles. These can be determined on [xapi.us](https://xapi.us/) by -either looking at your own profile page or using their interactive documentation -to search for gamertags. Sensor names default to the gamertag associated with an XUID. - -To use the Xbox Live sensor in your installation, -add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: xbox_live - api_key: YOUR_API_KEY - xuid: - - account1 - - account2 -``` - -{% configuration %} -api_key: - description: Your API key from [xapi.us](https://xapi.us/). - required: true - type: string -xuid: - description: Array of profile XUIDs to be tracked. - required: true - type: list -{% endconfiguration %} diff --git a/source/_integrations/xiaomi_tv.markdown b/source/_integrations/xiaomi_tv.markdown index f99056084e0..54f5e2bd581 100644 --- a/source/_integrations/xiaomi_tv.markdown +++ b/source/_integrations/xiaomi_tv.markdown @@ -14,6 +14,7 @@ ha_integration_type: integration --- The `xiaomi_tv` platform allows you to control a [Xiaomi TV](https://www.mi.com/global/mitv3s/65flat/). +The Xiaomi TV integration only supports Xiaomi TVs running MIUI. You need to make sure the TV is connected to the internet, and that your Home Assistant instance is on the same network. diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown index 55ded015f2a..241b8495495 100644 --- a/source/_integrations/zha.markdown +++ b/source/_integrations/zha.markdown @@ -94,11 +94,11 @@ Some other Zigbee coordinator hardware may not support a firmware that is capabl - Silicon Labs EmberZNet based radios using the EZSP protocol (via the [bellows](https://github.com/zigpy/bellows) library for zigpy) - [Home Assistant SkyConnect](/skyconnect/) - [ITead SONOFF Zigbee 3.0 USB Dongle Plus Model "ZBDongle-E" (EFR32MG21 variant)](https://itead.cc/product/zigbee-3-0-usb-dongle/) - - [Elelabs Zigbee USB Adapter](https://elelabs.com/products/elelabs-usb-adapter.html)/[POPP ZB-Stick](https://shop.zwave.eu/detail/index/sArticle/2496) (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility)) + - [Elelabs Zigbee USB Adapter](https://elelabs.com/products/elelabs-usb-adapter.html)/POPP ZB-Stick (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility)) - [Elelabs Zigbee Raspberry Pi Shield](https://elelabs.com/products/elelabs-zigbee-shield.html) (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility)) - Texas Instruments based radios (via the [zigpy-znp](https://github.com/zigpy/zigpy-znp) library for zigpy) - - [CC2652P/CC2652R/CC2652RB USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) - - [CC1352P/CC1352R USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) + - [CC2652P/CC2652R/CC2652RB USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/guide/adapters/) + - [CC1352P/CC1352R USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/guide/adapters/) - dresden elektronik deCONZ based Zigbee radios (via the [zigpy-deconz](https://github.com/zigpy/zigpy-deconz) library for zigpy) - [ConBee II (a.k.a. ConBee 2) USB adapter from dresden elektronik](https://phoscon.de/conbee2) - [RaspBee II (a.k.a. RaspBee 2) Raspberry Pi Shield from dresden elektronik](https://phoscon.de/raspbee2) @@ -387,21 +387,6 @@ To add a new device: 1. Reset your Zigbee devices according to the device instructions provided by the manufacturer (e.g., turn on/off lights up to 10 times, switches usually have a reset button/pin). It might take a few seconds for the devices to appear. You can click on **Show logs** for more verbose output. 1. Once the device is found, it will appear on that page and will be automatically added to your devices. You can optionally change its name and add it to an area (you can change this later). You can search again to add another device, or you can go back to the list of added devices. -### Best practices to avoid pairing/connection difficulties - -Verify that you try to follow recommended best practices to avoid pairing and/or connection issues: - -- If possible try to pair your Zigbee devices in their intended final location, (and not pair it next to the Zigbee coordinator and then need to move it after). - - Pairing a Zigbee device next to the Zigbee coordinator and then moving it later can result in dropped/lost connections or other issues. - - If the device you want to add is not brand new and as such never paired before then you always have to make sure to first manually reset the device to its factory default settings before you will be able to add/pair it. -- Some battery-operated Zigbee devices are known to have problems with pairing if they have Low battery voltage. - - Some people have reported replacing the battery on their newly received Xiaomi/Aqara devices solved pairing issues. -- Check that you have enough Zigbee router devices (also known as Zigbee signal repeaters or range extenders) and if you do not have any, invest and add some mains-powered devices that will work as Zigbee routers. - - Aim to start out with mains-powered devices before adding battery-operated devices as a "weak" Zigbee network mesh (e.g., the device is too far from the Zigbee coordinator or a Zigbee router) may prevent some devices from being paired. Zigbee router devices are also needed to increase the maximum of devices that can be connected to your Zigbee mesh network. - - Note that some Zigbee devices are not fully compatible with all brands of Zigbee router devices. Xiaomi/Aqara devices are for example known not to work with Zigbee router devices from Centralite, General Electrics, Iris, Ledvance/OSRAM, LIGHTIFY/Sylvania, Orvibo, PEQ, Securifi, and SmartThings/Samsung. Better results can usually be achieved by using mains-powered devices IKEA and Nue/3A Home or dedicated DIY routing devices based on Texas Instruments CC253x/CC26x2 and XBee Series 2/3 Zigbee radios. -- Be patient as the pairing of some Zigbee devices may require multiple attempts and you may sometimes need to try again and again. - - Some devices, like example those from Xiaomi/Aqara, are known to not be 100% compliant with the standard Zigbee specifications and may therefore require many paring attempts over 10-20 minutes or longer. - ### Using router devices You use routers to increase the number of Zigbee devices that can be used in a network. The total number of Zigbee devices that you have on a Zigbee network depends on a few things, but you should know that Zigbee coordinator hardware and firmware only plays a larger role in Zigbee networks with a lot of devices. More important is how many directly connected devices ("direct children") versus how many routers are connected to your Zigbee coordinator. Zigpy library which ZHA uses has an upper limit. This is 32 direct children, but if your Zigbee coordinator hardware is powerful enough then you can still have hundreds of Zigbee devices connected through routers. @@ -460,6 +445,23 @@ Home Assistant's ZHA integration already supports most standard device types out The few devices that will, for example, not join/pair properly or, while joined/paired, do not present all attributes in the ZHA integration likely deviate from the Zigbee specifications set by the [CSA (Connectivity Standards Alliance)](https://csa-iot.org/all-solutions/zigbee/). These devices may therefore require the creation of a bug report by a device owner, supplying debug logs. The device owner may need to actively assist in troubleshooting by providing the information developers need to create custom ZHA Device Handlers. +### Best practices to avoid pairing/connection difficulties + +If you are having problems pairing a device to then ZHA integratuon then it is recommomended to verify that you try to follow recommended best practices to avoid pairing and/or connection issues: + +- Check that your setup and environment are optimized to avoid interference. + - As interference avoidance is an extremely important topic on its own, please read and follow the tips in the separate section below about Zigbee interference avoidance and network range/coverage optimization. +- Check that you have enough Zigbee router devices (also known as Zigbee signal repeaters or range extenders) and if you do not have any, invest and add some mains-powered devices that will work as Zigbee routers. + - Aim to start out with mains-powered devices before adding battery-operated devices as a "weak" Zigbee network mesh (e.g., the device is too far from the Zigbee coordinator or a Zigbee router) may prevent some devices from being paired. Zigbee router devices are also needed to increase the maximum of devices that can be connected to your Zigbee mesh network. + - Note that some Zigbee devices are not fully compatible with all brands of Zigbee router devices. Xiaomi/Aqara devices are for example known not to work with Zigbee router devices from Centralite, General Electrics, Iris, Ledvance/OSRAM, LIGHTIFY/Sylvania, Orvibo, PEQ, Securifi, and SmartThings/Samsung. Better results can usually be achieved by using mains-powered devices IKEA and Nue/3A Home or dedicated DIY routing devices based on Texas Instruments CC253x/CC26x2 and XBee Series 2/3 Zigbee radios. +- If possible try to pair your Zigbee devices in their intended final location, (and not pair it next to the Zigbee coordinator and then need to move it after). + - Pairing a Zigbee device next to the Zigbee coordinator and then moving it later can result in dropped/lost connections or other issues. + - If the device you want to add is not brand new and as such never paired before then you always have to make sure to first manually reset the device to its factory default settings before you will be able to add/pair it. +- Some battery-operated Zigbee devices are known to have problems with pairing if they have Low battery voltage. + - Some people have reported replacing the battery on their newly received Xiaomi/Aqara devices solved pairing issues. +- Be patient as the pairing of some Zigbee devices may require multiple attempts and you may sometimes need to try again and again. + - Some devices, like example those from Xiaomi/Aqara, are known to not be 100% compliant with the standard Zigbee specifications and may therefore require many paring attempts over 10-20 minutes or longer. + ### Zigbee interference avoidance and network range/coverage optimization Sources of interference for radios can lead to transmission/reception loss or connection problems and show symptoms such as errors/failures when sending and receiving Zigbee messages/signals that can cause significant degradation in performance or even prevent devices from communicating at all. Below are some basic but essential tips for getting a good setup starting point to achieve better signal quality, improved coverage, and extended range. diff --git a/source/_integrations/zone.markdown b/source/_integrations/zone.markdown index 0f95a09cad4..99edea158ee 100644 --- a/source/_integrations/zone.markdown +++ b/source/_integrations/zone.markdown @@ -80,8 +80,7 @@ If no configuration is given, the `zone` integration will create a zone for home
    -Devices that are in the zone **'Home'** will not appear on the map in the Home Assistant UI. - +Devices that are in the zone **'Home'** will not appear on the map in the Home Assistant UI. To apply the changes to the **'Home'** `zone`, you must restart Home Assistant.
    ## Icons diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown index 8656bf34625..f6d76728d99 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -46,15 +46,15 @@ ha_zeroconf: true The Z-Wave integration allows you to control a Z-Wave network via the [Z-Wave JS](https://zwave-js.github.io/node-zwave-js/#/) driver. -## Overview +## Getting started To run a Z-Wave network, you need the following elements: -* A [supported Z-Wave controller](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules). First-time user? For recommendations on what to buy, go [here](integrations/zwave_js/#which-z-wave-controller-should-i-buy). +* A [supported Z-Wave controller](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules). First-time user? For recommendations on what to buy, go [here](#which-z-wave-controller-should-i-buy). * A running Z-Wave JS server. * An installed Z-Wave integration in Home Assistant. -## Setting up a Z-Wave JS server +### Setting up a Z-Wave JS server The easiest way to get started is by using the built-in Z-Wave JS add-on in Home Assistant. @@ -90,12 +90,92 @@ Use this My button: 1. Wait for the Z-Wave JS add-on to start up. 1. Once the installation is complete, the **Device info** of the Z-Wave controller is shown. * You successfully installed the Z-Wave integration and the Z-Wave JS add-on. - * You can now add devices to the Z-Wave network. + * You can now [add](/integrations/zwave_js/#adding-a-new-device-to-the-z-wave-network) devices to the Z-Wave network.

    While your Z-Wave mesh is permanently stored on your dongle, the additional metadata is not. When the Z-Wave integration starts up the first time, it will interview your entire Z-Wave network. Depending on the number of devices paired with the Z-Wave dongle, this can take a while. You can speed up this process by manually waking up your battery-powered devices. Most of the time, this is a button press on those devices (see their manual). It is not necessary to exclude and re-include devices from the mesh.

    +### Adding a new device to the Z-Wave network + +1. In Home Assistant, go to {% my integrations title="**Settings** > **Devices & Services**" %}. +1. In the Z-Wave integration, select **Configure**. +1. Select **Add device**. + * The Z-Wave controller is now in inclusion mode. +1. If your device supports SmartStart, select **Scan QR code** and scan the QR code on your device. +1. If your device does not support SmartStart, set the device in inclusion mode. Refer to the device manual to see how this is done. + * If your device is included using S2 security, you may be prompted to enter a PIN number provided with your device. Often, this PIN is provided with the documentation _and_ is also printed on the device itself. For more information on secure inclusion, refer to [this section](/integrations/zwave_js/#should-i-use-secure-inclusion). +1. The UI should confirm that the device was added. After a short while (seconds to minutes), the entities should also be created. +1. If the controller fails to add/find your device, cancel the inclusion process. + * In some cases, it might help to first [remove](/integrations/zwave_js/#removing-a-device-from-the-z-wave-network) a device (exclusion) before you add it, even when the device has not been added to this Z-Wave network yet. + * Another approach would be to factory reset the device. Refer to the device manual to see how this is done. + +**Important:** + +1. **Do not move your Z-Wave stick to include devices.** This is no longer necessary and leads to broken routes. +1. **Do not initiate device inclusion from the Z-Wave stick itself.** This is no longer supported. + +### Removing a device from the Z-Wave network + +1. In Home Assistant, go to {% my integrations title="**Settings** > **Devices & Services**" %}. +1. In the Z-Wave integration, select **Configure**. +1. Select **Remove device**, then **Start exclusion**. + * The Z-Wave controller is now in exclusion mode. +1. Put the device you want to remove in exclusion mode. Refer to its manual how this is done. +1. The UI should confirm that the device was removed and the device and entities will be removed from Home Assistant. + +## Special Z-Wave entities + +The Z-Wave integration provides several special entities, some of which are available for every Z-Wave device, and some of which are conditional based on the device. + +### Entities available for every Z-Wave device + +1. **Node status** sensor: This sensor shows the node status for a given Z-Wave device. The sensor is disabled by default. The available node statuses are explained in the [Z-Wave JS documentation](https://zwave-js.github.io/node-zwave-js/#/api/node?id=status). They can be used in state change automations. For example to ping a device when it is dead, or refresh values when it wakes up. +2. **Ping** button: This button can be pressed to ping a device. It is an alternative to the `zwave_js.ping` service. + +### Conditional entities + +1. Button to **manually idle notifications**: Any Notification Command Class (CC) values on a device that have an idle state will get a corresponding button entity. This button entity can be used to manually idle a notification when it doesn't automatically clear on its own. A device can have multiple Notification CC values. For example one for detecting smoke and one for detecting carbon monoxide. + +## Using advanced features (UI only) + +While the integration aims to provide as much functionality as possible through existing Home Assistant constructs (entities, states, automations, services, etc.), there are some features that are only available through the UI. + +All of these features can be accessed either in the Z-Wave integration configuration panel or in a Z-Wave device's device panel. + +### Integration configuration panel + +The following features can be accessed from the integration configuration panel: + +![Z-Wave integration configuration panel](/images/integrations/z-wave/z-wave-integration-config-panel.png) + +* **Add device:** Allows you to pre-provision a SmartStart device or start the inclusion process for adding a new device to your network. +* **Remove device:** Starts the exclusion process for removing a device from your network. +* **Heal network:** Forces your network to rediscover routes to the controller from each device. This is useful when devices or the controller have moved to a new location, or if you are having significant problems with your network, but it also generates a lot of network traffic and should be used sparingly. +* **[Controller statistics](https://zwave-js.github.io/node-zwave-js/#/api/controller?id=quotstatistics-updatedquot):** Provides statistics about communication between the controller and other devices, allowing you to troubleshoot your network's RF quality. +* **Third-party data opt-in/out:** Allows you to opt-in or out of telemetry that the Z-Wave JS project collects to help inform development decisions, influence manufacturers, etc. This telemetry is disabled by default and has to be opted in to be activated. + +### Integration menu + +Some features can be accessed from the menu of integration itself. As they are not specific to Z-Wave, they are not described here in detail. +![Z-Wave integration configuration panel](/images/integrations/z-wave/z-wave-integration-menu.png) + +* **[Download diagnostics](/docs/configuration/troubleshooting/#download-diagnostics):** Exports a JSON file describing the entities of all devices registered with this integration. + +### Device panel + +The following features can be accessed from the device panel of a Z-Wave device: + +![Z-Wave device panel](/images/integrations/z-wave/z-wave-device-info.png) + +* **Configure:** Provides an easy way to look up and update configuration parameters for the device. While there is an existing service for setting configuration parameter values, this UI may sometimes be quicker to use for one-off changes. +* **Re-interview:** Forces the device to go through the interview process again so that Z-Wave-JS can discover all of its capabilities. Can be helpful if you don't see all the expected entities for your device. +* **Heal:** Forces the device to rediscover its optimal route back to the controller. Use this if you think you are experiencing unexpected delays or RF issues with your device. Your device may be less responsive during this process. +* **Remove failed:** Forces the controller to remove the device from the controller. Can be used when a device has failed and it can't go through the normal exclusion process. +* **[Statistics](https://zwave-js.github.io/node-zwave-js/#/api/node?id=quotstatistics-updatedquot):** Provides statistics about communication between this device and the controller, allowing you to troubleshoot RF issues with the device. +* **Update:** Updates a device's firmware using a manually uploaded firmware file. Only some devices support this feature (controllers and devices with the Firmware Update Metadata Command Class). +* **Download diagnostics:** Exports a JSON file describing the entities of this specific device. + ## Services ### Service `zwave_js.set_config_parameter` @@ -587,33 +667,6 @@ In addition to the [standard automation trigger data](/docs/automation/templatin | `trigger.event` | Name of event. | | `trigger.event_data` | Any data included in the event. | -## Advanced Features (UI Only) - -While the integration aims to provide as much functionality as possible through existing Home Assistant constructs (entities, states, automations, services, etc.), there are some features that are only available through the UI. - -All of these features can be accessed either in the Z-Wave integration configuration panel or in a Z-Wave device's device panel. - -### Integration Configuration Panel - -The following features can be accessed from the integration configuration panel: - -* **Add device:** Allows you to pre-provision a SmartStart device or start the inclusion process for adding a new device to your network. -* **Remove device:** Starts the exclusion process for removing a device from your network. -* **Heal network:** Forces your network to rediscover routes to the controller from each device. This is useful when devices or the controller have moved to a new location, or if you are having significant problems with your network, but it also generates a lot of network traffic and should be used sparingly. -* **Third-party data opt-in/out:** Allows you to opt-in or out of telemetry that the Z-Wave JS project collects to help inform development decisions, influence manufacturers, etc. This telemetry is disabled by default and has to be opted in to be activated. -* **[Controller statistics](https://zwave-js.github.io/node-zwave-js/#/api/controller?id=quotstatistics-updatedquot):** Provides statistics about communication between the controller and other devices, allowing you to troubleshoot your network's RF quality. - -### Device Panel - -The following features can be accessed from the device panel of a Z-Wave device: - -* **Configure:** Provides an easy way to look up and update configuration parameters for the device. While there is an existing service for setting configuration parameter values, this UI may sometimes be quicker to use for one off changes. -* **Re-interview:** Forces the device to go through the interview process again so that zwave-js can discover all of its capabilities. Can be helpful if you don't see all the expected entities for your device. -* **Heal:** Forces the device to rediscover its optimal route back to the controller. Use this if you think you are experiencing unexpected delays or RF issues with your device. Your device may be less responsive during this process. -* **Remove failed:** Forces the controller to remove the device from the controller. Can be used when a device has failed and it can't go through the normal exclusion process. -* **[Statistics](https://zwave-js.github.io/node-zwave-js/#/api/node?id=quotstatistics-updatedquot):** Provides statistics about communication between this device and the controller, allowing you to troubleshoot RF issues with the device. -* **Update firmware:** Updates a device's firmware using a manually uploaded firmware file. Only some devices support this feature (controllers and devices with the Firmware Update Metadata Command Class). - ## Advanced installation instructions If you are using Home Assistant Container, Home Assistant Core, or you don't want to use the built-in Z-Wave JS Server add-on, you will need to run the Z-Wave JS server yourself, to which the Z-Wave integration will connect. @@ -623,12 +676,15 @@ If you are using Home Assistant Container, Home Assistant Core, or you don't wan This application provides the connection between your Z-Wave USB stick and Home Assistant. The Home Assistant Z-Wave integration connects to this server via a websocket connection. You need to run this Z-Wave JS server before you can use the integration. There are multiple ways to run this server: +The chart below illustrates Options 1 and 2, which are available for Home Assistant OS only. + +![Overview of installation options 1 and 2](/images/integrations/z-wave/z-wave-server-install-options-1-2.png) **Option 1: The official Z-Wave JS add-on, as described above** _This option is only available for Home Assistant OS (the recommended installation type) and Home Assistant Supervised installations._ -This add-on can only be configured via the built-in Z-Wave control panel in Home Assistant. +This add-on can only be configured via the built-in Z-Wave control panel in Home Assistant. If you followed the standard [installation procedure](#setting-up-a-z-wave-js-server), this is how you are running the Z-Wave JS server. **Option 2: The Z-Wave JS UI add-on installed from the community add-on store** @@ -678,7 +734,7 @@ See the [Z-Wave JS device database](https://devices.zwave-js.io/). While there is support for the most common devices, some command classes are not yet (fully) implemented in Z-Wave JS. You can track the status [here](https://github.com/zwave-js/node-zwave-js/issues/6). -You can also keep track of the roadmap for the Z-Wave integration [here](https://github.com/home-assistant-libs/zwave-js-server-python/issues/56). +You can also keep track of the road map for the Z-Wave integration [here](https://github.com/home-assistant-libs/zwave-js-server-python/issues/56). ### Installation and Configuration @@ -725,7 +781,7 @@ Switching does not require renaming your devices. 6. Enable the Z-Wave integration. -#### What's the benefit of using Z-Wave JS UI add-on over the official Add-On? +#### What's the benefit of using Z-Wave JS UI add-on over the official add-on? The official add-on provides the Z-Wave Server in its bare minimum variant, just enough to serve the Home Assistant integration. @@ -745,24 +801,6 @@ Ultimately, this is a personal decision. If you provide a name or location for a Names set in Home Assistant will not import into Z-Wave JS UI. -### Using Z-Wave - -#### How can I add (include) a new device to my Z-Wave network? - -1. In Home Assistant: open Settings -> Devices & Services -> Z-Wave -> Configure. -2. Press `+ ADD DEVICE`. -3. The Z-Wave controller is now in inclusion mode and will not respond to other commands. -4. Put the device you want to add in inclusion mode. Refer to its manual how this is done. -5. The UI should confirm that the node was added and it will be immediately visible in Home Assistant. After a short while (seconds to minutes) the entities should also be created. -6. If the controller fails to add/find your device, cancel the inclusion process (to unblock your network again). In some cases it might help to first remove a node (exclusion) before you add it, even when the device has not been added to this Z-Wave network yet. Another approach would be to factory reset the device. Info about that is in the manual of your device. - -If your device is included using S2 security, you may be prompted to enter a PIN number provided with your device. Often, this PIN is provided with the documentation _and_ is also printed on the device itself. - -**Warning:** - -1. **Do not move your Z-Wave stick to include devices.** This is no longer necessary and leads to broken routes. -2. **Do not initiate device inclusion from the Z-Wave stick itself.** This is no longer supported. - #### Should I use `Secure Inclusion`? That depends. There are two generations of Z-Wave security, S0, and S2. @@ -771,13 +809,9 @@ S0 security imposes significant additional traffic on your mesh and is recommend S2 security does not impose additional network traffic and provides additional benefits, such as detecting packet corruption. By default, Z-Wave attempts S2 security during inclusion if supported, falling back to S0 security only when necessary. -#### How do I remove (exclude) a device from my Z-Wave network? +#### Where can I see the security keys in the Z-Wave JS add-on? -1. In Home Assistant: open Settings -> Devices & Services -> Z-Wave -> Configure. -2. Press `REMOVE DEVICE`. -3. Press `START EXCLUSION`. The Z-Wave controller is now in exclusion mode and will not respond to other commands. -4. Put the device you want to remove in exclusion mode. Refer to its manual how this is done. -5. The UI should confirm that the node was removed and the device and entities will be removed from Home Assistant. +After the initial setup of the Z-Wave controller, you can view the security keys in the Z-Wave JS add-on. Go to {% my supervisor_addon addon="core_zwave_js" title="**Settings** > **Add-ons** > **Z-Wave JS**" %} and open the **Configuration** tab. You can now see the three S2 keys and the S0 key. The network security key is a legacy configuration setting, identical to the S0 key. ### Troubleshooting @@ -838,3 +872,16 @@ Z-Wave JS writes details to its logs. To access these logs go to the following. **Settings** -> **Devices & Services** -> **Integrations(tab)** -> **Z-Wave (CONFIGURE)** -> **Logs(tab)** You need to keep this browser tab open for logging to be active. + +## Z-Wave terminology + +For some of the concepts, you may come across different terminology in Z-Wave than in Home Assistant. +The table below provides equivalents for some of those terms. + +| Z-Wave functionality | Home Assistant | +| -------------------------------------- | ------------------------------------------------------------------------| +| inclusion | add | +| exclusion | remove | +| barrier operator | cover | +| window covering | cover | +| multilevel switch | represented by different entity types: cover, fan, dimmer, etc. | diff --git a/source/_posts/2020-02-19-community-highlights.markdown b/source/_posts/2020-02-19-community-highlights.markdown index bd692f93ce3..f3ffe84844a 100644 --- a/source/_posts/2020-02-19-community-highlights.markdown +++ b/source/_posts/2020-02-19-community-highlights.markdown @@ -66,7 +66,7 @@ mysql -D homeassistant -e "SELECT entity_id, state, last_updated FROM states LIM ## Beta time! -Today we are releasing the first beta of Home Assistant Core 0.106. It is packed with awesome features. For a sneak peek of what is coming, check the [beta release notes](https://rc.home-assistant.io/latest-release-notes/). +Today we are releasing the first beta of Home Assistant Core 0.106. It is packed with awesome features. For a sneak peek of what is coming, check the [beta release notes](/blog/2020/02/26/release-106/). I'm personally most excited about the extended safe mode. It will guarantee that the frontend will always load, no matter how broken your configuration is. diff --git a/source/_posts/2020-03-15-community-highlights.markdown b/source/_posts/2020-03-15-community-highlights.markdown index b3282669102..e57486289bd 100644 --- a/source/_posts/2020-03-15-community-highlights.markdown +++ b/source/_posts/2020-03-15-community-highlights.markdown @@ -34,7 +34,7 @@ setup has a total of 5 Home Assistant instances, controlling 7x marine aquariums Those are some big views Kevin! I bet you will be happy with the new Lovelace features that are coming in Home Assistant Core 0.107. It will help you to trim down that a bit, into multiple Lovelace Dashboards (now in -[beta, sneak peak?](https://rc.home-assistant.io/latest-release-notes/)). +[beta, sneak peak?](/blog/2020/03/18/release-107/)). [Click here to check out Kevin's post on our Facebook group.](https://www.facebook.com/groups/HomeAssistant/permalink/2597624533842234/) diff --git a/source/_posts/2022-10-25-ultraloq-partner.markdown b/source/_posts/2022-10-25-ultraloq-partner.markdown index 13774b28d93..bfb62d7ae1d 100644 --- a/source/_posts/2022-10-25-ultraloq-partner.markdown +++ b/source/_posts/2022-10-25-ultraloq-partner.markdown @@ -12,6 +12,11 @@ categories: og_image: /images/blog/2022-10-25-ultraloq-partner/social.png --- +
    +There is a bug in the firmware of Ultraloq devices that causes the door state sensor to not be updated and the latch to always be reported as "OPEN".
    +We are fully aware that this is not what you expect from a Works With Home Assistant brand and we are in contact Ultraloq to get this resolved! +
    + Works via Zigbee with Home Assistant Today we are excited to announce that [Ultraloq by U-tec](https://u-tec.com) has joined the Works with Home Assistant program as a Z-Wave partner. diff --git a/source/_posts/2023-01-26-year-of-the-voice-chapter-1.markdown b/source/_posts/2023-01-26-year-of-the-voice-chapter-1.markdown index d973f3bc039..01e67f1e223 100644 --- a/source/_posts/2023-01-26-year-of-the-voice-chapter-1.markdown +++ b/source/_posts/2023-01-26-year-of-the-voice-chapter-1.markdown @@ -32,7 +32,7 @@ We want Assist to be as accessible to as many people as possible. To do this, we Assist is enabled by default in the Home Assistant 2023.2 release. Tap the new Assist icon Assist icon at the top right of the dashboard to use it. -[Assist documentation.](https://next.home-assistant.io/docs/assist/) +[Assist documentation.](https://www.home-assistant.io/docs/assist/) Screenshot of the Assist dialog @@ -40,7 +40,7 @@ Assist is enabled by default in the Home Assistant 2023.2 release. Tap the new A We want to make it as easy as possible to use Assist. To enable this for Android users, we have added a new tile to the Android Wear app. A simple swipe from the clock face will show the assist button and allows you to send voice commands. -[Assist on Android Wear documentation.](https://next.home-assistant.io/docs/assist/android/) +[Assist on Android Wear documentation.](https://www.home-assistant.io/docs/assist/android/) _The tile is available in [Home Assistant Companion for Android 2023.1.1](https://play.google.com/store/apps/details?id=io.homeassistant.companion.android&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1)._ @@ -50,7 +50,7 @@ _The tile is available in [Home Assistant Companion for Android 2023.1.1](https: For Apple devices we have been able to create a fully hands-free experience by integrating with Siri. This is powered by a new Apple Shortcut action called Assist, which is part of the Home Assistant app. This shortcut action can also be manually triggered from your Mac taskbar, iPhone home screen or Apple Watch complication. We have two ready-made shortcuts that users can import from the documentation with a single tap to unlock these features. -[Assist via Siri and Apple Shortcuts documentation.](https://next.home-assistant.io/docs/assist/apple/) +[Assist via Siri and Apple Shortcuts documentation.](https://www.home-assistant.io/docs/assist/apple/) _The Assist shortcut is available in [Home Assistant Companion for iOS 2023.2](https://apps.apple.com/us/app/home-assistant/id1099568401?itsct=apps_box_badge&itscg=30200). Mac version is awaiting approval._ @@ -66,7 +66,7 @@ With Home Assistant we believe that every home is uniquely yours and that [techn Assist includes support for custom sentences, responses and intents, allowing you to achieve all of the above, and more. We've designed the custom sentence format in a way that it can be easily shared with the community. -Read [the documentation](https://next.home-assistant.io/docs/assist/custom_sentences) on how to get started. +Read [the documentation](https://www.home-assistant.io/docs/assist/custom_sentences) on how to get started. _In a future release we're planning on adding a user interface to customize and import sentences._ diff --git a/source/_posts/2023-04-05-release-20234.markdown b/source/_posts/2023-04-05-release-20234.markdown index a822ab34653..8aefff9d92e 100644 --- a/source/_posts/2023-04-05-release-20234.markdown +++ b/source/_posts/2023-04-05-release-20234.markdown @@ -44,12 +44,18 @@ Happy Easter! 🐣 and enjoy the release! - [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) +- [Release 2023.4.1 - April 6](#release-202341---april-6) +- [Release 2023.4.2 - April 8](#release-202342---april-8) +- [Release 2023.4.3 - April 12](#release-202343---april-12) +- [Release 2023.4.4 - April 13](#release-202344---april-13) +- [Release 2023.4.5 - April 17](#release-202345---april-17) +- [Release 2023.4.6 - April 21](#release-202346---april-21) - [Need help? Join the community!](#need-help-join-the-community) - [Breaking Changes](#breaking-changes) - [Farewell to the following](#farewell-to-the-following) - [All changes](#all-changes) -Don't forget to [join our release party live stream on YouTube](https://www.youtube.com/watch?v=IGnCGDaXR0M) +Don't forget to [join our release party live stream on YouTube](https://www.youtube.com/watch?v=IGnCGDaXR0M) 5 April 2023, at 12:00 PDT / 21:00 CEST! @@ -485,6 +491,449 @@ The following integrations are now available via the Home Assistant UI: [nextcloud]: /integrations/nextcloud [obihai]: /integrations/obihai +## Release 2023.4.1 - April 6 + +- Handle Uncaught exceptions in async_update Honeywell ([@mkmer] - [#90746]) ([honeywell docs]) +- Bump fritzconnection to 1.12.0 ([@saschaabraham] - [#90799]) ([fritz docs]) ([fritzbox_callmonitor docs]) +- Fix issue with Insteon All-Link Database loading ([@teharris1] - [#90858]) ([insteon docs]) +- Generate a seperate log message per dumped object for profiler.dump_log_objects ([@bdraco] - [#90867]) ([profiler docs]) +- Add constraint for websockets to <11.0 ([@bdraco] - [#90868]) +- Add MariaDB deadlock retry wrapper to database timestamp column migrations ([@bdraco] - [#90880]) ([recorder docs]) +- Migrate entity unique ids in PI-Hole ([@mib1185] - [#90883]) ([pi_hole docs]) +- Fix missing bluetooth client wrapper in bleak_retry_connector ([@bdraco] - [#90885]) ([bluetooth docs]) +- Bump ulid-transform 0.6.0 ([@bdraco] - [#90888]) +- Guard against invalid ULIDs in contexts while recording events ([@bdraco] - [#90889]) ([recorder docs]) +- Fix entity_id migration query failing with MySQL 8.0.30 ([@bdraco] - [#90895]) ([recorder docs]) +- Bump `simplisafe-python` to 2023.04.0 ([@bachya] - [#90896]) ([simplisafe docs]) +- Bump aiodiscover to 1.4.16 ([@bdraco] - [#90903]) ([dhcp docs]) +- Return empty available programs list if an appliance is off during initial configuration ([@stickpin] - [#90905]) ([home_connect docs]) +- Handle NoURLAvailableError in Nuki component ([@pree] - [#90927]) ([nuki docs]) +- Update frontend to 20230406.1 ([@bramkragten] - [#90951]) ([frontend docs]) +- Fix flaky test in vesync ([@epenet] - [#90921]) ([vesync docs]) +- Bump `aioambient` to 2022.10.0 ([@bachya] - [#90940]) ([ambient_station docs]) +- Bump reolink-aio to 0.5.10 ([@starkillerOG] - [#90963]) ([reolink docs]) +- Avoid writing state to all esphome entities at shutdown ([@bdraco] - [#90555]) ([esphome docs]) +- Fix state being cleared on disconnect with deep sleep esphome devices ([@bdraco] - [#90925]) ([esphome docs]) +- Coerce previously persisted local calendars to have valid durations ([@allenporter] - [#90970]) ([local_calendar docs]) +- Bump gcal_sync to 4.1.3 ([@allenporter] - [#90968]) ([google docs]) +- Fix error after losing an imap connection ([@jbouwh] - [#90966]) ([imap docs]) +- Fix command_template sensor value_template not being used if json_attributes set ([@gadgetchnnel] - [#90603]) ([command_line docs]) +- Fix verisure autolock ([@heiparta] - [#90960]) ([verisure docs]) + +[#90555]: https://github.com/home-assistant/core/pull/90555 +[#90603]: https://github.com/home-assistant/core/pull/90603 +[#90855]: https://github.com/home-assistant/core/pull/90855 +[#90925]: https://github.com/home-assistant/core/pull/90925 +[#90956]: https://github.com/home-assistant/core/pull/90956 +[#90960]: https://github.com/home-assistant/core/pull/90960 +[#90966]: https://github.com/home-assistant/core/pull/90966 +[#90968]: https://github.com/home-assistant/core/pull/90968 +[#90970]: https://github.com/home-assistant/core/pull/90970 +[@allenporter]: https://github.com/allenporter +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@frenck]: https://github.com/frenck +[@gadgetchnnel]: https://github.com/gadgetchnnel +[@heiparta]: https://github.com/heiparta +[@jbouwh]: https://github.com/jbouwh +[actiontec docs]: /integrations/actiontec/ +[advantage_air docs]: /integrations/advantage_air/ +[airly docs]: /integrations/airly/ +[command_line docs]: /integrations/command_line/ +[esphome docs]: /integrations/esphome/ +[google docs]: /integrations/google/ +[imap docs]: /integrations/imap/ +[local_calendar docs]: /integrations/local_calendar/ +[verisure docs]: /integrations/verisure/ +[#90921]: https://github.com/home-assistant/core/pull/90921 +[@epenet]: https://github.com/epenet +[ambient_station docs]: /integrations/ambient_station/ +[reolink docs]: /integrations/reolink/ +[@bachya]: https://github.com/bachya +[@starkillerOG]: https://github.com/starkillerOG +[#90746]: https://github.com/home-assistant/core/pull/90746 +[#90799]: https://github.com/home-assistant/core/pull/90799 +[#90855]: https://github.com/home-assistant/core/pull/90855 +[#90858]: https://github.com/home-assistant/core/pull/90858 +[#90867]: https://github.com/home-assistant/core/pull/90867 +[#90868]: https://github.com/home-assistant/core/pull/90868 +[#90880]: https://github.com/home-assistant/core/pull/90880 +[#90883]: https://github.com/home-assistant/core/pull/90883 +[#90885]: https://github.com/home-assistant/core/pull/90885 +[#90888]: https://github.com/home-assistant/core/pull/90888 +[#90889]: https://github.com/home-assistant/core/pull/90889 +[#90895]: https://github.com/home-assistant/core/pull/90895 +[#90896]: https://github.com/home-assistant/core/pull/90896 +[#90903]: https://github.com/home-assistant/core/pull/90903 +[#90905]: https://github.com/home-assistant/core/pull/90905 +[#90927]: https://github.com/home-assistant/core/pull/90927 +[#90951]: https://github.com/home-assistant/core/pull/90951 +[@bachya]: https://github.com/bachya +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@frenck]: https://github.com/frenck +[@mib1185]: https://github.com/mib1185 +[@mkmer]: https://github.com/mkmer +[@pree]: https://github.com/pree +[@saschaabraham]: https://github.com/saschaabraham +[@stickpin]: https://github.com/stickpin +[@teharris1]: https://github.com/teharris1 +[actiontec docs]: /integrations/actiontec/ +[advantage_air docs]: /integrations/advantage_air/ +[airly docs]: /integrations/airly/ +[bluetooth docs]: /integrations/bluetooth/ +[dhcp docs]: /integrations/dhcp/ +[fritz docs]: /integrations/fritz/ +[fritzbox_callmonitor docs]: /integrations/fritzbox_callmonitor/ +[frontend docs]: /integrations/frontend/ +[home_connect docs]: /integrations/home_connect/ +[honeywell docs]: /integrations/honeywell/ +[insteon docs]: /integrations/insteon/ +[nuki docs]: /integrations/nuki/ +[pi_hole docs]: /integrations/pi_hole/ +[profiler docs]: /integrations/profiler/ +[recorder docs]: /integrations/recorder/ +[simplisafe docs]: /integrations/simplisafe/ + +## Release 2023.4.2 - April 8 + +- Fix NMBS AttributeError ([@PatrickGlesner] - [#90525]) ([nmbs docs]) +- Bump websockets constraint to 11.0.1+ ([@bdraco] - [#90901]) ([ambient_station docs]) ([vallox docs]) +- Raise an issue for legacy SQL queries that will cause full table scans ([@bdraco] - [#90971]) ([sql docs]) +- Resume entity id post migration after a restart ([@bdraco] - [#90973]) ([recorder docs]) +- Bump vallox-websocket-api to 3.2.1 ([@bdraco] - [#90980]) ([vallox docs]) +- Bump `aioambient` to 2023.04.0 ([@bachya] - [#90991]) ([ambient_station docs]) +- Bump roombapy to 1.6.8 ([@joostlek] - [#91012]) ([roomba docs]) +- Delay utility_meter until HA has started ([@dgomes] - [#91017]) ([utility_meter docs]) +- Make sure upnp-router is also initialized when first seen through an advertisement ([@StevenLooman] - [#91037]) ([upnp docs]) +- Bump ZHA quirks lib ([@dmulcahey] - [#91054]) ([zha docs]) +- Fix Smartthings acceleration sensor in ZHA ([@dmulcahey] - [#91056]) ([zha docs]) +- Bump zeroconf to 0.55.0 ([@bdraco] - [#90987]) ([zeroconf docs]) +- Bump zeroconf to 0.56.0 ([@bdraco] - [#91060]) ([zeroconf docs]) +- Make location optional in google calendar create service ([@allenporter] - [#91061]) ([google docs]) +- Bump gcal_sync to 4.1.4 ([@allenporter] - [#91062]) ([google docs]) +- Bump subarulink to 0.7.6 ([@G-Two] - [#91064]) ([subaru docs]) +- Bump env_canada to v0.5.31 ([@michaeldavie] - [#91094]) ([environment_canada docs]) +- Fix context_user_id round trip when calling to_native ([@bdraco] - [#91098]) ([recorder docs]) +- Bump flux_led to 0.28.37 ([@bdraco] - [#91099]) ([flux_led docs]) +- Make the device_tracker more forgiving when passed an empty ip address string ([@bdraco] - [#91101]) ([device_tracker docs]) + +[#90525]: https://github.com/home-assistant/core/pull/90525 +[#90855]: https://github.com/home-assistant/core/pull/90855 +[#90901]: https://github.com/home-assistant/core/pull/90901 +[#90956]: https://github.com/home-assistant/core/pull/90956 +[#90971]: https://github.com/home-assistant/core/pull/90971 +[#90973]: https://github.com/home-assistant/core/pull/90973 +[#90980]: https://github.com/home-assistant/core/pull/90980 +[#90987]: https://github.com/home-assistant/core/pull/90987 +[#90991]: https://github.com/home-assistant/core/pull/90991 +[#91012]: https://github.com/home-assistant/core/pull/91012 +[#91017]: https://github.com/home-assistant/core/pull/91017 +[#91037]: https://github.com/home-assistant/core/pull/91037 +[#91054]: https://github.com/home-assistant/core/pull/91054 +[#91056]: https://github.com/home-assistant/core/pull/91056 +[#91060]: https://github.com/home-assistant/core/pull/91060 +[#91061]: https://github.com/home-assistant/core/pull/91061 +[#91062]: https://github.com/home-assistant/core/pull/91062 +[#91064]: https://github.com/home-assistant/core/pull/91064 +[#91094]: https://github.com/home-assistant/core/pull/91094 +[#91098]: https://github.com/home-assistant/core/pull/91098 +[#91099]: https://github.com/home-assistant/core/pull/91099 +[#91101]: https://github.com/home-assistant/core/pull/91101 +[@G-Two]: https://github.com/G-Two +[@PatrickGlesner]: https://github.com/PatrickGlesner +[@StevenLooman]: https://github.com/StevenLooman +[@allenporter]: https://github.com/allenporter +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@dgomes]: https://github.com/dgomes +[@dmulcahey]: https://github.com/dmulcahey +[@frenck]: https://github.com/frenck +[@joostlek]: https://github.com/joostlek +[@michaeldavie]: https://github.com/michaeldavie +[actiontec docs]: /integrations/actiontec/ +[advantage_air docs]: /integrations/advantage_air/ +[airly docs]: /integrations/airly/ +[ambient_station docs]: /integrations/ambient_station/ +[device_tracker docs]: /integrations/device_tracker/ +[environment_canada docs]: /integrations/environment_canada/ +[flux_led docs]: /integrations/flux_led/ +[google docs]: /integrations/google/ +[nmbs docs]: /integrations/nmbs/ +[recorder docs]: /integrations/recorder/ +[roomba docs]: /integrations/roomba/ +[sql docs]: /integrations/sql/ +[subaru docs]: /integrations/subaru/ +[upnp docs]: /integrations/upnp/ +[utility_meter docs]: /integrations/utility_meter/ +[vallox docs]: /integrations/vallox/ +[zeroconf docs]: /integrations/zeroconf/ +[zha docs]: /integrations/zha/ + +## Release 2023.4.3 - April 12 + +- Fix configuring Flo instances ([@amattas] - [#90990]) ([flo docs]) +- Fall back to polling if webhook cannot be registered on Nuki ([@pree] - [#91013]) ([nuki docs]) +- Track availability of source sensor in utility meter ([@dgomes] - [#91035]) ([utility_meter docs]) +- Bump aiopyarr to 23.4.0 ([@tkdrob] - [#91110]) ([sonarr docs]) ([radarr docs]) ([lidarr docs]) +- Bump env_canada to 0.5.32 ([@michaeldavie] - [#91126]) ([environment_canada docs]) +- Relax calendar event validation to allow existing zero duration events ([@allenporter] - [#91129]) ([google docs]) ([calendar docs]) ([caldav docs]) +- Bump ulid-transform to 0.6.3 ([@bdraco] - [#91133]) +- Fix false positive in SQL sensor full table scan check ([@bdraco] - [#91134]) ([sql docs]) +- Reolink config flow fix custom port when USE_HTTPS not selected ([@starkillerOG] - [#91137]) ([reolink docs]) +- Fix all day event coercion logic ([@allenporter] - [#91169]) ([calendar docs]) ([local_calendar docs]) +- Reduce startup time for System Bridge integration ([@timmo001] - [#91171]) ([system_bridge docs]) +- Cleanup ZHA from Zigpy deprecated property removal ([@dmulcahey] - [#91180]) ([zha docs]) +- Bump `pytile` to 2023.04.0 ([@bachya] - [#91191]) ([tile docs]) +- Flush conversation name cache when an entity is renamed ([@emontnemery] - [#91214]) ([conversation docs]) +- Update frontend to 20230411.0 ([@bramkragten] - [#91219]) ([frontend docs]) +- Fix switch_as_x name ([@emontnemery] - [#91232]) ([switch_as_x docs]) +- Update Inovelli Blue Series switch support in ZHA ([@codyhackw] - [#91254]) ([zha docs]) +- Bump ZHA dependencies ([@puddly] - [#91291]) ([zha docs]) +- Restore use of local timezone for MariaDB/MySQL in SQL integration ([@bdraco] - [#91313]) ([recorder docs]) ([sql docs]) +- Google Assistant SDK: Fix broadcast command for Portuguese ([@tronikos] - [#91293]) ([google_assistant_sdk docs]) +- Remove codecov from Python test requirements ([@frenck] - [#91295]) + +[#91293]: https://github.com/home-assistant/core/pull/91293 +[#91295]: https://github.com/home-assistant/core/pull/91295 +[@frenck]: https://github.com/frenck +[@tronikos]: https://github.com/tronikos +[google_assistant_sdk docs]: /integrations/google_assistant_sdk/ +[#90855]: https://github.com/home-assistant/core/pull/90855 +[#90956]: https://github.com/home-assistant/core/pull/90956 +[#90990]: https://github.com/home-assistant/core/pull/90990 +[#91013]: https://github.com/home-assistant/core/pull/91013 +[#91035]: https://github.com/home-assistant/core/pull/91035 +[#91110]: https://github.com/home-assistant/core/pull/91110 +[#91111]: https://github.com/home-assistant/core/pull/91111 +[#91126]: https://github.com/home-assistant/core/pull/91126 +[#91129]: https://github.com/home-assistant/core/pull/91129 +[#91133]: https://github.com/home-assistant/core/pull/91133 +[#91134]: https://github.com/home-assistant/core/pull/91134 +[#91137]: https://github.com/home-assistant/core/pull/91137 +[#91169]: https://github.com/home-assistant/core/pull/91169 +[#91171]: https://github.com/home-assistant/core/pull/91171 +[#91180]: https://github.com/home-assistant/core/pull/91180 +[#91191]: https://github.com/home-assistant/core/pull/91191 +[#91214]: https://github.com/home-assistant/core/pull/91214 +[#91219]: https://github.com/home-assistant/core/pull/91219 +[#91232]: https://github.com/home-assistant/core/pull/91232 +[#91254]: https://github.com/home-assistant/core/pull/91254 +[#91291]: https://github.com/home-assistant/core/pull/91291 +[#91313]: https://github.com/home-assistant/core/pull/91313 +[@allenporter]: https://github.com/allenporter +[@amattas]: https://github.com/amattas +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@codyhackw]: https://github.com/codyhackw +[@dgomes]: https://github.com/dgomes +[@dmulcahey]: https://github.com/dmulcahey +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@michaeldavie]: https://github.com/michaeldavie +[@pree]: https://github.com/pree +[@puddly]: https://github.com/puddly +[@starkillerOG]: https://github.com/starkillerOG +[@timmo001]: https://github.com/timmo001 +[@tkdrob]: https://github.com/tkdrob +[actiontec docs]: /integrations/actiontec/ +[advantage_air docs]: /integrations/advantage_air/ +[airly docs]: /integrations/airly/ +[caldav docs]: /integrations/caldav/ +[calendar docs]: /integrations/calendar/ +[conversation docs]: /integrations/conversation/ +[environment_canada docs]: /integrations/environment_canada/ +[flo docs]: /integrations/flo/ +[frontend docs]: /integrations/frontend/ +[google docs]: /integrations/google/ +[lidarr docs]: /integrations/lidarr/ +[local_calendar docs]: /integrations/local_calendar/ +[nuki docs]: /integrations/nuki/ +[radarr docs]: /integrations/radarr/ +[recorder docs]: /integrations/recorder/ +[reolink docs]: /integrations/reolink/ +[sonarr docs]: /integrations/sonarr/ +[sql docs]: /integrations/sql/ +[switch_as_x docs]: /integrations/switch_as_x/ +[system_bridge docs]: /integrations/system_bridge/ +[tile docs]: /integrations/tile/ +[utility_meter docs]: /integrations/utility_meter/ +[zha docs]: /integrations/zha/ + +## Release 2023.4.4 - April 13 + +- Bump python-homewizard-energy to 2.0.1 ([@DCSBL] - [#91097]) ([homewizard docs]) (dependency) +- Bump aiolifx to 0.8.10 ([@bdraco] - [#91324]) ([lifx docs]) (dependency) +- Update frontend to 20230411.1 ([@bramkragten] - [#91344]) ([frontend docs]) + +[#90855]: https://github.com/home-assistant/core/pull/90855 +[#90956]: https://github.com/home-assistant/core/pull/90956 +[#91097]: https://github.com/home-assistant/core/pull/91097 +[#91111]: https://github.com/home-assistant/core/pull/91111 +[#91316]: https://github.com/home-assistant/core/pull/91316 +[#91324]: https://github.com/home-assistant/core/pull/91324 +[#91344]: https://github.com/home-assistant/core/pull/91344 +[@DCSBL]: https://github.com/DCSBL +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@frenck]: https://github.com/frenck +[actiontec docs]: /integrations/actiontec/ +[advantage_air docs]: /integrations/advantage_air/ +[airly docs]: /integrations/airly/ +[frontend docs]: /integrations/frontend/ +[homewizard docs]: /integrations/homewizard/ +[lifx docs]: /integrations/lifx/ + +## Release 2023.4.5 - April 17 + +- Add SetSynchronizationPoint fallback to onvif ([@GrumpyMeow] - [#86400]) ([onvif docs]) +- Fix SharkIQ token expiration ([@funkybunch] - [#89357]) ([sharkiq docs]) +- Reolink prevent ONVIF push being lost due to ConnectionResetError ([@starkillerOG] - [#91070]) ([reolink docs]) +- Add missing mock in sharkiq tests ([@epenet] - [#91325]) ([sharkiq docs]) +- Tado set_water_heater_timer should use water_heater domain ([@rich-kettlewell] - [#91364]) ([tado docs]) +- Fix listener running in foreground for System Bridge integration ([@timmo001] - [#91391]) ([system_bridge docs]) +- Bump onvif-zeep-async to 1.2.5 ([@bdraco] - [#91399]) ([onvif docs]) +- Fix attribute reporting config failures in ZHA ([@puddly] - [#91403]) ([zha docs]) +- Save Thread dataset store when changing preferred dataset ([@emontnemery] - [#91411]) ([thread docs]) +- Bump env_canada to v0.5.33 ([@michaeldavie] - [#91468]) ([environment_canada docs]) +- Fix creating onvif pull point subscriptions when InitialTerminationTime is required ([@bdraco] - [#91470]) ([onvif docs]) (dependency) +- Bump onvif-zeep-async to 1.2.11 ([@bdraco] - [#91472]) ([onvif docs]) (dependency) +- Handle a few more transient onvif errors ([@bdraco] - [#91473]) ([onvif docs]) +- Reolink ONVIF move read to primary callback ([@starkillerOG] - [#91478]) ([reolink docs]) +- Fix onvif failing to reload ([@bdraco] - [#91482]) ([onvif docs]) +- Resolve issue with switchbot blind tilt devices getting stuck in opening/closing state ([@BTMorton] - [#91495]) ([switchbot docs]) (dependency) +- Fix state mapping in fibaro climate ([@rappenze] - [#91505]) ([fibaro docs]) +- Bump unifiprotect to 4.8.1 ([@AngellusMortis] - [#91522]) ([unifiprotect docs]) (dependency) + +[#86400]: https://github.com/home-assistant/core/pull/86400 +[#89357]: https://github.com/home-assistant/core/pull/89357 +[#90855]: https://github.com/home-assistant/core/pull/90855 +[#90956]: https://github.com/home-assistant/core/pull/90956 +[#91070]: https://github.com/home-assistant/core/pull/91070 +[#91111]: https://github.com/home-assistant/core/pull/91111 +[#91316]: https://github.com/home-assistant/core/pull/91316 +[#91325]: https://github.com/home-assistant/core/pull/91325 +[#91356]: https://github.com/home-assistant/core/pull/91356 +[#91364]: https://github.com/home-assistant/core/pull/91364 +[#91391]: https://github.com/home-assistant/core/pull/91391 +[#91399]: https://github.com/home-assistant/core/pull/91399 +[#91403]: https://github.com/home-assistant/core/pull/91403 +[#91411]: https://github.com/home-assistant/core/pull/91411 +[#91468]: https://github.com/home-assistant/core/pull/91468 +[#91470]: https://github.com/home-assistant/core/pull/91470 +[#91472]: https://github.com/home-assistant/core/pull/91472 +[#91473]: https://github.com/home-assistant/core/pull/91473 +[#91478]: https://github.com/home-assistant/core/pull/91478 +[#91482]: https://github.com/home-assistant/core/pull/91482 +[#91495]: https://github.com/home-assistant/core/pull/91495 +[#91505]: https://github.com/home-assistant/core/pull/91505 +[#91522]: https://github.com/home-assistant/core/pull/91522 +[@AngellusMortis]: https://github.com/AngellusMortis +[@BTMorton]: https://github.com/BTMorton +[@GrumpyMeow]: https://github.com/GrumpyMeow +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@frenck]: https://github.com/frenck +[@funkybunch]: https://github.com/funkybunch +[@michaeldavie]: https://github.com/michaeldavie +[@puddly]: https://github.com/puddly +[@rappenze]: https://github.com/rappenze +[@rich-kettlewell]: https://github.com/rich-kettlewell +[@starkillerOG]: https://github.com/starkillerOG +[@timmo001]: https://github.com/timmo001 +[actiontec docs]: /integrations/actiontec/ +[advantage_air docs]: /integrations/advantage_air/ +[airly docs]: /integrations/airly/ +[environment_canada docs]: /integrations/environment_canada/ +[fibaro docs]: /integrations/fibaro/ +[frontend docs]: /integrations/frontend/ +[homewizard docs]: /integrations/homewizard/ +[lifx docs]: /integrations/lifx/ +[onvif docs]: /integrations/onvif/ +[reolink docs]: /integrations/reolink/ +[sharkiq docs]: /integrations/sharkiq/ +[switchbot docs]: /integrations/switchbot/ +[system_bridge docs]: /integrations/system_bridge/ +[tado docs]: /integrations/tado/ +[thread docs]: /integrations/thread/ +[unifiprotect docs]: /integrations/unifiprotect/ +[zha docs]: /integrations/zha/ + +## Release 2023.4.6 - April 21 + +- Add a guard against selecting all entities in `state_changes_during_period` ([@bdraco] - [#91585]) ([recorder docs]) +- Fix tasks with no due date from not triggering `on` calendar state. ([@boralyl] - [#91196]) ([todoist docs]) +- Fix Insteon thermostat issue ([@teharris1] - [#91568]) ([insteon docs]) +- Handle UnsupportedError in HomeWizard ([@DCSBL] - [#91608]) ([homewizard docs]) +- Bump renault-api to 0.1.13 ([@epenet] - [#91609]) ([renault docs]) +- Handle long format context UUIDs during migration ([@bdraco] - [#91657]) ([recorder docs]) +- Bump aioshelly to 5.3.2 ([@thecode] - [#91679]) ([shelly docs]) +- Fallback to generating a new ULID on migraiton if context is missing or invalid ([@bdraco] - [#91704]) ([recorder docs]) +- Bump python-songpal dependency ([@rytilahti] - [#91708]) ([songpal docs]) +- Do not wait for mqtt at startup mqtt_statestream ([@jbouwh] - [#91721]) ([mqtt_statestream docs]) +- Bump pylitterbot to 2023.4.0 ([@natekspencer] - [#91759]) ([litterrobot docs]) +- Bump pysml to 0.0.10 ([@StephanU] - [#91773]) ([edl21 docs]) +- Relax the constraint that events must have a consistent timezone for start/end ([@allenporter] - [#91788]) ([google docs]) ([calendar docs]) +- Disallow uploading files to bypass the media dirs ([@balloob] - [#91817]) ([media_source docs]) + +[#90855]: https://github.com/home-assistant/core/pull/90855 +[#90956]: https://github.com/home-assistant/core/pull/90956 +[#91111]: https://github.com/home-assistant/core/pull/91111 +[#91196]: https://github.com/home-assistant/core/pull/91196 +[#91316]: https://github.com/home-assistant/core/pull/91316 +[#91356]: https://github.com/home-assistant/core/pull/91356 +[#91544]: https://github.com/home-assistant/core/pull/91544 +[#91568]: https://github.com/home-assistant/core/pull/91568 +[#91585]: https://github.com/home-assistant/core/pull/91585 +[#91608]: https://github.com/home-assistant/core/pull/91608 +[#91609]: https://github.com/home-assistant/core/pull/91609 +[#91657]: https://github.com/home-assistant/core/pull/91657 +[#91679]: https://github.com/home-assistant/core/pull/91679 +[#91704]: https://github.com/home-assistant/core/pull/91704 +[#91708]: https://github.com/home-assistant/core/pull/91708 +[#91721]: https://github.com/home-assistant/core/pull/91721 +[#91759]: https://github.com/home-assistant/core/pull/91759 +[#91773]: https://github.com/home-assistant/core/pull/91773 +[#91788]: https://github.com/home-assistant/core/pull/91788 +[#91817]: https://github.com/home-assistant/core/pull/91817 +[@DCSBL]: https://github.com/DCSBL +[@StephanU]: https://github.com/StephanU +[@allenporter]: https://github.com/allenporter +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@boralyl]: https://github.com/boralyl +[@epenet]: https://github.com/epenet +[@frenck]: https://github.com/frenck +[@jbouwh]: https://github.com/jbouwh +[@natekspencer]: https://github.com/natekspencer +[@rytilahti]: https://github.com/rytilahti +[@teharris1]: https://github.com/teharris1 +[@thecode]: https://github.com/thecode +[actiontec docs]: /integrations/actiontec/ +[advantage_air docs]: /integrations/advantage_air/ +[airly docs]: /integrations/airly/ +[calendar docs]: /integrations/calendar/ +[edl21 docs]: /integrations/edl21/ +[frontend docs]: /integrations/frontend/ +[google docs]: /integrations/google/ +[homewizard docs]: /integrations/homewizard/ +[insteon docs]: /integrations/insteon/ +[lifx docs]: /integrations/lifx/ +[litterrobot docs]: /integrations/litterrobot/ +[media_source docs]: /integrations/media_source/ +[mqtt_statestream docs]: /integrations/mqtt_statestream/ +[recorder docs]: /integrations/recorder/ +[renault docs]: /integrations/renault/ +[shelly docs]: /integrations/shelly/ +[songpal docs]: /integrations/songpal/ +[todoist docs]: /integrations/todoist/ + ## Need help? Join the community! Home Assistant has a great community of users who are all more than willing @@ -622,9 +1071,11 @@ mappings configured in the **service**. {% details "Home Connect" %} -Not really a breaking change, but as of now, only program entities are -created for the programs your device supports. You might need to manually remove -old/existing entities that are no longer provided. +In order to obtain an up-to-date list of compatible programs for your appliances, it will be necessary to reconfigure the integration. + +Please note that due to limitations on the Home Connect side, it is important to have your appliances **Turned on** during the reconfiguration process. + +This action is a one-time requirement. ([@stickpin] - [#88801]) ([documentation](/integrations/home_connect)) diff --git a/source/_posts/2023-04-11-homeseer-partner.markdown b/source/_posts/2023-04-11-homeseer-partner.markdown new file mode 100644 index 00000000000..c1e99db7426 --- /dev/null +++ b/source/_posts/2023-04-11-homeseer-partner.markdown @@ -0,0 +1,34 @@ +--- +layout: post +title: "HomeSeer joins Works with Home Assistant" +description: "HomeSeer join the Works with Home Assistant partner program as a Z-Wave partner." +date: 2023-04-11 00:00:00 +date_formatted: "April 11, 2023" +author: Uwe Bernitt +comments: true +categories: + - Announcements +og_image: /images/blog/2023-04-11-homeseer-partner/social.png +--- + +HomeSeer and Works with Home Assistant logos +

    + +HomeSeer is now a member of the Works with Home Assistant partner program and they are committed to ensuring that their Z-Wave smart products are up to date and ready to use in Home Assistant. + +HomeSeer products are all Z-Wave Plus certified. Their smart dimmer/switches offer convenient RGB LEDs that may be programmed with automations to glow or blink 7 different colors when things happen in your home. The switches also support multi-tap actions for triggering automations and scenes. + +HomeSeer works with Home Assistant +

    + +HomeSeer offers an AC powered Z-Wave multi-sensor that also includes an RGB LED for status updates. Additional Z-Wave products include a motion sensor, leak sensor, door/window sensor, floodlight sensor, and motorized water valve. + +HomeSeer Z-Wave devices work locally and integrate seamlessly with the Z-Wave integration in Home Assistant (Z-Wave interface required). As all connectivity is happening locally, status updates and control of your devices happen instantly in Home Assistant. + +With automatic firmware updates via Home Assistant we will continue to provide the best user experience for their devices. + +To learn more about HomeSeer products, have a look at their [website](https://shop.homeseer.com/collections/z-wave-products). + +PS: We’re actively working on easing the integration of the HomeSeer [Z-NET G3](https://shop.homeseer.com/collections/z-wave-products/products/z-net-g3-remote-z-wave-interface) into Home Assistant + +_[Learn more about the Works with Home Assistant partner program.](/blog/2022/07/12/partner-program/)_ diff --git a/source/_posts/2023-04-18-home-assistant-os-release-10.markdown b/source/_posts/2023-04-18-home-assistant-os-release-10.markdown new file mode 100644 index 00000000000..1f8cdc8d09f --- /dev/null +++ b/source/_posts/2023-04-18-home-assistant-os-release-10.markdown @@ -0,0 +1,111 @@ +--- +layout: post +title: "Home Assistant OS 10: Better memory management and new board support" +description: "Home Assistant OS 10 released with better memory management and Hardkernel ODROID-M1 board support!" +date: 2023-04-18 00:00:00 +date_formatted: "April 18, 2023" +author: Stefan Agner +comments: true +categories: + - Announcements +og_image: /images/blog/2023-04-18-os10/social.png +--- + + +Home Assistant OS Release 10 Logo + +

    + +**Highlights**: + +- Support for Hardkernel ODROID-M1 +- Improved data disk feature: + - Improved reliability + - Move from one data disk to a new data disk is now supported +- Improved memory management to improve overall device performance, especially in low memory situations +- Updated software packages: Linux, Docker, BlueZ, NetworkManager + +For existing installations, no manual intervention is needed! You can safely +update without reading these rather technical release notes. + +## Table of contents + +- [Table of contents](#table-of-contents) +- [New board support: Hardkernel ODROID-M1](#new-board-support-hardkernel-odroid-m1) +- [Improved data disk feature](#improved-data-disk-feature) +- [Advanced memory management](#advanced-memory-management) +- [Updated software packages](#updated-software-packages) + +## New board support: Hardkernel ODROID-M1 + +Home Assistant OS 10 supports the Hardkernel ODROID-M1 single board computer! +Most notably, the ODROID-M1 supports NVMe SSD storage natively, which makes it +another great choice to run Home Assistant on. With its quad-core CPU with up +to 2 GHz and up to 8 GB of memory it is suitable even for demanding Home +Assistant installations. + +Currently, Home Assistant can be booted off an SD-card or an eMMC. Note however +that a new boot firmware (Petitboot) is required to boot from eMMC (see +the [board-specific documentation](https://github.com/home-assistant/operating-system/blob/dev/Documentation/boards/hardkernel/odroid-m1.md)). NVMe SSD boot is currently not supported +by the boot firmware. However, an NVMe SSD can be used through the data disk +feature. + +Buy ODROID-M1 at [Ameridroid](https://ameridroid.com/products/odroid-m1?ref=eeb6nfw07e) or directly at [Hardkernel](https://www.hardkernel.com/shop/odroid-m1-with-4gbyte-ram/) + +Hardkernel ODROID-M1 single board computer with NVMe SSD plugged in + +## Improved data disk feature + +The data disk feature allows extending storage by adding an external disk. +When using the data disk feature, all commonly read and written data is moved +to that storage, just Home Assistant OS itself remains on the existing storage +(for example, SD-card or eMMC). Home Assistant OS is a read-only operating system — the +OS partitions are only written to when updating the operating system. This makes +sure that there is minimal wear on the existing storage. + +In this OS release, together with the latest version of the Supervisor, the +data disk feature gets more user-friendly: The data disk choice now lists the model of available data disks. Disk will now be reliably detected and available as the new data disk in certain edge cases were they previously weren't. + +It is also possible to move from one data disk to another: +Simply connect another disk, and go to the **Move data disk** dialog again. On +reboot, the data will be moved and the old data disk can be detached. You can find the move data disk feature under **Settings** > **System** > **Storage** in +the top right overflow menu. + +Screenshot showing the new data disk selection dialog + +## Advanced memory management + +With Home Assistant OS 10 low memory, devices will generally perform better. +Firstly, we moved from zram to zswap, which allows us to use the storage as an +actual swap space. We’ve tuned the memory management to minimize the number of +writes to storage (to prevent unnecessary wear on SD-cards and other flash +memory-based storage). + +We’ve also improved reliability and responsiveness in low-memory situations: +Home Assistant OS uses a new memory management mechanism named Multi-Gen LRU +along with thrashing prevention. This makes Home Assistant OS recover quickly +from a low-memory situation and remain responsive. + +In general, we recommend using a board with at least 1 GB of memory and make +sure to stay well below 80% memory utilization. You can monitor the overall +memory utilization under **Settings** > **System** > **Hardware**. + +## Updated software packages + +Home Assistant OS is built using the latest release of Buildroot 2023.02. It +comes with the latest Linux kernel with long-term support (6.1). This means +updated drivers and better device support. It uses the latest version of +Docker 23.0.3, our container engine powering the Supervisor and our add-ons. +The latest version of the Bluetooth package BlueZ 5.66 comes with various bug +fixes for improved communication with Bluetooth devices. Network Manager +1.40.16 has proven to work more reliably with third party Thread border routers, +specifically with Apple border routers. We also improved the IPv6 Neighbor +Discovery support on Home Assistant OS specifically for Thread: Home Assistant +OS will now quickly discover when border routers disappear from the network and +use alternative border routers, if available. + +We hope you enjoy Home Assistant OS 10.0! If you have any questions or feedback, +please let us know. + +_Some product links are affiliate links and we earn a small commission when products are bought._ diff --git a/source/_posts/2023-04-27-year-of-the-voice-chapter-2.markdown b/source/_posts/2023-04-27-year-of-the-voice-chapter-2.markdown new file mode 100644 index 00000000000..5da1c972739 --- /dev/null +++ b/source/_posts/2023-04-27-year-of-the-voice-chapter-2.markdown @@ -0,0 +1,166 @@ +--- +layout: post +title: "Year of the Voice - Chapter 2: Let's talk" +description: "Talk to your smart home and let it talk back with our new voice assistant features." +date: 2023-04-27 00:00:00 +date_formatted: "April 27, 2023" +author: Paulus Schoutsen +comments: true +categories: Assist +og_image: /images/blog/2023-04-27-year-of-the-voice-chapter-2/social.png +--- + + +This year is Home Assistant’s [Year of the Voice]. It is our goal for 2023 to let users control Home Assistant in their own language. Today we’re presenting Chapter 2, our second milestone in building towards this goal. + +In [Chapter 1], we focused on intents – what the user wants to do. Today, the Home Assistant community has translated common smart home commands and responses into [45 languages], closing in on the 62 languages that Home Assistant supports. + +For Chapter 2, we’ve expanded beyond text to now include audio; specifically, turning audio (speech) into text, and text back into speech. With this functionality, [Home Assistant’s Assist feature][assist] is now able to provide a full voice interface for users to interact with. + +A voice assistant also needs hardware, so today we’re launching ESPHome support for Assist and; to top it off: we’re launching the World’s Most Private Voice Assistant. Keep reading to see what that entails. + +_To watch the video presentation of this blog post, including live demos, check [the recording of our live stream.][live-stream]_ + + + +[Year of the Voice]: https://www.home-assistant.io/blog/2022/12/20/year-of-voice/ +[Chapter 1]: https://www.home-assistant.io/blog/2023/01/26/year-of-the-voice-chapter-1/ +[45 languages]: https://home-assistant.github.io/intents/ +[live-stream]: https://youtube.com/live/Tk-pnm7FY7c?feature=share +[assist]: /docs/assist/ + + + +## Composing Voice Assistants + +The new [Assist Pipeline integration] allows you to configure all components that make up a voice assistant in a single place. + +For voice commands, pipelines start with audio. A speech-to-text system determines the words the user speaks, which are then forwarded to a conversation agent. The intent is extracted from the text by the agent and executed by Home Assistant. At this point, “turn on the light” would cause your light to turn on 💡. The last part of the pipeline is text-to-speech, where the agent’s response is spoken back to you. This may be a simple confirmation (“Turned on light”) or the answer to a question, such as “Which lights are on?” + +

    + +Screenshot of the new Assist configuration in Home Assistant. +

    + +With the new Voice Assistant settings page users can create multiple assistants, mixing and matching voice services. Want a U.S. English assistant that responds with a British accent? No problem. What about a second assistant that listens for Dutch, German, or French voice commands? Or maybe you want to throw ChatGPT in the mix. Create as many assistants as you want, and use them from the [Assist dialog] as well as voice assistant hardware for Home Assistant. + +Interacting with many different services means that many different things can go wrong. To help users figure out what went wrong, we’ve built extensive debug tooling for voice assistants into Home Assistant. You can always inspect the last 10 interactions per voice assistant. + +

    + +Screenshot of the new Assist debug tool. +

    + +[Assist Pipeline integration]: https://www.home-assistant.io/integrations/assist_pipeline/ +[Assist dialog]: /docs/assist/ + +## Voice Assistant powered by Home Assistant Cloud + +The [Home Assistant Cloud][nc] subscription, besides end-to-end encrypted remote connection, includes state of the art speech-to-text and text-to-speech services. This allows your voice assistant to speak 130+ languages (including dialects like Peruvian Spanish) and is extremely fast to respond. Sample: + + + +As a subscriber, you can directly start using voice in Home Assistant. You will not need any extra hardware or software to get started. + +In addition to high quality speech-to-text and text-to-speech for your voice assistants, you will also be supporting the development of Home Assistant itself. + +[Join Home Assistant Cloud today][nc] + +[nc]: https://www.nabucasa.com + +## The fully local voice assistant + +With Home Assistant you can be guaranteed two things: there will be options and one of those options will be local. With our voice assistant that’s no different. + +### Piper: our new model for high quality local text-to-speech + +To make quality text-to-speech running locally possible, we’ve had to create our own text-to-speech system that is optimized for running on a Raspberry Pi 4. It’s called Piper. + +Piper logo + +Piper uses [modern machine learning algorithms][mm-algo] for realistic-sounding speech but can still generate audio quickly. On a Raspberry Pi 4, Piper can generate 2 seconds of audio with only 1 second of processing time. More powerful CPUs, such as the Intel Core i5, can generate 17 seconds of audio in the same amount of time. Sample: + + + +_For more samples, see [the Piper website][piper-samples]_ + +An {% my supervisor_addon addon="core_piper" title="add-on with Piper" %} is available now for Home Assistant with [over 40 voices across 18 languages][piper-samples], including: Catalan, Danish, German, English, Spanish, Finnish, French, Greek, Italian, Kazakh, Nepali, Dutch, Norwegian, Polish, Brazilian Portuguese, Ukrainian, Vietnamese, and Chinese. Voices for Piper are trained from [open audio datasets][open-audio], many of which come from [free audiobooks read by volunteers][audiobook]. If you’re interested in contributing your voice, [let us know!][contact] + +You can also run [Piper as a standalone Docker container](https://hub.docker.com/r/rhasspy/wyoming-piper). + +[mm-algo]: https://github.com/jaywalnut310/vits/ +[piper-samples]: https://rhasspy.github.io/piper-samples +[open-audio]: http://www.openslr.org/ +[audiobook]: https://librivox.org/ +[contact]: mailto:voice@nabucasa.com + +### Local speech-to-text with OpenAI Whisper + +[Whisper] is an open source speech-to-text model created by OpenAI that runs locally. Since its release in 2022, Whisper has been improved by the open source community to run on less powerful hardware by projects such as [whisper.cpp] and [faster-whisper]. In less than a year of progress, Whisper is now capable of providing speech-to-text for [dozens of languages][whisper-lang] on small servers and single-board computers! + +An {% my supervisor_addon addon="core_whisper" title="add-on using faster-whisper" %} is available now for Home Assistant. On a Raspberry Pi 4, voice commands can take around 7 seconds to process with about 200 MB of RAM used. An Intel Core i5 CPU or better is capable of sub-second response times and can run larger (and more accurate) versions of Whisper. + +You can also run [Whisper as a standalone Docker container](https://hub.docker.com/r/rhasspy/wyoming-whisper). + +[Whisper]: https://github.com/openai/whisper +[whisper-lang]: https://github.com/openai/whisper#available-models-and-languages +[whisper.cpp]: https://github.com/ggerganov/whisper.cpp +[faster-whisper]: https://github.com/guillaumekln/faster-whisper/ + +## Wyoming: the voice assistant glue + +Voice assistants share many common functions, such as speech-to-text, intent-recognition, and text-to-speech. We created the [Wyoming protocol][Wyoming] to provide a small set of standard messages for talking to voice assistant services, including the ability to stream audio. + +Wyoming allows developers to focus on the core of a voice service without having to commit to a specific networking stack like HTTP or MQTT. This protocol is compatible with the upcoming [version 3.0 of Rhasspy][Rhasspy], so both projects can share voice services. + +With Wyoming, we’re trying to kickstart a more interoperable open voice ecosystem that makes sharing components across projects and platforms easy. Developers and scientists wishing to experiment with new voice technologies need only implement a small set of messages to integrate with other voice assistant projects. + +The Whisper and Piper add-ons mentioned above are integrated into Home Assistant via the new [Wyoming integration]. Wyoming services can also be run on other machines and still integrate into Home Assistant. + +[Wyoming]: https://github.com/rhasspy/rhasspy3/blob/master/docs/wyoming.md +[Rhasspy]: https://github.com/rhasspy/rhasspy3/ +[Wyoming integration]: https://www.home-assistant.io/integrations/wyoming/ + +## ESPHome powered voice assistants + +[ESPHome] is our software for microcontrollers. Instead of programming, users define how their sensors are connected in a YAML file. ESPHome will read this file and generate and install software on your microcontroller to make this data accessible in Home Assistant. + +Today we’re launching support for building voice assistants using ESPHome. Connect a microphone to your ESPHome device, and you can control your smart home with your voice. Include a speaker and the smart home will speak back. + + + +We’ve been focusing on the [M5STACK ATOM Echo][atom-echo] for testing and development. For $13 it comes with a microphone and a speaker in a nice little box. We’ve created a tutorial to turn this device into a voice remote directly from your browser! + +[Tutorial: create a $13 voice remote for Home Assistant.](https://www.home-assistant.io/projects/thirteen-usd-voice-remote/) + +[ESPHome Voice Assistant documentation.](https://esphome.io/components/voice_assistant.html) + +[ESPHome]: https://esphome.io +[atom-echo]: https://shop.m5stack.com/products/atom-echo-smart-speaker-dev-kit?ref=NabuCasa + +## World’s Most Private Voice Assistant + +If you were designing the world’s most private voice assistant, what features would it have? To start, it should only listen when you’re ready to talk, rather than all the time. And when it responds, you should be the only one to hear it. This sounds strangely familiar…🤔 + +A phone! No, not the featureless rectangle you have in your pocket; an analog phone. These great creatures once ruled the Earth with twisty cords and unique looks to match your style. Analog phones have a familiar interface that’s hard to beat: pick up the phone to listen/speak and put it down when done. + +With Home Assistant’s new [Voice-over-IP integration][voip], you can now use an “old school” phone to control your smart home! + + + +By configuring off-hook autodial, your phone will automatically call Home Assistant when you pick it up. Speak your voice command or question, and listen for the response. The conversation will continue as long as you please: speak more commands/questions, or simply hang up. Assign a unique voice assistant/pipeline to each VoIP adapter, enabling dedicated phones for specific languages. + +We’ve focused our initial efforts on supporting [the Grandstream HT801 Voice-over-IP box][ht801]. It works with any phone with an RJ11 connector, and connects directly to Home Assistant. There is no need for an extra server. + +[Tutorial: create your own World’s Most Private Voice Assistant](https://www.home-assistant.io/projects/worlds-most-private-voice-assistant/) + + +

    + +Give your voice assistant personality using the OpenAI integration. +

    + +[voip]: https://www.home-assistant.io/integrations/voip/ +[ht801]: https://amzn.to/40k7mRa + +_Some links on this page are affiliate links and purchases using these links support the Home Assistant project._ diff --git a/source/_posts/2023-05-03-release-20235.markdown b/source/_posts/2023-05-03-release-20235.markdown new file mode 100644 index 00000000000..69c2596893e --- /dev/null +++ b/source/_posts/2023-05-03-release-20235.markdown @@ -0,0 +1,746 @@ +--- +layout: post +title: "2023.5: Let's talk!" +description: "Have a talk with your Home Assistant! Shipping chapter 2 of our Year of the Voice! Easily manage your exposed entities to your voice assistants, configure your Home Assistant Yellow's LEDs, and new Webhook trigger options!" +date: 2023-05-03 00:00:00 +date_formatted: "May 3, 2023" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: + - Release-Notes + - Core +og_image: /images/blog/2023-05/social.png +--- + + + +Home Assistant Core 2023.5! 🎉 + +What an exciting release we have for you this month! This release is all about +voice (well, almost fully), and I'm super excited we can ship you all this truly +amazing stuff! + +I've been following the progress of this all being built this month, and really, +I've been mindblown multiple times a week. So what is in here? Well, you can +now actually talk to Home Assistant! 🤯 + +I really appreciate that all these voice elements have been built the +Home Assistant way: to be fully configurable and extendable. Giving you choices, +including entirely local options for your own voice assistant. + +This release is packed! And we are not even halfway through Home Assistant's +Year of the voice yet… + +Enjoy the release! + +../Frenck + + + +- [Let's talk!](#lets-talk) +- [Manage what is exposed to your voice assistants](#manage-what-is-exposed-to-your-voice-assistants) +- [Improved entity setting](#improved-entity-setting) +- [Configuring the LEDs of your Home Assistant Yellow](#configuring-the-leds-of-your-home-assistant-yellow) +- [Webhooks trigger options](#webhooks-trigger-options) +- [New Assist pipeline and language selectors](#new-assist-pipeline-and-language-selectors) +- [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) +- [Release 2023.5.1 - May 4](#release-202351---may-4) +- [Release 2023.5.2 - May 5](#release-202352---may-5) +- [Need help? Join the community!](#need-help-join-the-community) +- [Breaking Changes](#breaking-changes) +- [Farewell to the following](#farewell-to-the-following) +- [All changes](#all-changes) + +Don't forget to [join our release party live stream on YouTube](https://www.youtube.com/watch?v=ZPrlZxDE6Zk) +3 May 2023, at 12:00 PDT / 21:00 CEST! + + + +## Let's talk! + +Our goal for 2023 is to let you control Home Assistant in your own language: +It is [Home Assistant’s Year of the Voice][yotv]! After [chapter 1][chapter1] in +January, [we announced chapter 2][chapter2] in this exciting journey last week! + +This release ships everything (plus more) that was announced! This means, as +of this release, you can actually start talking to Home Assistant! 🎙️ + + + +Here is a quick summary of [all that has been announced][chapter2], linked to +the place you can read more about each of them: + +- [Compose your own voice assistant using the new assist pipelines](/blog/2023/04/27/year-of-the-voice-chapter-2/#composing-voice-assistants) +- [Voice Assistant powered by Home Assistant Cloud](/blog/2023/04/27/year-of-the-voice-chapter-2/#voice-assistant-powered-by-home-assistant-cloud) +- [Fully local text-to-speech using Piper](/blog/2023/04/27/year-of-the-voice-chapter-2/#piper-our-new-model-for-high-quality-local-text-to-speech) +- [Fully local speech-to-text using OpenAI Whisper](/blog/2023/04/27/year-of-the-voice-chapter-2/#local-speech-to-text-with-openai-whisper) +- [The Wyoming protocol and integration](/blog/2023/04/27/year-of-the-voice-chapter-2/#wyoming-the-voice-assistant-glue) +- [Create your own ESPHome-powered voice assistant](/blog/2023/04/27/year-of-the-voice-chapter-2/#esphome-powered-voice-assistants) +- [The Voice-over-IP integration, call Home Assistant ☎️](/blog/2023/04/27/year-of-the-voice-chapter-2/#worlds-most-private-voice-assistant) + +To help you get started, we made sure the documentation is perfect, including +some cool project tutorials to jump-start your own private voice assistant +journey: + +- [The world's most private voice assistant](/projects/worlds-most-private-voice-assistant/) +- [Giving your voice assistant a Super Mario personality using OpenAI](/projects/worlds-most-private-voice-assistant/#give-your-voice-assistant-personality-using-the-openai-integration) +- [Installing a local Assist pipeline](/docs/assist/voice_remote_local_assistant/) +- [The $13 tiny ESPHome-based voice assistant](/projects/thirteen-usd-voice-remote/) + +If you missed [last week's live stream](https://www.youtube.com/watch?v=Tk-pnm7FY7c), +be sure to check it out. It is full of live demos and detailed explanations +of everything packed into this release. The recording of the live stream: + + + +[yotv]: /blog/2022/12/20/year-of-voice/ +[chapter2]: /blog/2023/04/27/year-of-the-voice-chapter-2/ +[chapter1]: /blog/2023/01/26/year-of-the-voice-chapter-1/ + +## Manage what is exposed to your voice assistants + +A brand new and exciting menu item can be found in your {% my config title="**Settings**" %} +menu: {% my voice_assistants title="**Voice assistants**" %}! + +Screenshot showing the brand new menu item in the settings menu: Voice assistants. + +This new settings item gives you access to many fantastic new voice features; +it also provides a new **Expose** tab where you can manage which entities are +exposed to your Assist, Alexa, and Google Assistant. + +Screenshot showing the new expose entities tab in the voice assistants menu. + +It gives an overview of what entities you have exposed to your voice assistants +and easily remove or add new ones. Clicking on an entity in this screen will +bring up the voice assistant setting for that entity, allowing you to turn +on/off the entity's exposure to a specific voice assistant and +manage the entity's aliases. + +Screenshot showing the new expose entities tab in the voice assistants menu. + +This currently supports our [Assist](/docs/assist), and Amazon Alexa and +Google Assistant via Home Assistant Cloud. + +## Improved entity setting + +Some nice tweaks have been made to the entity settings dialog, making it +easier to use and look cleaner. + +The entity settings dialog used to have an expandable advanced section, +which you could expand to access features like showing/hiding/disabling +entities, changing the area, etc. + +The advanced section has been removed, and all its features have been +reorganized. So, no features were lost while providing a much nicer +interface. + +Screenshot showing the new and improved entity settings dialog. + +And, since this is the year of the voice, you may notice the +**"Voice assistants"** option in the above screenshot, which will bring up: + +Screenshot showing the new voice assistant expose controls accessible directly from the entity settings dialog. + +This allows you to quickly change the voice assistants the entity is exposed +to, including its aliases, without having to navigate back to the voice +assistants panel in the main settings screen. + +## Configuring the LEDs of your Home Assistant Yellow + +The enclosure of our amazing [Home Assistant Yellow](/yellow) allows you to +look at the beautiful board and parts inside of it. + +However, the LEDs on the board might light up your environment when +it is dark in an unwanted way. For example, when you sleep in the same room +as your Home Assistant Yellow is in. + +As of this release, you can configure (turn on/off) the disk, heartbeat, +and power LEDs of your Home Assistant Yellow by using the **Configure** button +on the {% my hardware title="**Settings** > **Hardware**" %} page. + +Screenshot that show the new LED settings for the Home Assistant Yellow. + +## Webhooks trigger options + +Webhooks have been extended this release. We now have support for webhooks +that use the `GET` HTTP method! + +But that is not all. Thanks to [@esev], we also got some new security features +for our webhook triggers. You can now set which HTTP methods your +webhook trigger work with and the ability to limit webhooks to only work on +your local network. + +Screenshot showing the new options available on a Webhook automation trigger. + +## New Assist pipeline and language selectors + +If you are building automation or scripts Blueprints, you can now leverage +two new UI selectors for use with your Blueprints: an Assist pipeline selector +and a language selector. + +

    +Screenshot showing the language selector. +The language selector let's a user choose from a list of languages. +

    + +You could, for example, leverage this in a notification Blueprint to allow +setting a different language on a text-to-speech notification. + +[More information can be found in our selectors documentation](/docs/blueprint/selectors). + +## Other noteworthy changes + +There is much more juice in this release; here are some of the other noteworthy +changes this release: + +- [Home Assistant Operating System v10 has been released!] The ODROID M-1 is now supported, improved data disk support and memory management. Bug fixes and reliability improvements for Bluetooth and Thread. +- [Matter] now has support for covers, thanks [@hidaris]! +- The process of making backups is now faster 🚀, thanks [@bdraco]! +- [@bdraco] also gave the [ONVIF] integration some love, which should improve + the stability of the integration. Nice! +- You can now set up multiple instances of the [OpenAI Conversation] integration + with, for example, different prompts. Thanks, [@balloob]! +- [@rubenbe] added direction support to [MQTT] fans! Nice! +- [BTHome] added support for button and dimmer events. This means it supports + the brand new [Shelly BLU Button1]! Thanks, [@Ernst79]! +- The [Supervisor] can now create repair issues for some of the issues + it detected on your system. Awesome [@mdegat01]! +- [@mib1185] added a service to allow sorting of the [Shopping list]. Thanks! +- [@depoll] added an attribute to the [Person] entities that list the device + trackers for this person. Very useful for templates! Thanks! +- The [NextDNS] integration added a whole bunch of new parental control + switches, thanks [@bieniu]! +- [Synology DSM] can now browse your Synology Photos in the media browser. Cool + addition, [@lodesmets]! +- [Simplepush] now supports attachments, thanks to [@tymm]! +- Some [Z-Wave] notification sensors won't clear to idle automatically. Now you can use the new notification idle buttons to idle them manually! + +[Home Assistant Operating System v10 has been released!]: https://www.home-assistant.io/blog/2023/04/18/home-assistant-os-release-10/ +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@depoll]: https://github.com/depoll +[@Ernst79]: https://github.com/Ernst79 +[@hidaris]: https://github.com/hidaris +[@lodesmets]: https://github.com/lodesmets +[@mdegat01]: https://github.com/mdegat01 +[@mib1185]: https://github.com/mib1185 +[@rubenbe]: https://github.com/rubenbe +[@tymm]: https://github.com/tymm +[bthome]: /integrations/bthome +[matter]: /integrations/matter +[mqtt]: /integrations/mqtt +[nextdns]: /integrations/nextdns +[onvif]: /integrations/onvif +[openai conversation]: /integrations/openai_conversation +[person]: /integrations/person +[shelly blu button1]: https://www.shelly.cloud/en/products/shop/shelly-blu-button1?tracking=A7FsiPIfUWsFpnfKHa8SRyUYLXjr2hPq +[shopping list]: /integrations/shopping_list +[simplepush]: /integrations/simplepush +[supervisor]: /integrations/hassio +[synology dsm]: /integrations/synology_dsm +[z-wave]: /integrations/zwave_js + +## New Integrations + +We welcome the following new integrations in this release: + +- **[Android TV Remote]**, added by [@tronikos]
    + Launch apps and control your Android TV device. +- **[RAPT Bluetooth]**, added by [@sairon]
    + Integrates RAPT Pill hydrometers into Home Assistant. +- **[Voice over IP]**, added by [@synesthesiam]
    + Talk to [Assist] using an analog phone and a VoIP adapter. +- **[Wyoming]**, added by [@synesthesiam]
    + Connect to voice services supporting the Wyoming protocol. +- **[Roborock]**, added by [@Lash-L]
    + Control your RoboRock vacuum maintaining Roborock app support. +- **[Anova]**, added by [@Lash-L]
    + Control Anova sous vides with Wi-Fi capabilities. + +This release also has a new virtual integration. Virtual integrations +are stubs that are handled by other (existing) integrations to help with +findability. This one is new: + +- **[Monessen]** provided by [Intellifire], added by [@jeeftor] + +[@jeeftor]: https://github.com/jeeftor +[@Lash-L]: https://github.com/Lash-L +[@sairon]: https://github.com/sairon +[@synesthesiam]: https://github.com/synesthesiam +[@synesthesiam]: https://github.com/synesthesiam +[@tronikos]: https://github.com/tronikos +[android tv remote]: /integrations/androidtv_remote +[Anova]: /integrations/anova +[assist]: /docs/assist +[Intellifire]: /integrations/intellifire +[Monessen]: /integrations/monessen +[RAPT Bluetooth]: /integrations/rapt_ble +[Roborock]: /integrations/roborock +[voice over ip]: /integrations/voip +[Wyoming]: /integrations/wyoming + +## Integrations now available to set up from the UI + +The following integrations are now available via the Home Assistant UI: + +- **[Brottsplatskartan]**, done by [@gjohansson-ST] +- **[qBittorrent]**, done by [@chrisx8] +- **[Snapcast]**, done by [@luar123] +- **[Workday]**, done by [@gjohansson-ST] + +[@chrisx8]: https://github.com/chrisx8 +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@luar123]: https://github.com/luar123 +[brottsplatskartan]: /integrations/brottsplatskartan +[qbittorrent]: /integrations/qbittorrent +[snapcast]: /integrations/snapcast +[workday]: /integrations/workday + +## Release 2023.5.1 - May 4 + +- Fix onvif setup when time set service is not functional ([@bdraco] - [#92447]) ([onvif docs]) +- Fix onvif cameras with invalid encodings in device info ([@bdraco] - [#92450]) ([onvif docs]) +- Bump `aionotion` to 2023.05.0 ([@bachya] - [#92451]) ([notion docs]) +- Fix lifx light strips when color zones are not initially populated ([@bdraco] - [#92487]) ([lifx docs]) +- Bump bluetooth-auto-recovery 1.1.2 ([@bdraco] - [#92495]) ([bluetooth docs]) +- Force migration of cloud settings to exposed_entities ([@emontnemery] - [#92499]) ([cloud docs]) +- Update frontend to 20230503.2 ([@bramkragten] - [#92508]) ([frontend docs]) + +[#92422]: https://github.com/home-assistant/core/pull/92422 +[#92447]: https://github.com/home-assistant/core/pull/92447 +[#92450]: https://github.com/home-assistant/core/pull/92450 +[#92451]: https://github.com/home-assistant/core/pull/92451 +[#92487]: https://github.com/home-assistant/core/pull/92487 +[#92495]: https://github.com/home-assistant/core/pull/92495 +[#92499]: https://github.com/home-assistant/core/pull/92499 +[#92508]: https://github.com/home-assistant/core/pull/92508 +[@bachya]: https://github.com/bachya +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[accuweather docs]: /integrations/accuweather/ +[advantage_air docs]: /integrations/advantage_air/ +[bluetooth docs]: /integrations/bluetooth/ +[cloud docs]: /integrations/cloud/ +[frontend docs]: /integrations/frontend/ +[lifx docs]: /integrations/lifx/ +[notion docs]: /integrations/notion/ +[onvif docs]: /integrations/onvif/ + +## Release 2023.5.2 - May 5 + +- Fix transmission error handling ([@DDanii] - [#91548]) ([transmission docs]) +- Fix power sensor state_class in Netatmo integration ([@hex7c0] - [#92468]) ([netatmo docs]) +- Fix for SIA Code not being handled well ([@eavanvalkenburg] - [#92469]) ([sia docs]) +- Fix scene service examples ([@karwosts] - [#92501]) ([scene docs]) +- Fix blocking I/O in the event loop when starting ONVIF ([@bdraco] - [#92518]) ([onvif docs]) +- Improve cloud migration ([@emontnemery] - [#92520]) ([cloud docs]) +- Bump aioesphomeapi to 13.7.3 to fix disconnecting while handshake is in progress ([@bdraco] - [#92537]) ([esphome docs]) +- Handle invalid ZHA cluster handlers ([@puddly] - [#92543]) ([zha docs]) +- Allow duplicate state updates when force_update is set on an esphome sensor ([@bdraco] - [#92553]) ([esphome docs]) +- Bump elkm1-lib to 2.2.2 ([@bdraco] - [#92560]) ([elkm1 docs]) +- Re-run expose entities migration if first time failed ([@balloob] - [#92564]) ([cloud docs]) +- Fix hassio get_os_info retry ([@epenet] - [#92569]) ([hassio docs]) +- Bump hatasmota to 0.6.5 ([@emontnemery] - [#92585]) ([tasmota docs]) +- Improve reliability of ONVIF subscription renewals ([@bdraco] - [#92551]) ([onvif docs]) +- Lower scan interval for OpenSky ([@joostlek] - [#92593]) ([opensky docs]) +- Update frontend to 20230503.3 ([@bramkragten] - [#92617]) ([frontend docs]) +- Fix missing ONVIF events when switching from PullPoint to webhooks ([@bdraco] - [#92627]) ([onvif docs]) +- Add support for visitor detections to onvif ([@bdraco] - [#92350]) ([onvif docs]) +- Fix duplicate ONVIF sensors ([@bdraco] - [#92629]) ([onvif docs]) + +[#91548]: https://github.com/home-assistant/core/pull/91548 +[#92350]: https://github.com/home-assistant/core/pull/92350 +[#92422]: https://github.com/home-assistant/core/pull/92422 +[#92468]: https://github.com/home-assistant/core/pull/92468 +[#92469]: https://github.com/home-assistant/core/pull/92469 +[#92501]: https://github.com/home-assistant/core/pull/92501 +[#92513]: https://github.com/home-assistant/core/pull/92513 +[#92518]: https://github.com/home-assistant/core/pull/92518 +[#92520]: https://github.com/home-assistant/core/pull/92520 +[#92537]: https://github.com/home-assistant/core/pull/92537 +[#92543]: https://github.com/home-assistant/core/pull/92543 +[#92551]: https://github.com/home-assistant/core/pull/92551 +[#92553]: https://github.com/home-assistant/core/pull/92553 +[#92560]: https://github.com/home-assistant/core/pull/92560 +[#92564]: https://github.com/home-assistant/core/pull/92564 +[#92569]: https://github.com/home-assistant/core/pull/92569 +[#92585]: https://github.com/home-assistant/core/pull/92585 +[#92593]: https://github.com/home-assistant/core/pull/92593 +[#92617]: https://github.com/home-assistant/core/pull/92617 +[#92627]: https://github.com/home-assistant/core/pull/92627 +[#92629]: https://github.com/home-assistant/core/pull/92629 +[@DDanii]: https://github.com/DDanii +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@eavanvalkenburg]: https://github.com/eavanvalkenburg +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@frenck]: https://github.com/frenck +[@hex7c0]: https://github.com/hex7c0 +[@joostlek]: https://github.com/joostlek +[@karwosts]: https://github.com/karwosts +[@puddly]: https://github.com/puddly +[accuweather docs]: /integrations/accuweather/ +[advantage_air docs]: /integrations/advantage_air/ +[bluetooth docs]: /integrations/bluetooth/ +[cloud docs]: /integrations/cloud/ +[elkm1 docs]: /integrations/elkm1/ +[esphome docs]: /integrations/esphome/ +[frontend docs]: /integrations/frontend/ +[hassio docs]: /integrations/hassio/ +[lifx docs]: /integrations/lifx/ +[netatmo docs]: /integrations/netatmo/ +[notion docs]: /integrations/notion/ +[onvif docs]: /integrations/onvif/ +[opensky docs]: /integrations/opensky/ +[scene docs]: /integrations/scene/ +[sia docs]: /integrations/sia/ +[tasmota docs]: /integrations/tasmota/ +[transmission docs]: /integrations/transmission/ +[zha docs]: /integrations/zha/ + +## Need help? Join the community! + +Home Assistant has a great community of users who are all more than willing +to help each other out. So, join us! + +Our very active [Discord chat server](/join-chat) is an excellent place to be +at, and don't forget to join our amazing [forums](https://community.home-assistant.io/). + +Found a bug or issue? Please report it in our [issue tracker](https://github.com/home-assistant/core/issues), +to get it fixed! Or, check [our help page](/help) for guidance for more +places you can go. + +Are you more into email? [Sign-up for our Building the Open Home Newsletter](/newsletter) +to get the latest news about features, things happening in our community and +other news about building an Open Home; straight into your inbox. + +## Breaking Changes + +{% details "Accuweather" %} + +The `ozone` sensors and the `ozone` state attribute of the weather entity showed +incorrect values and are being removed. If you use these values in your +automations or scripts, you need to update them. + +([@bieniu] - [#91492]) ([documentation](/integrations/accuweather)) + +[@bieniu]: https://github.com/bieniu +[#91492]: https://github.com/home-assistant/core/pull/91492 + +{% enddetails %} + +{% details "Android TV" %} + +The "Android TV" integration has been renamed to "Android Debug Bridge". + +This rename is because that is what it actually controlled/provided. With +the addition of the Android TV Remote integration in this release, we wanted +to reduce possible confusion in the future. + +([@tronikos] - [#90657]) ([documentation](/integrations/androidtv)) + +[@tronikos]: https://github.com/tronikos +[#90657]: https://github.com/home-assistant/core/pull/90657 + +{% enddetails %} + +{% details "History" %} + +All YAML configuration options for the history integration have been removed +as they were no longer used by the frontend. + +([@bdraco] - [#90992]) ([documentation](/integrations/history)) + +[@bdraco]: https://github.com/bdraco +[#90992]: https://github.com/home-assistant/core/pull/90992 + +{% enddetails %} + +{% details "HomeKit" %} + +The min/max target humidities for (de)humidifier device exposed over HomeKit +has changed. The HomeKit UI will now show the real relative humidity. When +the slider in HomeKit goes above or below the max/min set humidity, it will +be set back to the max/min allowed humidity. + +([@stackia] - [#90854]) ([documentation](/integrations/homekit)) + +[@stackia]: https://github.com/stackia +[#90854]: https://github.com/home-assistant/core/pull/90854 + +--- + +Default HomeKit to listen on all interfaces to match Home Assistant behavior. +To limit HomeKit to specific network interfaces, specify an `address` +in `configuration.yaml`. + +([@bdraco] - [#91520]) ([documentation](/integrations/homekit)) + +[@bdraco]: https://github.com/bdraco +[#91520]: https://github.com/home-assistant/core/pull/91520 + +{% enddetails %} + +{% details "IMAP" %} + +The use of `imap_content` event could break for users that want to parse data +from larger email messages from the truncated part. Only the first 2048 +bytes of the message body (2 KiB) will be available. + +([@jbouwh] - [#92066]) ([documentation](/integrations/imap)) + +[@jbouwh]: https://github.com/jbouwh +[#92066]: https://github.com/home-assistant/core/pull/92066 + +{% enddetails %} + +{% details "Overkiz" %} + +The silence option for DynamicShutter has been removed because it caused the +cover entity to be non-functional if it did not support silence. This +functionality will be reintroduced in a future release. + +([@iMicknl] - [#91354]) ([documentation](/integrations/overkiz)) + +[@iMicknl]: https://github.com/iMicknl +[#91354]: https://github.com/home-assistant/core/pull/91354 + +{% enddetails %} + +{% details "Reolink" %} + +For Reolink doorbells, the "Status LED" light entity is replaced by a +"Status LED" select entity. The switch `off` state corresponds to the select +`Auto`, and the switch `on` state corresponds to the select +`Auto & always on at night`. An additional `Stay off` state is now available. + +([@starkillerOG] - [#90469]) ([documentation](/integrations/reolink)) + +[@starkillerOG]: https://github.com/starkillerOG +[#90469]: https://github.com/home-assistant/core/pull/90469 + +{% enddetails %} + +{% details "Snapcast" %} + +- Muted groups with stream playing will have state `idle` instead of `playing`. +- Connected clients will not have state `on` anymore but use the same states as + groups: `idle` and `playing`. +- Disconnected clients have state `standby` instead of `off` because the + Snapcast server still accepts commands. + +([@luar123] - [#77449]) ([documentation](/integrations/snapcast)) + +[@luar123]: https://github.com/luar123 +[#77449]: https://github.com/home-assistant/core/pull/77449 + +{% enddetails %} + +{% details "Synology DSM" %} + +The unit conversion for all memory, storage, and network utilization-related +sensors was corrected from binary (_1024_) to decimal (_1000_) base to be in +line with the used measurement units (_eq. MB = 1.000.000 bytes_). + +You may need to update the historically recorded units for these sensors via +the statistics page under developer tools. + +([@mib1185] - [#90633]) ([documentation](/integrations/synology_dsm)) + +[@mib1185]: https://github.com/mib1185 +[#90633]: https://github.com/home-assistant/core/pull/90633 + +{% enddetails %} + +{% details "Templates" %} + +The `ensure_ascii` argument for `to_json` in Jinja templates now defaults to +`False`, allowing us to use a faster JSON encoder by default. + +This should not be an issue for most, as JSON parsers broadly accept Unicode +input. If you still need to encode Unicode characters inside JSON strings, +set `ensure_ascii` to `True` explicitly to restore the old behavior. + +([@depoll] - [#91253]) + +[@depoll]: https://github.com/depoll +[#91253]: https://github.com/home-assistant/core/pull/90863 + +{% enddetails %} + +{% details "UniFi Network" %} + +UniFi integration no longer provides both `hostname` and `host_name` attributes +for a client tracker entity. Only `host_name` will be provided as an attribute. + +([@Kane610] - [#91188]) ([documentation](/integrations/unifi)) + +[@Kane610]: https://github.com/Kane610 +[#91188]: https://github.com/home-assistant/core/pull/91188 + +{% enddetails %} + +{% details "UniFi Protect" %} + +The previous deprecated `set_doorbell_message` service has been removed. Use +the text entity for the UniFi Protect LCD screen instead. + +([@AngellusMortis] - [#91523]) ([documentation](/integrations/unifiprotect)) + +[@AngellusMortis]: https://github.com/AngellusMortis +[#91523]: https://github.com/home-assistant/core/pull/91523 + +{% enddetails %} + +{% details "Universal Devices ISY/IoX" %} + +The previously deprecated YAML configuration of the Universal Devices ISY/IoX +integration has been removed. + +Universal Devices ISY/IoX 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. + +([@shbatm] - [#91575]) ([documentation](/integrations/isy994)) + +[@shbatm]: https://github.com/shbatm +[#91575]: https://github.com/home-assistant/core/pull/91575 + +--- + +The built-in percentage unit `%` is now used for relative humidity and absolute +humidity instead of the custom units `%RH` and `%AH`, respectively. + +([@shbatm] - [#90863]) ([documentation](/integrations/isy994)) + +[@shbatm]: https://github.com/shbatm +[#90863]: https://github.com/home-assistant/core/pull/90863 + +--- + +The following custom ISY994 services have been removed: + +- `reload` +- `cleanup_entities` +- `system_query` +- `set_ramp_rate` +- `set_on_level` +- `run_network_resource` +- `set_variable` + +These services had been previously deprecated in favor of built-in services +and `number`, `select`, and `button` entities. Please update your automations +and dashboards to use the new entities and/or built-in services if you have +not already. + +([@shbatm] - [#91569]) ([documentation](/integrations/isy994)) + +[@shbatm]: https://github.com/shbatm +[#91569]: https://github.com/home-assistant/core/pull/91569 + +--- + +Dusk/Dawn nodes on Insteon Motion Sensors now have their states inverted to +correctly show "Light detected" during daylight and "No light" when the dusk +sensor is active. + +This is reversed from previous behavior. If you rely on this sensor in your +automations, they must be updated. + +([@shbatm] - [#92035]) ([documentation](/integrations/isy994)) + +[@shbatm]: https://github.com/shbatm +[#92035]: https://github.com/home-assistant/core/pull/92035 + +{% enddetails %} + +{% details "Webhooks" %} + +Two new Webhook trigger options have been added that limit how a webhook can +trigger an automation. A new _allowed_methods_ option can be used to control +which HTTP request methods can activate the trigger (`GET`, `HEAD`, `POST`, and +`PUT`). And the `local_only` option is used to allow devices outside your local +network to activate the trigger. + +Previously all webhook triggers could be activated by `HEAD`, `POST`, and `PUT` +methods from any device (local or on the internet). With the new options, only +`POST` and `PUT` are enabled by default. + +In Home Assistant Core 2023.7, any webhook trigger that does not set `local_only` +to false can only be activated by devices on the same network as Home Assistant. + +Click the gear/cog icon beside the Webhook ID to update your webhook triggers. +Then select an appropriate value for **Only accessible from the local network**. +It is necessary to deselect the option for the **Save** button to appear. Then +reselect the option if it should be enabled. This will make the repair warning +go away. + +![Screenshot shoting webhook trigger options](/images/blog/2023-05/breaking-change-webhook-triggers.png) + +See the [webhook trigger documentation](/docs/automation/trigger/#webhook-trigger) +for a description of the new options. And please review the new +[Webhook Security](/docs/automation/trigger/#webhook-security) section for best +practices when using webhook triggers. + +([@esev] - [#66494]) ([documentation](/integrations/webhook)) + +[@esev]: https://github.com/esev +[#66494]: https://github.com/home-assistant/core/pull/66494 + +{% enddetails %} + +{% details "Z-Wave" %} + +With this release, you will need to update your `zwave-js-server` instance. +You must use `zwave-js-server` 1.28.0 or greater (schema 28). + +- If you use the `Z-Wave JS` add-on, you need at least version `0.1.79`. +- If you use the `Z-Wave JS UI` add-on, you need at least version `1.11.2`. +- If you use the `Z-Wave JS UI` Docker container, you need at least version `8.14.2`. +- If you run your own Docker container or some other installation method, + you will need to update your `zwave-js-server` instance to at least `1.28.0`. + +([@raman325] - [#91989]) ([documentation](/integrations/zwave_js)) + +[@raman325]: https://github.com/raman325 +[#91989]: https://github.com/home-assistant/core/pull/91989 + +{% enddetails %} + +If you are a custom integration developer and want to learn about breaking +changes and new features available for your integration: Be sure to follow our +[developer blog][devblog]. The following are the most notable for this release: + +- [New limits for Supervisor Add-ons](https://developers.home-assistant.io/blog/2023/04/13/new_limits_for_add_ons) + +[devblog]: https://developers.home-assistant.io/blog/ + +## Farewell to the following + +The following integrations are also no longer available as of this release: + +- **Coronavirus (COVID-19)** has been removed. The data is no longer provided + by the source provider. + ([@emontnemery] - [#90934]) +- **Xbox Live** was previously deprecated and has now been removed. + The [Xbox integration] is still available. + ([@MartinHjelmare] - [#90592]) + +[@emontnemery]: https://github.com/emontnemery +[@martinhjelmare]: https://github.com/MartinHjelmare +[#90592]: https://github.com/home-assistant/core/pull/90592 +[#90934]: https://github.com/home-assistant/core/pull/90934 +[xbox integration]: /integrations/xbox + +## All changes + +Of course, there is a lot more in this release. You can find a list of +all changes made here: [Full changelog for Home Assistant Core 2023.5](/changelogs/core-2023.5) diff --git a/source/_redirects b/source/_redirects index 470319116fb..9e7e5b5c2bc 100644 --- a/source/_redirects +++ b/source/_redirects @@ -1,5 +1,10 @@ +--- +layout: null +--- + # These redirects are handled by Netlify # +{% assign recent_release_post = site.categories['Core'].first %} # General use redirects /join-chat https://discord.gg/home-assistant @@ -12,6 +17,9 @@ /issues https://github.com/home-assistant/core/issues /community https://community.home-assistant.io/ +# Link to latest release note +/latest-release-notes/ {{ recent_release_post.url }}{{ site.patch_version_notes }} 302! + # Matter workshop June 2022 /skyconnect-interest https://docs.google.com/forms/d/e/1FAIpQLScEjHSBJszUZfgO3MIDO51IHr3Oeohcs8BLpRIjY1liJ58IpA/viewform?usp=sf_link @@ -156,6 +164,10 @@ /integrations/light.group /integrations/group /integrations/media_player.group /integrations/group /integrations/notify.group /integrations/group#notify-groups +/integrations/cover.command_line /integrations/command_line#Cover +/integrations/notify.command_line /integrations/command_line#Notify +/integrations/sensor.command_line /integrations/command_line#Sensor +/integrations/switch.command_line /integrations/command_line#Switch /components/air_pollutants.* /integrations/:splat /components/air_quality.* /integrations/:splat @@ -263,6 +275,7 @@ /integrations/trace /docs/automation/troubleshooting /integrations/hassio /hassio /integrations/cloud.alexa /cloud/alexa +/integrations/imap_email_content /integrations/imap/#using-events /getting-started/automation-create-first /getting-started/automation /getting-started/automation-2 /getting-started/automation /getting-started/automation-action /docs/automation/action @@ -433,6 +446,7 @@ /integrations/bom /more-info/removed-integration 301 /integrations/ciscospark /more-info/removed-integration 301 /integrations/coinmarketcap /more-info/removed-integration 301 +/integrations/coronavirus /more-info/removed-integration 301 /integrations/crimereports /more-info/removed-integration 301 /integrations/darksky /more-info/removed-integration 301 /integrations/deutsche_bahn /more-info/removed-integration 301 @@ -525,6 +539,7 @@ /integrations/wink /more-info/removed-integration 301 /integrations/wunderground /more-info/removed-integration 301 /integrations/xbee /more-info/removed-integration 301 +/integrations/xbox_live /more-info/removed-integration 301 /integrations/xfinity /more-info/removed-integration 301 /integrations/yessssms /more-info/removed-integration 301 /integrations/yweather /more-info/removed-integration 301 diff --git a/source/assets/js/integrations-filter.js b/source/assets/js/integrations-filter.js index 71f6c19b2e3..035ab40dec1 100644 --- a/source/assets/js/integrations-filter.js +++ b/source/assets/js/integrations-filter.js @@ -123,7 +123,7 @@ // set active class on active menu item jQuery('.filter-button-group a.active').removeClass('active'); jQuery(`.filter-button-group a .check-mark`).removeAttr("checked"); - jQuery(`.filter-button-group a[href*="${hash}"]`).addClass('active'); + jQuery(`.filter-button-group a[href="${hash}"]`).addClass('active'); jQuery(`.filter-button-group a[href*="${hash}"] .check-mark`).attr("checked", "checked"); if (hash === "") { @@ -212,4 +212,4 @@ window.addEventListener('hashchange', applyFilter); applyFilter(); - })(); \ No newline at end of file + })(); diff --git a/source/blue/index.html b/source/blue/index.html index 3042895b314..7925a686254 100644 --- a/source/blue/index.html +++ b/source/blue/index.html @@ -34,6 +34,10 @@ frontpage_image: /images/frontpage/blue-frontpage.jpg The limited edition Home Assistant Blue bundle is hardware that is affordable and fast, packed in a custom-designed and gorgeous case, and powered by the most powerful home automation software on the planet: Home Assistant. + +

    Discontinued! The edition of the Blue was — limited. We are out of stock, with no plans to relaunch this edition.

    +

    Sorry you missed it. The new kid on the block is Home Assistant Yellow.

    +

    You know what else is blue, pretty, and has our logo on it? Home Assistant SkyConnect.

    diff --git a/source/changelogs/core-2023.5.markdown b/source/changelogs/core-2023.5.markdown new file mode 100644 index 00000000000..7b584236156 --- /dev/null +++ b/source/changelogs/core-2023.5.markdown @@ -0,0 +1,1624 @@ +--- +title: Full Changelog for Home Assistant Core 2023.5 +description: Detailed changelog for the Home Assistant Core 2023.5 release +--- + +These are all the changes included in the Home Assistant Core 2023.5 release. + +For a summary in a more readable format: +[Release notes blog for this release](/blog/2023/05/03/release-20235/). + +## Full Changelog + +- Add config flow to qBittorrent ([@chrisx8] - [#82560]) +- Bump version to 2023.5.0dev0 ([@frenck] - [#90477]) +- Move ProxmoxEntity to entity.py ([@dougiteixeira] - [#90480]) +- Remove callback decorators where unneeded ([@raman325] - [#90478]) +- Add config-flow to Snapcast ([@luar123] - [#80288]) +- Add reauth to frontier_silicon config flow ([@wlcrs] - [#90443]) +- Add dimmable lights support to niko home control ([@jellenijhof12] - [#90141]) +- Add Landis+Gyr MWh-readings from ultraheat-api ([@vpathuis] - [#89937]) +- Add new control4 helper function ([@nalin29] - [#90234]) +- Make hassfest.dependencies faster with multiprocessing ([@akx] - [#81486]) +- Rename hassfest \_validate_dependencies_exist ([@emontnemery] - [#90503]) +- Add preferred wind speed unit to unit systems ([@emontnemery] - [#90504]) +- Use metric units internally in Accuweather integration ([@bieniu] - [#90444]) +- Add EV charging remote services for BMW/Mini ([@rikroe] - [#88759]) +- Avoid creating a task on callback in owntracks when using mqtt ([@bdraco] - [#90548]) +- Avoid more task creation in the discovery helper ([@bdraco] - [#90552]) +- Move icon constants to entity attributes ([@epenet] - [#90518]) +- Bump PyVicare to 2.25.0 ([@oischinger] - [#90536]) +- Update ruff to v0.0.260 ([@frenck] - [#90566]) +- Add CI timeout to codecov job ([@frenck] - [#90572]) +- Update black to 23.3.0 ([@frenck] - [#90569]) +- Use more meaningful states for snapcast groups and clients ([@luar123] - [#77449]) +- Update sentry-sdk to 1.18.0 ([@frenck] - [#90571]) +- Update orjson to 3.8.9 ([@frenck] - [#90570]) +- Add attachments to simplepush ([@tymm] - [#81033]) +- Ensure numeric sensors have a valid value ([@epenet] - [#85605]) +- Move attribution constants to entity attributes ([@epenet] - [#90519]) +- Use `get_ha_sensor_data` method to update glances sensors ([@engrbm87] - [#83983]) +- Refactor vicare config_flow tests ([@oischinger] - [#90568]) +- Remove unnecessary calls to `async_update_entry` from `async_migrate_entry` ([@emontnemery] - [#90575]) +- Remove some dead code from google_assistant ([@emontnemery] - [#90581]) +- Drop **eq** dunder method from Entity ([@emontnemery] - [#90585]) +- Add ComponentProtocol to improve type checking ([@epenet] - [#90586]) +- Remove xbox_live integration ([@MartinHjelmare] - [#90592]) +- TTS: allow resolving engine and test supported options ([@balloob] - [#90539]) +- Conversation: allow getting agent info ([@balloob] - [#90540]) +- Voice Assistant: improve error handling ([@balloob] - [#90541]) +- Speed up entity filter when there are many glob matchers ([@bdraco] - [#90615]) +- Use webrcvad to detect silence in pipelines ([@synesthesiam] - [#90610]) +- Bump securetar to 2023.3.0 ([@bdraco] - [#90612]) +- Adjust context id variable names in the logbook processor to improve readability ([@bdraco] - [#90617]) +- Use async_timeout instead of asyncio.wait_for ([@starkillerOG] - [#90496]) +- Speed up backups ([@bdraco] - [#90613]) +- Cleanup some duplicate code in recorder statistics ([@bdraco] - [#90549]) +- Fix voice assistant error variable ([@balloob] - [#90658]) +- Rename Android TV to Android Debug Bridge ([@tronikos] - [#90657]) +- Reolink late review comments ([@starkillerOG] - [#90668]) +- Deprecate imap_content_sensor ([@jbouwh] - [#90429]) +- Upgrade dwd_weather_warnings dependency dwdwfsapi to 1.0.6 ([@andarotajo] - [#90683]) +- Add support for Supla garage doors ([@alh84001] - [#90593]) +- Add DHCP discovery to Obihai ([@ejpenney] - [#88984]) +- Add sort list service to Shopping List ([@mib1185] - [#90671]) +- Make service field filter parameters exclusive ([@emontnemery] - [#90728]) +- Remove the LIFX sensor update coordinator ([@Djelibeybi] - [#90740]) +- Run pipeline from audio stream function ([@balloob] - [#90748]) +- Add myself to rest code owners ([@epenet] - [#90770]) +- Add `ms` to units comment for duration sensor device class ([@raman325] - [#90757]) +- Use slots for discovery dataclasses ([@bdraco] - [#90751]) +- Bump sqlalchemy to 2.0.8 ([@bdraco] - [#90756]) +- Preliminary support for Matter cover ([@hidaris] - [#90262]) +- Add core as codeowner for stt integration ([@MartinHjelmare] - [#90777]) +- Use domain constants in rest tests ([@epenet] - [#90765]) +- Rename renault coordinator and base entity ([@epenet] - [#90760]) +- Move legacy stt ([@MartinHjelmare] - [#90776]) +- Prevent legacy device tracker from creating hundreds of executor jobs ([@bdraco] - [#90690]) +- Extract Supla base entity into its own file ([@alh84001] - [#90781]) +- Run prettier on matter fixture ([@emontnemery] - [#90784]) +- Remove legacy services from lock/services.yaml ([@emontnemery] - [#90779]) +- Fix glob expansion for partial prettier run ([@emontnemery] - [#90787]) +- Rework MQTT config merging and adding defaults ([@jbouwh] - [#90529]) +- Bump locationsharinglib to 5.0.0 ([@GuyKh] - [#90790]) +- Remove getattr for Landis+Gyr Heat Meter ([@vpathuis] - [#90637]) +- Update to goodwe v0.2.31 ([@mletenay] - [#90808]) +- Remove myself from vicare codeowners ([@oischinger] - [#90755]) +- Add names to common helper tasks ([@bdraco] - [#90803]) +- Move dwd_weather_warnings constants to separate file ([@andarotajo] - [#90810]) +- Improve type hints in calendar trigger tests ([@epenet] - [#90827]) +- Fix lingering timers in image processing tests ([@epenet] - [#90829]) +- Fix lingering timers in mailbox tests ([@epenet] - [#90830]) +- Improve the HomeKit (de)humidifier min/max humidity handling ([@stackia] - [#90854]) +- Use built-in percentage unit for ISY994 relative humidity ([@shbatm] - [#90863]) +- Fix lingering timers in sensor tests ([@epenet] - [#90856]) +- Allow import of deprecated audioop module ([@emontnemery] - [#90869]) +- Use send_json_auto_id in voice_assistant tests ([@emontnemery] - [#90857]) +- Fix lingering timers in calendar tests ([@epenet] - [#90845]) +- Switch to fnv-hash-fast from fnvhash ([@bdraco] - [#90761]) +- Android TV Remote integration ([@tronikos] - [#89935]) +- Add device name fallback if no hostname in PrusaLink ([@piitaya] - [#90831]) +- Fix lingering timer in device_tracker ([@epenet] - [#90824]) +- Bump xiaomi-ble to 0.17.0 ([@Ernst79] - [#90806]) +- Move enum mapper to own file to prevent circular dependency ([@jesserockz] - [#90890]) +- Move local calendar diagnostics to pytest.mark.freezetime ([@allenporter] - [#90886]) +- Revert "Move local calendar diagnostics to pytest.mark.freezetime" ([@bdraco] - [#90899]) +- Add entity name translations to CO2signal ([@mib1185] - [#90877]) +- Drop unused logger argument for StorageCollection() ([@emontnemery] - [#90913]) +- Rewrite mailbox tests ([@epenet] - [#90906]) +- Remove the coronavirus integration ([@emontnemery] - [#90934]) +- Allow storing other items than untyped `dict` in `StorageCollection` ([@emontnemery] - [#90932]) +- Allow TTS requests to resolve in the background ([@balloob] - [#90944]) +- Update mypy to 1.2.0 ([@cdce8p] - [#90947]) +- Add a pipeline store to voice_assistant ([@emontnemery] - [#90844]) +- Refactor handling of exposed entities for cloud Alexa and Google ([@emontnemery] - [#89877]) +- Add mysql 8.0.32 to the CI ([@bdraco] - [#90898]) +- Bump androidtvremote2 to 0.0.5 ([@tronikos] - [#90922]) +- Improve proxmoxve generic typing ([@cdce8p] - [#90948]) +- Fix lingering timer in cloud ([@epenet] - [#90822]) +- Move plant const to separate file ([@joostlek] - [#91008]) +- Disable lazy discover in xiaomi_miio ([@mrwogu] - [#82601]) +- Filtered values are no longer rounded if values are not changed/calculated ([@dgomes] - [#76164]) +- Android TV Remote: Bump androidtvremote2==0.0.7 ([@tronikos] - [#91001]) +- Handle all three operating modes in Advantage Air climate ([@Bre77] - [#91107]) +- Require a list of entity ids when fetching history ([@bdraco] - [#90992]) +- Switch back to using call_later for the slow entity update warning ([@bdraco] - [#91067]) +- Clarify HomeKit include behavior in the config flow ([@bdraco] - [#91106]) +- Reduce bond fallback polling interval when BPUP is alive ([@bdraco] - [#90871]) +- Convert tasmota discovery callback function to a normal function ([@bdraco] - [#90865]) +- Add names to homekit tasks to better track startup problems ([@bdraco] - [#90802]) +- Reduce creation of MQTT related discovery tasks ([@bdraco] - [#90801]) +- Bump transmission-rpc to 4.1.5 ([@Mic92] - [#91088]) +- Bump homematicip to 1.0.14 ([@hahn-th] - [#91140]) +- Bump Advantage Air to 0.4.2 ([@Bre77] - [#91144]) +- Bump sqlalchemy to 2.0.9 ([@bdraco] - [#91151]) +- Reduce space to store state_attributes and event_data for new MariaDB/MySQL databases ([@bdraco] - [#91150]) +- Reduce overhead of legacy database columns on new installs ([@bdraco] - [#90246]) +- Bump orjson to 3.8.10 ([@bdraco] - [#91132]) +- Voice Assistant: Require sample rate as input ([@balloob] - [#91182]) +- Fix flaky filesize tests ([@epenet] - [#91200]) +- Use tmp_path in recorder tests ([@epenet] - [#91202]) +- Remove incorrect constant usage in test ([@epenet] - [#91198]) +- Remove myself as a codeowner of the LIFX integration ([@Djelibeybi] - [#91143]) +- Fix UniFi client tracker host_name missing ([@Kane610] - [#91188]) +- Bump aioswitcher to 3.3.0 ([@regevbr] - [#91215]) +- Update spotipy to 2.23.0 ([@frenck] - [#91217]) +- Update Pillow to 9.5.0 ([@frenck] - [#91218]) +- Cleanup mqtt CONFIG_SCHEMA_ENTRY ([@jbouwh] - [#90791]) +- Make dataclasses in HA core slotted ([@rlippmann] - [#91208]) +- Voip integration ([@synesthesiam] - [#90945]) +- Fix config entry unload in withings tests ([@epenet] - [#91210]) +- Ensure entry is unloaded in azure event hub tests ([@epenet] - [#91224]) +- Avoid multiple round trips to the database for history API calls ([@bdraco] - [#91193]) +- Call sqlite pragma optimize during periodic cleanup task ([@bdraco] - [#91245]) +- Allow UI configuration of entities exposed to voice_assistant ([@emontnemery] - [#91233]) +- Catch ssl errors in rest ([@mib1185] - [#91074]) +- Add a name to the background service call tasks ([@bdraco] - [#91252]) +- Suppress CancelledError in zwave-js unload ([@epenet] - [#91222]) +- Use tmp_path in tests ([@epenet] - [#91203]) +- Use RestoreSensor in derivative ([@gjohansson-ST] - [#91071]) +- Rename MQTT entry mock and cleanup ([@jbouwh] - [#91223]) +- Run `socket.gethostbyname` in executor in Obihai and Sonos ([@farmio] - [#91190]) +- Update zwave-me-ws version to 0.4.2 ([@lawfulchaos] - [#91068]) +- Add config flow to Brottsplatskartan ([@gjohansson-ST] - [#70233]) +- Bump codecov/codecov-action from 3.1.1 to 3.1.2 (@dependabot - [#91258]) +- Bump hass-nabucasa from 0.63.1 to 0.64.1 ([@ludeeus] - [#91271]) +- Fix Lutron keypad led state always off at startup ([@mikeknoop] - [#91149]) +- Add platform state tests for vesync integration ([@chuckdeal97] - [#90466]) +- Allow multiple instances for OpenAI ([@balloob] - [#90609]) +- Allow None device_class and UOM for mqtt entities ([@jbouwh] - [#91240]) +- Add tests to honeywell ([@mkmer] - [#87209]) +- Preserves config flow information in case of error for SQL ([@dougiteixeira] - [#91142]) +- Support unknown state, position or tilt for template cover ([@jbouwh] - [#91172]) +- Add h264_v4l2m2m codec and profiles to HomeKit cameras ([@shmuelzon] - [#91246]) +- Clean up srp_energy ([@briglx] - [#86822]) +- Make hass test fixture async ([@epenet] - [#91264]) +- Update typing on recorder pool for sqlalchemy 2.0 ([@bdraco] - [#91244]) +- Add pretty printing, key sorting, and better performance to to_json in Jinja ([@depoll] - [#91253]) +- Add certificate status for cloud remote ([@ludeeus] - [#91277]) +- Dockerdev: Improve docker caching layers ([@oliv3r] - [#85186]) +- Update sentry-sdk to 1.19.1 ([@frenck] - [#91310]) +- Update coverage to 7.2.3 ([@frenck] - [#91309]) +- Fix combined translation in Pi-hole strings ([@frenck] - [#91305]) +- Raise HomeAssistant error on failed Spotify service calls ([@frenck] - [#91299]) +- Update debugpy to 1.6.7 ([@frenck] - [#91267]) +- Make auth test fixtures async ([@epenet] - [#91263]) +- Add language util ([@synesthesiam] - [#91290]) +- Add VoIP entities ([@balloob] - [#91320]) +- Pipelines to default to Home Assistant agent ([@balloob] - [#91321]) +- Bump httpx to 0.24.0 and httpcore to 0.17.0 ([@bdraco] - [#91308]) +- Adjust shutdown registration in EntityComponent ([@epenet] - [#90938]) +- Use async_write_ha_state in generic hygrostat ([@frenck] - [#91331]) +- Use async_write_ha_state in tests ([@frenck] - [#91333]) +- Fix race condition in deconz ([@epenet] - [#91328]) +- Fix lingering timers in tts ([@epenet] - [#90834]) +- Move picnic sensor definitions ([@joostlek] - [#91367]) +- Fail CI on lingering timers (part 2) ([@epenet] - [#89976]) +- Avoid task creation when calling schedule_update_ha_state without force update ([@frenck] - [#91352]) +- Warn for unneeded use of async_update_ha_state ([@frenck] - [#91372]) +- Add stt entity ([@MartinHjelmare] - [#91230]) +- Add entity name translations to Picnic ([@joostlek] - [#91362]) +- Add ability to auto-cancel track_time_interval ([@epenet] - [#91381]) +- Bump actions/checkout from 3.5.0 to 3.5.2 (@dependabot - [#91373]) +- Fix incorrect warn of async_update_ha_state use ([@frenck] - [#91387]) +- Rename voice_assistant to assist_pipeline ([@emontnemery] - [#91371]) +- Improve performance of sums in the energy dashboard ([@bdraco] - [#91342]) +- Fix lingering timers in flux_led ([@epenet] - [#91379]) +- ESPHome voice assistant ([@jesserockz] - [#90691]) +- Fix lingering timers in analytics ([@epenet] - [#91363]) +- Fix lingering timer in EntityRegistryDisabledHandler ([@epenet] - [#91376]) +- Support Sonos announcements using websockets ([@jjlawren] - [#91145]) +- Do not allow mqtt lights to set brightness to zero ([@jbouwh] - [#91296]) +- Rename Particulate matter sensors to PM ([@frenck] - [#91384]) +- Allow GET in webhook triggers ([@swiergot] - [#56446]) +- Add webhook trigger allowed_methods/local_only options ([@esev] - [#66494]) +- Bump accuweather to version 0.5.1 ([@bieniu] - [#91412]) +- Remove duplicate webhook test ([@epenet] - [#91420]) +- Delete obsolete lines and add some missing type hints in OpenTherm Gateway integration ([@PatrickGlesner] - [#90530]) +- Add slots to dataclasses in default_config ([@rlippmann] - [#91410]) +- History API entity_id validation ([@flip-dots] - [#90067]) +- Bump yalexs to 1.3.0 ([@bdraco] - [#91431]) +- Add ability to shutdown a Debouncer ([@epenet] - [#91439]) +- Improve performance of tracking time changes ([@bdraco] - [#91433]) +- Use fast path for track_time_change that fires every second ([@bdraco] - [#91432]) +- Ensure recorder always attempts clean shutdown if recorder thread raises ([@bdraco] - [#91261]) +- Remove combined translations in integrations ([@epenet] - [#91337]) +- Update screenshot of featured integrations ([@joostlek] - [#91345]) +- Support marking an assist pipeline as preferred ([@emontnemery] - [#91418]) +- Improve async_track_point_in_time ([@epenet] - [#91451]) +- Improve tests subscribe connection for mqtt status ([@jbouwh] - [#91463]) +- Add option to select list of accepted ssl ciphers in httpx client ([@mib1185] - [#91389]) +- Add ssl_cipher_list option to rest ([@mib1185] - [#91078]) +- Fix error for when column does not exist in query to SQL ([@dougiteixeira] - [#91166]) +- Fix lingering timer in samsungtv ([@epenet] - [#91450]) +- Bump nextdns to version 1.4.0 ([@bieniu] - [#91490]) +- Remove `ozone` state attribute and `ozone` sensors from Accuweather ([@bieniu] - [#91492]) +- Streamline todoist test fixtures ([@allenporter] - [#91405]) +- Fix lingering timer in buienradar ([@epenet] - [#91378]) +- Automatically retry lost/timed out LIFX requests ([@bdraco] - [#91157]) +- Update pytest to 7.3.1 ([@frenck] - [#91497]) +- Expose ping drop rate Starlink sensor ([@boswelja] - [#91444]) +- Continue recording events until final write ([@bdraco] - [#91260]) +- Add dhcp ip update support to onvif ([@bdraco] - [#91474]) +- Bump aioruuvigateway to 0.1.0 ([@bdraco] - [#91512]) +- Bump TP-Link Omada API to enforce minimum controller version ([@MarkGodwin] - [#91498]) +- Bump bluetooth-data-tools to 0.4.0 ([@bdraco] - [#91442]) +- Use bluetooth data tools for address conversion in esphome ([@bdraco] - [#91443]) +- Add MyPlace support to Advantage Air ([@Bre77] - [#91108]) +- Add Synology Photos support ([@lodesmets] - [#86894]) +- Bump Advantage Air to 0.4.4 ([@Bre77] - [#91147]) +- Add a data model to Advantage Air ([@Bre77] - [#91519]) +- VoIP: Add is active call binary sensor ([@balloob] - [#91486]) +- Add RAPT Bluetooth integration ([@sairon] - [#87872]) +- Remove deprecated set_doorbell_message UniFi Protect service ([@AngellusMortis] - [#91523]) +- ESPHome: Use existing property with generated signal string ([@jesserockz] - [#91525]) +- Prevent combined translations in strings.json ([@epenet] - [#91334]) +- Handle invalidated Plex token ([@jjlawren] - [#91438]) +- Update pyfibaro to 0.7.0 ([@rappenze] - [#91510]) +- Default homekit to listening on all interfaces to match Home Assistant behavior ([@bdraco] - [#91520]) +- Add monessen virtual integration for Intellifire ([@jeeftor] - [#89315]) +- Build protobuf upb wheels ([@bdraco] - [#90812]) +- Enable strict typing of assist_pipeline ([@emontnemery] - [#91529]) +- Fix lingering timer in alert integration ([@epenet] - [#91452]) +- Fix lingering timers in sia tests ([@epenet] - [#91407]) +- Change entity category of IR light setting from control to config ([@krazos] - [#91382]) +- Add core as codeowner to tts ([@MartinHjelmare] - [#91539]) +- Fix incorrect regex in translation script ([@epenet] - [#91536]) +- Update pip constraint to allow for pip 23.1 ([@frenck] - [#91535]) +- SQL strings update db_url ([@gjohansson-ST] - [#91537]) +- Add more rule parsers to onvif ([@bdraco] - [#91533]) +- Update Todoist all day event handling following best practices ([@allenporter] - [#90491]) +- Update cryptography to 40.0.2 ([@frenck] - [#91528]) +- Allow config entries unload action to be coroutine ([@epenet] - [#91531]) +- Don't reload integration for AuthError in Honeywell ([@mkmer] - [#91228]) +- Remove PipelineEvent.as_dict ([@emontnemery] - [#91546]) +- Make it non-optional to implement supported_languages in tts.Provider ([@emontnemery] - [#91347]) +- Add WS API for debugging previous assist_pipeline runs ([@emontnemery] - [#91541]) +- Move legacy tts ([@MartinHjelmare] - [#91538]) +- Allow picking a pipeline for voip devices ([@balloob] - [#91524]) +- Create base TriggerEntity ([@gjohansson-ST] - [#91128]) +- Make tts/stt/conversation optional on pipeline ([@bramkragten] - [#91555]) +- Add WS API to `stt` ([@emontnemery] - [#91329]) +- Bump intents dependency ([@synesthesiam] - [#91556]) +- Add WS API to tts ([@emontnemery] - [#91330]) +- Make Debouncer shutdown async ([@epenet] - [#91542]) +- Fix history stats query using incorrect microseconds ([@bdraco] - [#91250]) +- Remove previously deprecated ISY994 services ([@shbatm] - [#91569]) +- Fix pipeline select ([@bramkragten] - [#91570]) +- Remove duplicate code in update coordinator ([@epenet] - [#91573]) +- ESPHome binary sensor representing assist pipeline running ([@jesserockz] - [#91406]) +- Remove previously deprecated ISY994 YAML support ([@shbatm] - [#91575]) +- ESPHome select for assist pipeline selection ([@jesserockz] - [#91526]) +- VoIP audio queue ([@synesthesiam] - [#91577]) +- Use language util in stt/tts ([@synesthesiam] - [#91521]) +- Use cache to lookup event type ids in logbook ([@bdraco] - [#91576]) +- EasyEnergy: Add two additional sensors to help pick the best hours ([@sstriker] - [#90543]) +- Dynamically size recorder max backlog based on available memory ([@bdraco] - [#90894]) +- Cleanup MQTT platform set up and discovery start ([@jbouwh] - [#91007]) +- Bump hass-nabucasa to 0.65.0 ([@balloob] - [#91565]) +- Improve comment in conversation ([@emontnemery] - [#91595]) +- Remove check on remove deprecated call back for mqtt subscribe ([@jbouwh] - [#91464]) +- Add timestamp to pipeline runs ([@emontnemery] - [#91599]) +- Use the preferred assist pipeline if none was specified ([@emontnemery] - [#91611]) +- Drop language parameter from async_get_pipeline ([@emontnemery] - [#91612]) +- Add ability to shutdown update coordinator ([@epenet] - [#91456]) +- Remove webhook translation file ([@epenet] - [#91616]) +- Add property `supported_languages` to `AbstractConversationAgent` ([@emontnemery] - [#91588]) +- Support both stt entity and legacy providers ([@synesthesiam] - [#91633]) +- Make repairs out of select supervisor issues ([@mdegat01] - [#90893]) +- Add config flow to Workday ([@gjohansson-ST] - [#72558]) +- Add wyoming integration with stt ([@synesthesiam] - [#91579]) +- Add async_get_supported_voices to tts.Provider ([@emontnemery] - [#91649]) +- Refactor LastFM to use shorthand attributes ([@joostlek] - [#91606]) +- Move Steam Entity to separate file ([@joostlek] - [#91630]) +- Make context a mandatory parameter for async_pipeline_from_audio_stream ([@emontnemery] - [#91658]) +- Refactor ZHA ([@dmulcahey] - [#91476]) +- Refactor conversation agent WS API for listing agents ([@emontnemery] - [#91590]) +- Adjust typing of AbstractConversationAgent.supported_languages ([@emontnemery] - [#91648]) +- Add assist_pipeline to default_config ([@emontnemery] - [#91651]) +- Cleanup device handles on ZHA controller shutdown ([@epenet] - [#91591]) +- Add test for WS conversation/agent/info ([@emontnemery] - [#91652]) +- Add test coverage for bluetooth devices being rediscoverable after they go unavailable ([@bdraco] - [#91645]) +- Update bluetooth debug logging for newer bleak ([@bdraco] - [#91643]) +- Add test case for matching the shelly button ([@bdraco] - [#91642]) +- Allow complex schemas for validating WS commands ([@emontnemery] - [#91655]) +- Fix lingering timer in SinopeTechnologiesThermostat ([@epenet] - [#91681]) +- Fix lingering timer in ZHA light transition ([@epenet] - [#91683]) +- Fix lingering timer in ZHA debouncers ([@epenet] - [#91685]) +- Fix lingering timer in ZHA tests ([@epenet] - [#91688]) +- Fix lingering timer in unifiprotect discovery ([@epenet] - [#91695]) +- Fix lingering timer in ZHA cluster tests ([@epenet] - [#91693]) +- Detect eero brand for Thread ([@balloob] - [#91699]) +- Fix from feedback on supervisor issues to repairs ([@mdegat01] - [#91680]) +- Remove legacy context lookup implementation from logbook ([@bdraco] - [#91710]) +- Make sure MQTT client is available when starting depending platforms ([@jbouwh] - [#91164]) +- Update Home Assistant base image to 2023.04.0 ([@frenck] - [#91720]) +- Fix lingering timers in bluetooth (part 2) ([@epenet] - [#91674]) +- Add missing callback decorator on StorageCollectionWebsocket.ws_list_item ([@emontnemery] - [#91727]) +- Add WS API for listing languages supported by a full assist pipeline ([@emontnemery] - [#91669]) +- Include matching languages in WS tts/engine/list ([@emontnemery] - [#91732]) +- Include matching languages in WS stt/engine/list ([@emontnemery] - [#91731]) +- Include matching languages in WS conversation/agent/list ([@emontnemery] - [#91730]) +- Test specifying pipeline in calls to async_pipeline_from_audio_stream ([@emontnemery] - [#91739]) +- Rename HomeKit to HomeKit Bridge ([@frenck] - [#91741]) +- Add WS command for getting an assist pipeline ([@emontnemery] - [#91725]) +- Add new Roborock Integration ([@Lash-L] - [#89456]) +- Add additional parameters to assist pipelines ([@emontnemery] - [#91619]) +- Fix lingering timers in bluetooth (part 1) ([@epenet] - [#91673]) +- Fix assist_pipeline tests ([@emontnemery] - [#91757]) +- Add pjlink const ([@HarlemSquirrel] - [#91749]) +- Prefer country over language family + MATCH_ALL ([@synesthesiam] - [#91753]) +- Add Supervisor add-on discovery to Wyoming integration ([@frenck] - [#91761]) +- Fix wallbox tests ([@epenet] - [#91752]) +- Update URLs forwarding to HA blog posts ([@DutchDeffy] - [#91698]) +- Fix lingering timer in hassio ([@epenet] - [#91702]) +- Fix lingering timer in netatmo ([@epenet] - [#91728]) +- Bump asyncsleepiq lib to 1.3.3 ([@kbickar] - [#91772]) +- VoIP listening tone and "not configured" message ([@synesthesiam] - [#91762]) +- Bump recommended esphome version to 2023.4.0 for bluetooth ([@bdraco] - [#91509]) +- Bump aioesphomeapi to 13.7.1 ([@bdraco] - [#91783]) +- Add tts entity ([@MartinHjelmare] - [#91692]) +- Bump arcam-fmj to 1.3.0 ([@kernelpanic85] - [#91747]) +- Update ruff to v0.0.262 ([@frenck] - [#91767]) +- Update sentry-sdk to 1.20.0 ([@frenck] - [#91771]) +- Load quirks in ZHA unit tests ([@puddly] - [#91779]) +- Bump dbus-fast to 1.85.0 ([@bdraco] - [#91784]) +- Ensure dependencies are awaited correctly when setting up integrations ([@jbouwh] - [#91454]) +- Let MQTT availability for `snips` be managed by dependencies ([@jbouwh] - [#91790]) +- Build wheels for CPython ABI cp311 ([@frenck] - [#91736]) +- Shutdown coordinator on entry unload ([@epenet] - [#91748]) +- Remove libexecinfo-dev package from Wheels jobs ([@frenck] - [#91798]) +- Bump actions/setup-python from 4.5.0 to 4.6.0 (@dependabot - [#91792]) +- Bump codecov/codecov-action from 3.1.2 to 3.1.3 (@dependabot - [#91791]) +- Update pysiaalarm to 3.1.0 ([@eavanvalkenburg] - [#91500]) +- Bump openwrt-luci-rpc version to 1.1.16 ([@mzdrale] - [#91358]) +- Fix lingering timer in discovery ([@epenet] - [#91804]) +- Update psutil to 5.9.5 ([@frenck] - [#91807]) +- Update opencv-python-headless to 4.7.0.72 ([@frenck] - [#91802]) +- Use Selectors for waze_travel_time flows ([@eifinger] - [#91778]) +- Fix lingering timer in usb ([@epenet] - [#91800]) +- Fix lingering timer in todoist ([@epenet] - [#91808]) +- Fix lingering timer in tplink ([@epenet] - [#91806]) +- Fix lingering timer in traccar ([@epenet] - [#91812]) +- Fix lingering timer in smartthings tests ([@epenet] - [#91697]) +- Bump pyeconet to 0.1.20 ([@CodingSquirrel] - [#90950]) +- Add type hints to broadlink device/heartbeat ([@epenet] - [#91737]) +- Clean up gateway logic from Plugwise ([@frenck] - [#91769]) +- Follow up on comments on changes bootstrap tests ([@jbouwh] - [#91803]) +- Bump `aionotion` to 2023.04.2 to address imminent API change ([@bachya] - [#91786]) +- Add name to tts voices ([@emontnemery] - [#91814]) +- Speed up LazyEventPartialState for logbook ([@bdraco] - [#91840]) +- Speed up sql queries where ORM rows are not needed ([@bdraco] - [#91839]) +- Bump sense_energy to 0.11.2 ([@bdraco] - [#91836]) +- Remove unreachable code in mqtt integration discovery ([@jbouwh] - [#91796]) +- Bump plugwise to v0.31.0 ([@bouwew] - [#91831]) +- Improve comment on patching the \_import method in test bootstrap dependencies test ([@jbouwh] - [#91848]) +- Speed up processing binary columns on SQLite/MariaDB/MySQL ([@bdraco] - [#91818]) +- Add tests mqtt light with single supported color_mode ([@jbouwh] - [#91811]) +- Reolink doorbell extend features ([@starkillerOG] - [#90469]) +- Add a negative cache to the recorder event type manager ([@bdraco] - [#91770]) +- Reduce number of columns when selecting attributes for history ([@bdraco] - [#91717]) +- Reduce number of columns selected for logbook ([@bdraco] - [#91718]) +- Add more PrusaLink sensors ([@5n8ke] - [#80424]) +- Update YARL to 1.9.1 ([@frenck] - [#91852]) +- CI: Add automatic retries to codecov upload action ([@frenck] - [#91857]) +- Add air quality sensors to Accuweather integration ([@bieniu] - [#91516]) +- Refactor SnapshotAssertion is SFR Box ([@epenet] - [#90775]) +- Use SnapshotAssertion in 1-wire tests ([@epenet] - [#90782]) +- Several changes to Wheels building for the cp311 ABI ([@frenck] - [#91850]) +- Add webhook support to onvif ([@bdraco] - [#91485]) +- Bump whirlpool-sixth-sense to 0.18.3 ([@mkmer] - [#91859]) +- Substate will never be None when subscribing mqtt topics ([@jbouwh] - [#91856]) +- Bump tplink-omada-client to 1.2.4 ([@MarkGodwin] - [#91853]) +- Add new parental control switches for NextDNS ([@bieniu] - [#91507]) +- Updated list of supported voices in Watson TTS integration ([@rutkai] - [#91458]) +- Update xknx to 2.9.0 ([@farmio] - [#91282]) +- Conversation list command to support match-all languages agents ([@balloob] - [#91844]) +- Bump pyunifiprotect to 4.8.2 ([@AngellusMortis] - [#91861]) +- Update Egardia to support more devices ([@tristangrichard] - [#91430]) +- Add device_trackers attribute to person entities ([@depoll] - [#91312]) +- Create repair issue if Sonos subscriptions fail ([@jjlawren] - [#87437]) +- Add diagnostics to PI-Hole ([@mib1185] - [#91383]) +- Wheels: Don't build azure-servicebus on cp311 ([@frenck] - [#91862]) +- CI: Cancel concurrent Wheel jobs ([@frenck] - [#91867]) +- Add events to BTHome ([@Ernst79] - [#91691]) +- Correct unit of measurement for Synology DSM sensors ([@mib1185] - [#90633]) +- Fix lingering timer in wiz ([@epenet] - [#91745]) +- Fix lingering timer in yeelight SSDP discovery ([@epenet] - [#91694]) +- Add entity name translations to Supervisor ([@mib1185] - [#90937]) +- Ensure config entries are unloaded in tests ([@epenet] - [#90850]) +- Add missing ViCare diagnostics tests ([@epenet] - [#90821]) +- Wheels: Don't build beacontools on cp311 ([@frenck] - [#91868]) +- Bump locationsharinglib to 5.0.1 ([@cirrusblau] - [#91259]) +- Wheels: Don't build opencv-python-headless on cp311 ([@frenck] - [#91872]) +- Skip adding WeMo device on failure ([@esev] - [#91621]) +- Add Anova integration ([@Lash-L] - [#86254]) +- Revert "Update opencv-python-headless to 4.7.0.72" ([@frenck] - [#91871]) +- Mark onvif events as stale when the subscription renewal fails ([@bdraco] - [#91567]) +- Add run-name for workflow_dispatch runs [ci] ([@cdce8p] - [#91873]) +- Raise an exception when trying to save camera snapshots to a not allowed path ([@bdraco] - [#91869]) +- Handle 404 for media/ptz/image onvif services to allow setup to proceed ([@bdraco] - [#91875]) +- Add balance entity for Sonos speakers ([@pyos] - [#85205]) +- Ensure onvif retries setup if camera fails to respond correctly ([@bdraco] - [#91866]) +- Add entity name translations to KNX system sensors ([@farmio] - [#91396]) +- Use configured voice in TTS output for assist pipeline ([@balloob] - [#91878]) +- Rename raw audio files to .pcm ([@synesthesiam] - [#91879]) +- Ensure .pcm binary files do not have line endings changed ([@synesthesiam] - [#91881]) +- Add a VoIP user ([@balloob] - [#91884]) +- Improve notion generic typing ([@cdce8p] - [#91883]) +- Bump ulid-transform to 0.7.0 ([@bdraco] - [#91888]) +- Update pylint to 2.17.2 ([@cdce8p] - [#91894]) +- HA deconz: Add support for Tuya Smart Air Housekeeper 6in1 Air Quality Monitor ([@m4k2k] - [#87866]) +- Wheels: Disable Pandas for Python 3.11 on armhf ([@frenck] - [#91898]) +- Assist pipeline to use configured values ([@balloob] - [#91901]) +- Wyoming tts ([@synesthesiam] - [#91712]) +- Add NUT device actions ([@pestevez] - [#80986]) +- Wheels: Fix typo in env_canada dep for armhf ([@frenck] - [#91918]) +- Bump zeroconf to 0.58.0 ([@bdraco] - [#91917]) +- Suppress events for tns1:MediaControl/VideoEncoderConfiguration with onvif ([@bdraco] - [#91916]) +- Fix migration with negative event type cache ([@bdraco] - [#91910]) +- Avoid creating onvif switches on unsupported devices ([@bdraco] - [#91907]) +- Remove duplicate name from Wyoming TTS entity ([@balloob] - [#91930]) +- Add processing tone ([@synesthesiam] - [#91931]) +- Cleanup onvif topic before lookup ([@bdraco] - [#91914]) +- Remove deprecated async_get_registry ([@bdraco] - [#91928]) +- Allow entity names for STT entities ([@balloob] - [#91932]) +- Remove deprecated async_setup_platforms ([@bdraco] - [#91929]) +- Add MQTT fan direction support ([@rubenbe] - [#91700]) +- Remove unneeded pygatt package from machine builds ([@frenck] - [#91940]) +- Bump Pylast to 5.1.0 ([@joostlek] - [#91909]) +- Don't resolve default stt engine in assist pipelines ([@emontnemery] - [#91936]) +- Ensure onvif can still be unloaded if camera fails to unsubscribe ([@bdraco] - [#91887]) +- Add guards to onvif for when the PullPoint to Webhook url changes ([@bdraco] - [#91886]) +- Add fallback to device zone time or no timezone to onvif when setting time fails ([@bdraco] - [#91882]) +- Don't resolve default tts engine in assist pipelines ([@emontnemery] - [#91943]) +- Improve error reporting in onvif in config flow ([@bdraco] - [#91876]) +- Add rule parser for onvif LineDetector and CountAggregation ([@bdraco] - [#91885]) +- Add cipher list option to IMAP config flow ([@jbouwh] - [#91896]) +- Cleanup unreachable code where device_entry will never be None on an update event ([@jbouwh] - [#91855]) +- Add Vacuum test for Roborock ([@Lash-L] - [#91870]) +- Fix zh Hant/Hans ([@synesthesiam] - [#91390]) +- Suppress pylint error related to audioop deprecation ([@emontnemery] - [#91950]) +- Correct entity categories in AVM FRITZ!SmartHome ([@mib1185] - [#91073]) +- Fix typo in powerwall strings ([@bdraco] - [#91956]) +- Elmax -Handle 422 busy error with a retry approach ([@albertogeniola] - [#91926]) +- Dependency upgrade to forecast-solar 3.0.0 ([@koleo9am] - [#91951]) +- Wait for TTS before restarting pipeline ([@synesthesiam] - [#91962]) +- Create a default assist pipeline on start ([@emontnemery] - [#91947]) +- Use order in preferred regions list ([@synesthesiam] - [#91959]) +- Bump yalexs to 1.3.2 ([@bdraco] - [#91963]) +- Add mopping abilities to Roborock ([@Lash-L] - [#91766]) +- Bump aiounifi to v47 ([@Kane610] - [#91966]) +- Bump home-assistant-bluetooth to 1.10.0 ([@bdraco] - [#91977]) +- Ensure logbook still responds if describe event throws ([@bdraco] - [#91961]) +- Play pre-recorded message if pipeline is misconfigured ([@synesthesiam] - [#91985]) +- Bump ZHA dependencies ([@puddly] - [#91969]) +- Include UUID in hassio discovery data ([@emontnemery] - [#91970]) +- Follow the unavailability of the source sensor ([@dgomes] - [#91975]) +- Remove unused attributes in EDL21 integration ([@StephanU] - [#91922]) +- Move TriggerBaseEntity into helpers ([@gjohansson-ST] - [#91945]) +- Support for multiple contracts in Prosegur ([@dgomes] - [#89097]) +- Elmax/sensors improvements ([@albertogeniola] - [#74323]) +- Bump sqlalchemy to 2.0.10 ([@bdraco] - [#91982]) +- Bump asyncsleepiq lib to 1.3.4 ([@ClayBenson94] - [#91860]) +- Remove fuzzy language matching from stt and tts ([@emontnemery] - [#92002]) +- Add check on disarm code for Alarm Control Panel - Elmax ([@albertogeniola] - [#91158]) +- Fix cloud connected signal only firing once ([@emontnemery] - [#92009]) +- Tweak a couple of `stt` and `tts` related asserts ([@emontnemery] - [#92012]) +- Add reauth to onvif ([@bdraco] - [#91957]) +- Update tibber lib to 0.27.1 ([@Danielhiversen] - [#92016]) +- Bump hass-nabucasa from 0.65.0 to 0.66.1 ([@ludeeus] - [#92020]) +- Fix timezone issue ([@vingerha] - [#92005]) +- Use addon uuid as wyoming config entry unique id ([@emontnemery] - [#92008]) +- Fix comment typos ([@davet2001] - [#92021]) +- Bump zwave-js-server-python to 0.48.0 ([@raman325] - [#91989]) +- Fall back to domain for conversation agents without title ([@emontnemery] - [#92014]) +- Enable open,close,stop device actions for all covers ([@mvdwetering] - [#92006]) +- Do not reload Shelly TRV config entry ([@bieniu] - [#92000]) +- Clean up tts fixtures ([@MartinHjelmare] - [#92025]) +- Only expose MQTT advanced settings in advanced mode ([@jbouwh] - [#91996]) +- Add note for using xfail on test for mqtt_statestream ([@jbouwh] - [#91999]) +- Add camera platform to Freebox ([@nachonam] - [#88104]) +- Invert ISY994 dusk/dawn sensors to match expected state ([@shbatm] - [#92035]) +- ISY994 remove value when calling open cover with no position ([@shbatm] - [#92036]) +- Clean up default ZHA entity names ([@puddly] - [#91841]) +- Bump yalexs-ble to 2.1.16 ([@bdraco] - [#92034]) +- Automaticially create an assist pipeline using cloud stt + tts ([@emontnemery] - [#91991]) +- Add button entities to manually idle zwave notification values ([@raman325] - [#91446]) +- Allow numbers in TTS engine part of cache key ([@synesthesiam] - [#92031]) +- Time out TTS based on audio length ([@synesthesiam] - [#92032]) +- Bump aioesphomeapi to 13.7.2 ([@bdraco] - [#92027]) +- Bump zeroconf to 0.58.2 ([@bdraco] - [#92049]) +- Allow UniFi control PoE passthrough properly ([@Kane610] - [#92028]) +- Set forecast-solar energy sensor's units of measurement to Wh ([@koleo9am] - [#92022]) +- Only check support_entry_unload/support_remove_from_device once ([@bdraco] - [#92041]) +- Bump hass-nabucasa from 0.66.1 to 0.66.2 ([@ludeeus] - [#92054]) +- Small cleanups to bluetooth internals ([@bdraco] - [#92045]) +- Remove cloud assist pipeline setup from cloud client ([@emontnemery] - [#92056]) +- Make assist_pipeline an after dependency of cloud ([@emontnemery] - [#92057]) +- Fix typo in Nextcloud YAML deprecation message ([@farmio] - [#92060]) +- Fix tts add-on discovery for Wyoming ([@frenck] - [#92064]) +- Tweak response of /api/cloud/login ([@emontnemery] - [#92058]) +- Fail TTS tests if default TTS cache dir exists ([@emontnemery] - [#92023]) +- Add today's remaining production estimate ([@koleo9am] - [#91965]) +- Add LED settings support to Home Assistant Yellow ([@emontnemery] - [#86451]) +- Add codeowner for imap integration ([@jbouwh] - [#92067]) +- Add assist pipeline and language selectors ([@bramkragten] - [#92030]) +- Ensure lutron_caseta logbook platform does not raise when integration is not loaded ([@bdraco] - [#91978]) +- Retry creating esphome update entities later if dashboard is unavailable ([@bdraco] - [#92042]) +- Teach switch_as_x about exposed entities ([@emontnemery] - [#92059]) +- Ensure device_automation can handle RequirementsNotFound ([@bdraco] - [#92037]) +- Fix large imap_content event warning by truncating the email text body to 2 KiB ([@jbouwh] - [#92066]) +- Revert "Fail TTS tests if default TTS cache dir exists (#92023)" ([@frenck] - [#92079]) +- Update frontend to 20230426.0 ([@bramkragten] - [#92074]) +- Fix Matter cover deviceclass and inverted position ([@marcelveldt] - [#92063]) +- Allow the ZHA default light transition time to be configured as a float ([@puddly] - [#92075]) +- Add a warning step to ZHA's config flow to advise against some radios ([@puddly] - [#92078]) +- Remove bridged matter devices when matter bridge is removed ([@ArturoGuerra] - [#91995]) +- Set pipeline_id from pipeline select ([@jesserockz] - [#92085]) +- ESPHome voice assistant: Version 2 - Stream raw tts audio back to device for playback ([@jesserockz] - [#92052]) +- Bump intents to 2023.4.26 ([@synesthesiam] - [#92070]) +- Add a channel changing API to ZHA ([@puddly] - [#92076]) +- Remove name attribute from transmission services manifest ([@avee87] - [#92083]) +- Update YARL to 1.9.2 ([@frenck] - [#92086]) +- Fix reconfigure by SSDP or Zeroconf discovery in Synology DSM ([@mib1185] - [#92088]) +- Fix capitalization names Assist entities ([@balloob] - [#92098]) +- Use pipeline ID in event ([@balloob] - [#92100]) +- Fix vizio integration_type ([@raman325] - [#92103]) +- Avoid exposing unsupported entities to Google Assistant ([@emontnemery] - [#92105]) +- Avoid exposing unsupported entities to Alexa ([@emontnemery] - [#92107]) +- Fix frontier_silicon not retrying setup and missing strings ([@wlcrs] - [#92111]) +- Add WS command cloud/alexa/entities/get ([@emontnemery] - [#92121]) +- Update frontend to 20230427.0 ([@piitaya] - [#92123]) +- Bump sqlalchemy to 2.0.11 to fix a critical regression with postgresql ([@bdraco] - [#92126]) +- Add add-on discovery URL and title to Wyoming integration ([@frenck] - [#92129]) +- Bump roborock to 0.8.1 for beta fixes ([@Lash-L] - [#92131]) +- Fix options flow Workday ([@gjohansson-ST] - [#92140]) +- Fix ZHA startup failure with the Konke button ([@puddly] - [#92144]) +- Ensure purge can cleanup old format detached states in the database ([@bdraco] - [#92145]) +- Fix ignored apple tvs being scanned over and over ([@bdraco] - [#92150]) +- Bump Roborock to 0.8.3 ([@Lash-L] - [#92151]) +- Properly resolve `media_source` URLs for Sonos announcements ([@jjlawren] - [#92154]) +- Keep expose setting in sync for assist ([@emontnemery] - [#92158]) +- Bump pyvizio to 0.1.61 ([@raman325] - [#92161]) +- Upgrade lakeside to 0.13 ([@nkgilley] - [#92173]) +- Fix ZHA device triggers ([@dmulcahey] - [#92186]) +- Fix mqtt subscribe debouncer initial delay too long when birth message is disabled ([@jbouwh] - [#92188]) +- Update frontend to 20230428.0 ([@piitaya] - [#92190]) +- Add missing PRESET_MODE feature to BAF fans ([@jfroy] - [#92200]) +- Fix missing preset_mode feature in bond fans ([@bdraco] - [#92202]) +- Move BMW Target SoC to number platform ([@rikroe] - [#91081]) +- Revert "Add silent option for DynamicShutter (ogp:Shutter) in Overkiz" ([@iMicknl] - [#91354]) +- Turn AVM FRITZ!Box Tools call deflection switches into coordinator entities ([@mib1185] - [#91913]) +- Fix solaredge-local protobuf exception ([@rajeevan] - [#92090]) +- Fix Insteon scenes with disabled entities ([@teharris1] - [#92137]) +- Bump `sonos-websocket` to 0.1.0 ([@jjlawren] - [#92209]) +- Bump env_canada to 0.5.34 ([@michaeldavie] - [#92216]) +- Add more detail to invalid rrule calendar error message ([@allenporter] - [#92222]) +- Fix history YAML deprecation ([@frenck] - [#92238]) +- Fix unknown/unavailable source sensor in Filter entities ([@frenck] - [#92241]) +- Bump plugwise to v0.31.1 ([@bouwew] - [#92249]) +- Bump pyunifiprotect to 4.8.3 ([@bdraco] - [#92251]) +- Pin `pyasn1` and `pysnmplib` since `pyasn1` 0.5.0 has breaking changes and `pysnmp-pyasn1` and `pyasn1` are both using the `pyasn1` namespace ([@bdraco] - [#92254]) +- Handle onvif errors when detail is returned as bytes ([@bdraco] - [#92259]) +- Add VoIP error tone ([@synesthesiam] - [#92260]) +- Fix Google Mail Sensor key error ([@tkdrob] - [#92262]) +- Fix MQTT certificate files setup ([@jbouwh] - [#92266]) +- Fix call deflection update in Fritz!Tools ([@mib1185] - [#92267]) +- Auto repair incorrect collation on MySQL schema ([@bdraco] - [#92270]) +- Handle AttributeError from wrong port in ONVIF config flow ([@bdraco] - [#92272]) +- Fix august lock state when API reports locking and locked with the same timestamp ([@bdraco] - [#92276]) +- Bump pynina to 0.3.0 ([@DeerMaximum] - [#92286]) +- Add missing fstrings in Local Calendar ([@tkdrob] - [#92288]) +- Prevent pysnmp from being installed as it does not work with newer python ([@bdraco] - [#92292]) +- Bump beacontools to fix conflict with construct<2.10 and >=2.8.16 ([@bdraco] - [#92293]) +- Bump bleak to 0.20.2 ([@bdraco] - [#92294]) +- Ensure onvif webhook can be registered ([@bdraco] - [#92295]) +- Fix mqtt not available when starting snips ([@jbouwh] - [#92296]) +- Allow configuring SIP port in VoIP ([@synesthesiam] - [#92210]) +- Reduce size of migration transactions to accommodate slow/busy systems ([@bdraco] - [#92312]) +- Retry onvif setup when it is unexpectedly cancelled ([@bdraco] - [#92313]) +- Bump sqlalchemy to 2.0.12 ([@bdraco] - [#92315]) +- Fix db_url issue in SQL ([@gjohansson-ST] - [#92324]) +- Add voip configuration url ([@balloob] - [#92326]) +- Don't poll ZHA electrical measurement sensors unnecessarily ([@dmulcahey] - [#92330]) +- Avoid starting ONVIF PullPoint if the camera reports its unsupported ([@bdraco] - [#92333]) +- Bump voip-utils to 0.0.6 ([@synesthesiam] - [#92334]) +- Update frontend to 20230501.0 ([@bramkragten] - [#92339]) +- Increase default timeout in sense ([@jpettitt] - [#90556]) +- Bump ulid-transform to 0.7.2 ([@bdraco] - [#92344]) +- Clean up zwave_js.cover ([@raman325] - [#92353]) +- Start onvif events later ([@bdraco] - [#92354]) +- Allow exposing entities not in the entity registry to assistants ([@emontnemery] - [#92363]) +- Update frontend to 20230502.0 ([@bramkragten] - [#92373]) +- Fix deserialize bug + add test coverage ([@balloob] - [#92382]) +- Bump pybravia to 0.3.3 ([@Drafteed] - [#92378]) +- Add ZHA binding for window coverings ([@repaxan] - [#92387]) +- Improve exposed entities tests ([@emontnemery] - [#92389]) +- Don't use storage collection helper in ExposedEntities ([@emontnemery] - [#92396]) +- Allow exposing any entity to the default conversation agent ([@emontnemery] - [#92398]) +- Bump ZHA quirks ([@dmulcahey] - [#92400]) +- Update frontend to 20230503.0 ([@bramkragten] - [#92402]) +- Allow setting google disable 2fa flag on any entity ([@emontnemery] - [#92403]) +- Handle webhook URL rejection in onvif ([@bdraco] - [#92405]) +- Include all entities in cloud lists ([@emontnemery] - [#92406]) +- Use exposed_entities API in cloud tests ([@emontnemery] - [#92408]) +- Update cloud WS API for getting entity ([@emontnemery] - [#92409]) +- Update frontend to 20230503.1 ([@bramkragten] - [#92410]) +- Bump bluetooth-auto-recovery to 1.1.1 ([@bdraco] - [#92412]) +- Migrate cloud settings for all Alexa entities ([@emontnemery] - [#92413]) +- Skip unexposed entities in intent handlers ([@synesthesiam] - [#92415]) +- Migrate cloud settings for all Google entities ([@emontnemery] - [#92416]) +- Pass OPUS payload ID through VoIP ([@synesthesiam] - [#92421]) +- Bump voip-utils to 0.0.7 ([@synesthesiam] - [#92372]) + +[#56446]: https://github.com/home-assistant/core/pull/56446 +[#66494]: https://github.com/home-assistant/core/pull/66494 +[#70233]: https://github.com/home-assistant/core/pull/70233 +[#72558]: https://github.com/home-assistant/core/pull/72558 +[#74323]: https://github.com/home-assistant/core/pull/74323 +[#76164]: https://github.com/home-assistant/core/pull/76164 +[#77449]: https://github.com/home-assistant/core/pull/77449 +[#80288]: https://github.com/home-assistant/core/pull/80288 +[#80424]: https://github.com/home-assistant/core/pull/80424 +[#80986]: https://github.com/home-assistant/core/pull/80986 +[#81033]: https://github.com/home-assistant/core/pull/81033 +[#81486]: https://github.com/home-assistant/core/pull/81486 +[#82560]: https://github.com/home-assistant/core/pull/82560 +[#82601]: https://github.com/home-assistant/core/pull/82601 +[#83983]: https://github.com/home-assistant/core/pull/83983 +[#85186]: https://github.com/home-assistant/core/pull/85186 +[#85205]: https://github.com/home-assistant/core/pull/85205 +[#85605]: https://github.com/home-assistant/core/pull/85605 +[#86254]: https://github.com/home-assistant/core/pull/86254 +[#86451]: https://github.com/home-assistant/core/pull/86451 +[#86822]: https://github.com/home-assistant/core/pull/86822 +[#86894]: https://github.com/home-assistant/core/pull/86894 +[#87209]: https://github.com/home-assistant/core/pull/87209 +[#87437]: https://github.com/home-assistant/core/pull/87437 +[#87866]: https://github.com/home-assistant/core/pull/87866 +[#87872]: https://github.com/home-assistant/core/pull/87872 +[#88104]: https://github.com/home-assistant/core/pull/88104 +[#88759]: https://github.com/home-assistant/core/pull/88759 +[#88984]: https://github.com/home-assistant/core/pull/88984 +[#89097]: https://github.com/home-assistant/core/pull/89097 +[#89315]: https://github.com/home-assistant/core/pull/89315 +[#89456]: https://github.com/home-assistant/core/pull/89456 +[#89877]: https://github.com/home-assistant/core/pull/89877 +[#89935]: https://github.com/home-assistant/core/pull/89935 +[#89937]: https://github.com/home-assistant/core/pull/89937 +[#89976]: https://github.com/home-assistant/core/pull/89976 +[#90067]: https://github.com/home-assistant/core/pull/90067 +[#90141]: https://github.com/home-assistant/core/pull/90141 +[#90234]: https://github.com/home-assistant/core/pull/90234 +[#90246]: https://github.com/home-assistant/core/pull/90246 +[#90262]: https://github.com/home-assistant/core/pull/90262 +[#90429]: https://github.com/home-assistant/core/pull/90429 +[#90443]: https://github.com/home-assistant/core/pull/90443 +[#90444]: https://github.com/home-assistant/core/pull/90444 +[#90466]: https://github.com/home-assistant/core/pull/90466 +[#90469]: https://github.com/home-assistant/core/pull/90469 +[#90477]: https://github.com/home-assistant/core/pull/90477 +[#90478]: https://github.com/home-assistant/core/pull/90478 +[#90480]: https://github.com/home-assistant/core/pull/90480 +[#90491]: https://github.com/home-assistant/core/pull/90491 +[#90496]: https://github.com/home-assistant/core/pull/90496 +[#90503]: https://github.com/home-assistant/core/pull/90503 +[#90504]: https://github.com/home-assistant/core/pull/90504 +[#90518]: https://github.com/home-assistant/core/pull/90518 +[#90519]: https://github.com/home-assistant/core/pull/90519 +[#90529]: https://github.com/home-assistant/core/pull/90529 +[#90530]: https://github.com/home-assistant/core/pull/90530 +[#90536]: https://github.com/home-assistant/core/pull/90536 +[#90539]: https://github.com/home-assistant/core/pull/90539 +[#90540]: https://github.com/home-assistant/core/pull/90540 +[#90541]: https://github.com/home-assistant/core/pull/90541 +[#90543]: https://github.com/home-assistant/core/pull/90543 +[#90548]: https://github.com/home-assistant/core/pull/90548 +[#90549]: https://github.com/home-assistant/core/pull/90549 +[#90552]: https://github.com/home-assistant/core/pull/90552 +[#90556]: https://github.com/home-assistant/core/pull/90556 +[#90566]: https://github.com/home-assistant/core/pull/90566 +[#90568]: https://github.com/home-assistant/core/pull/90568 +[#90569]: https://github.com/home-assistant/core/pull/90569 +[#90570]: https://github.com/home-assistant/core/pull/90570 +[#90571]: https://github.com/home-assistant/core/pull/90571 +[#90572]: https://github.com/home-assistant/core/pull/90572 +[#90575]: https://github.com/home-assistant/core/pull/90575 +[#90581]: https://github.com/home-assistant/core/pull/90581 +[#90585]: https://github.com/home-assistant/core/pull/90585 +[#90586]: https://github.com/home-assistant/core/pull/90586 +[#90592]: https://github.com/home-assistant/core/pull/90592 +[#90593]: https://github.com/home-assistant/core/pull/90593 +[#90609]: https://github.com/home-assistant/core/pull/90609 +[#90610]: https://github.com/home-assistant/core/pull/90610 +[#90612]: https://github.com/home-assistant/core/pull/90612 +[#90613]: https://github.com/home-assistant/core/pull/90613 +[#90615]: https://github.com/home-assistant/core/pull/90615 +[#90617]: https://github.com/home-assistant/core/pull/90617 +[#90633]: https://github.com/home-assistant/core/pull/90633 +[#90637]: https://github.com/home-assistant/core/pull/90637 +[#90657]: https://github.com/home-assistant/core/pull/90657 +[#90658]: https://github.com/home-assistant/core/pull/90658 +[#90668]: https://github.com/home-assistant/core/pull/90668 +[#90671]: https://github.com/home-assistant/core/pull/90671 +[#90683]: https://github.com/home-assistant/core/pull/90683 +[#90690]: https://github.com/home-assistant/core/pull/90690 +[#90691]: https://github.com/home-assistant/core/pull/90691 +[#90728]: https://github.com/home-assistant/core/pull/90728 +[#90740]: https://github.com/home-assistant/core/pull/90740 +[#90748]: https://github.com/home-assistant/core/pull/90748 +[#90751]: https://github.com/home-assistant/core/pull/90751 +[#90755]: https://github.com/home-assistant/core/pull/90755 +[#90756]: https://github.com/home-assistant/core/pull/90756 +[#90757]: https://github.com/home-assistant/core/pull/90757 +[#90760]: https://github.com/home-assistant/core/pull/90760 +[#90761]: https://github.com/home-assistant/core/pull/90761 +[#90765]: https://github.com/home-assistant/core/pull/90765 +[#90770]: https://github.com/home-assistant/core/pull/90770 +[#90775]: https://github.com/home-assistant/core/pull/90775 +[#90776]: https://github.com/home-assistant/core/pull/90776 +[#90777]: https://github.com/home-assistant/core/pull/90777 +[#90779]: https://github.com/home-assistant/core/pull/90779 +[#90781]: https://github.com/home-assistant/core/pull/90781 +[#90782]: https://github.com/home-assistant/core/pull/90782 +[#90784]: https://github.com/home-assistant/core/pull/90784 +[#90787]: https://github.com/home-assistant/core/pull/90787 +[#90790]: https://github.com/home-assistant/core/pull/90790 +[#90791]: https://github.com/home-assistant/core/pull/90791 +[#90801]: https://github.com/home-assistant/core/pull/90801 +[#90802]: https://github.com/home-assistant/core/pull/90802 +[#90803]: https://github.com/home-assistant/core/pull/90803 +[#90806]: https://github.com/home-assistant/core/pull/90806 +[#90808]: https://github.com/home-assistant/core/pull/90808 +[#90810]: https://github.com/home-assistant/core/pull/90810 +[#90812]: https://github.com/home-assistant/core/pull/90812 +[#90821]: https://github.com/home-assistant/core/pull/90821 +[#90822]: https://github.com/home-assistant/core/pull/90822 +[#90824]: https://github.com/home-assistant/core/pull/90824 +[#90827]: https://github.com/home-assistant/core/pull/90827 +[#90829]: https://github.com/home-assistant/core/pull/90829 +[#90830]: https://github.com/home-assistant/core/pull/90830 +[#90831]: https://github.com/home-assistant/core/pull/90831 +[#90834]: https://github.com/home-assistant/core/pull/90834 +[#90844]: https://github.com/home-assistant/core/pull/90844 +[#90845]: https://github.com/home-assistant/core/pull/90845 +[#90850]: https://github.com/home-assistant/core/pull/90850 +[#90854]: https://github.com/home-assistant/core/pull/90854 +[#90856]: https://github.com/home-assistant/core/pull/90856 +[#90857]: https://github.com/home-assistant/core/pull/90857 +[#90863]: https://github.com/home-assistant/core/pull/90863 +[#90865]: https://github.com/home-assistant/core/pull/90865 +[#90869]: https://github.com/home-assistant/core/pull/90869 +[#90871]: https://github.com/home-assistant/core/pull/90871 +[#90877]: https://github.com/home-assistant/core/pull/90877 +[#90886]: https://github.com/home-assistant/core/pull/90886 +[#90890]: https://github.com/home-assistant/core/pull/90890 +[#90893]: https://github.com/home-assistant/core/pull/90893 +[#90894]: https://github.com/home-assistant/core/pull/90894 +[#90898]: https://github.com/home-assistant/core/pull/90898 +[#90899]: https://github.com/home-assistant/core/pull/90899 +[#90906]: https://github.com/home-assistant/core/pull/90906 +[#90913]: https://github.com/home-assistant/core/pull/90913 +[#90922]: https://github.com/home-assistant/core/pull/90922 +[#90932]: https://github.com/home-assistant/core/pull/90932 +[#90934]: https://github.com/home-assistant/core/pull/90934 +[#90937]: https://github.com/home-assistant/core/pull/90937 +[#90938]: https://github.com/home-assistant/core/pull/90938 +[#90944]: https://github.com/home-assistant/core/pull/90944 +[#90945]: https://github.com/home-assistant/core/pull/90945 +[#90947]: https://github.com/home-assistant/core/pull/90947 +[#90948]: https://github.com/home-assistant/core/pull/90948 +[#90950]: https://github.com/home-assistant/core/pull/90950 +[#90992]: https://github.com/home-assistant/core/pull/90992 +[#91001]: https://github.com/home-assistant/core/pull/91001 +[#91007]: https://github.com/home-assistant/core/pull/91007 +[#91008]: https://github.com/home-assistant/core/pull/91008 +[#91067]: https://github.com/home-assistant/core/pull/91067 +[#91068]: https://github.com/home-assistant/core/pull/91068 +[#91071]: https://github.com/home-assistant/core/pull/91071 +[#91073]: https://github.com/home-assistant/core/pull/91073 +[#91074]: https://github.com/home-assistant/core/pull/91074 +[#91078]: https://github.com/home-assistant/core/pull/91078 +[#91081]: https://github.com/home-assistant/core/pull/91081 +[#91088]: https://github.com/home-assistant/core/pull/91088 +[#91106]: https://github.com/home-assistant/core/pull/91106 +[#91107]: https://github.com/home-assistant/core/pull/91107 +[#91108]: https://github.com/home-assistant/core/pull/91108 +[#91128]: https://github.com/home-assistant/core/pull/91128 +[#91132]: https://github.com/home-assistant/core/pull/91132 +[#91140]: https://github.com/home-assistant/core/pull/91140 +[#91142]: https://github.com/home-assistant/core/pull/91142 +[#91143]: https://github.com/home-assistant/core/pull/91143 +[#91144]: https://github.com/home-assistant/core/pull/91144 +[#91145]: https://github.com/home-assistant/core/pull/91145 +[#91147]: https://github.com/home-assistant/core/pull/91147 +[#91149]: https://github.com/home-assistant/core/pull/91149 +[#91150]: https://github.com/home-assistant/core/pull/91150 +[#91151]: https://github.com/home-assistant/core/pull/91151 +[#91157]: https://github.com/home-assistant/core/pull/91157 +[#91158]: https://github.com/home-assistant/core/pull/91158 +[#91164]: https://github.com/home-assistant/core/pull/91164 +[#91166]: https://github.com/home-assistant/core/pull/91166 +[#91172]: https://github.com/home-assistant/core/pull/91172 +[#91182]: https://github.com/home-assistant/core/pull/91182 +[#91188]: https://github.com/home-assistant/core/pull/91188 +[#91190]: https://github.com/home-assistant/core/pull/91190 +[#91193]: https://github.com/home-assistant/core/pull/91193 +[#91198]: https://github.com/home-assistant/core/pull/91198 +[#91200]: https://github.com/home-assistant/core/pull/91200 +[#91202]: https://github.com/home-assistant/core/pull/91202 +[#91203]: https://github.com/home-assistant/core/pull/91203 +[#91208]: https://github.com/home-assistant/core/pull/91208 +[#91210]: https://github.com/home-assistant/core/pull/91210 +[#91215]: https://github.com/home-assistant/core/pull/91215 +[#91217]: https://github.com/home-assistant/core/pull/91217 +[#91218]: https://github.com/home-assistant/core/pull/91218 +[#91222]: https://github.com/home-assistant/core/pull/91222 +[#91223]: https://github.com/home-assistant/core/pull/91223 +[#91224]: https://github.com/home-assistant/core/pull/91224 +[#91228]: https://github.com/home-assistant/core/pull/91228 +[#91230]: https://github.com/home-assistant/core/pull/91230 +[#91233]: https://github.com/home-assistant/core/pull/91233 +[#91240]: https://github.com/home-assistant/core/pull/91240 +[#91244]: https://github.com/home-assistant/core/pull/91244 +[#91245]: https://github.com/home-assistant/core/pull/91245 +[#91246]: https://github.com/home-assistant/core/pull/91246 +[#91250]: https://github.com/home-assistant/core/pull/91250 +[#91252]: https://github.com/home-assistant/core/pull/91252 +[#91253]: https://github.com/home-assistant/core/pull/91253 +[#91258]: https://github.com/home-assistant/core/pull/91258 +[#91259]: https://github.com/home-assistant/core/pull/91259 +[#91260]: https://github.com/home-assistant/core/pull/91260 +[#91261]: https://github.com/home-assistant/core/pull/91261 +[#91263]: https://github.com/home-assistant/core/pull/91263 +[#91264]: https://github.com/home-assistant/core/pull/91264 +[#91267]: https://github.com/home-assistant/core/pull/91267 +[#91271]: https://github.com/home-assistant/core/pull/91271 +[#91277]: https://github.com/home-assistant/core/pull/91277 +[#91282]: https://github.com/home-assistant/core/pull/91282 +[#91290]: https://github.com/home-assistant/core/pull/91290 +[#91296]: https://github.com/home-assistant/core/pull/91296 +[#91299]: https://github.com/home-assistant/core/pull/91299 +[#91305]: https://github.com/home-assistant/core/pull/91305 +[#91308]: https://github.com/home-assistant/core/pull/91308 +[#91309]: https://github.com/home-assistant/core/pull/91309 +[#91310]: https://github.com/home-assistant/core/pull/91310 +[#91312]: https://github.com/home-assistant/core/pull/91312 +[#91320]: https://github.com/home-assistant/core/pull/91320 +[#91321]: https://github.com/home-assistant/core/pull/91321 +[#91328]: https://github.com/home-assistant/core/pull/91328 +[#91329]: https://github.com/home-assistant/core/pull/91329 +[#91330]: https://github.com/home-assistant/core/pull/91330 +[#91331]: https://github.com/home-assistant/core/pull/91331 +[#91333]: https://github.com/home-assistant/core/pull/91333 +[#91334]: https://github.com/home-assistant/core/pull/91334 +[#91337]: https://github.com/home-assistant/core/pull/91337 +[#91342]: https://github.com/home-assistant/core/pull/91342 +[#91345]: https://github.com/home-assistant/core/pull/91345 +[#91347]: https://github.com/home-assistant/core/pull/91347 +[#91352]: https://github.com/home-assistant/core/pull/91352 +[#91354]: https://github.com/home-assistant/core/pull/91354 +[#91358]: https://github.com/home-assistant/core/pull/91358 +[#91362]: https://github.com/home-assistant/core/pull/91362 +[#91363]: https://github.com/home-assistant/core/pull/91363 +[#91367]: https://github.com/home-assistant/core/pull/91367 +[#91371]: https://github.com/home-assistant/core/pull/91371 +[#91372]: https://github.com/home-assistant/core/pull/91372 +[#91373]: https://github.com/home-assistant/core/pull/91373 +[#91376]: https://github.com/home-assistant/core/pull/91376 +[#91378]: https://github.com/home-assistant/core/pull/91378 +[#91379]: https://github.com/home-assistant/core/pull/91379 +[#91381]: https://github.com/home-assistant/core/pull/91381 +[#91382]: https://github.com/home-assistant/core/pull/91382 +[#91383]: https://github.com/home-assistant/core/pull/91383 +[#91384]: https://github.com/home-assistant/core/pull/91384 +[#91387]: https://github.com/home-assistant/core/pull/91387 +[#91389]: https://github.com/home-assistant/core/pull/91389 +[#91390]: https://github.com/home-assistant/core/pull/91390 +[#91396]: https://github.com/home-assistant/core/pull/91396 +[#91405]: https://github.com/home-assistant/core/pull/91405 +[#91406]: https://github.com/home-assistant/core/pull/91406 +[#91407]: https://github.com/home-assistant/core/pull/91407 +[#91410]: https://github.com/home-assistant/core/pull/91410 +[#91412]: https://github.com/home-assistant/core/pull/91412 +[#91418]: https://github.com/home-assistant/core/pull/91418 +[#91420]: https://github.com/home-assistant/core/pull/91420 +[#91430]: https://github.com/home-assistant/core/pull/91430 +[#91431]: https://github.com/home-assistant/core/pull/91431 +[#91432]: https://github.com/home-assistant/core/pull/91432 +[#91433]: https://github.com/home-assistant/core/pull/91433 +[#91438]: https://github.com/home-assistant/core/pull/91438 +[#91439]: https://github.com/home-assistant/core/pull/91439 +[#91442]: https://github.com/home-assistant/core/pull/91442 +[#91443]: https://github.com/home-assistant/core/pull/91443 +[#91444]: https://github.com/home-assistant/core/pull/91444 +[#91446]: https://github.com/home-assistant/core/pull/91446 +[#91450]: https://github.com/home-assistant/core/pull/91450 +[#91451]: https://github.com/home-assistant/core/pull/91451 +[#91452]: https://github.com/home-assistant/core/pull/91452 +[#91454]: https://github.com/home-assistant/core/pull/91454 +[#91456]: https://github.com/home-assistant/core/pull/91456 +[#91458]: https://github.com/home-assistant/core/pull/91458 +[#91463]: https://github.com/home-assistant/core/pull/91463 +[#91464]: https://github.com/home-assistant/core/pull/91464 +[#91474]: https://github.com/home-assistant/core/pull/91474 +[#91476]: https://github.com/home-assistant/core/pull/91476 +[#91485]: https://github.com/home-assistant/core/pull/91485 +[#91486]: https://github.com/home-assistant/core/pull/91486 +[#91490]: https://github.com/home-assistant/core/pull/91490 +[#91492]: https://github.com/home-assistant/core/pull/91492 +[#91497]: https://github.com/home-assistant/core/pull/91497 +[#91498]: https://github.com/home-assistant/core/pull/91498 +[#91500]: https://github.com/home-assistant/core/pull/91500 +[#91507]: https://github.com/home-assistant/core/pull/91507 +[#91509]: https://github.com/home-assistant/core/pull/91509 +[#91510]: https://github.com/home-assistant/core/pull/91510 +[#91512]: https://github.com/home-assistant/core/pull/91512 +[#91516]: https://github.com/home-assistant/core/pull/91516 +[#91519]: https://github.com/home-assistant/core/pull/91519 +[#91520]: https://github.com/home-assistant/core/pull/91520 +[#91521]: https://github.com/home-assistant/core/pull/91521 +[#91523]: https://github.com/home-assistant/core/pull/91523 +[#91524]: https://github.com/home-assistant/core/pull/91524 +[#91525]: https://github.com/home-assistant/core/pull/91525 +[#91526]: https://github.com/home-assistant/core/pull/91526 +[#91528]: https://github.com/home-assistant/core/pull/91528 +[#91529]: https://github.com/home-assistant/core/pull/91529 +[#91531]: https://github.com/home-assistant/core/pull/91531 +[#91533]: https://github.com/home-assistant/core/pull/91533 +[#91535]: https://github.com/home-assistant/core/pull/91535 +[#91536]: https://github.com/home-assistant/core/pull/91536 +[#91537]: https://github.com/home-assistant/core/pull/91537 +[#91538]: https://github.com/home-assistant/core/pull/91538 +[#91539]: https://github.com/home-assistant/core/pull/91539 +[#91541]: https://github.com/home-assistant/core/pull/91541 +[#91542]: https://github.com/home-assistant/core/pull/91542 +[#91546]: https://github.com/home-assistant/core/pull/91546 +[#91555]: https://github.com/home-assistant/core/pull/91555 +[#91556]: https://github.com/home-assistant/core/pull/91556 +[#91565]: https://github.com/home-assistant/core/pull/91565 +[#91567]: https://github.com/home-assistant/core/pull/91567 +[#91569]: https://github.com/home-assistant/core/pull/91569 +[#91570]: https://github.com/home-assistant/core/pull/91570 +[#91573]: https://github.com/home-assistant/core/pull/91573 +[#91575]: https://github.com/home-assistant/core/pull/91575 +[#91576]: https://github.com/home-assistant/core/pull/91576 +[#91577]: https://github.com/home-assistant/core/pull/91577 +[#91579]: https://github.com/home-assistant/core/pull/91579 +[#91588]: https://github.com/home-assistant/core/pull/91588 +[#91590]: https://github.com/home-assistant/core/pull/91590 +[#91591]: https://github.com/home-assistant/core/pull/91591 +[#91595]: https://github.com/home-assistant/core/pull/91595 +[#91599]: https://github.com/home-assistant/core/pull/91599 +[#91606]: https://github.com/home-assistant/core/pull/91606 +[#91611]: https://github.com/home-assistant/core/pull/91611 +[#91612]: https://github.com/home-assistant/core/pull/91612 +[#91616]: https://github.com/home-assistant/core/pull/91616 +[#91619]: https://github.com/home-assistant/core/pull/91619 +[#91621]: https://github.com/home-assistant/core/pull/91621 +[#91630]: https://github.com/home-assistant/core/pull/91630 +[#91633]: https://github.com/home-assistant/core/pull/91633 +[#91642]: https://github.com/home-assistant/core/pull/91642 +[#91643]: https://github.com/home-assistant/core/pull/91643 +[#91645]: https://github.com/home-assistant/core/pull/91645 +[#91648]: https://github.com/home-assistant/core/pull/91648 +[#91649]: https://github.com/home-assistant/core/pull/91649 +[#91651]: https://github.com/home-assistant/core/pull/91651 +[#91652]: https://github.com/home-assistant/core/pull/91652 +[#91655]: https://github.com/home-assistant/core/pull/91655 +[#91658]: https://github.com/home-assistant/core/pull/91658 +[#91669]: https://github.com/home-assistant/core/pull/91669 +[#91673]: https://github.com/home-assistant/core/pull/91673 +[#91674]: https://github.com/home-assistant/core/pull/91674 +[#91680]: https://github.com/home-assistant/core/pull/91680 +[#91681]: https://github.com/home-assistant/core/pull/91681 +[#91683]: https://github.com/home-assistant/core/pull/91683 +[#91685]: https://github.com/home-assistant/core/pull/91685 +[#91688]: https://github.com/home-assistant/core/pull/91688 +[#91691]: https://github.com/home-assistant/core/pull/91691 +[#91692]: https://github.com/home-assistant/core/pull/91692 +[#91693]: https://github.com/home-assistant/core/pull/91693 +[#91694]: https://github.com/home-assistant/core/pull/91694 +[#91695]: https://github.com/home-assistant/core/pull/91695 +[#91697]: https://github.com/home-assistant/core/pull/91697 +[#91698]: https://github.com/home-assistant/core/pull/91698 +[#91699]: https://github.com/home-assistant/core/pull/91699 +[#91700]: https://github.com/home-assistant/core/pull/91700 +[#91702]: https://github.com/home-assistant/core/pull/91702 +[#91710]: https://github.com/home-assistant/core/pull/91710 +[#91712]: https://github.com/home-assistant/core/pull/91712 +[#91717]: https://github.com/home-assistant/core/pull/91717 +[#91718]: https://github.com/home-assistant/core/pull/91718 +[#91720]: https://github.com/home-assistant/core/pull/91720 +[#91725]: https://github.com/home-assistant/core/pull/91725 +[#91727]: https://github.com/home-assistant/core/pull/91727 +[#91728]: https://github.com/home-assistant/core/pull/91728 +[#91730]: https://github.com/home-assistant/core/pull/91730 +[#91731]: https://github.com/home-assistant/core/pull/91731 +[#91732]: https://github.com/home-assistant/core/pull/91732 +[#91736]: https://github.com/home-assistant/core/pull/91736 +[#91737]: https://github.com/home-assistant/core/pull/91737 +[#91739]: https://github.com/home-assistant/core/pull/91739 +[#91741]: https://github.com/home-assistant/core/pull/91741 +[#91745]: https://github.com/home-assistant/core/pull/91745 +[#91747]: https://github.com/home-assistant/core/pull/91747 +[#91748]: https://github.com/home-assistant/core/pull/91748 +[#91749]: https://github.com/home-assistant/core/pull/91749 +[#91752]: https://github.com/home-assistant/core/pull/91752 +[#91753]: https://github.com/home-assistant/core/pull/91753 +[#91757]: https://github.com/home-assistant/core/pull/91757 +[#91761]: https://github.com/home-assistant/core/pull/91761 +[#91762]: https://github.com/home-assistant/core/pull/91762 +[#91766]: https://github.com/home-assistant/core/pull/91766 +[#91767]: https://github.com/home-assistant/core/pull/91767 +[#91769]: https://github.com/home-assistant/core/pull/91769 +[#91770]: https://github.com/home-assistant/core/pull/91770 +[#91771]: https://github.com/home-assistant/core/pull/91771 +[#91772]: https://github.com/home-assistant/core/pull/91772 +[#91778]: https://github.com/home-assistant/core/pull/91778 +[#91779]: https://github.com/home-assistant/core/pull/91779 +[#91783]: https://github.com/home-assistant/core/pull/91783 +[#91784]: https://github.com/home-assistant/core/pull/91784 +[#91786]: https://github.com/home-assistant/core/pull/91786 +[#91790]: https://github.com/home-assistant/core/pull/91790 +[#91791]: https://github.com/home-assistant/core/pull/91791 +[#91792]: https://github.com/home-assistant/core/pull/91792 +[#91796]: https://github.com/home-assistant/core/pull/91796 +[#91798]: https://github.com/home-assistant/core/pull/91798 +[#91800]: https://github.com/home-assistant/core/pull/91800 +[#91802]: https://github.com/home-assistant/core/pull/91802 +[#91803]: https://github.com/home-assistant/core/pull/91803 +[#91804]: https://github.com/home-assistant/core/pull/91804 +[#91806]: https://github.com/home-assistant/core/pull/91806 +[#91807]: https://github.com/home-assistant/core/pull/91807 +[#91808]: https://github.com/home-assistant/core/pull/91808 +[#91811]: https://github.com/home-assistant/core/pull/91811 +[#91812]: https://github.com/home-assistant/core/pull/91812 +[#91814]: https://github.com/home-assistant/core/pull/91814 +[#91818]: https://github.com/home-assistant/core/pull/91818 +[#91831]: https://github.com/home-assistant/core/pull/91831 +[#91836]: https://github.com/home-assistant/core/pull/91836 +[#91839]: https://github.com/home-assistant/core/pull/91839 +[#91840]: https://github.com/home-assistant/core/pull/91840 +[#91841]: https://github.com/home-assistant/core/pull/91841 +[#91844]: https://github.com/home-assistant/core/pull/91844 +[#91848]: https://github.com/home-assistant/core/pull/91848 +[#91850]: https://github.com/home-assistant/core/pull/91850 +[#91852]: https://github.com/home-assistant/core/pull/91852 +[#91853]: https://github.com/home-assistant/core/pull/91853 +[#91855]: https://github.com/home-assistant/core/pull/91855 +[#91856]: https://github.com/home-assistant/core/pull/91856 +[#91857]: https://github.com/home-assistant/core/pull/91857 +[#91859]: https://github.com/home-assistant/core/pull/91859 +[#91860]: https://github.com/home-assistant/core/pull/91860 +[#91861]: https://github.com/home-assistant/core/pull/91861 +[#91862]: https://github.com/home-assistant/core/pull/91862 +[#91866]: https://github.com/home-assistant/core/pull/91866 +[#91867]: https://github.com/home-assistant/core/pull/91867 +[#91868]: https://github.com/home-assistant/core/pull/91868 +[#91869]: https://github.com/home-assistant/core/pull/91869 +[#91870]: https://github.com/home-assistant/core/pull/91870 +[#91871]: https://github.com/home-assistant/core/pull/91871 +[#91872]: https://github.com/home-assistant/core/pull/91872 +[#91873]: https://github.com/home-assistant/core/pull/91873 +[#91875]: https://github.com/home-assistant/core/pull/91875 +[#91876]: https://github.com/home-assistant/core/pull/91876 +[#91878]: https://github.com/home-assistant/core/pull/91878 +[#91879]: https://github.com/home-assistant/core/pull/91879 +[#91881]: https://github.com/home-assistant/core/pull/91881 +[#91882]: https://github.com/home-assistant/core/pull/91882 +[#91883]: https://github.com/home-assistant/core/pull/91883 +[#91884]: https://github.com/home-assistant/core/pull/91884 +[#91885]: https://github.com/home-assistant/core/pull/91885 +[#91886]: https://github.com/home-assistant/core/pull/91886 +[#91887]: https://github.com/home-assistant/core/pull/91887 +[#91888]: https://github.com/home-assistant/core/pull/91888 +[#91894]: https://github.com/home-assistant/core/pull/91894 +[#91896]: https://github.com/home-assistant/core/pull/91896 +[#91898]: https://github.com/home-assistant/core/pull/91898 +[#91901]: https://github.com/home-assistant/core/pull/91901 +[#91907]: https://github.com/home-assistant/core/pull/91907 +[#91909]: https://github.com/home-assistant/core/pull/91909 +[#91910]: https://github.com/home-assistant/core/pull/91910 +[#91913]: https://github.com/home-assistant/core/pull/91913 +[#91914]: https://github.com/home-assistant/core/pull/91914 +[#91916]: https://github.com/home-assistant/core/pull/91916 +[#91917]: https://github.com/home-assistant/core/pull/91917 +[#91918]: https://github.com/home-assistant/core/pull/91918 +[#91922]: https://github.com/home-assistant/core/pull/91922 +[#91926]: https://github.com/home-assistant/core/pull/91926 +[#91928]: https://github.com/home-assistant/core/pull/91928 +[#91929]: https://github.com/home-assistant/core/pull/91929 +[#91930]: https://github.com/home-assistant/core/pull/91930 +[#91931]: https://github.com/home-assistant/core/pull/91931 +[#91932]: https://github.com/home-assistant/core/pull/91932 +[#91936]: https://github.com/home-assistant/core/pull/91936 +[#91940]: https://github.com/home-assistant/core/pull/91940 +[#91943]: https://github.com/home-assistant/core/pull/91943 +[#91945]: https://github.com/home-assistant/core/pull/91945 +[#91947]: https://github.com/home-assistant/core/pull/91947 +[#91950]: https://github.com/home-assistant/core/pull/91950 +[#91951]: https://github.com/home-assistant/core/pull/91951 +[#91956]: https://github.com/home-assistant/core/pull/91956 +[#91957]: https://github.com/home-assistant/core/pull/91957 +[#91959]: https://github.com/home-assistant/core/pull/91959 +[#91961]: https://github.com/home-assistant/core/pull/91961 +[#91962]: https://github.com/home-assistant/core/pull/91962 +[#91963]: https://github.com/home-assistant/core/pull/91963 +[#91965]: https://github.com/home-assistant/core/pull/91965 +[#91966]: https://github.com/home-assistant/core/pull/91966 +[#91969]: https://github.com/home-assistant/core/pull/91969 +[#91970]: https://github.com/home-assistant/core/pull/91970 +[#91975]: https://github.com/home-assistant/core/pull/91975 +[#91977]: https://github.com/home-assistant/core/pull/91977 +[#91978]: https://github.com/home-assistant/core/pull/91978 +[#91982]: https://github.com/home-assistant/core/pull/91982 +[#91985]: https://github.com/home-assistant/core/pull/91985 +[#91989]: https://github.com/home-assistant/core/pull/91989 +[#91991]: https://github.com/home-assistant/core/pull/91991 +[#91995]: https://github.com/home-assistant/core/pull/91995 +[#91996]: https://github.com/home-assistant/core/pull/91996 +[#91999]: https://github.com/home-assistant/core/pull/91999 +[#92000]: https://github.com/home-assistant/core/pull/92000 +[#92002]: https://github.com/home-assistant/core/pull/92002 +[#92005]: https://github.com/home-assistant/core/pull/92005 +[#92006]: https://github.com/home-assistant/core/pull/92006 +[#92008]: https://github.com/home-assistant/core/pull/92008 +[#92009]: https://github.com/home-assistant/core/pull/92009 +[#92012]: https://github.com/home-assistant/core/pull/92012 +[#92014]: https://github.com/home-assistant/core/pull/92014 +[#92016]: https://github.com/home-assistant/core/pull/92016 +[#92020]: https://github.com/home-assistant/core/pull/92020 +[#92021]: https://github.com/home-assistant/core/pull/92021 +[#92022]: https://github.com/home-assistant/core/pull/92022 +[#92023]: https://github.com/home-assistant/core/pull/92023 +[#92025]: https://github.com/home-assistant/core/pull/92025 +[#92027]: https://github.com/home-assistant/core/pull/92027 +[#92028]: https://github.com/home-assistant/core/pull/92028 +[#92030]: https://github.com/home-assistant/core/pull/92030 +[#92031]: https://github.com/home-assistant/core/pull/92031 +[#92032]: https://github.com/home-assistant/core/pull/92032 +[#92034]: https://github.com/home-assistant/core/pull/92034 +[#92035]: https://github.com/home-assistant/core/pull/92035 +[#92036]: https://github.com/home-assistant/core/pull/92036 +[#92037]: https://github.com/home-assistant/core/pull/92037 +[#92041]: https://github.com/home-assistant/core/pull/92041 +[#92042]: https://github.com/home-assistant/core/pull/92042 +[#92045]: https://github.com/home-assistant/core/pull/92045 +[#92049]: https://github.com/home-assistant/core/pull/92049 +[#92052]: https://github.com/home-assistant/core/pull/92052 +[#92054]: https://github.com/home-assistant/core/pull/92054 +[#92056]: https://github.com/home-assistant/core/pull/92056 +[#92057]: https://github.com/home-assistant/core/pull/92057 +[#92058]: https://github.com/home-assistant/core/pull/92058 +[#92059]: https://github.com/home-assistant/core/pull/92059 +[#92060]: https://github.com/home-assistant/core/pull/92060 +[#92063]: https://github.com/home-assistant/core/pull/92063 +[#92064]: https://github.com/home-assistant/core/pull/92064 +[#92066]: https://github.com/home-assistant/core/pull/92066 +[#92067]: https://github.com/home-assistant/core/pull/92067 +[#92070]: https://github.com/home-assistant/core/pull/92070 +[#92074]: https://github.com/home-assistant/core/pull/92074 +[#92075]: https://github.com/home-assistant/core/pull/92075 +[#92076]: https://github.com/home-assistant/core/pull/92076 +[#92078]: https://github.com/home-assistant/core/pull/92078 +[#92079]: https://github.com/home-assistant/core/pull/92079 +[#92083]: https://github.com/home-assistant/core/pull/92083 +[#92085]: https://github.com/home-assistant/core/pull/92085 +[#92086]: https://github.com/home-assistant/core/pull/92086 +[#92088]: https://github.com/home-assistant/core/pull/92088 +[#92090]: https://github.com/home-assistant/core/pull/92090 +[#92098]: https://github.com/home-assistant/core/pull/92098 +[#92100]: https://github.com/home-assistant/core/pull/92100 +[#92103]: https://github.com/home-assistant/core/pull/92103 +[#92105]: https://github.com/home-assistant/core/pull/92105 +[#92107]: https://github.com/home-assistant/core/pull/92107 +[#92111]: https://github.com/home-assistant/core/pull/92111 +[#92121]: https://github.com/home-assistant/core/pull/92121 +[#92123]: https://github.com/home-assistant/core/pull/92123 +[#92126]: https://github.com/home-assistant/core/pull/92126 +[#92129]: https://github.com/home-assistant/core/pull/92129 +[#92131]: https://github.com/home-assistant/core/pull/92131 +[#92137]: https://github.com/home-assistant/core/pull/92137 +[#92140]: https://github.com/home-assistant/core/pull/92140 +[#92144]: https://github.com/home-assistant/core/pull/92144 +[#92145]: https://github.com/home-assistant/core/pull/92145 +[#92150]: https://github.com/home-assistant/core/pull/92150 +[#92151]: https://github.com/home-assistant/core/pull/92151 +[#92154]: https://github.com/home-assistant/core/pull/92154 +[#92158]: https://github.com/home-assistant/core/pull/92158 +[#92161]: https://github.com/home-assistant/core/pull/92161 +[#92173]: https://github.com/home-assistant/core/pull/92173 +[#92186]: https://github.com/home-assistant/core/pull/92186 +[#92188]: https://github.com/home-assistant/core/pull/92188 +[#92190]: https://github.com/home-assistant/core/pull/92190 +[#92200]: https://github.com/home-assistant/core/pull/92200 +[#92202]: https://github.com/home-assistant/core/pull/92202 +[#92209]: https://github.com/home-assistant/core/pull/92209 +[#92210]: https://github.com/home-assistant/core/pull/92210 +[#92216]: https://github.com/home-assistant/core/pull/92216 +[#92222]: https://github.com/home-assistant/core/pull/92222 +[#92238]: https://github.com/home-assistant/core/pull/92238 +[#92241]: https://github.com/home-assistant/core/pull/92241 +[#92249]: https://github.com/home-assistant/core/pull/92249 +[#92251]: https://github.com/home-assistant/core/pull/92251 +[#92254]: https://github.com/home-assistant/core/pull/92254 +[#92259]: https://github.com/home-assistant/core/pull/92259 +[#92260]: https://github.com/home-assistant/core/pull/92260 +[#92262]: https://github.com/home-assistant/core/pull/92262 +[#92266]: https://github.com/home-assistant/core/pull/92266 +[#92267]: https://github.com/home-assistant/core/pull/92267 +[#92270]: https://github.com/home-assistant/core/pull/92270 +[#92272]: https://github.com/home-assistant/core/pull/92272 +[#92276]: https://github.com/home-assistant/core/pull/92276 +[#92286]: https://github.com/home-assistant/core/pull/92286 +[#92288]: https://github.com/home-assistant/core/pull/92288 +[#92292]: https://github.com/home-assistant/core/pull/92292 +[#92293]: https://github.com/home-assistant/core/pull/92293 +[#92294]: https://github.com/home-assistant/core/pull/92294 +[#92295]: https://github.com/home-assistant/core/pull/92295 +[#92296]: https://github.com/home-assistant/core/pull/92296 +[#92312]: https://github.com/home-assistant/core/pull/92312 +[#92313]: https://github.com/home-assistant/core/pull/92313 +[#92315]: https://github.com/home-assistant/core/pull/92315 +[#92324]: https://github.com/home-assistant/core/pull/92324 +[#92326]: https://github.com/home-assistant/core/pull/92326 +[#92330]: https://github.com/home-assistant/core/pull/92330 +[#92333]: https://github.com/home-assistant/core/pull/92333 +[#92334]: https://github.com/home-assistant/core/pull/92334 +[#92339]: https://github.com/home-assistant/core/pull/92339 +[#92344]: https://github.com/home-assistant/core/pull/92344 +[#92353]: https://github.com/home-assistant/core/pull/92353 +[#92354]: https://github.com/home-assistant/core/pull/92354 +[#92363]: https://github.com/home-assistant/core/pull/92363 +[#92372]: https://github.com/home-assistant/core/pull/92372 +[#92373]: https://github.com/home-assistant/core/pull/92373 +[#92378]: https://github.com/home-assistant/core/pull/92378 +[#92382]: https://github.com/home-assistant/core/pull/92382 +[#92387]: https://github.com/home-assistant/core/pull/92387 +[#92389]: https://github.com/home-assistant/core/pull/92389 +[#92396]: https://github.com/home-assistant/core/pull/92396 +[#92398]: https://github.com/home-assistant/core/pull/92398 +[#92400]: https://github.com/home-assistant/core/pull/92400 +[#92402]: https://github.com/home-assistant/core/pull/92402 +[#92403]: https://github.com/home-assistant/core/pull/92403 +[#92405]: https://github.com/home-assistant/core/pull/92405 +[#92406]: https://github.com/home-assistant/core/pull/92406 +[#92408]: https://github.com/home-assistant/core/pull/92408 +[#92409]: https://github.com/home-assistant/core/pull/92409 +[#92410]: https://github.com/home-assistant/core/pull/92410 +[#92412]: https://github.com/home-assistant/core/pull/92412 +[#92413]: https://github.com/home-assistant/core/pull/92413 +[#92415]: https://github.com/home-assistant/core/pull/92415 +[#92416]: https://github.com/home-assistant/core/pull/92416 +[#92421]: https://github.com/home-assistant/core/pull/92421 +[@5n8ke]: https://github.com/5n8ke +[@AngellusMortis]: https://github.com/AngellusMortis +[@ArturoGuerra]: https://github.com/ArturoGuerra +[@Bre77]: https://github.com/Bre77 +[@ClayBenson94]: https://github.com/ClayBenson94 +[@CodingSquirrel]: https://github.com/CodingSquirrel +[@Danielhiversen]: https://github.com/Danielhiversen +[@DeerMaximum]: https://github.com/DeerMaximum +[@Djelibeybi]: https://github.com/Djelibeybi +[@Drafteed]: https://github.com/Drafteed +[@DutchDeffy]: https://github.com/DutchDeffy +[@Ernst79]: https://github.com/Ernst79 +[@GuyKh]: https://github.com/GuyKh +[@HarlemSquirrel]: https://github.com/HarlemSquirrel +[@Kane610]: https://github.com/Kane610 +[@Lash-L]: https://github.com/Lash-L +[@MarkGodwin]: https://github.com/MarkGodwin +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@Mic92]: https://github.com/Mic92 +[@PatrickGlesner]: https://github.com/PatrickGlesner +[@StephanU]: https://github.com/StephanU +[@akx]: https://github.com/akx +[@albertogeniola]: https://github.com/albertogeniola +[@alh84001]: https://github.com/alh84001 +[@allenporter]: https://github.com/allenporter +[@andarotajo]: https://github.com/andarotajo +[@avee87]: https://github.com/avee87 +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@boswelja]: https://github.com/boswelja +[@bouwew]: https://github.com/bouwew +[@bramkragten]: https://github.com/bramkragten +[@briglx]: https://github.com/briglx +[@cdce8p]: https://github.com/cdce8p +[@chrisx8]: https://github.com/chrisx8 +[@chuckdeal97]: https://github.com/chuckdeal97 +[@cirrusblau]: https://github.com/cirrusblau +[@davet2001]: https://github.com/davet2001 +[@depoll]: https://github.com/depoll +[@dgomes]: https://github.com/dgomes +[@dmulcahey]: https://github.com/dmulcahey +[@dougiteixeira]: https://github.com/dougiteixeira +[@eavanvalkenburg]: https://github.com/eavanvalkenburg +[@eifinger]: https://github.com/eifinger +[@ejpenney]: https://github.com/ejpenney +[@emontnemery]: https://github.com/emontnemery +[@engrbm87]: https://github.com/engrbm87 +[@epenet]: https://github.com/epenet +[@esev]: https://github.com/esev +[@farmio]: https://github.com/farmio +[@flip-dots]: https://github.com/flip-dots +[@frenck]: https://github.com/frenck +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@hahn-th]: https://github.com/hahn-th +[@hidaris]: https://github.com/hidaris +[@iMicknl]: https://github.com/iMicknl +[@jbouwh]: https://github.com/jbouwh +[@jeeftor]: https://github.com/jeeftor +[@jellenijhof12]: https://github.com/jellenijhof12 +[@jesserockz]: https://github.com/jesserockz +[@jfroy]: https://github.com/jfroy +[@jjlawren]: https://github.com/jjlawren +[@joostlek]: https://github.com/joostlek +[@jpettitt]: https://github.com/jpettitt +[@kbickar]: https://github.com/kbickar +[@kernelpanic85]: https://github.com/kernelpanic85 +[@koleo9am]: https://github.com/koleo9am +[@krazos]: https://github.com/krazos +[@lawfulchaos]: https://github.com/lawfulchaos +[@lodesmets]: https://github.com/lodesmets +[@luar123]: https://github.com/luar123 +[@ludeeus]: https://github.com/ludeeus +[@m4k2k]: https://github.com/m4k2k +[@marcelveldt]: https://github.com/marcelveldt +[@mdegat01]: https://github.com/mdegat01 +[@mib1185]: https://github.com/mib1185 +[@michaeldavie]: https://github.com/michaeldavie +[@mikeknoop]: https://github.com/mikeknoop +[@mkmer]: https://github.com/mkmer +[@mletenay]: https://github.com/mletenay +[@mrwogu]: https://github.com/mrwogu +[@mvdwetering]: https://github.com/mvdwetering +[@mzdrale]: https://github.com/mzdrale +[@nachonam]: https://github.com/nachonam +[@nalin29]: https://github.com/nalin29 +[@nkgilley]: https://github.com/nkgilley +[@oischinger]: https://github.com/oischinger +[@oliv3r]: https://github.com/oliv3r +[@pestevez]: https://github.com/pestevez +[@piitaya]: https://github.com/piitaya +[@puddly]: https://github.com/puddly +[@pyos]: https://github.com/pyos +[@rajeevan]: https://github.com/rajeevan +[@raman325]: https://github.com/raman325 +[@rappenze]: https://github.com/rappenze +[@regevbr]: https://github.com/regevbr +[@repaxan]: https://github.com/repaxan +[@rikroe]: https://github.com/rikroe +[@rlippmann]: https://github.com/rlippmann +[@rubenbe]: https://github.com/rubenbe +[@rutkai]: https://github.com/rutkai +[@sairon]: https://github.com/sairon +[@shbatm]: https://github.com/shbatm +[@shmuelzon]: https://github.com/shmuelzon +[@sstriker]: https://github.com/sstriker +[@stackia]: https://github.com/stackia +[@starkillerOG]: https://github.com/starkillerOG +[@swiergot]: https://github.com/swiergot +[@synesthesiam]: https://github.com/synesthesiam +[@teharris1]: https://github.com/teharris1 +[@tkdrob]: https://github.com/tkdrob +[@tristangrichard]: https://github.com/tristangrichard +[@tronikos]: https://github.com/tronikos +[@tymm]: https://github.com/tymm +[@vingerha]: https://github.com/vingerha +[@vpathuis]: https://github.com/vpathuis +[@wlcrs]: https://github.com/wlcrs +[accuweather docs]: /integrations/accuweather/ +[advantage_air docs]: /integrations/advantage_air/ +[airvisual docs]: /integrations/airvisual/ +[alert docs]: /integrations/alert/ +[alexa docs]: /integrations/alexa/ +[ambient_station docs]: /integrations/ambient_station/ +[analytics docs]: /integrations/analytics/ +[androidtv docs]: /integrations/androidtv/ +[androidtv_remote docs]: /integrations/androidtv_remote/ +[anova_sous_vide docs]: /integrations/anova_sous_vide/ +[apple_tv docs]: /integrations/apple_tv/ +[arcam_fmj docs]: /integrations/arcam_fmj/ +[assist_pipeline docs]: /integrations/assist_pipeline/ +[august docs]: /integrations/august/ +[axis docs]: /integrations/axis/ +[azure_event_hub docs]: /integrations/azure_event_hub/ +[backup docs]: /integrations/backup/ +[baf docs]: /integrations/baf/ +[bluetooth docs]: /integrations/bluetooth/ +[bmw_connected_drive docs]: /integrations/bmw_connected_drive/ +[bond docs]: /integrations/bond/ +[braviatv docs]: /integrations/braviatv/ +[broadlink docs]: /integrations/broadlink/ +[brottsplatskartan docs]: /integrations/brottsplatskartan/ +[bthome docs]: /integrations/bthome/ +[buienradar docs]: /integrations/buienradar/ +[calendar docs]: /integrations/calendar/ +[camera docs]: /integrations/camera/ +[cloud docs]: /integrations/cloud/ +[co2signal docs]: /integrations/co2signal/ +[control4 docs]: /integrations/control4/ +[conversation docs]: /integrations/conversation/ +[coronavirus docs]: /integrations/coronavirus/ +[cover docs]: /integrations/cover/ +[debugpy docs]: /integrations/debugpy/ +[deconz docs]: /integrations/deconz/ +[default_config docs]: /integrations/default_config/ +[demo docs]: /integrations/demo/ +[derivative docs]: /integrations/derivative/ +[device_automation docs]: /integrations/device_automation/ +[device_tracker docs]: /integrations/device_tracker/ +[dhcp docs]: /integrations/dhcp/ +[discovery docs]: /integrations/discovery/ +[dwd_weather_warnings docs]: /integrations/dwd_weather_warnings/ +[easyenergy docs]: /integrations/easyenergy/ +[econet docs]: /integrations/econet/ +[eddystone_temperature docs]: /integrations/eddystone_temperature/ +[edl21 docs]: /integrations/edl21/ +[egardia docs]: /integrations/egardia/ +[elmax docs]: /integrations/elmax/ +[environment_canada docs]: /integrations/environment_canada/ +[esphome docs]: /integrations/esphome/ +[eufy docs]: /integrations/eufy/ +[fibaro docs]: /integrations/fibaro/ +[filesize docs]: /integrations/filesize/ +[filter docs]: /integrations/filter/ +[flux_led docs]: /integrations/flux_led/ +[forecast_solar docs]: /integrations/forecast_solar/ +[freebox docs]: /integrations/freebox/ +[fritz docs]: /integrations/fritz/ +[fritzbox docs]: /integrations/fritzbox/ +[frontend docs]: /integrations/frontend/ +[frontier_silicon docs]: /integrations/frontier_silicon/ +[glances docs]: /integrations/glances/ +[goodwe docs]: /integrations/goodwe/ +[google_assistant docs]: /integrations/google_assistant/ +[google_assistant_sdk docs]: /integrations/google_assistant_sdk/ +[google_mail docs]: /integrations/google_mail/ +[google_maps docs]: /integrations/google_maps/ +[gtfs docs]: /integrations/gtfs/ +[hassio docs]: /integrations/hassio/ +[history docs]: /integrations/history/ +[history_stats docs]: /integrations/history_stats/ +[homeassistant docs]: /integrations/homeassistant/ +[homeassistant_yellow docs]: /integrations/homeassistant_yellow/ +[homekit docs]: /integrations/homekit/ +[homematicip_cloud docs]: /integrations/homematicip_cloud/ +[honeywell docs]: /integrations/honeywell/ +[http docs]: /integrations/http/ +[image_processing docs]: /integrations/image_processing/ +[imap docs]: /integrations/imap/ +[imap_email_content docs]: /integrations/imap_email_content/ +[insteon docs]: /integrations/insteon/ +[integration docs]: /integrations/integration/ +[intent docs]: /integrations/intent/ +[isy994 docs]: /integrations/isy994/ +[knx docs]: /integrations/knx/ +[landisgyr_heat_meter docs]: /integrations/landisgyr_heat_meter/ +[lastfm docs]: /integrations/lastfm/ +[ld2410_ble docs]: /integrations/ld2410_ble/ +[led_ble docs]: /integrations/led_ble/ +[lifx docs]: /integrations/lifx/ +[local_calendar docs]: /integrations/local_calendar/ +[lock docs]: /integrations/lock/ +[logbook docs]: /integrations/logbook/ +[luci docs]: /integrations/luci/ +[lutron docs]: /integrations/lutron/ +[lutron_caseta docs]: /integrations/lutron_caseta/ +[mailbox docs]: /integrations/mailbox/ +[matter docs]: /integrations/matter/ +[monessen docs]: /integrations/monessen/ +[mqtt docs]: /integrations/mqtt/ +[mqtt_json docs]: /integrations/mqtt_json/ +[mqtt_statestream docs]: /integrations/mqtt_statestream/ +[mysensors docs]: /integrations/mysensors/ +[netatmo docs]: /integrations/netatmo/ +[nextcloud docs]: /integrations/nextcloud/ +[nextdns docs]: /integrations/nextdns/ +[niko_home_control docs]: /integrations/niko_home_control/ +[nina docs]: /integrations/nina/ +[notion docs]: /integrations/notion/ +[nut docs]: /integrations/nut/ +[obihai docs]: /integrations/obihai/ +[onewire docs]: /integrations/onewire/ +[onvif docs]: /integrations/onvif/ +[openai_conversation docs]: /integrations/openai_conversation/ +[opencv docs]: /integrations/opencv/ +[opentherm_gw docs]: /integrations/opentherm_gw/ +[otbr docs]: /integrations/otbr/ +[overkiz docs]: /integrations/overkiz/ +[owntracks docs]: /integrations/owntracks/ +[person docs]: /integrations/person/ +[pi_hole docs]: /integrations/pi_hole/ +[picnic docs]: /integrations/picnic/ +[pjlink docs]: /integrations/pjlink/ +[plant docs]: /integrations/plant/ +[plex docs]: /integrations/plex/ +[plugwise docs]: /integrations/plugwise/ +[powerwall docs]: /integrations/powerwall/ +[profiler docs]: /integrations/profiler/ +[prosegur docs]: /integrations/prosegur/ +[proxmoxve docs]: /integrations/proxmoxve/ +[prusalink docs]: /integrations/prusalink/ +[qbittorrent docs]: /integrations/qbittorrent/ +[rapt_ble docs]: /integrations/rapt_ble/ +[recorder docs]: /integrations/recorder/ +[renault docs]: /integrations/renault/ +[reolink docs]: /integrations/reolink/ +[rest docs]: /integrations/rest/ +[roborock docs]: /integrations/roborock/ +[ruuvi_gateway docs]: /integrations/ruuvi_gateway/ +[samsungtv docs]: /integrations/samsungtv/ +[sense docs]: /integrations/sense/ +[sensor docs]: /integrations/sensor/ +[sentry docs]: /integrations/sentry/ +[sfr_box docs]: /integrations/sfr_box/ +[sharkiq docs]: /integrations/sharkiq/ +[shelly docs]: /integrations/shelly/ +[shopping_list docs]: /integrations/shopping_list/ +[sia docs]: /integrations/sia/ +[simplepush docs]: /integrations/simplepush/ +[sleepiq docs]: /integrations/sleepiq/ +[smartthings docs]: /integrations/smartthings/ +[snapcast docs]: /integrations/snapcast/ +[snips docs]: /integrations/snips/ +[solaredge_local docs]: /integrations/solaredge_local/ +[sonos docs]: /integrations/sonos/ +[spotify docs]: /integrations/spotify/ +[sql docs]: /integrations/sql/ +[srp_energy docs]: /integrations/srp_energy/ +[ssdp docs]: /integrations/ssdp/ +[starlink docs]: /integrations/starlink/ +[steam_online docs]: /integrations/steam_online/ +[stream docs]: /integrations/stream/ +[stt docs]: /integrations/stt/ +[supla docs]: /integrations/supla/ +[switch_as_x docs]: /integrations/switch_as_x/ +[switcher_kis docs]: /integrations/switcher_kis/ +[synology_dsm docs]: /integrations/synology_dsm/ +[systemmonitor docs]: /integrations/systemmonitor/ +[tasmota docs]: /integrations/tasmota/ +[template docs]: /integrations/template/ +[thread docs]: /integrations/thread/ +[tibber docs]: /integrations/tibber/ +[todoist docs]: /integrations/todoist/ +[tplink docs]: /integrations/tplink/ +[tplink_omada docs]: /integrations/tplink_omada/ +[traccar docs]: /integrations/traccar/ +[trace docs]: /integrations/trace/ +[transmission docs]: /integrations/transmission/ +[tts docs]: /integrations/tts/ +[unifi docs]: /integrations/unifi/ +[unifiprotect docs]: /integrations/unifiprotect/ +[usb docs]: /integrations/usb/ +[velbus docs]: /integrations/velbus/ +[vesync docs]: /integrations/vesync/ +[vicare docs]: /integrations/vicare/ +[vizio docs]: /integrations/vizio/ +[voice_assistant docs]: /integrations/voice_assistant/ +[voip docs]: /integrations/voip/ +[wallbox docs]: /integrations/wallbox/ +[watson_tts docs]: /integrations/watson_tts/ +[waze_travel_time docs]: /integrations/waze_travel_time/ +[webhook docs]: /integrations/webhook/ +[websocket_api docs]: /integrations/websocket_api/ +[wemo docs]: /integrations/wemo/ +[whirlpool docs]: /integrations/whirlpool/ +[withings docs]: /integrations/withings/ +[wiz docs]: /integrations/wiz/ +[workday docs]: /integrations/workday/ +[wyoming docs]: /integrations/wyoming/ +[xbox_live docs]: /integrations/xbox_live/ +[xiaomi_ble docs]: /integrations/xiaomi_ble/ +[xiaomi_miio docs]: /integrations/xiaomi_miio/ +[yalexs_ble docs]: /integrations/yalexs_ble/ +[yeelight docs]: /integrations/yeelight/ +[zeroconf docs]: /integrations/zeroconf/ +[zha docs]: /integrations/zha/ +[zwave_js docs]: /integrations/zwave_js/ +[zwave_me docs]: /integrations/zwave_me/ diff --git a/source/docs/assist/apple.markdown b/source/docs/assist/apple.markdown index 64f2f679018..547d726c699 100644 --- a/source/docs/assist/apple.markdown +++ b/source/docs/assist/apple.markdown @@ -23,7 +23,7 @@ To get started make sure you're running the latest version of the [Home Assistan There are two versions of the shortcut. The normal shortcut works better with Siri while the Button shortcut has the ability to use speech-to-text when triggered outside of Siri and can customize the input language (instead of relying on the OS language) -[_Last updated: Jan 26, 2022_](#changelog) +[_Last updated: Jan 26, 2023_](#changelog) ### Adjusting the language @@ -62,6 +62,6 @@ The latest version of Siri on the Apple Watch contains an annoying bug where it ## Changelog -### Version 1 - Jan 26, 2022 +### Version 1 - Jan 26, 2023 Initial release diff --git a/source/docs/assist/builtin_sentences.markdown b/source/docs/assist/builtin_sentences.markdown index 41abf4245e7..989e58a434a 100644 --- a/source/docs/assist/builtin_sentences.markdown +++ b/source/docs/assist/builtin_sentences.markdown @@ -25,3 +25,36 @@ In addition to individual entities, commands can target **areas**: Entity [aliases](/docs/assist/aliases) are also matched so multiple names can be used, even in different languages. You can extend the built-in sentences or [add your own](/docs/assist/custom_sentences) to trigger any action in Home Assistant. + +## View existing sentences + +Broadly speaking, you can use your voice to turn things on or off, inquire about a state, or change the brightness or color of a light. + +If the voice assistant doesn't understand you, you may need to rephrase your sentence a bit. +To get an idea of the specific sentences that are supported for your language, you can do the following: + +1. Take a look at the test sentences: + * On github, in the [tests](https://github.com/home-assistant/intents/tree/main/sentences) folder, open the subfolder for your language. + * Look through the test files to see the example sentences that have been tested. + * The second part of the file name shows the {% term intent %}, the first part shows the domain. For some domains, such as covers, fans, and light, there are specific sentences. + The other domains are covered by the generic *homeassistant_*. + + ![Example of a folder of assistant sentence test files](/images/assist/intents-test-files.png) + + * The screenshot below shows sentences used to test the command to turn on the lights. Note that *Living room* here is just a place holder. + It could be any area that you have in your home. + + ![Example of a set of test sentences](/images/assist/assist-test-file-light-turn-on.png) + +2. View the sentence definition: + * On github, in the [tests](https://github.com/home-assistant/intents/tree/main/tests) folder, open the subfolder for your language. + * Open the file of interest. + + ![Sentences definition for turning on the light](/images/assist/assist-sentence-definition-01.png) + + * () mean alternative elements. + * [] mean optional elements. + * <> mean an expansion rule. The view these rules, search for `expansion_rules` in the [_common.yaml](https://github.com/home-assistant/intents/blob/main/sentences/en/_common.yaml) file. + * The syntax is explained in detail in the [template sentence syntax documentation](https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax). + + diff --git a/source/docs/assist/troubleshooting.markdown b/source/docs/assist/troubleshooting.markdown new file mode 100644 index 00000000000..fd7e65e42c1 --- /dev/null +++ b/source/docs/assist/troubleshooting.markdown @@ -0,0 +1,45 @@ +--- +title: "Troubleshooting Assist" +--- + +This section lists a few steps that may help you troubleshoot issues with Assist. + +## View debug information + +1. Go to **Settings** > **Voice assistants**. +1. From the list of assistants, select your assistant. + ![Select your assistant](/images/assist/assistant-select.png) +1. In the dialog, select **Debug**. +![Open the debug dialog](/images/assist/assistant-debug-03.png) +1. At the top of the screen, from the dropdown menu, select the run you are interested in. +![Debug speech-to-text](/images/assist/assistant-debug-02.png) + +## Test if the phrase works without voice + +1. [Open the debug view](#view-debug-information). +1. In the top right corner, select the icon. +![Open the pipeline debug dialog](/images/assist/assistant-debug-04.png) +1. Select **Run text pipeline**. +![Open the pipeline debug dialog](/images/assist/assistant-debug-pipeline-01.png) +1. Enter the phrase you want to test and select **Run**. +![Open the pipeline debug dialog](/images/assist/assistant-debug-pipeline-02.png) +1. Check if it worked. +![Open the pipeline debug dialog](/images/assist/assistant-debug-pipeline-03.png) + * If the phrase does not work, try a variant. For example, if *Turn off the light* doesn't work, try: *Turn off the lights in the kitchen*. + * Check if your phrase is [supported](/docs/assist/builtin_sentences/). + * Make sure you are using the name of the area as it is defined in Home Assistant. If you have a room called *bathroom*, the phrase *Turning on the lights in the bath* won’t work. + + +## I do not see any assistant + +If under {% my voice_assistants title="**Settings** > **Voice assistants**" %} you do not see any assistants, you are not using the default configuration. The image below shows the **Assist** section. + +![Open the pipeline debug dialog](/images/assist/assist-assistants-page.png) + +If the **Assist** section is missing entirely, you need to add the following to your `configuration.yaml` file: + + ```yaml + # Example configuration.yaml entry + assist_pipeline: + ``` + \ No newline at end of file diff --git a/source/docs/assist/voice_remote_expose_devices.markdown b/source/docs/assist/voice_remote_expose_devices.markdown new file mode 100644 index 00000000000..e87f11601f2 --- /dev/null +++ b/source/docs/assist/voice_remote_expose_devices.markdown @@ -0,0 +1,15 @@ +--- +title: "Exposing devices" +--- + +To be able to control your devices over a voice command, you must expose your entities to Assist. +This is to avoid that sensitive devices, such as locks and garage doors, can inadvertently be controlled by voice commands. + +## Exposing your devices to Assist + +1. Go to **Settings** > **Voice assistants**. +1. Open the **Expose** tab. + ![Expose entities tab](/images/assist/assistant-expose-01.png) +1. Select **Expose entities**. + 1. Select all entities you want to be able to control by voice. + ![Expose entities tab](/images/assist/assistant-expose-02.png) \ No newline at end of file diff --git a/source/docs/assist/voice_remote_local_assistant.markdown b/source/docs/assist/voice_remote_local_assistant.markdown new file mode 100644 index 00000000000..52a84101ba3 --- /dev/null +++ b/source/docs/assist/voice_remote_local_assistant.markdown @@ -0,0 +1,59 @@ +--- +title: "Installing a local Assist pipeline" +--- + +In Home Assistant, the Assist pipelines are made up of various components that together form a voice assistant. + +For each component you can choose from different options. We have prepared a speech-to-text and text-to-speech option that runs fully local. + +The speech-to-text option is [Whisper](https://github.com/openai/whisper). It's an open source AI model that supports [various languages](https://github.com/openai/whisper#available-models-and-languages). We use a forked version called [faster-whisper](https://github.com/guillaumekln/faster-whisper). On a Raspberry Pi 4, it takes around 8 seconds to process incoming voice commands. On an Intel NUC it is done in under a second. + +For text-to-speech we have developed [Piper](https://github.com/rhasspy/piper). Piper is a fast, local neural text to speech system that sounds great and is optimized for the Raspberry Pi 4. It supports [many languages](https://rhasspy.github.io/piper-samples/). On a Raspberry Pi, using medium quality models, it can generate 1.6s of voice in a second. + +## Installing a local Assist pipeline + +For the quickest way to get your local Assist pipeline started, follow these steps: + +1. Install the add-ons to convert text into speech and vice versa. + * Install the {% my supervisor_addon addon="core_whisper" title="**Whisper**" %} and the {% my supervisor_addon addon="core_piper" title="**Piper**" %} add-ons. + ![Install the Whisper and Piper add-ons](/images/assist/piper-whisper-install-01.png) + * Start both add-ons. + * Once the add-ons are started, head over to the integrations under {% my integrations title="**Settings** > **Devices & Services**" %}. + * You should now see Piper and Whisper being discovered by the [Wyoming integration](/integrations/wyoming/). + ![Whisper and Piper integrations](/images/assist/piper-whisper-install-02.png) + * For both integrations, select **Configure**. + * Once the setup is complete, you should see both Piper and Whisper in one integration. + ![Whisper and Piper integration](/images/assist/piper-whisper-install-03.png) + * **Whisper** converts speech into text. + * **Piper** converts text into speech. + * **Wyoming** is the protocol they are both using to communicate. +1. Setup your assistant. + * Go to {% my voice_assistants title="**Settings** > **Voice assistants**" %} and select **Add assistant**. + ![Enter a name for your voice assistant](/images/assist/piper-whisper-install-05.png) + + * **Troubleshooting**: If you do not see any assistants here, you are not using the default configuration. In this case, you need to add the following to your `configuration.yaml` file: + + ```yaml + # Example configuration.yaml entry + assist_pipeline: + ``` + + * Enter a name. You can pick any name that is meaningful to you. + * Select the language that you want to speak. + * Under **Conversation agent**, select **Home Assistant**. + * Under **Speech-to-text**, select **faster-whisper**. + * Under **Text-to-speech**, select **piper**. + * Depending on your language, you may be able to select different language variants. +1. That's it. You ensured your voice commands can be processed locally on your device. +1. If you haven't done so yet, [expose your devices to Assist](/docs/assist/voice_remote_expose_devices/#exposing-your-devices). + * Otherwise you won't be able to control them by voice. + + +## Fine-tuning Whisper and Piper for your setup + +You would like to tweak the configuration for better performance or accuracy? +View some of the options in the video below. Explained by Mike Hansen, creator of Rhasspy, Piper, and Wyoming. + + + +The options are also documented in the add-on itself. Go to the {% my supervisor_addon addon="core_whisper" title="**Whisper**" %} or the {% my supervisor_addon addon="core_piper" title="**Piper**" %} add-on and open the **Documentation** page. diff --git a/source/getting-started/automation.markdown b/source/getting-started/automation.markdown index 881895d4512..57932a8c383 100644 --- a/source/getting-started/automation.markdown +++ b/source/getting-started/automation.markdown @@ -3,32 +3,23 @@ title: "Automating Home Assistant" description: "A quick intro on getting your first automation going." --- -Once your devices are set up, it's time to put the cherry on the pie: automation. In this guide we're going to create a simple automation rule to turn on the lights when the sun sets. Of course, this assumes that you have set up an integration that provides a light at this point. +Once your {% term devices %} are set up, it's time to put the cherry on the pie: {% term automation %}. In this guide we're going to create a simple automation rule to turn on the lights when the sun sets. Of course, this assumes that you have set up an integration that provides a light at this point. -In the user interface, click **Settings** in the sidebar, then click **Automations & Scenes**. You will now see the automation screen from which you can manage all the automations in Home Assistant. +In the user interface in the sidebar, click **{% my automations title="Settings > Automations & Scenes" %}**. You will now see the automation screen from which you can manage all the automations in Home Assistant. -

    - -The automation editor. -

    +![The automation editor.](/images/getting-started/automation-editor.png) -Click the blue button at the bottom right to create a new automation. A dialog will appear. Choose **Start with an empty automation**. You are presented with a blank automation screen. +Click the blue button at the bottom right to create a new automation. A dialog will appear. Choose **Create new automation**. You are presented with a blank automation screen. -

    - -The start of a new automation. -

    +![The start of a new automation.](/images/getting-started/new-automation.png) The first thing we will do is set a name. Enter "Turn Lights On at Sunset". -The second step is defining what should trigger our automation to run. In this case, we want to use the event of the sun setting to trigger our automation. However, if we would turn on the lights when the sun actually sets, it would be too late as it already gets quite dark while it's setting. So we're going to add an offset. +The second step is defining what should {% term trigger %} our automation to run. In this case, we want to use the event of the sun setting to trigger our automation. However, if we would turn on the lights when the sun actually sets, it would be too late as it already gets quite dark while it's setting. So we're going to add an offset. In the trigger section, click on the dropdown menu and change the trigger type to **Sun**. It allows us to choose sunrise or sunset, so go ahead and pick **Sunset**. As we discussed, we want our automation to be triggered a little before the sun actually sets, so let's add `-00:30` as the offset. This indicates that the automation will be triggered 30 minutes before the sun actually sets. Neat! -

    - -A new automation with a sun trigger filled in. -

    +![A new automation with a sun trigger filled in.](/images/getting-started/new-trigger.png) Once we have defined our trigger, scroll down to the action section. Make sure the action type is set to **Call service** and change the service to `light.turn_on`. For this automation we're going to turn on all lights, so let's change the service data to: @@ -36,10 +27,7 @@ Once we have defined our trigger, scroll down to the action section. Make sure t entity_id: all ``` -

    - -A new automation with the action set up to turn on the lights. -

    +![A new automation with the action set up to turn on the lights.](/images/getting-started/action.png) Click the orange button to save the automation. Now wait till it's 30 minutes until the sun sets and see your automation magic! diff --git a/source/getting-started/concepts-terminology.markdown b/source/getting-started/concepts-terminology.markdown index f14166fbd9a..a031fc8e550 100644 --- a/source/getting-started/concepts-terminology.markdown +++ b/source/getting-started/concepts-terminology.markdown @@ -11,7 +11,7 @@ Customizable pages to display information connected to and available in Home Ass ![Dashboard](/images/getting-started/lovelace.png) ## Integrations -Software that allows Home Assistant to connect to other software and platforms. For example, the Philips Hue integration allows Home Assistant to talk to the Hue Bridge and read data such as the state of your lights through to controlling the lights themselves. +Software that allows Home Assistant to connect to other software and platforms. For example, a product by Philips called Hue would use the Philips Hue integration and allow Home Assistant to talk to the hardware controller Hue Bridge. Any connected and Home Assistant compatible devices to the Hue Bridge would appear in Home Assistant as [devices](#devices--entities). ![Integrations](/images/getting-started/integrations.png) @@ -47,7 +47,7 @@ Similar to automations, repeatable actions that can be run. The difference betwe ## Scenes -Scenes allow you to create predefined settings for your devices. Likened to driving mode on phones, driver profiles in cars, it can change an environment to suite you. For example, your environment for watching films may have dimmer lighting, TV is switched on and higher volume. This can be saved as a scene and used without having to set individual devices every time. +Scenes allow you to create predefined settings for your devices. Likened to driving mode on phones, driver profiles in cars, it can change an environment to suit you. For example, your environment for watching films may have dimmer lighting, TV is switched on and higher volume. This can be saved as a scene and used without having to set individual devices every time. Further details can be found [here](/integrations/scene/). @@ -57,4 +57,4 @@ Depending on your [installation type](/installation), you may have the ability t ![Add-ons](/images/getting-started/add-ons.png) -{% include getting-started/next_step.html step="Automate Home Assistant" link="/getting-started/automation/" %} +{% include getting-started/next_step.html step="Adding Integrations In Home Assistant" link="/getting-started/integration/" %} diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index 857bf272417..8c1849ef3c8 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -15,9 +15,9 @@ We are going to help you make your first changes to `configuration.yaml`. To do ![Add-on store.](/images/hassio/screenshots/dashboard.png) -Under the "Official add-ons" section you will find the File editor add-on. +Under the **Official add-ons** section, you will find the **File editor** add-on. - - Click on File Editor and click on **Install**. When installation is complete, the UI will go to the add-on details page for the file editor. + - Click on **File editor** and click on **Install**. When the installation is complete, the UI will go to the add-on details page for the file editor. - Now start the add-on by clicking on **Start**. - Open the user interface by clicking on **Open Web UI**. @@ -41,8 +41,8 @@ Now let's make a change using the file editor: we are going to change the name,
    - Click the save icon in the top right to commit changes. - - Most changes in `configuration.yaml` require Home Assistant to be restarted to see the changes. You can verify that your changes are acceptable by running a configuration check. Do this by navigating to {% my server_controls title="Developer Tools -> YAML" %} and and then clicking on the **Check configuration** button. When it's valid, it will show the text "Configuration valid!". In order for the **Check Configuration**" button to be visible, you must enable "Advanced Mode" on your user profile. - - Now Restart Home Assistant. You can do so by either using the **Restart** option in the ⚙ menu of the File Editor UI or by navigating to {% my system_dashboard title="Settings -> System" %} and then clicking on the **Restart** button on the top right of the page. + - Most changes in `configuration.yaml` require Home Assistant to be restarted to see the changes. You can verify that your changes are acceptable by running a configuration check. Do this by navigating to {% my server_controls title="Developer Tools > YAML" %} and and then clicking on the **Check configuration** button. When it's valid, it will show the text "Configuration valid!". In order for the **Check Configuration**" button to be visible, you must enable **Advanced Mode** on your user profile. + - Now restart Home Assistant. You can do so by either using the **Restart** option in the ⚙ menu of the File Editor UI or by navigating to {% my system_dashboard title="Settings > System" %} and then clicking on the **Restart** button on the top right of the page. ![Screenshot of the "General" page in the configuration panel.](/images/screenshots/configuration-validation.png) @@ -56,6 +56,6 @@ Now let's make a change using the file editor: we are going to change the name, Maybe you are not a big fan of our web editor and want to use a text editor on your computer instead. This is possible by sharing the configuration over the network using the Samba add-on, which can also be installed from the Home Assistant add-on store. This will make your configuration accessible via the network tab on your computer. -Go to the add-on store and look for Samba in the core section. After you have installed the add-on, click on START. Home Assistant should now be available in the networking tab on your computer. +Go to the add-on store and look for Samba in the core section. After you have installed the add-on, click on **Start**. Home Assistant should now be available in the networking tab on your computer. We suggest that to edit `configuration.yaml`, you use the free text editor [Visual Studio Code](https://code.visualstudio.com/) in combination with the [Home Assistant Configuration Helper extension](https://marketplace.visualstudio.com/items?itemName=keesschollaart.vscode-home-assistant). diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 3ca9838011b..32f08ab71cd 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -8,6 +8,7 @@ show_title: true {% include getting-started/next_step.html step="Installation" link="/installation/" %} {% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %} {% include getting-started/next_step.html step="Concepts and terminology" link="/getting-started/concepts-terminology/" %} +{% include getting-started/next_step.html step="Integration" link="/getting-started/integration/" %} {% include getting-started/next_step.html step="Automation" link="/getting-started/automation/" %} {% include getting-started/next_step.html step="Presence detection" link="/getting-started/presence-detection/" %} {% include getting-started/next_step.html step="Join the community" link="/getting-started/join-the-community/" %} diff --git a/source/getting-started/integration.markdown b/source/getting-started/integration.markdown new file mode 100644 index 00000000000..d8f3e5d9961 --- /dev/null +++ b/source/getting-started/integration.markdown @@ -0,0 +1,31 @@ +--- +title: "Adding Integrations" +description: "Instructions to add an integration." +--- +Let's start by adding your first {% term integration %} so that you can see and change a smart home {% term device %}. + +From the sidebar, click on {% my integrations title="Settings > Devices & Services" %}. At this screen you will be able to set up integrations with Home Assistant. You might notice a *discovered* section. This section contains integrations that were found on your network and can easily be added with a few clicks. If your integrations are not discovered, click the **Add integration** button in the lower right and search for your integration in that list. + +In this example, we'll add a Chromecast to Home Assistant. Chromecast uses the [Google Cast integration](/integrations/cast). Although the below example has already discovered the device, let's add it manually. + +First, press the **Add integration** button in the lower right and search for your integration in that list. + +![Search for Google Cast](/images/getting-started/add-google-cast-integration.png) + +Select **Google Cast** from the list. Because my Chromecast device was already discovered, it asks if I want to add the discovered one or a different one. I will choose the latter and setup another instance. + +![Google Cast discovered confirmation](/images/getting-started/google-cast-discovered.png) + +It now asks for the network IP address of the device. Describing how to identify a devices IP address is beyond the scope of this article because each network is different. However, the router is usually a good place to look. In this example, it's *192.168.1.99*. + +![Manually setup Google Cast device](/images/getting-started/google-cast-manual-details.png) + +If it was successful, it will show a message and allow you to set the {% term area %} it belongs to. + +![Search for Google Cast](/images/getting-started/google-cast-integration-added.png) + +When you're done, navigate back to the web interface and voila, your devices are ready for you to control. You can always go back to add and remove integrations in the future. + +If you get stuck, need more information, or want to see what the setup process is like, use the [integration documentation](/integrations). + +{% include getting-started/next_step.html step="Automate Home Assistant" link="/getting-started/automation/" %} \ No newline at end of file diff --git a/source/getting-started/onboarding.markdown b/source/getting-started/onboarding.markdown index 3bd97264437..2c88007da72 100644 --- a/source/getting-started/onboarding.markdown +++ b/source/getting-started/onboarding.markdown @@ -5,28 +5,18 @@ description: "Instructions to get Home Assistant configured." Alright, you made it here. The tough part is done. -With Home Assistant installed, it's time to configure it. Here you will create the owner account of Home Assistant. This account will be an administrator and will always be able to change everything. Enter a name, username, password and click on "create account". +With Home Assistant installed, it's time to configure it. Here you will create the owner account of Home Assistant. This account will be an administrator and will always be able to change everything. Enter a name, username, password and select **create account**. ![Set your username and password.](/images/getting-started/username.png) -Next, you can enter a name for your home and set your location and unit system. Click "DETECT" to find your location and set your time zone and unit system based on that location. If you'd rather not send your location, you can set these values manually. +Next, you can enter a name for your home and set your location and unit system. Select **Detect** to find your location and set your time zone and unit system based on that location. If you'd rather not send your location, you can set these values manually. ![Set your location, time zone, and unit system.](/images/getting-started/location.png) -Once you are done, click Next. In this screen, Home Assistant will show any devices that it has discovered on your network. Don't be alarmed if you see fewer items than what is shown below; you can always manually add devices later. +Once you are done, click **Next**. In this screen, Home Assistant will show any {% term devices %} that it has discovered on your network. Don't be alarmed if you see fewer items than shown below; you can always manually add devices later. ![Discovery of devices on your network.](/images/getting-started/devices.png) -Finally, click Finish. Now you're brought to the Home Assistant web interface. This screen will show all of your devices. So let's get that screen filled up! - -![The Home Assistant user interface.](/images/getting-started/lovelace.png) - -From the side bar, click on {% my integrations title="Settings -> Devices & Services" %}. At this screen you will be able to set up integrations with Home Assistant. You might notice a "discovered" section. This section contains integrations that were found on your network and can easily be added with a few clicks. If your integrations are not discovered, click the **Add integration** button in the lower right and search for your integration in that list. - -![The integrations page in the configurations panel shows you all your configured integrations.](/images/getting-started/integrations.png) - -When each integration is done setting up, it will ask you to put the new devices in areas. Areas allow you to organize all the devices in your home. - -When you're done, navigate back to the web interface and voila, your devices are ready for you to control. +Finally, click **Finish**. Now you're brought to the Home Assistant web interface. This screen will show all of your devices. {% include getting-started/next_step.html step="Concepts & Terminologies" link="/getting-started/concepts-terminology/" %} diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown index 15fc321ee76..71eac4875eb 100644 --- a/source/getting-started/presence-detection.markdown +++ b/source/getting-started/presence-detection.markdown @@ -12,7 +12,7 @@ Presence detection detects if people are home, which can be valuable input for a ### Adding presence detection -There are different ways of setting up presence detection. Usually the easiest way to detect presence is by checking which devices are connected to the network. You can do that if you have one of our [supported routers][routers]. By leveraging what your router already knows, you can easily detect if people are at home. +There are different ways of setting up presence detection. Usually the easiest way to detect presence is by checking which {% term devices %} are connected to the network. You can do that if you have one of our [supported routers][routers]. By leveraging what your router already knows, you can easily detect if people are at home. It's also possible to run an app on your phone to provide detailed location information to your Home Assistant instance. For iOS and Android, we suggest using the [Home Assistant Companion app][companion]. @@ -22,7 +22,7 @@ During the setup of Home Assistant Companion on your mobile device, the app will ### Zones ![Map with zones](/images/screenshots/badges-zone.png) -Zones allow you to name areas on a map. These areas can then be used to name the location a tracked user is, or use entering/leaving a zone as an automation [trigger] or [condition]. See [Zones integration](/integrations/zone/) page for more details like creating zones. +{% term Zones %} allow you to name areas on a map. These areas can then be used to name the location a tracked user is, or use entering/leaving a zone as an automation {% term trigger %} or {% term condition %}. See [Zones integration](/integrations/zone/) page for more details like creating zones.
    The map view will hide all devices that are home. diff --git a/source/help/reporting_issues.markdown b/source/help/reporting_issues.markdown index 28829b8e969..9b6a60d1813 100644 --- a/source/help/reporting_issues.markdown +++ b/source/help/reporting_issues.markdown @@ -6,9 +6,9 @@ sidebar: false If you have an installation, a setup or a configuration issue please use our [Forum](https://community.home-assistant.io/) to get help. We have a big community which will help you if they can. -If you found a bug then please report it in one of our [trackers](/help/#bugs-feature-requests-and-alike). To help you and our developers to identify the issue quickly, please fill out the provided template. The "weird" content you will see is there to render your entry in a nice format after submitting. It's just [markdown](https://guides.github.com/features/mastering-markdown/). +If you found a bug then please report it in one of our [trackers](/help/#bugs-feature-requests-and-alike). To help you and our developers to identify the issue quickly, please fill out the provided template. The "weird" content you will see is there to render your entry in a nice format after submitting. It's just [markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax). -Please refer to the **Settings** -> **About** page, which is accessible inside the Home Assistant frontend. +Please refer to the [**Settings** -> **About**](https://my.home-assistant.io/redirect/info/) page, which is accessible inside the Home Assistant frontend. ## First Home Assistant release with the issue @@ -26,8 +26,8 @@ There are many different ways to run Home Assistant. In this section please ment Please add the link to the documentation of the integration in question. E.g., -- issue with the `random` sensor: [/integrations/random#sensor](/integrations/random#sensor) -- issue with the `hue` integration: [/integrations/hue/](/integrations/hue/) +- Issue with the `random` sensor: [/integrations/random#sensor](/integrations/random#sensor). +- Issue with the `hue` integration: [/integrations/hue/](/integrations/hue/). ### Description of problem diff --git a/source/images/assist/assist-assistants-page.png b/source/images/assist/assist-assistants-page.png new file mode 100644 index 00000000000..7847e17b48b Binary files /dev/null and b/source/images/assist/assist-assistants-page.png differ diff --git a/source/images/assist/assist-sentence-definition-01.png b/source/images/assist/assist-sentence-definition-01.png new file mode 100644 index 00000000000..b5e651860f5 Binary files /dev/null and b/source/images/assist/assist-sentence-definition-01.png differ diff --git a/source/images/assist/assist-test-file-light-turn-on.png b/source/images/assist/assist-test-file-light-turn-on.png new file mode 100644 index 00000000000..914f2e50507 Binary files /dev/null and b/source/images/assist/assist-test-file-light-turn-on.png differ diff --git a/source/images/assist/assistant-debug-02.png b/source/images/assist/assistant-debug-02.png new file mode 100644 index 00000000000..7b73bcc8b51 Binary files /dev/null and b/source/images/assist/assistant-debug-02.png differ diff --git a/source/images/assist/assistant-debug-03.png b/source/images/assist/assistant-debug-03.png new file mode 100644 index 00000000000..c38f54c6c35 Binary files /dev/null and b/source/images/assist/assistant-debug-03.png differ diff --git a/source/images/assist/assistant-debug-04.png b/source/images/assist/assistant-debug-04.png new file mode 100644 index 00000000000..f4d0c894725 Binary files /dev/null and b/source/images/assist/assistant-debug-04.png differ diff --git a/source/images/assist/assistant-debug-pipeline-01.png b/source/images/assist/assistant-debug-pipeline-01.png new file mode 100644 index 00000000000..80df8db88d4 Binary files /dev/null and b/source/images/assist/assistant-debug-pipeline-01.png differ diff --git a/source/images/assist/assistant-debug-pipeline-02.png b/source/images/assist/assistant-debug-pipeline-02.png new file mode 100644 index 00000000000..65aab32ff9b Binary files /dev/null and b/source/images/assist/assistant-debug-pipeline-02.png differ diff --git a/source/images/assist/assistant-debug-pipeline-03.png b/source/images/assist/assistant-debug-pipeline-03.png new file mode 100644 index 00000000000..3f7bf927aa5 Binary files /dev/null and b/source/images/assist/assistant-debug-pipeline-03.png differ diff --git a/source/images/assist/assistant-expose-01.png b/source/images/assist/assistant-expose-01.png new file mode 100644 index 00000000000..bd8aa1c94a1 Binary files /dev/null and b/source/images/assist/assistant-expose-01.png differ diff --git a/source/images/assist/assistant-expose-02.png b/source/images/assist/assistant-expose-02.png new file mode 100644 index 00000000000..28c2c9ebf85 Binary files /dev/null and b/source/images/assist/assistant-expose-02.png differ diff --git a/source/images/assist/assistant-openai-mario-02.png b/source/images/assist/assistant-openai-mario-02.png new file mode 100644 index 00000000000..f445841b556 Binary files /dev/null and b/source/images/assist/assistant-openai-mario-02.png differ diff --git a/source/images/assist/assistant-openai-mario-03.png b/source/images/assist/assistant-openai-mario-03.png new file mode 100644 index 00000000000..8617716b965 Binary files /dev/null and b/source/images/assist/assistant-openai-mario-03.png differ diff --git a/source/images/assist/assistant-openai-mario-04.png b/source/images/assist/assistant-openai-mario-04.png new file mode 100644 index 00000000000..f81416c275f Binary files /dev/null and b/source/images/assist/assistant-openai-mario-04.png differ diff --git a/source/images/assist/assistant-openai-mario-config.png b/source/images/assist/assistant-openai-mario-config.png new file mode 100644 index 00000000000..0d81b88bad3 Binary files /dev/null and b/source/images/assist/assistant-openai-mario-config.png differ diff --git a/source/images/assist/assistant-select.png b/source/images/assist/assistant-select.png new file mode 100644 index 00000000000..ce2a3d9cdd1 Binary files /dev/null and b/source/images/assist/assistant-select.png differ diff --git a/source/images/assist/autophon-mod-29.jpg b/source/images/assist/autophon-mod-29.jpg new file mode 100644 index 00000000000..f6d9f869a21 Binary files /dev/null and b/source/images/assist/autophon-mod-29.jpg differ diff --git a/source/images/assist/esp32-atom-flash-06.png b/source/images/assist/esp32-atom-flash-06.png new file mode 100644 index 00000000000..866b14837b1 Binary files /dev/null and b/source/images/assist/esp32-atom-flash-06.png differ diff --git a/source/images/assist/esp32-atom-flash-07.png b/source/images/assist/esp32-atom-flash-07.png new file mode 100644 index 00000000000..7f2f7061522 Binary files /dev/null and b/source/images/assist/esp32-atom-flash-07.png differ diff --git a/source/images/assist/esp32-atom-flash-no-port.png b/source/images/assist/esp32-atom-flash-no-port.png new file mode 100644 index 00000000000..611f7afb9fb Binary files /dev/null and b/source/images/assist/esp32-atom-flash-no-port.png differ diff --git a/source/images/assist/esp32-atom-flash-select-port.png b/source/images/assist/esp32-atom-flash-select-port.png new file mode 100644 index 00000000000..31ea6be47b4 Binary files /dev/null and b/source/images/assist/esp32-atom-flash-select-port.png differ diff --git a/source/images/assist/grandstream-ht801-interfaces.png b/source/images/assist/grandstream-ht801-interfaces.png new file mode 100644 index 00000000000..2d283657369 Binary files /dev/null and b/source/images/assist/grandstream-ht801-interfaces.png differ diff --git a/source/images/assist/grandstream-troubleshoot-10.png b/source/images/assist/grandstream-troubleshoot-10.png new file mode 100644 index 00000000000..091200db831 Binary files /dev/null and b/source/images/assist/grandstream-troubleshoot-10.png differ diff --git a/source/images/assist/grandstream_apply.png b/source/images/assist/grandstream_apply.png new file mode 100644 index 00000000000..1fa75588691 Binary files /dev/null and b/source/images/assist/grandstream_apply.png differ diff --git a/source/images/assist/grandstream_autodial.png b/source/images/assist/grandstream_autodial.png new file mode 100644 index 00000000000..6112c7a4d39 Binary files /dev/null and b/source/images/assist/grandstream_autodial.png differ diff --git a/source/images/assist/grandstream_login.png b/source/images/assist/grandstream_login.png new file mode 100644 index 00000000000..0752743a0e5 Binary files /dev/null and b/source/images/assist/grandstream_login.png differ diff --git a/source/images/assist/grandstream_opus_payload.png b/source/images/assist/grandstream_opus_payload.png new file mode 100644 index 00000000000..e4dff1bac8b Binary files /dev/null and b/source/images/assist/grandstream_opus_payload.png differ diff --git a/source/images/assist/grandstream_port_config.png b/source/images/assist/grandstream_port_config.png new file mode 100644 index 00000000000..f281434b892 Binary files /dev/null and b/source/images/assist/grandstream_port_config.png differ diff --git a/source/images/assist/grandstream_vocoder.png b/source/images/assist/grandstream_vocoder.png new file mode 100644 index 00000000000..86d785a36fc Binary files /dev/null and b/source/images/assist/grandstream_vocoder.png differ diff --git a/source/images/assist/ha_cloud.mp3 b/source/images/assist/ha_cloud.mp3 new file mode 100644 index 00000000000..f849ea3e030 Binary files /dev/null and b/source/images/assist/ha_cloud.mp3 differ diff --git a/source/images/assist/intents-test-files.png b/source/images/assist/intents-test-files.png new file mode 100644 index 00000000000..f3889b63cea Binary files /dev/null and b/source/images/assist/intents-test-files.png differ diff --git a/source/images/assist/m5stack-atom-echo-discovered-03.png b/source/images/assist/m5stack-atom-echo-discovered-03.png new file mode 100644 index 00000000000..0f24c6a09df Binary files /dev/null and b/source/images/assist/m5stack-atom-echo-discovered-03.png differ diff --git a/source/images/assist/piper-logo.svg b/source/images/assist/piper-logo.svg new file mode 100644 index 00000000000..87a1d6f6664 --- /dev/null +++ b/source/images/assist/piper-logo.svg @@ -0,0 +1,141 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/images/assist/piper-whisper-install-01.png b/source/images/assist/piper-whisper-install-01.png new file mode 100644 index 00000000000..93795865658 Binary files /dev/null and b/source/images/assist/piper-whisper-install-01.png differ diff --git a/source/images/assist/piper-whisper-install-02.png b/source/images/assist/piper-whisper-install-02.png new file mode 100644 index 00000000000..e522b18e867 Binary files /dev/null and b/source/images/assist/piper-whisper-install-02.png differ diff --git a/source/images/assist/piper-whisper-install-03.png b/source/images/assist/piper-whisper-install-03.png new file mode 100644 index 00000000000..ee1f5eef138 Binary files /dev/null and b/source/images/assist/piper-whisper-install-03.png differ diff --git a/source/images/assist/piper-whisper-install-05.png b/source/images/assist/piper-whisper-install-05.png new file mode 100644 index 00000000000..c4e250d9c48 Binary files /dev/null and b/source/images/assist/piper-whisper-install-05.png differ diff --git a/source/images/assist/piper.wav b/source/images/assist/piper.wav new file mode 100644 index 00000000000..9c9725d6600 Binary files /dev/null and b/source/images/assist/piper.wav differ diff --git a/source/images/assist/voip_configuration.png b/source/images/assist/voip_configuration.png new file mode 100644 index 00000000000..8e874ef7bb3 Binary files /dev/null and b/source/images/assist/voip_configuration.png differ diff --git a/source/images/assist/voip_device_available.png b/source/images/assist/voip_device_available.png new file mode 100644 index 00000000000..f15efc75d8f Binary files /dev/null and b/source/images/assist/voip_device_available.png differ diff --git a/source/images/assist/voip_install.png b/source/images/assist/voip_install.png new file mode 100644 index 00000000000..d4b6ca79334 Binary files /dev/null and b/source/images/assist/voip_install.png differ diff --git a/source/images/blog/2023-04-11-homeseer-partner/homeseer_top.png b/source/images/blog/2023-04-11-homeseer-partner/homeseer_top.png new file mode 100644 index 00000000000..95e3e840a5b Binary files /dev/null and b/source/images/blog/2023-04-11-homeseer-partner/homeseer_top.png differ diff --git a/source/images/blog/2023-04-11-homeseer-partner/marketing.jpg b/source/images/blog/2023-04-11-homeseer-partner/marketing.jpg new file mode 100644 index 00000000000..ee9e49f2206 Binary files /dev/null and b/source/images/blog/2023-04-11-homeseer-partner/marketing.jpg differ diff --git a/source/images/blog/2023-04-11-homeseer-partner/social.png b/source/images/blog/2023-04-11-homeseer-partner/social.png new file mode 100644 index 00000000000..747b08c340a Binary files /dev/null and b/source/images/blog/2023-04-11-homeseer-partner/social.png differ diff --git a/source/images/blog/2023-04-18-os10/datadisk-new.png b/source/images/blog/2023-04-18-os10/datadisk-new.png new file mode 100644 index 00000000000..85c8dd93af6 Binary files /dev/null and b/source/images/blog/2023-04-18-os10/datadisk-new.png differ diff --git a/source/images/blog/2023-04-18-os10/hardkernel-odroid-m1.jpg b/source/images/blog/2023-04-18-os10/hardkernel-odroid-m1.jpg new file mode 100644 index 00000000000..c08e4ab371e Binary files /dev/null and b/source/images/blog/2023-04-18-os10/hardkernel-odroid-m1.jpg differ diff --git a/source/images/blog/2023-04-18-os10/social.png b/source/images/blog/2023-04-18-os10/social.png new file mode 100644 index 00000000000..1edf34bd10a Binary files /dev/null and b/source/images/blog/2023-04-18-os10/social.png differ diff --git a/source/images/blog/2023-04-27-year-of-the-voice-chapter-2/assist-config.png b/source/images/blog/2023-04-27-year-of-the-voice-chapter-2/assist-config.png new file mode 100644 index 00000000000..e3a7c79d2ce Binary files /dev/null and b/source/images/blog/2023-04-27-year-of-the-voice-chapter-2/assist-config.png differ diff --git a/source/images/blog/2023-04-27-year-of-the-voice-chapter-2/assist-debug.png b/source/images/blog/2023-04-27-year-of-the-voice-chapter-2/assist-debug.png new file mode 100644 index 00000000000..75311d015c5 Binary files /dev/null and b/source/images/blog/2023-04-27-year-of-the-voice-chapter-2/assist-debug.png differ diff --git a/source/images/blog/2023-04-27-year-of-the-voice-chapter-2/social.png b/source/images/blog/2023-04-27-year-of-the-voice-chapter-2/social.png new file mode 100644 index 00000000000..1be147d26ba Binary files /dev/null and b/source/images/blog/2023-04-27-year-of-the-voice-chapter-2/social.png differ diff --git a/source/images/blog/2023-05/blueprints-language-selector.png b/source/images/blog/2023-05/blueprints-language-selector.png new file mode 100644 index 00000000000..6d38501a8c6 Binary files /dev/null and b/source/images/blog/2023-05/blueprints-language-selector.png differ diff --git a/source/images/blog/2023-05/breaking-change-webhook-triggers.png b/source/images/blog/2023-05/breaking-change-webhook-triggers.png new file mode 100644 index 00000000000..cf25b20f28d Binary files /dev/null and b/source/images/blog/2023-05/breaking-change-webhook-triggers.png differ diff --git a/source/images/blog/2023-05/entity-settings-voice-assistants.png b/source/images/blog/2023-05/entity-settings-voice-assistants.png new file mode 100644 index 00000000000..8aa6d40b2ea Binary files /dev/null and b/source/images/blog/2023-05/entity-settings-voice-assistants.png differ diff --git a/source/images/blog/2023-05/entity-settings.png b/source/images/blog/2023-05/entity-settings.png new file mode 100644 index 00000000000..8190d1a678d Binary files /dev/null and b/source/images/blog/2023-05/entity-settings.png differ diff --git a/source/images/blog/2023-05/home-assistant-yellow-led-controls.png b/source/images/blog/2023-05/home-assistant-yellow-led-controls.png new file mode 100644 index 00000000000..666cac4b92c Binary files /dev/null and b/source/images/blog/2023-05/home-assistant-yellow-led-controls.png differ diff --git a/source/images/blog/2023-05/social.png b/source/images/blog/2023-05/social.png new file mode 100644 index 00000000000..4057ede0e4a Binary files /dev/null and b/source/images/blog/2023-05/social.png differ diff --git a/source/images/blog/2023-05/voice-assistants-expose-entities-settings.png b/source/images/blog/2023-05/voice-assistants-expose-entities-settings.png new file mode 100644 index 00000000000..db4ffa378f8 Binary files /dev/null and b/source/images/blog/2023-05/voice-assistants-expose-entities-settings.png differ diff --git a/source/images/blog/2023-05/voice-assistants-expose-entities.png b/source/images/blog/2023-05/voice-assistants-expose-entities.png new file mode 100644 index 00000000000..c3afff6dedd Binary files /dev/null and b/source/images/blog/2023-05/voice-assistants-expose-entities.png differ diff --git a/source/images/blog/2023-05/voice-assistants.png b/source/images/blog/2023-05/voice-assistants.png new file mode 100644 index 00000000000..f7f0c83f2f4 Binary files /dev/null and b/source/images/blog/2023-05/voice-assistants.png differ diff --git a/source/images/blog/2023-05/webhook-trigger-settings.png b/source/images/blog/2023-05/webhook-trigger-settings.png new file mode 100644 index 00000000000..6da20bff235 Binary files /dev/null and b/source/images/blog/2023-05/webhook-trigger-settings.png differ diff --git a/source/images/blueprints/selector-assist-pipeline.png b/source/images/blueprints/selector-assist-pipeline.png new file mode 100644 index 00000000000..319a3ec0b88 Binary files /dev/null and b/source/images/blueprints/selector-assist-pipeline.png differ diff --git a/source/images/blueprints/selector-language.png b/source/images/blueprints/selector-language.png new file mode 100644 index 00000000000..e23d30077b5 Binary files /dev/null and b/source/images/blueprints/selector-language.png differ diff --git a/source/images/docs/automation-editor/add-trigger-to-automation.png b/source/images/docs/automation-editor/add-trigger-to-automation.png new file mode 100644 index 00000000000..aecd2455d78 Binary files /dev/null and b/source/images/docs/automation-editor/add-trigger-to-automation.png differ diff --git a/source/images/docs/automation-editor/create-automation.png b/source/images/docs/automation-editor/create-automation.png index efecf35f947..b2977c7832c 100644 Binary files a/source/images/docs/automation-editor/create-automation.png and b/source/images/docs/automation-editor/create-automation.png differ diff --git a/source/images/docs/automation-editor/new-action.png b/source/images/docs/automation-editor/new-action.png index ad697750f0c..26dc6edc9e2 100644 Binary files a/source/images/docs/automation-editor/new-action.png and b/source/images/docs/automation-editor/new-action.png differ diff --git a/source/images/docs/automation-editor/new-automation.png b/source/images/docs/automation-editor/new-automation.png index 327822a93cc..bf202cae1a5 100644 Binary files a/source/images/docs/automation-editor/new-automation.png and b/source/images/docs/automation-editor/new-automation.png differ diff --git a/source/images/docs/automation-editor/new-trigger.png b/source/images/docs/automation-editor/new-trigger.png index 1311351bb2e..f5395a33f07 100644 Binary files a/source/images/docs/automation-editor/new-trigger.png and b/source/images/docs/automation-editor/new-trigger.png differ diff --git a/source/images/docs/automation-editor/send-notification.png b/source/images/docs/automation-editor/send-notification.png new file mode 100644 index 00000000000..9196647ffe9 Binary files /dev/null and b/source/images/docs/automation-editor/send-notification.png differ diff --git a/source/images/docs/z-wave/zpi-7-yellow.jpg b/source/images/docs/z-wave/zpi-7-yellow.jpg new file mode 100644 index 00000000000..612599ecb8f Binary files /dev/null and b/source/images/docs/z-wave/zpi-7-yellow.jpg differ diff --git a/source/images/frontpage/promo-private-voice-assistant.png b/source/images/frontpage/promo-private-voice-assistant.png new file mode 100644 index 00000000000..a65fe3f8781 Binary files /dev/null and b/source/images/frontpage/promo-private-voice-assistant.png differ diff --git a/source/images/frontpage/year-of-the-voice-chapter-2.png b/source/images/frontpage/year-of-the-voice-chapter-2.png new file mode 100644 index 00000000000..1bd862359ba Binary files /dev/null and b/source/images/frontpage/year-of-the-voice-chapter-2.png differ diff --git a/source/images/getting-started/add-google-cast-integration.png b/source/images/getting-started/add-google-cast-integration.png new file mode 100644 index 00000000000..eb1dcff0808 Binary files /dev/null and b/source/images/getting-started/add-google-cast-integration.png differ diff --git a/source/images/getting-started/google-cast-discovered.png b/source/images/getting-started/google-cast-discovered.png new file mode 100644 index 00000000000..de1ec343640 Binary files /dev/null and b/source/images/getting-started/google-cast-discovered.png differ diff --git a/source/images/getting-started/google-cast-integration-added.png b/source/images/getting-started/google-cast-integration-added.png new file mode 100644 index 00000000000..e7600798e18 Binary files /dev/null and b/source/images/getting-started/google-cast-integration-added.png differ diff --git a/source/images/getting-started/google-cast-manual-details.png b/source/images/getting-started/google-cast-manual-details.png new file mode 100644 index 00000000000..2f2907ba3ac Binary files /dev/null and b/source/images/getting-started/google-cast-manual-details.png differ diff --git a/source/images/installation/rpi-ha.gif b/source/images/installation/rpi-ha.gif new file mode 100644 index 00000000000..895e1bf5778 Binary files /dev/null and b/source/images/installation/rpi-ha.gif differ diff --git a/source/images/installation/rpi-imager-start.png b/source/images/installation/rpi-imager-start.png new file mode 100644 index 00000000000..f5b6cf2e3d2 Binary files /dev/null and b/source/images/installation/rpi-imager-start.png differ diff --git a/source/images/installation/rpi-select-os.png b/source/images/installation/rpi-select-os.png new file mode 100644 index 00000000000..fc3635d7ee8 Binary files /dev/null and b/source/images/installation/rpi-select-os.png differ diff --git a/source/images/installation/rpi-select-sd-card.png b/source/images/installation/rpi-select-sd-card.png new file mode 100644 index 00000000000..a17cca6dfcf Binary files /dev/null and b/source/images/installation/rpi-select-sd-card.png differ diff --git a/source/images/installation/rpi-select-write.png b/source/images/installation/rpi-select-write.png new file mode 100644 index 00000000000..918f5971085 Binary files /dev/null and b/source/images/installation/rpi-select-write.png differ diff --git a/source/images/installation/rpi_imager.png b/source/images/installation/rpi_imager.png new file mode 100644 index 00000000000..fadf98b066b Binary files /dev/null and b/source/images/installation/rpi_imager.png differ diff --git a/source/images/integrations/androidtv_remote/lovelace_example.png b/source/images/integrations/androidtv_remote/lovelace_example.png new file mode 100644 index 00000000000..ac68b166ad1 Binary files /dev/null and b/source/images/integrations/androidtv_remote/lovelace_example.png differ diff --git a/source/images/integrations/easyenergy/pricegraph.png b/source/images/integrations/easyenergy/pricegraph.png new file mode 100644 index 00000000000..489328cc6c4 Binary files /dev/null and b/source/images/integrations/easyenergy/pricegraph.png differ diff --git a/source/images/integrations/matter/matter_thread_infographic.webp b/source/images/integrations/matter/matter_thread_infographic.webp new file mode 100644 index 00000000000..b4bc57284a3 Binary files /dev/null and b/source/images/integrations/matter/matter_thread_infographic.webp differ diff --git a/source/images/integrations/slack/bot-token-scopes.png b/source/images/integrations/slack/bot-token-scopes.png new file mode 100644 index 00000000000..b2a8db5351c Binary files /dev/null and b/source/images/integrations/slack/bot-token-scopes.png differ diff --git a/source/images/integrations/slack/oauth-tokens-for-workspace.png b/source/images/integrations/slack/oauth-tokens-for-workspace.png new file mode 100644 index 00000000000..ad42b6f3234 Binary files /dev/null and b/source/images/integrations/slack/oauth-tokens-for-workspace.png differ diff --git a/source/images/integrations/slack/slack-integration-setup.png b/source/images/integrations/slack/slack-integration-setup.png new file mode 100644 index 00000000000..ec4bd0a4e45 Binary files /dev/null and b/source/images/integrations/slack/slack-integration-setup.png differ diff --git a/source/images/integrations/slack/slack-message.png b/source/images/integrations/slack/slack-message.png new file mode 100644 index 00000000000..50f3fea2e60 Binary files /dev/null and b/source/images/integrations/slack/slack-message.png differ diff --git a/source/images/integrations/voip/voip_adapter.png b/source/images/integrations/voip/voip_adapter.png new file mode 100644 index 00000000000..608a16f6e11 Binary files /dev/null and b/source/images/integrations/voip/voip_adapter.png differ diff --git a/source/images/integrations/voip/voip_adapter.svg b/source/images/integrations/voip/voip_adapter.svg new file mode 100644 index 00000000000..1f88080c7c2 --- /dev/null +++ b/source/images/integrations/voip/voip_adapter.svg @@ -0,0 +1,241 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + VoIPAdapter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/images/integrations/z-wave/z-wave-device-info.png b/source/images/integrations/z-wave/z-wave-device-info.png new file mode 100644 index 00000000000..2138c26241f Binary files /dev/null and b/source/images/integrations/z-wave/z-wave-device-info.png differ diff --git a/source/images/integrations/z-wave/z-wave-integration-config-panel.png b/source/images/integrations/z-wave/z-wave-integration-config-panel.png new file mode 100644 index 00000000000..ddbf67fed11 Binary files /dev/null and b/source/images/integrations/z-wave/z-wave-integration-config-panel.png differ diff --git a/source/images/integrations/z-wave/z-wave-integration-menu.png b/source/images/integrations/z-wave/z-wave-integration-menu.png new file mode 100644 index 00000000000..55295e6efea Binary files /dev/null and b/source/images/integrations/z-wave/z-wave-integration-menu.png differ diff --git a/source/images/integrations/z-wave/z-wave-server-install-options-1-2.png b/source/images/integrations/z-wave/z-wave-server-install-options-1-2.png new file mode 100644 index 00000000000..d99b16180d0 Binary files /dev/null and b/source/images/integrations/z-wave/z-wave-server-install-options-1-2.png differ diff --git a/source/images/screenshots/component_history_24h.png b/source/images/screenshots/component_history_24h.png deleted file mode 100644 index a80a76c17e8..00000000000 Binary files a/source/images/screenshots/component_history_24h.png and /dev/null differ diff --git a/source/images/screenshots/discord-bot-permissions.png b/source/images/screenshots/discord-bot-permissions.png new file mode 100644 index 00000000000..6676ff52d18 Binary files /dev/null and b/source/images/screenshots/discord-bot-permissions.png differ diff --git a/source/installation/raspberrypi.markdown b/source/installation/raspberrypi.markdown index dc3f3a1f5a9..96d40a31821 100644 --- a/source/installation/raspberrypi.markdown +++ b/source/installation/raspberrypi.markdown @@ -16,8 +16,103 @@ Please remember to ensure you're using an [appropriate power supply](https://www
    -{% include installation/operating_system.md %} +## Suggested Hardware + +We will need a few things to get started with installing Home Assistant. Links below lead to Amazon US. If you’re not in the US, you should be able to find these items in web stores in your country. + +- [Raspberry Pi 4](https://amzn.to/2S0Gcl1) (Raspberry Pi 3 is ok too, if you have one laying around). Raspberry Pi are currently hard to come by, use [RPilocator](https://rpilocator.com/?cat=PI4) to find official distributors with stock. +- [Power Supply for Raspberry Pi 4](https://amzn.to/2ReZ2Vq) or [Power Supply for Raspberry Pi 3](https://amzn.to/2R8yG7h) +- [Micro SD Card](https://amzn.to/2X0Z2di). Ideally get one that is [Application Class 2](https://www.sdcard.org/developers/overview/application/index.html) as they handle small I/O much more consistently than cards not optimized to host applications. A 32 GB or bigger card is recommended. +- SD Card reader. This is already part of most laptops, but you can purchase a [standalone USB adapter](https://amzn.to/2WWxntY) if you don't have one. The brand doesn't matter, just pick the cheapest. +- [Ethernet cable](https://amzn.com/dp/B00N2VISLW). Required for installation. After installation, Home Assistant can work with Wi-Fi, but an Ethernet connection is more reliable and highly recommended. + +## Install Home Assistant Operating System + +This guide shows how to install the Home Assistant Operating system onto your Raspberry Pi using Raspberry Pi Imager. + +If Raspberry Pi Imager is not supported by your platform, you can use [Balena Etcher](#writing-the-image-with-balena-etcher) instead. + +### Write the image to your SD card + +1. Download and install the Raspberry Pi Imager on your computer as described under [https://www.raspberrypi.com/software/](https://www.raspberrypi.com/software/). + ![Install Raspberry Pi Imager](/images/installation/rpi_imager.png) +1. Open the Raspberry Pi Imager. + ![Open Raspberry Pi Imager](/images/installation/rpi-imager-start.png) +1. Choose the operating system: + 1. Select **Choose OS**. + 1. Select **Other specific-purpose OS** > **Home assistants and home automation** > **Home Assistant**. + 1. Choose the Home Assistant OS that matches your hardware (RPi 3 or RPi 4). + ![Choose the operating system](/images/installation/rpi-ha.gif) +1. Choose the storage: + 1. Insert the SD card into the computer. Note: the contents of the card will be overwritten. + 1. Select your SD card. + ![Select the storage](/images/installation/rpi-select-sd-card.png) +1. Write the installer onto the SD card: + 1. To start the process, select **Write**. + 1. Wait for the Home Assistant OS to be written to the SD card. + ![Select write](/images/installation/rpi-select-write.png) +1. Eject the SD card. + +### Start up your Raspberry Pi + +1. Insert the SD card into your Raspberry Pi. +1. Plug in an Ethernet cable that is connected to the network. +1. Connect the power supply to start up the device. + +1. In the browser of your desktop system, within a few minutes you will be able to reach your new Home Assistant at homeassistant.local:8123. + +
    +If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at homeassistant:8123 or `http://X.X.X.X:8123` (replace X.X.X.X with your Raspberry Pi’s IP address). +
    + +Congratulations! You finished the Raspberry Pi setup! + +With the Home Assistant Operating System installed and accessible, you can now continue with onboarding. + +{% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %} + {% include installation/container.md %} {% include installation/core.md %} -_We get commissions for purchases made through links in this post._ +## Writing the image with Balena Etcher + +Use this procedure if Raspberry Pi Imager is not supported by your platform. + +1. Insert the SD card into the computer. Note: the contents of the card will be overwritten. +1. Download and start Balena Etcher. You may need to run it with administrator privileges on Windows. +1. Select **Flash from URL**. +![Screenshot of the Etcher software showing flash from URL selected.](/images/installation/etcher1.png) + +1. Copy the correct URL for the Raspberry Pi 3 or 4 (Note: there are 2 different links below!): +{% tabbed_block %} +{% for variant in site.installation.types[page.installation_type].variants %} + +- title: {{ variant.name }} + content: | + + ```text + https://github.com/home-assistant/operating-system/releases/download/{{site.data.version_data.hassos[variant.key]}}/haos_{{ variant.key }}-{{site.data.version_data.hassos[variant.key]}}.img.xz + ``` + +{% endfor %} +{% endtabbed_block %} + +_Select and copy the URL or use the "copy" button that appear when you hover it._ + +1. Paste the URL for the image into Balena Etcher and select **OK**. +![Screenshot of the Etcher software showing the URL bar with a URL pasted in.](/images/installation/etcher2.png) +1. When Balena Etcher has downloaded the image, select **Select target**. +![Screenshot of the Etcher software showing the select target button highlighted.](/images/installation/etcher3.png) +1. Select the SD card you want to use for your installation. +![Screenshot of the Etcher software showing teh targets available.](/images/installation/etcher4.png) +1. Select **Flash!** to start writing the image. +![Screenshot of the Etcher software showing the Flash button highlighted.](/images/installation/etcher5.png) +1. Once Balena Etcher has finished writing the image, you will see a confirmation. +![Screenshot of the Etcher software showing that the installation has completed.](/images/installation/etcher6.png) + + +
    +

    + We get commissions for purchases made through links in this post.

    +
    + diff --git a/source/latest-release-notes/index.html b/source/latest-release-notes/index.html deleted file mode 100644 index 21b3ebd2446..00000000000 --- a/source/latest-release-notes/index.html +++ /dev/null @@ -1,7 +0,0 @@ ---- ---- -{% assign recent_release_post = site.categories['Core'].first %} - - diff --git a/source/projects/thirteen-usd-voice-remote.markdown b/source/projects/thirteen-usd-voice-remote.markdown new file mode 100644 index 00000000000..51b1ce37198 --- /dev/null +++ b/source/projects/thirteen-usd-voice-remote.markdown @@ -0,0 +1,81 @@ +--- +title: "$13 voice remote for Home Assistant" +--- + +This tutorial will guide you to turn an ATOM Echo into the +world's most private voice assistant. Pick up the tiny device to talk to +your smart home. Issue commands and get responses! + + + +## Required material + +* Home Assistant 2023.5 or later +* [Home Assistant Cloud](https://www.nabucasa.com) or a manually configured [Assist Pipeline](/docs/assist/voice_remote_local_assistant) +* The password to your 2.4 GHz Wi-Fi network +* Chrome (or a Chromium-based browser like Edge) on desktop (not Android/iOS) +* [M5Stack ATOM Echo Development Kit](https://shop.m5stack.com/products/atom-echo-smart-speaker-dev-kit?ref=NabuCasa) +* USB-C cable to connect the ATOM Echo + + + +## Installing the software onto the ATOM Echo + +Before you can use this device with Home Assistant, you need to install a bit of software on it. + +1. Make sure this page is opened in a Chromium-based browser on a desktop. It does not work on a tablet or phone. + * Select the **Connect** button below. If your browser does not support web serial, there is no button but a text. + + + + * **For advanced users**: The configuration file is available on [GitHub](https://github.com/esphome/media-players/blob/main/m5stack-atom-echo.yaml). + +1. Connect the ATOM Echo to your computer. + * In the popup window, view the available ports. + * Plug the USB-C cable into the ATOM Echo and connect it to your computer. + * In the pop-up window, there should now appear a new entry. Select this USB serial port and select **Connect**. + * Depending on your computer, the entry might look different. + ![Select USB port](/images/assist/esp32-atom-flash-select-port.png) + * If no new port shows, your system may be missing a driver. Close the pop-up window. + * In the dialog, select the CH342 driver, install it, then **Try again**. + ![Open My link](/images/assist/esp32-atom-flash-no-port.png) +1. Select **Install Voice Assistant**, then **Install**. + * Follow the instructions provided by the installation wizard. + * Add the ATOM Echo to your Wi-Fi: + * When prompted, select your network from the list and enter the credentials to your 2.4 GHz Wi-Fi network. + * Select **Connect**. + * The ATOM Echo now joined your network. Select **Add to Home Assistant**. +1. This opens the **My** link to Home Assistant. + * If you have not used My Home Assistant before, you will need to configure it. If your Home Assistant URL is not accessible on `http://homeassistant.local:8123`, replace it with the URL to your Home Assistant instance. + * Open the link. + ![Open My link](/images/assist/esp32-atom-flash-06.png) +1. Select **OK**. + + ![Set up ESPHome](/images/assist/esp32-atom-flash-07.png) +1. To add the newly discovered device, select the ATOM Echo from the list. + * Add your ATOM Echo to a room and select **Finish**. +1. You should now see a new **M5Stack Atom Echo** integration. + ![ATOM Echo discovered](/images/assist/m5stack-atom-echo-discovered-03.png) + * Your ATOM Echo is connected to Home Assistant over Wi-Fi. You can now move it to any place in your home with a USB power supply. +1. Congratulations! You can now voice control Home Assistant using a button with build-in microphone. Now give some commands. + +## Controlling Home Assistant over the ATOM Echo + +1. Press and hold the button on your ATOM Echo. + * The LED should light up in blue. +1. Say a [supported voice command](/docs/assist/builtin_sentences/). For example, *Turn off the light in the kitchen*. + * Make sure you’re using the area name exactly as you defined it in Home Assistant. + * You can also ask a question, such as + * *Is the front door locked?* + * *Which lights are on in the living room?* +1. Let go of the button. + * The LED should light up in green. + * Home Assistant will confirm the action. +1. Your command is not supported? [Add your own commands](/integrations/conversation/). + +## Troubleshooting + +Are things not working as expected? + +* Checkout the [general troubleshooting section for Assist](/docs/assist/troubleshooting/). \ No newline at end of file diff --git a/source/projects/worlds-most-private-voice-assistant.markdown b/source/projects/worlds-most-private-voice-assistant.markdown new file mode 100644 index 00000000000..5a5f38c57bd --- /dev/null +++ b/source/projects/worlds-most-private-voice-assistant.markdown @@ -0,0 +1,139 @@ +--- +title: "World's Most Private Voice Assistant" +--- + +This tutorial will guide you to turn your old landline phone into the +world's most private voice assistant. Pick up the phone to talk to +your smart home and issue commands and get responses. + + + +## Required material + +* Home Assistant 2023.5 or later +* An [analog phone](#about-the-analog-phone) with an RJ11 socket +* An analog telephone adapter + [Grandstream HT801](https://amzn.to/40k7mRa) + * includes a 5 V power adapter and an Ethernet cable +* RJ11 phone cable to connect the phone to the Grandstream +* [Home Assistant Cloud](https://www.nabucasa.com) or a manually configured [Assist Pipeline](/integrations/assist_pipeline) + +## Setting up Grandstream + +1. Connect the RJ11 cable from the phone to the green socket on the Grandstream. + ![Grandstream HT801 ports](/images/assist/grandstream-ht801-interfaces.png) +1. Connect the Grandstream to your network: + * Plug the Ethernet cable into the blue socket and connect it to your router. +1. Start up the Grandstream. + * Connect the power supply. + * Once the Grandstream has booted, the two LEDs for power and Ethernet light up solid blue. The phone LED won't light up. +1. Identify the IP address of the Grandstream. + * If your phone has a star * key, you can get your phone to tell you it's IP address: + * Press *** (press the star key three times) and wait until you hear *Enter the menu option*. + * Press 02 and the phone will tell you its IP address. + * If your phone does not have a star * key, log onto your router to find the IP address. +1. Enter the IP address into a browser window and log onto the Grandstream *Device Configuration* software. + * The default credentials are: + * **Username**: `admin` + * **Password**: `admin` + ![Login to Grandstream](/images/assist/grandstream_login.png) +1. Open the **FXS Port** tab and in the **Offhook Auto-Dial** field, enter the Home Assistant IP address in the following format: + * \*47192\*168\*1\*100\*5060 + ![Define IP for autodial](/images/assist/grandstream_autodial.png) + * Note: instead of 192\*168\*1\*100\*, enter the IP address of your Home Assistant instance. + * At the bottom of the page, select **Apply**. + ![Define IP for autodial](/images/assist/grandstream_apply.png) + * *Offhook Auto-Dial* means that when you pick up the phone, it directly calls Home Assistant. No need to dial. + +## Setting up the phone in Home Assistant + +1. In Home Assistant, go to {% my config_flow_start domain="voip" title="**Settings** > **Devices & Services** > **Add integration**" %} and add the **Voice over IP** integration. + ![Voice over IP integration](/images/assist/voip_install.png) +1. Once you see the integration, pick up the phone. + * You should now hear the message *This is your smart home speaking. Your phone is connected, but you must configure it within Home Assistant.* + * The integration should now include a device and entities. + ![Voice over IP integration with device and entities](/images/assist/voip_device_available.png) + * Don't hear the voice? Try these [troubleshooting steps](/projects/worlds-most-private-voice-assistant/#troubleshoot-grandstream). +1. Allow calls. + * Calls from new devices are blocked by default since voice commands could be used to control sensitive devices, such as locks and garage doors. + * In the **Voice over IP** integration, select the **device** link. + * To allow this phone to control your smart home, under **Configuration**, enable **Allow calls**. + ![Voice over IP integration - allow calls](/images/assist/voip_configuration.png) +1. Congratulations! You set up your analog phone to work with Home Assistant. Now pick up the phone and control your device. + * Say a [supported voice command](/docs/assist/builtin_sentences/). For example, *Turn off the light in the kitchen*. + * You can also ask a question, such as + * *Is the front door locked?* + * *Which lights are on in the living room?* + * Make sure you're using the area name as you defined it in Home Assistant. If you have a room called *bathroom*, the phrase *Turn on the lights in the bath* won't work. + * Your command is not supported? [Add your own commands](/integrations/conversation/). + +## Give your voice assistant personality using the OpenAI integration + + + +To reproduce this example, follow these steps: + +Note: this procedure requires an OpenAI account. To just run the example, the free trial option is sufficient. No need to leave your credit card information. + +1. [Set up an OpenAI account and install the OpenAI conversation](/integrations/openai_conversation/) integration. +1. Create a Mario personality. + * Once you installed the OpenAI Conversation integration, go to {% my integrations title="**Settings** > **Devices & Services**" %} and in OpenAI Conversation integration, the select **Configure**. + + ![Configure the OpenAI integration](/images/assist/assistant-openai-mario-config.png) + * In the **Prompt template** field, enter the following text: + + `You are Super Mario from Mario Bros. Be funny.` and select **Submit**. + + ![Add prompt for Mario personality](/images/assist/assistant-openai-mario-02.png) +1. Create a Mario assistant: + * Under {% my voice_assistants title="**Settings** > **Voice assistants**" %}, select **Add assistant**. + * Give it a name, select a language and under **Conversation agent**, select the Mario OpenAI Conversation integration. + ![Add a new assistant](/images/assist/assistant-openai-mario-04.png) + * Leave the other settings unchanged and select **Create**. +1. In the **Voice over IP** integration, under **Configuration**, select the Mario assistant you just created. + + ![VoIP: select OpenAI](/images/assist/assistant-openai-mario-03.png) +1. That's it! Pick up your phone and ask Mario a question. +1. You can repeat this with other characters. You can add as many OpenAI Conversation integrations as you would like. + +## Troubleshoot Grandstream + +### The test call does not work + +If you’re unable to call Home Assistant, confirm the following settings in your Grandstream device’s web interface. + +1. On the **FXS Port** tab, check the **Preferred Vocoder** list. + * Make sure that **OPUS** is selected for one of the choices: + ![Vocoder OPUS option](/images/assist/grandstream_vocoder.png) +1. Under **OPUS Payload type**, make sure the value is `123`. It's the default option. + ![Vocoder OPUS payload type](/images/assist/grandstream_opus_payload.png) +1. At the bottom of the page, select **Apply**. +1. Pick up the phone again and check if you hear the voice. + +### The Voice over IP integration no longer works + +**Symptom** +You were able to control Home Assistant over the phone but it no longer works. When picking up the phone, no sound is played. +The [debug information](/docs/assist/troubleshooting#view-debug-information) shows no runs. + +**Potential remedy** +1. Log onto the Grandstream *Device Configuration* software. +1. On the **Status** page, check if the **Hook** status changes from **On Hook** to **In Use** after you picked up the phone. + ![Check the Grandstream status](/images/assist/grandstream-troubleshoot-10.png) + * The software is quite slow. Refresh the page and wait for a while before hanging up again. +1. If the status does not change, reboot the Grandstream and try calling Home Assistant again. + +## Other troubleshooting steps + +Are things still not working as expected? + +* Checkout the [general troubleshooting section for Assist](/docs/assist/troubleshooting). + +## About the analog phone + +You can use any analog landline phone with an RJ11 socket. + +The phone shown in the video by TheFes is a *Heemaf type 1955*, which was used by the Dutch telephone company PTT at the time. + +The phone used during creation of this tutorial is a 1953 [*Tischstation Mod.29 HF-TR* by Autophon AG](https://www.radiomuseum.org/r/autophon_tischstation_mod29_hf_tr.html). +![Analog phone Tischstation Mod.29 by Autophon AG](/images/assist/autophon-mod-29.jpg) diff --git a/source/skyconnect/index.html b/source/skyconnect/index.html index 4083b6ebd6a..e36da2cdb5d 100644 --- a/source/skyconnect/index.html +++ b/source/skyconnect/index.html @@ -273,6 +273,24 @@ frontpage_image: /images/skyconnect/skyconnect-cover.png
    + +
    +
    +
    🇬🇧
    +
    Everything Smart Technology
    +
    Located in the United Kingdom
    +
    + + + +
    +
    + + +
    +
    +
    🇳🇱
    +
    HAshop
    +
    Located in the Netherlands
    +
    + + + +
    +
    + - -
    -
    -
    🇬🇧
    -
    The Pi Hut
    -
    Located in the United Kingdom
    -
    - - - -
    -
    -
    -
    🇳🇱
    -
    HAshop
    -
    Located in the Netherlands
    +
    🇨🇭
    +
    Swiss-Domotique
    +
    Located in Switzerland
    -
    🇨🇭
    -
    Swiss-Domotique
    -
    Located in Switzerland
    +
    🇬🇧
    +
    The Pi Hut
    +
    Located in the United Kingdom


    - On top of that, it's Matter-ready, upgradable and extendable. You won't need anything else. + Home Assistant Yellow is Matter-ready, upgradable, and extendable. You won't need anything else.
    @@ -147,17 +147,17 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg
    Expandable M.2 Slot - Add a hard drive with terabytes of extra space + Add a hard drive with terabytes of extra space.
    Connected Zigbee & Thread - Comes with Zigbee out of the box. Thread to power your Matter network is coming soon + Comes with Zigbee out of the box. Thread to power your Matter network is coming soon.
    Ready Zero Setup - Comes with Home Assistant + Comes with Home Assistant.
    @@ -174,27 +174,27 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg Home Assistant Yellow
    This flagship version of Home Assistant Yellow is ready to go out of the box.

    - It comes pre-assembled in a custom enclosure with a Raspberry Pi Compute Module 4 (CM4) and a custom heat sink for fanless, silent operation. The CM4 is a version without wireless and has 2 GB RAM and 16 GB eMMC storage, pre-installed with Home Assistant. + It comes pre-assembled in a custom enclosure with a Raspberry Pi Compute Module 4 (CM4) and a custom heat sink for fanless, silent operation. The CM4 is a version without wireless and has 2 GB RAM and 16 GB eMMC storage. Pre-installed with Home Assistant.

    - All you need to get started is to plug in the power supply and the Ethernet cable, both of which are included. This variant does not have Power-over-Ethernet. + To get started, just plug in the power supply and the Ethernet cable. The cables are included in the box. This variant does not have Power-over-Ethernet.
    2D overview of the content of the Home Assistant Yellow Kit Power-over-Ethernet variant
    Yellow Kit with Power-over-Ethernet
    -
    Some assembly required! This kit supports Power-over-Ethernet (PoE) and includes everything in the flagship version except the Raspberry Pi Compute Module 4. + Some assembly required! This kit supports Power-over-Ethernet (PoE) but is otherwise almost the same as the flagship version. Without the Raspberry Pi Compute Module 4.

    - Custom enclosure, custom heat sink, and Ethernet cable included. You must provide your own Raspberry Pi Compute Module 4 and install Home Assistant on it. The kit does not include a power supply (because power comes from PoE). + You must provide your own Raspberry Pi Compute Module 4 and install Home Assistant on it. This allows you to pick the compute module with the memory and eMMC storage to fit your needs. Custom enclosure, custom heat sink, and Ethernet cable included. This kit does not include a power supply (because power comes from PoE).
    2D overview of the content of the Home Assistant Yellow Kit
    Yellow Kit with power supply
    - Some assembly required! This kit includes everything in the flagship version except the Raspberry Pi Compute Module 4. + Some assembly required! This kit is almost the same as the flagship version. Without the Raspberry Pi Compute Module 4.

    - This option allows you to pick the compute module with the memory and eMMC storage to fit your needs. You will need to install Home Assistant on the compute module you provide. Custom enclosure, custom heat sink, and Ethernet cable included. This version comes with a power supply, but does not support Power-over-Ethernet. + You must provide your own Raspberry Pi Compute Module 4 and install Home Assistant on it. This allows you to pick the compute module with the memory and eMMC storage to fit your needs. Custom enclosure, custom heat sink, and Ethernet cable included. This kit comes with a power supply, but does not support Power-over-Ethernet.
    @@ -203,8 +203,24 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg

    Open hardware

    - We spend a lot of time and resources on getting our products to work great. We want to make it possible for other people to study our work and be able to learn how to make great products for the smart home, so we've released the schematics of Yellow as open-source. - Explore the board and view the source. + We spend a lot of time and resources on fine-tuning our products. We want other people to be able to study our work and be able to make their own great smart home products. For this reason, we've released the schematics of Home Assistant Yellow as open-source. + Explore the board and view the source. +

    +
    + +
    +

    Buying a Raspberry Pi Compute Module 4 (CM4)

    +

    If you bought the Home Assistant Yellow Kit, you need to bring your own Raspberry Pi Compute Module 4. +

    +

    A chip shortage still impacts the availability of the CM4. Our recommendation is to use rpilocator. This website tracks the stock of official Raspberry Pi distributors. Follow them on Twitter and enable push notifications. You will be notified as soon as the bot tweets that products are in stock. +

    +

    + We recommend purchasing a Raspberry Pi Compute Module 4 with the following characteristics: +

    @@ -219,7 +235,7 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg
  • 12 cm x 12 cm
  • Compatible with all 32 variants of CM4